@mc-markets/ui 1.0.67 → 1.0.69
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/components/Dialog/Dialog.vue.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +104 -104
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/packages/components/Dialog/Dialog.vue +0 -44
- package/packages/styles/components/button.scss +89 -87
- package/packages/styles/components/checkbox.scss +12 -8
- package/packages/styles/components/dialog.scss +47 -0
- package/packages/styles/components/form.scss +18 -16
- package/packages/styles/components/override.scss +0 -234
- package/packages/styles/components/select.scss +45 -45
- package/packages/styles/components/table.scss +54 -52
- package/packages/styles/components/tabs.scss +6 -4
- package/packages/styles/index.scss +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.vue.d.ts","sourceRoot":"","sources":["../../../packages/components/Dialog/Dialog.vue.js"],"names":[],"mappings":"AAuBA;
|
|
1
|
+
{"version":3,"file":"Dialog.vue.d.ts","sourceRoot":"","sources":["../../../packages/components/Dialog/Dialog.vue.js"],"names":[],"mappings":"AAuBA;wBAgKqB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;;6BAC1E,CAAC,EAAE,CAAC;;;AAVjC;;;;;;;;;;;;;;2OAQG;AAxHH;;;;;QAgG6B,GAAG;qBACF,GAAG;oBACJ,GAAG;EAG/B"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var ae=Object.defineProperty,le=Object.defineProperties;var ce=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable;var y=(o,t,n)=>t in o?ae(o,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[t]=n,C=(o,t)=>{for(var n in t||(t={}))P.call(t,n)&&y(o,n,t[n]);if(S)for(var n of S(t))w.call(t,n)&&y(o,n,t[n]);return o},T=(o,t)=>le(o,ce(t));var v=(o,t)=>{var n={};for(var r in o)P.call(o,r)&&t.indexOf(r)<0&&(n[r]=o[r]);if(o!=null&&S)for(var r of S(o))t.indexOf(r)<0&&w.call(o,r)&&(n[r]=o[r]);return n};var E=(o,t,n)=>new Promise((r,a)=>{var s=p=>{try{c(n.next(p))}catch(f){a(f)}},l=p=>{try{c(n.throw(p))}catch(f){a(f)}},c=p=>p.done?r(p.value):Promise.resolve(p.value).then(s,l);c((n=n.apply(o,t)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const ie=require("element-plus"),e=require("vue"),m=require("element-plus/es");require("element-plus/es/components/base/style/index");require("element-plus/es/components/button/style/index");require("element-plus/es/components/card/style/index");require("element-plus/es/components/input/style/index");require("element-plus/es/components/form/style/index");require("element-plus/es/components/form-item/style/index");require("element-plus/es/components/tooltip/style/index");require("element-plus/es/components/select/style/index");require("element-plus/es/components/option/style/index");require("element-plus/es/components/option-group/style/index");require("element-plus/es/components/pagination/style/index");require("element-plus/es/components/radio/style/index");require("element-plus/es/components/radio-group/style/index");require("element-plus/es/components/radio-button/style/index");require("element-plus/es/components/switch/style/index");require("element-plus/es/components/tag/style/index");require("element-plus/es/components/alert/style/index");require("element-plus/es/components/dialog/style/index");require("element-plus/es/components/notification/style/index");require("element-plus/es/components/date-picker/style/index");require("element-plus/es/components/empty/style/index");require("element-plus/es/components/table/style/index");require("element-plus/es/components/table-column/style/index");function ue(o){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>o[n]})}}return t.default=o,Object.freeze(t)}const $=ue(ie),M=(o,t)=>{const n=o.__vccOpts||o;for(const[r,a]of t)n[r]=a;return n},de=Object.assign({name:"MIcon"},{__name:"Icon",props:{name:{type:String,required:!0},size:{type:[String,Number],default:"16px"},color:{type:String,default:"inherit"},spin:{type:Boolean,default:!1},pulse:{type:Boolean,default:!1},rotate:{type:Number,default:0},flip:{type:String,default:void 0},prefix:{type:String,default:"icon"}},emits:["click"],setup(o,{emit:t}){const n=o,r=t,a=e.computed(()=>{const c=["iconfont"];return n.name&&c.push(`${n.prefix}-${n.name}`),n.spin&&c.push("icon-spin"),n.pulse&&c.push("icon-pulse"),n.flip&&c.push(`icon-flip-${n.flip}`),c}),s=e.computed(()=>{const c={};return n.size&&(typeof n.size=="number"?c.fontSize=`${n.size}px`:c.fontSize=n.size),n.color&&(c.color=n.color),n.rotate!==0&&(c.transform=`rotate(${n.rotate}deg)`),c}),l=c=>{r("click",c)};return(c,p)=>(e.openBlock(),e.createElementBlock("i",e.mergeProps({class:a.value,style:s.value},c.$attrs,{onClick:l}),[e.renderSlot(c.$slots,"default",{},void 0,!0)],16))}}),b=M(de,[["__scopeId","data-v-90f84c9e"]]),me=Object.assign({name:"MButton"},{__name:"Button",setup(o){return(t,n)=>{const r=m.ElButton;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-button"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s,{},void 0,!0)])}))]),1040)}}}),O=M(me,[["__scopeId","data-v-9c99add1"]]),N=Object.assign({name:"MCard"},{__name:"Card",setup(o){return(t,n)=>{const r=m.ElCard;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-card"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),L=Object.assign({name:"MInput"},{__name:"Input",setup(o){return(t,n)=>{const r=m.ElInput;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:["m-input",{solid:t.$attrs.styleType==="solid"}]}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040,["class"])}}}),I=Object.assign({name:"MForm"},{__name:"Form",setup(o){return(t,n)=>{const r=m.ElForm;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-form"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),j=Object.assign({name:"MFormItem"},{__name:"FormItem",setup(o){return(t,n)=>{const r=m.ElFormItem;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-form-item"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),pe=(...o)=>o.filter(Boolean).join(" "),fe=(o,...t)=>{const n=C({},o);return t.forEach(r=>{delete n[r]}),n};function k(o,t="popperClass"){const n=e.useAttrs(),r=e.computed(()=>fe(n,t)),a=e.computed(()=>pe(o,n[t]));return{mergedAttrs:r,className:a}}const V=Object.assign({name:"MTooltip"},{__name:"Tooltip",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-tooltip-popper");return(r,a)=>{const s=m.ElTooltip;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n)}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),z=Object.assign({name:"MSelect"},{__name:"Select",setup(o){return(t,n)=>{const r=m.ElSelect;return e.openBlock(),e.createBlock(r,e.mergeProps({class:["m-select2",{solid:t.$attrs.styleType==="solid"}],"show-arrow":!1},t.$attrs),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040,["class"])}}}),_e=Object.assign({name:"MOption"},{__name:"Option",setup(o){return(t,n)=>{const r=m.ElOption;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),ge=Object.assign({name:"MOptionGroup"},{__name:"OptionGroup",setup(o){return(t,n)=>{const r=m.ElOptionGroup;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),q=Object.assign({name:"MPagination"},{__name:"Pagination",setup(o){return(t,n)=>{const r=m.ElPagination;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-pagination"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),A=Object.assign({name:"MRadio"},{__name:"Radio",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t}=k("mc-radio-popper");return(n,r)=>{const a=m.ElRadio;return e.openBlock(),e.createBlock(a,e.mergeProps(e.unref(t),{class:"m-radio"}),e.createSlots({_:2},[e.renderList(n.$slots,(s,l)=>({name:l,fn:e.withCtx(()=>[e.renderSlot(n.$slots,l)])}))]),1040)}}}),R=Object.assign({name:"MRadioGroup"},{__name:"RadioGroup",props:{popperClass:{type:String,default:""}},setup(o){const t=e.useAttrs(),n=e.computed(()=>{const a="mc-radio-group-popper";return t.popperClass?`${a} ${t.popperClass}`.trim():a}),r=e.computed(()=>{const l=t,{popperClass:a}=l;return v(l,["popperClass"])});return(a,s)=>{const l=m.ElRadioGroup;return e.openBlock(),e.createBlock(l,e.mergeProps(r.value,{"popper-class":n.value,class:"m-radio-group"}),e.createSlots({_:2},[e.renderList(a.$slots,(c,p)=>({name:p,fn:e.withCtx(()=>[e.renderSlot(a.$slots,p)])}))]),1040,["popper-class"])}}}),D=Object.assign({name:"MRadioButton"},{__name:"RadioButton",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t}=k("mc-radio-button-popper");return(n,r)=>{const a=m.ElRadioButton;return e.openBlock(),e.createBlock(a,e.mergeProps(e.unref(t),{class:"m-radio-button"}),e.createSlots({_:2},[e.renderList(n.$slots,(s,l)=>({name:l,fn:e.withCtx(()=>[e.renderSlot(n.$slots,l)])}))]),1040)}}}),G=Object.assign({name:"MSwitch"},{__name:"Switch",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-switch-popper");return(r,a)=>{const s=m.ElSwitch;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n),class:"m-switch"}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),x=Object.assign({name:"MTag"},{__name:"Tag",setup(o){return(t,n)=>{const r=m.ElTag;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-tag"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),F=Object.assign({name:"MAlert"},{__name:"Alert",setup(o){return(t,n)=>{const r=m.ElAlert;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),be={__name:"Dialog",props:e.mergeModels({width:{type:String,default:"440px"},center:{type:Boolean,default:!0},draggable:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!1},title:{type:String,default:""}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:e.mergeModels(["close"],["update:modelValue"]),setup(o,{emit:t}){const n=e.useModel(o,"modelValue");return(r,a)=>{const s=m.ElDialog;return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(s,e.mergeProps({modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=l=>n.value=l),width:o.width,title:o.title,draggable:o.draggable,"close-on-click-modal":o.closeOnClickModal,center:o.center},r.$attrs,{class:"m-dialog","header-class":"m-header"}),e.createSlots({default:e.withCtx(()=>[a[1]||(a[1]=e.createTextVNode("测试组 ",-1)),e.renderSlot(r.$slots,"default",{},void 0,!0)]),_:2},[r.$slots.header?{name:"header",fn:e.withCtx(({close:l,titleId:c,titleClass:p})=>[e.renderSlot(r.$slots,"header",e.normalizeProps(e.guardReactiveProps({close:l,titleId:c,titleClass:p})),void 0,!0)]),key:"0"}:void 0,r.$slots.footer?{name:"footer",fn:e.withCtx(()=>[e.renderSlot(r.$slots,"footer",{},void 0,!0)]),key:"1"}:void 0]),1040,["modelValue","width","title","draggable","close-on-click-modal","center"])])}}},U=M(be,[["__scopeId","data-v-a9d393b9"]]),W=Object.assign({name:"MNotification"},{__name:"Notification",setup(o){return(t,n)=>{const r=m.ElNotification;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),Z=Object.assign({name:"MDatePicker"},{__name:"DatePicker",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-datepicker-popper","popperClass");return(r,a)=>{const s=m.ElDatePicker;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n)}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),Me=["404","billing","cart","comments","dashboard","files","inbox","location","network","notifications","orders","records","session","subscription","todo","wishlist"],he={name:"MEmpty"},H=Object.assign(he,{props:{image:{type:String,default:"orders",validator:o=>o.includes("/")||o.includes("http")?!0:Me.includes(o)}},setup(o){const t=o,n=e.useAttrs(),r=e.computed(()=>{const c=n,{image:s}=c;return v(c,["image"])}),a=e.computed(()=>{const{image:s}=t;return s.includes("/")||s.includes("http")?s:`/images/empty/${s}.png`});return(s,l)=>{const c=m.ElEmpty;return e.openBlock(),e.createBlock(c,e.mergeProps(r.value,{image:a.value}),e.createSlots({_:2},[e.renderList(s.$slots,(p,f)=>({name:f,fn:e.withCtx(()=>[e.renderSlot(s.$slots,f)])}))]),1040,["image"])}}}),J=Object.assign({name:"MTable"},{__name:"Table",setup(o){return(t,n)=>{const r=m.ElTable;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),Q=Object.assign({name:"MTableColumn"},{__name:"TableColumn",setup(o){return(t,n)=>{const r=m.ElTableColumn;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-table-column"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),ke={class:"m-banner__content"},Se={key:0,class:"m-banner__icon"},Ce={class:"m-banner__text"},ve=Object.assign({name:"MBanner"},{__name:"Banner",props:{content:{type:String,default:""},type:{type:String,default:"info",validator:o=>["info","success","warning","error"].includes(o)},closable:{type:Boolean,default:!0},visible:{type:Boolean,default:!0},icon:{type:String,default:""},iconSize:{type:[String,Number],default:"16px"},closeIconSize:{type:[String,Number],default:"16px"},backgroundColor:{type:String,default:""},textColor:{type:String,default:""},borderColor:{type:String,default:""},duration:{type:Number,default:0}},emits:["close","update:visible"],setup(o,{expose:t,emit:n}){const r=e.useSlots(),a=o,s=n,l=e.ref(a.visible);e.watch(()=>a.visible,u=>{l.value=u});const c=e.computed(()=>{const u={};return a.backgroundColor&&(u.backgroundColor=a.backgroundColor),a.textColor&&(u.color=a.textColor),a.borderColor&&(u.borderColor=a.borderColor),u}),p={info:"info",success:"check-circle",warning:"warning",error:"close-circle"};e.computed(()=>a.icon||p[a.type]);const f=()=>{l.value=!1,s("update:visible",!1),s("close")};return e.watch(l,u=>{u&&a.duration>0&&setTimeout(()=>{f()},a.duration)}),t({close:f}),(u,_)=>o.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["m-banner",[`m-banner--${o.type}`,{"m-banner--closable":o.closable,"m-banner--with-icon":o.icon||e.unref(r).icon}]]),style:e.normalizeStyle(c.value)},[e.createElementVNode("div",ke,[o.icon||e.unref(r).icon?(e.openBlock(),e.createElementBlock("div",Se,[e.renderSlot(u.$slots,"icon",{},()=>[e.createVNode(b,{name:o.icon,size:o.iconSize},null,8,["name","size"])],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ce,[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(o.content),1)],!0)]),o.closable?(e.openBlock(),e.createElementBlock("div",{key:1,class:"m-banner__close",onClick:f},[e.createVNode(b,{name:"lucide-x",size:o.closeIconSize},null,8,["size"])])):e.createCommentVNode("",!0)])],6)):e.createCommentVNode("",!0)}}),X=M(ve,[["__scopeId","data-v-00c80323"]]),$e={class:"m-tabs__header"},Be={class:"m-tabs__nav"},ye=["onClick"],Pe={class:"m-tabs__item-text"},we={key:1},Te=["onClick"],Ee={class:"m-tabs__content"},Oe={__name:"Tabs",props:{modelValue:{type:[String,Number],default:""},type:{type:String,default:"",validator:o=>["","card","border-card"].includes(o)},tabPosition:{type:String,default:"top",validator:o=>["top","right","bottom","left"].includes(o)},closable:{type:Boolean,default:!1},addable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},stretch:{type:Boolean,default:!1},beforeLeave:{type:Function,default:null}},emits:["update:modelValue","tab-click","tab-change","tab-remove","tab-add","edit"],setup(o,{expose:t,emit:n}){const r=o,a=n;e.useSlots();const s=e.ref([]),l=e.ref(r.modelValue);e.watch(()=>r.modelValue,u=>{l.value=u}),e.watch(l,u=>{a("update:modelValue",u),a("tab-change",u)}),e.provide("tabsContext",{registerTab:u=>{const _=s.value.findIndex(d=>d.name===u.name);_>=0?s.value[_]=u:s.value.push(u),!l.value&&s.value.length>0&&(l.value=s.value[0].name||0)},unregisterTab:u=>{const _=s.value.findIndex(d=>d.name===u);_>=0&&s.value.splice(_,1)}});const c=(u,_)=>E(this,null,function*(){if(u.disabled)return;const d=u.name||_;if(l.value!==d){if(r.beforeLeave)try{if((yield r.beforeLeave(l.value,d))===!1)return}catch(g){return}l.value=d,a("tab-click",{name:d,index:_,disabled:u.disabled})}}),p=(u,_)=>{const d=u.name||_;a("tab-remove",d),a("edit",d,"remove")},f=()=>{a("tab-add"),a("edit","","add")};return t({activeName:e.computed(()=>l.value)}),(u,_)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["m-tabs",[`m-tabs--${o.type}`,`m-tabs--${o.tabPosition}`]])},[e.createElementVNode("div",$e,[e.createElementVNode("div",Be,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(d,g)=>{var B;return e.openBlock(),e.createElementBlock("div",{key:d.name||g,class:e.normalizeClass(["m-tabs__item",{"m-tabs__item--active":l.value===(d.name||g),"m-tabs__item--disabled":d.disabled,"m-tabs__item--closable":d.closable}]),onClick:se=>c(d,g)},[e.createElementVNode("span",Pe,[(B=d.$slots)!=null&&B.label?e.renderSlot(u.$slots,`tab-${d.name||g}`,{key:0},void 0,!0):(e.openBlock(),e.createElementBlock("span",we,e.toDisplayString(d.label),1))]),d.closable?(e.openBlock(),e.createElementBlock("span",{key:0,class:"m-tabs__item-close",onClick:e.withModifiers(se=>p(d,g),["stop"])},[e.createVNode(b,{name:"lucide-x",size:12})],8,Te)):e.createCommentVNode("",!0)],10,ye)}),128)),o.addable||o.editable?(e.openBlock(),e.createElementBlock("div",{key:0,class:"m-tabs__item m-tabs__item--add",onClick:f},[e.createVNode(b,{name:"plus",size:12})])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ee,[e.renderSlot(u.$slots,"default",{},void 0,!0)])],2))}},Y=M(Oe,[["__scopeId","data-v-23508d30"]]),Ne=Object.assign({name:"MTabPane"},{__name:"TabPane",props:{label:{type:String,default:""},disabled:{type:Boolean,default:!1},name:{type:[String,Number],default:""},closable:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1}},setup(o){const t=o,n=e.useSlots(),r=e.inject("tabsContext"),a=e.computed(()=>r?r.activeName===(t.name||r.tabIndex):!1);return e.onMounted(()=>{if(r){const s={name:t.name,label:t.label,disabled:t.disabled,closable:t.closable,$slots:n};r.registerTab(s)}}),e.onUnmounted(()=>{r&&r.unregisterTab(t.name)}),(s,l)=>e.withDirectives((e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["m-tab-pane",{"m-tab-pane--active":a.value,"m-tab-pane--disabled":o.disabled}])},[e.renderSlot(s.$slots,"default",{},void 0,!0)],2)),[[e.vShow,a.value]])}}),K=M(Ne,[["__scopeId","data-v-722bb248"]]);function h(o){o&&o.classList&&o.classList.add("mc-ui-override")}function ee(o){o&&o.$el&&h(o.$el)}function te(){typeof document!="undefined"&&(document.body.classList.add("mc-ui-override"),new MutationObserver(t=>{t.forEach(n=>{n.addedNodes.forEach(r=>{if(r.nodeType===1&&r.classList){if(r.className&&r.className.includes("el-")){const s=r.closest(".mc-ui-override")||r.parentElement;s&&!s.classList.contains("mc-ui-override")&&s.classList.add("mc-ui-override")}r.querySelectorAll('[class*="el-"]').forEach(s=>{const l=s.closest(".mc-ui-override")||s.parentElement;l&&!l.classList.contains("mc-ui-override")&&l.classList.add("mc-ui-override")})}})})}).observe(document.body,{childList:!0,subtree:!0}))}function oe(o='[class*="el-"]'){typeof document!="undefined"&&document.querySelectorAll(o).forEach(n=>{const r=n.closest(".mc-ui-override")||n.parentElement;r&&!r.classList.contains("mc-ui-override")&&r.classList.add("mc-ui-override")})}function re(o){return T(C({},o),{mounted(){h(this.$el),o.mounted&&o.mounted.call(this)},updated(){h(this.$el),o.updated&&o.updated.call(this)}})}const Le=Object.freeze(Object.defineProperty({__proto__:null,addComponentOverride:ee,addOverrideClass:h,applyGlobalOverride:te,createOverrideComponent:re,forceRefreshStyles:oe},Symbol.toStringTag,{value:"Module"})),ne=[b,O,N,L,I,j,V,z,_e,ge,q,A,R,D,G,x,F,U,W,Z,H,J,Q,X,Y,K],i={};function Ie(o){const t=ne.map(n=>{if(n&&n.name&&typeof n.name=="string"){let r=n.name.toLowerCase();return{mradiogroup:"m-radio-group",mradiobutton:"m-radio-button",mformitem:"m-form-item",moptiongroup:"m-option-group"}[r]||r.replace(/^m/,"m-")}return null}).filter(Boolean);Object.entries($).forEach(([n,r])=>{if(r&&r.name&&typeof r.name=="string"&&r.name.startsWith("El")){const a="m-"+r.name.slice(2).replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");t.includes(a)||o._context.components[a]||o.component(a,r);const s="M"+r.name.slice(2);i[s]=r}})}const je=o=>{typeof window!="undefined"&&Promise.resolve().then(()=>Le).then(({applyGlobalOverride:t})=>{t()}),ne.forEach(t=>{if(t&&t.name&&typeof t.name=="string"){let n=t.name.toLowerCase();n={mradiogroup:"m-radio-group",mradiobutton:"m-radio-button",mformitem:"m-form-item",moptiongroup:"m-option-group"}[n]||n.replace(/^m/,"m-"),o.component(n,t)}}),Ie(o)},Ve={install:je},ze=$.ElMessage,qe=$.ElMessageBox,Ae=C({},i),Re=i.MButtonGroup,De=i.MBreadcrumb,Ge=i.MBreadcrumbItem,xe=i.MCarousel,Fe=i.MCarouselItem,Ue=i.MCascader,We=i.MCascaderPanel,Ze=i.MCheckTag,He=i.MCalendar,Je=i.MTimePicker,Qe=i.MDateTimePicker,Xe=i.MColorPicker,Ye=i.MTransfer,Ke=i.MTree,et=i.MTreeSelect,tt=i.MUpload,ot=i.MImage,rt=i.MImageViewer,nt=i.MBacktop,st=i.MInfiniteScroll,at=i.MAffix,lt=i.MScrollbar,ct=i.MResult,it=i.MSkeleton,ut=i.MLoading,dt=i.MSpinner,mt=i.MProgress,pt=i.MBadge,ft=i.MAvatar,_t=i.MImagePreview,gt=i.MTeleport,bt=i.MConfigProvider;exports.MAffix=at;exports.MAlert=F;exports.MAvatar=ft;exports.MBacktop=nt;exports.MBadge=pt;exports.MBanner=X;exports.MBreadcrumb=De;exports.MBreadcrumbItem=Ge;exports.MButton=O;exports.MButtonGroup=Re;exports.MCalendar=He;exports.MCard=N;exports.MCarousel=xe;exports.MCarouselItem=Fe;exports.MCascader=Ue;exports.MCascaderPanel=We;exports.MCheckTag=Ze;exports.MColorPicker=Xe;exports.MConfigProvider=bt;exports.MDatePicker=Z;exports.MDateTimePicker=Qe;exports.MDialog=U;exports.MEmpty=H;exports.MForm=I;exports.MFormItem=j;exports.MIcon=b;exports.MImage=ot;exports.MImagePreview=_t;exports.MImageViewer=rt;exports.MInfiniteScroll=st;exports.MInput=L;exports.MLoading=ut;exports.MMessage=ze;exports.MMessageBox=qe;exports.MNotification=W;exports.MPagination=q;exports.MProgress=mt;exports.MRadio=A;exports.MRadioButton=D;exports.MRadioGroup=R;exports.MResult=ct;exports.MScrollbar=lt;exports.MSelect=z;exports.MSkeleton=it;exports.MSpinner=dt;exports.MSwitch=G;exports.MTabPane=K;exports.MTable=J;exports.MTableColumn=Q;exports.MTabs=Y;exports.MTag=x;exports.MTeleport=gt;exports.MTimePicker=Je;exports.MTooltip=V;exports.MTransfer=Ye;exports.MTree=Ke;exports.MTreeSelect=et;exports.MUpload=tt;exports.addComponentOverride=ee;exports.addOverrideClass=h;exports.applyGlobalOverride=te;exports.createOverrideComponent=re;exports.default=Ve;exports.forceRefreshStyles=oe;exports.mComponents=Ae;
|
|
1
|
+
"use strict";var ae=Object.defineProperty,le=Object.defineProperties;var ce=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable;var y=(o,t,n)=>t in o?ae(o,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[t]=n,C=(o,t)=>{for(var n in t||(t={}))P.call(t,n)&&y(o,n,t[n]);if(S)for(var n of S(t))w.call(t,n)&&y(o,n,t[n]);return o},T=(o,t)=>le(o,ce(t));var v=(o,t)=>{var n={};for(var r in o)P.call(o,r)&&t.indexOf(r)<0&&(n[r]=o[r]);if(o!=null&&S)for(var r of S(o))t.indexOf(r)<0&&w.call(o,r)&&(n[r]=o[r]);return n};var E=(o,t,n)=>new Promise((r,a)=>{var s=p=>{try{c(n.next(p))}catch(f){a(f)}},l=p=>{try{c(n.throw(p))}catch(f){a(f)}},c=p=>p.done?r(p.value):Promise.resolve(p.value).then(s,l);c((n=n.apply(o,t)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const ie=require("element-plus"),e=require("vue"),m=require("element-plus/es");require("element-plus/es/components/base/style/index");require("element-plus/es/components/button/style/index");require("element-plus/es/components/card/style/index");require("element-plus/es/components/input/style/index");require("element-plus/es/components/form/style/index");require("element-plus/es/components/form-item/style/index");require("element-plus/es/components/tooltip/style/index");require("element-plus/es/components/select/style/index");require("element-plus/es/components/option/style/index");require("element-plus/es/components/option-group/style/index");require("element-plus/es/components/pagination/style/index");require("element-plus/es/components/radio/style/index");require("element-plus/es/components/radio-group/style/index");require("element-plus/es/components/radio-button/style/index");require("element-plus/es/components/switch/style/index");require("element-plus/es/components/tag/style/index");require("element-plus/es/components/alert/style/index");require("element-plus/es/components/dialog/style/index");require("element-plus/es/components/notification/style/index");require("element-plus/es/components/date-picker/style/index");require("element-plus/es/components/empty/style/index");require("element-plus/es/components/table/style/index");require("element-plus/es/components/table-column/style/index");function ue(o){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const n in o)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>o[n]})}}return t.default=o,Object.freeze(t)}const $=ue(ie),h=(o,t)=>{const n=o.__vccOpts||o;for(const[r,a]of t)n[r]=a;return n},de=Object.assign({name:"MIcon"},{__name:"Icon",props:{name:{type:String,required:!0},size:{type:[String,Number],default:"16px"},color:{type:String,default:"inherit"},spin:{type:Boolean,default:!1},pulse:{type:Boolean,default:!1},rotate:{type:Number,default:0},flip:{type:String,default:void 0},prefix:{type:String,default:"icon"}},emits:["click"],setup(o,{emit:t}){const n=o,r=t,a=e.computed(()=>{const c=["iconfont"];return n.name&&c.push(`${n.prefix}-${n.name}`),n.spin&&c.push("icon-spin"),n.pulse&&c.push("icon-pulse"),n.flip&&c.push(`icon-flip-${n.flip}`),c}),s=e.computed(()=>{const c={};return n.size&&(typeof n.size=="number"?c.fontSize=`${n.size}px`:c.fontSize=n.size),n.color&&(c.color=n.color),n.rotate!==0&&(c.transform=`rotate(${n.rotate}deg)`),c}),l=c=>{r("click",c)};return(c,p)=>(e.openBlock(),e.createElementBlock("i",e.mergeProps({class:a.value,style:s.value},c.$attrs,{onClick:l}),[e.renderSlot(c.$slots,"default",{},void 0,!0)],16))}}),b=h(de,[["__scopeId","data-v-90f84c9e"]]),me=Object.assign({name:"MButton"},{__name:"Button",setup(o){return(t,n)=>{const r=m.ElButton;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-button"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s,{},void 0,!0)])}))]),1040)}}}),O=h(me,[["__scopeId","data-v-9c99add1"]]),N=Object.assign({name:"MCard"},{__name:"Card",setup(o){return(t,n)=>{const r=m.ElCard;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-card"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),L=Object.assign({name:"MInput"},{__name:"Input",setup(o){return(t,n)=>{const r=m.ElInput;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:["m-input",{solid:t.$attrs.styleType==="solid"}]}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040,["class"])}}}),I=Object.assign({name:"MForm"},{__name:"Form",setup(o){return(t,n)=>{const r=m.ElForm;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-form"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),j=Object.assign({name:"MFormItem"},{__name:"FormItem",setup(o){return(t,n)=>{const r=m.ElFormItem;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-form-item"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),pe=(...o)=>o.filter(Boolean).join(" "),fe=(o,...t)=>{const n=C({},o);return t.forEach(r=>{delete n[r]}),n};function k(o,t="popperClass"){const n=e.useAttrs(),r=e.computed(()=>fe(n,t)),a=e.computed(()=>pe(o,n[t]));return{mergedAttrs:r,className:a}}const V=Object.assign({name:"MTooltip"},{__name:"Tooltip",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-tooltip-popper");return(r,a)=>{const s=m.ElTooltip;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n)}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),z=Object.assign({name:"MSelect"},{__name:"Select",setup(o){return(t,n)=>{const r=m.ElSelect;return e.openBlock(),e.createBlock(r,e.mergeProps({class:["m-select2",{solid:t.$attrs.styleType==="solid"}],"show-arrow":!1},t.$attrs),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040,["class"])}}}),_e=Object.assign({name:"MOption"},{__name:"Option",setup(o){return(t,n)=>{const r=m.ElOption;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),ge=Object.assign({name:"MOptionGroup"},{__name:"OptionGroup",setup(o){return(t,n)=>{const r=m.ElOptionGroup;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),q=Object.assign({name:"MPagination"},{__name:"Pagination",setup(o){return(t,n)=>{const r=m.ElPagination;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-pagination"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),A=Object.assign({name:"MRadio"},{__name:"Radio",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t}=k("mc-radio-popper");return(n,r)=>{const a=m.ElRadio;return e.openBlock(),e.createBlock(a,e.mergeProps(e.unref(t),{class:"m-radio"}),e.createSlots({_:2},[e.renderList(n.$slots,(s,l)=>({name:l,fn:e.withCtx(()=>[e.renderSlot(n.$slots,l)])}))]),1040)}}}),R=Object.assign({name:"MRadioGroup"},{__name:"RadioGroup",props:{popperClass:{type:String,default:""}},setup(o){const t=e.useAttrs(),n=e.computed(()=>{const a="mc-radio-group-popper";return t.popperClass?`${a} ${t.popperClass}`.trim():a}),r=e.computed(()=>{const l=t,{popperClass:a}=l;return v(l,["popperClass"])});return(a,s)=>{const l=m.ElRadioGroup;return e.openBlock(),e.createBlock(l,e.mergeProps(r.value,{"popper-class":n.value,class:"m-radio-group"}),e.createSlots({_:2},[e.renderList(a.$slots,(c,p)=>({name:p,fn:e.withCtx(()=>[e.renderSlot(a.$slots,p)])}))]),1040,["popper-class"])}}}),D=Object.assign({name:"MRadioButton"},{__name:"RadioButton",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t}=k("mc-radio-button-popper");return(n,r)=>{const a=m.ElRadioButton;return e.openBlock(),e.createBlock(a,e.mergeProps(e.unref(t),{class:"m-radio-button"}),e.createSlots({_:2},[e.renderList(n.$slots,(s,l)=>({name:l,fn:e.withCtx(()=>[e.renderSlot(n.$slots,l)])}))]),1040)}}}),G=Object.assign({name:"MSwitch"},{__name:"Switch",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-switch-popper");return(r,a)=>{const s=m.ElSwitch;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n),class:"m-switch"}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),x=Object.assign({name:"MTag"},{__name:"Tag",setup(o){return(t,n)=>{const r=m.ElTag;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-tag"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),F=Object.assign({name:"MAlert"},{__name:"Alert",setup(o){return(t,n)=>{const r=m.ElAlert;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),U={__name:"Dialog",props:e.mergeModels({width:{type:String,default:"440px"},center:{type:Boolean,default:!0},draggable:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!1},title:{type:String,default:""}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:e.mergeModels(["close"],["update:modelValue"]),setup(o,{emit:t}){const n=e.useModel(o,"modelValue");return(r,a)=>{const s=m.ElDialog;return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(s,e.mergeProps({modelValue:n.value,"onUpdate:modelValue":a[0]||(a[0]=l=>n.value=l),width:o.width,title:o.title,draggable:o.draggable,"close-on-click-modal":o.closeOnClickModal,center:o.center},r.$attrs,{class:"m-dialog","header-class":"m-header"}),e.createSlots({default:e.withCtx(()=>[a[1]||(a[1]=e.createTextVNode("测试组 ",-1)),e.renderSlot(r.$slots,"default")]),_:2},[r.$slots.header?{name:"header",fn:e.withCtx(({close:l,titleId:c,titleClass:p})=>[e.renderSlot(r.$slots,"header",e.normalizeProps(e.guardReactiveProps({close:l,titleId:c,titleClass:p})))]),key:"0"}:void 0,r.$slots.footer?{name:"footer",fn:e.withCtx(()=>[e.renderSlot(r.$slots,"footer")]),key:"1"}:void 0]),1040,["modelValue","width","title","draggable","close-on-click-modal","center"])])}}},W=Object.assign({name:"MNotification"},{__name:"Notification",setup(o){return(t,n)=>{const r=m.ElNotification;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),Z=Object.assign({name:"MDatePicker"},{__name:"DatePicker",props:{popperClass:{type:String,default:""}},setup(o){const{mergedAttrs:t,className:n}=k("mc-datepicker-popper","popperClass");return(r,a)=>{const s=m.ElDatePicker;return e.openBlock(),e.createBlock(s,e.mergeProps(e.unref(t),{"popper-class":e.unref(n)}),e.createSlots({_:2},[e.renderList(r.$slots,(l,c)=>({name:c,fn:e.withCtx(()=>[e.renderSlot(r.$slots,c)])}))]),1040,["popper-class"])}}}),be=["404","billing","cart","comments","dashboard","files","inbox","location","network","notifications","orders","records","session","subscription","todo","wishlist"],Me={name:"MEmpty"},H=Object.assign(Me,{props:{image:{type:String,default:"orders",validator:o=>o.includes("/")||o.includes("http")?!0:be.includes(o)}},setup(o){const t=o,n=e.useAttrs(),r=e.computed(()=>{const c=n,{image:s}=c;return v(c,["image"])}),a=e.computed(()=>{const{image:s}=t;return s.includes("/")||s.includes("http")?s:`/images/empty/${s}.png`});return(s,l)=>{const c=m.ElEmpty;return e.openBlock(),e.createBlock(c,e.mergeProps(r.value,{image:a.value}),e.createSlots({_:2},[e.renderList(s.$slots,(p,f)=>({name:f,fn:e.withCtx(()=>[e.renderSlot(s.$slots,f)])}))]),1040,["image"])}}}),J=Object.assign({name:"MTable"},{__name:"Table",setup(o){return(t,n)=>{const r=m.ElTable;return e.openBlock(),e.createBlock(r,e.normalizeProps(e.guardReactiveProps(t.$attrs)),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),Q=Object.assign({name:"MTableColumn"},{__name:"TableColumn",setup(o){return(t,n)=>{const r=m.ElTableColumn;return e.openBlock(),e.createBlock(r,e.mergeProps(t.$attrs,{class:"m-table-column"}),e.createSlots({_:2},[e.renderList(t.$slots,(a,s)=>({name:s,fn:e.withCtx(()=>[e.renderSlot(t.$slots,s)])}))]),1040)}}}),he={class:"m-banner__content"},ke={key:0,class:"m-banner__icon"},Se={class:"m-banner__text"},Ce=Object.assign({name:"MBanner"},{__name:"Banner",props:{content:{type:String,default:""},type:{type:String,default:"info",validator:o=>["info","success","warning","error"].includes(o)},closable:{type:Boolean,default:!0},visible:{type:Boolean,default:!0},icon:{type:String,default:""},iconSize:{type:[String,Number],default:"16px"},closeIconSize:{type:[String,Number],default:"16px"},backgroundColor:{type:String,default:""},textColor:{type:String,default:""},borderColor:{type:String,default:""},duration:{type:Number,default:0}},emits:["close","update:visible"],setup(o,{expose:t,emit:n}){const r=e.useSlots(),a=o,s=n,l=e.ref(a.visible);e.watch(()=>a.visible,u=>{l.value=u});const c=e.computed(()=>{const u={};return a.backgroundColor&&(u.backgroundColor=a.backgroundColor),a.textColor&&(u.color=a.textColor),a.borderColor&&(u.borderColor=a.borderColor),u}),p={info:"info",success:"check-circle",warning:"warning",error:"close-circle"};e.computed(()=>a.icon||p[a.type]);const f=()=>{l.value=!1,s("update:visible",!1),s("close")};return e.watch(l,u=>{u&&a.duration>0&&setTimeout(()=>{f()},a.duration)}),t({close:f}),(u,_)=>o.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["m-banner",[`m-banner--${o.type}`,{"m-banner--closable":o.closable,"m-banner--with-icon":o.icon||e.unref(r).icon}]]),style:e.normalizeStyle(c.value)},[e.createElementVNode("div",he,[o.icon||e.unref(r).icon?(e.openBlock(),e.createElementBlock("div",ke,[e.renderSlot(u.$slots,"icon",{},()=>[e.createVNode(b,{name:o.icon,size:o.iconSize},null,8,["name","size"])],!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Se,[e.renderSlot(u.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(o.content),1)],!0)]),o.closable?(e.openBlock(),e.createElementBlock("div",{key:1,class:"m-banner__close",onClick:f},[e.createVNode(b,{name:"lucide-x",size:o.closeIconSize},null,8,["size"])])):e.createCommentVNode("",!0)])],6)):e.createCommentVNode("",!0)}}),X=h(Ce,[["__scopeId","data-v-00c80323"]]),ve={class:"m-tabs__header"},$e={class:"m-tabs__nav"},Be=["onClick"],ye={class:"m-tabs__item-text"},Pe={key:1},we=["onClick"],Te={class:"m-tabs__content"},Ee={__name:"Tabs",props:{modelValue:{type:[String,Number],default:""},type:{type:String,default:"",validator:o=>["","card","border-card"].includes(o)},tabPosition:{type:String,default:"top",validator:o=>["top","right","bottom","left"].includes(o)},closable:{type:Boolean,default:!1},addable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},stretch:{type:Boolean,default:!1},beforeLeave:{type:Function,default:null}},emits:["update:modelValue","tab-click","tab-change","tab-remove","tab-add","edit"],setup(o,{expose:t,emit:n}){const r=o,a=n;e.useSlots();const s=e.ref([]),l=e.ref(r.modelValue);e.watch(()=>r.modelValue,u=>{l.value=u}),e.watch(l,u=>{a("update:modelValue",u),a("tab-change",u)}),e.provide("tabsContext",{registerTab:u=>{const _=s.value.findIndex(d=>d.name===u.name);_>=0?s.value[_]=u:s.value.push(u),!l.value&&s.value.length>0&&(l.value=s.value[0].name||0)},unregisterTab:u=>{const _=s.value.findIndex(d=>d.name===u);_>=0&&s.value.splice(_,1)}});const c=(u,_)=>E(this,null,function*(){if(u.disabled)return;const d=u.name||_;if(l.value!==d){if(r.beforeLeave)try{if((yield r.beforeLeave(l.value,d))===!1)return}catch(g){return}l.value=d,a("tab-click",{name:d,index:_,disabled:u.disabled})}}),p=(u,_)=>{const d=u.name||_;a("tab-remove",d),a("edit",d,"remove")},f=()=>{a("tab-add"),a("edit","","add")};return t({activeName:e.computed(()=>l.value)}),(u,_)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["m-tabs",[`m-tabs--${o.type}`,`m-tabs--${o.tabPosition}`]])},[e.createElementVNode("div",ve,[e.createElementVNode("div",$e,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,(d,g)=>{var B;return e.openBlock(),e.createElementBlock("div",{key:d.name||g,class:e.normalizeClass(["m-tabs__item",{"m-tabs__item--active":l.value===(d.name||g),"m-tabs__item--disabled":d.disabled,"m-tabs__item--closable":d.closable}]),onClick:se=>c(d,g)},[e.createElementVNode("span",ye,[(B=d.$slots)!=null&&B.label?e.renderSlot(u.$slots,`tab-${d.name||g}`,{key:0},void 0,!0):(e.openBlock(),e.createElementBlock("span",Pe,e.toDisplayString(d.label),1))]),d.closable?(e.openBlock(),e.createElementBlock("span",{key:0,class:"m-tabs__item-close",onClick:e.withModifiers(se=>p(d,g),["stop"])},[e.createVNode(b,{name:"lucide-x",size:12})],8,we)):e.createCommentVNode("",!0)],10,Be)}),128)),o.addable||o.editable?(e.openBlock(),e.createElementBlock("div",{key:0,class:"m-tabs__item m-tabs__item--add",onClick:f},[e.createVNode(b,{name:"plus",size:12})])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Te,[e.renderSlot(u.$slots,"default",{},void 0,!0)])],2))}},Y=h(Ee,[["__scopeId","data-v-23508d30"]]),Oe=Object.assign({name:"MTabPane"},{__name:"TabPane",props:{label:{type:String,default:""},disabled:{type:Boolean,default:!1},name:{type:[String,Number],default:""},closable:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1}},setup(o){const t=o,n=e.useSlots(),r=e.inject("tabsContext"),a=e.computed(()=>r?r.activeName===(t.name||r.tabIndex):!1);return e.onMounted(()=>{if(r){const s={name:t.name,label:t.label,disabled:t.disabled,closable:t.closable,$slots:n};r.registerTab(s)}}),e.onUnmounted(()=>{r&&r.unregisterTab(t.name)}),(s,l)=>e.withDirectives((e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["m-tab-pane",{"m-tab-pane--active":a.value,"m-tab-pane--disabled":o.disabled}])},[e.renderSlot(s.$slots,"default",{},void 0,!0)],2)),[[e.vShow,a.value]])}}),K=h(Oe,[["__scopeId","data-v-722bb248"]]);function M(o){o&&o.classList&&o.classList.add("mc-ui-override")}function ee(o){o&&o.$el&&M(o.$el)}function te(){typeof document!="undefined"&&(document.body.classList.add("mc-ui-override"),new MutationObserver(t=>{t.forEach(n=>{n.addedNodes.forEach(r=>{if(r.nodeType===1&&r.classList){if(r.className&&r.className.includes("el-")){const s=r.closest(".mc-ui-override")||r.parentElement;s&&!s.classList.contains("mc-ui-override")&&s.classList.add("mc-ui-override")}r.querySelectorAll('[class*="el-"]').forEach(s=>{const l=s.closest(".mc-ui-override")||s.parentElement;l&&!l.classList.contains("mc-ui-override")&&l.classList.add("mc-ui-override")})}})})}).observe(document.body,{childList:!0,subtree:!0}))}function oe(o='[class*="el-"]'){typeof document!="undefined"&&document.querySelectorAll(o).forEach(n=>{const r=n.closest(".mc-ui-override")||n.parentElement;r&&!r.classList.contains("mc-ui-override")&&r.classList.add("mc-ui-override")})}function re(o){return T(C({},o),{mounted(){M(this.$el),o.mounted&&o.mounted.call(this)},updated(){M(this.$el),o.updated&&o.updated.call(this)}})}const Ne=Object.freeze(Object.defineProperty({__proto__:null,addComponentOverride:ee,addOverrideClass:M,applyGlobalOverride:te,createOverrideComponent:re,forceRefreshStyles:oe},Symbol.toStringTag,{value:"Module"})),ne=[b,O,N,L,I,j,V,z,_e,ge,q,A,R,D,G,x,F,U,W,Z,H,J,Q,X,Y,K],i={};function Le(o){const t=ne.map(n=>{if(n&&n.name&&typeof n.name=="string"){let r=n.name.toLowerCase();return{mradiogroup:"m-radio-group",mradiobutton:"m-radio-button",mformitem:"m-form-item",moptiongroup:"m-option-group"}[r]||r.replace(/^m/,"m-")}return null}).filter(Boolean);Object.entries($).forEach(([n,r])=>{if(r&&r.name&&typeof r.name=="string"&&r.name.startsWith("El")){const a="m-"+r.name.slice(2).replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");t.includes(a)||o._context.components[a]||o.component(a,r);const s="M"+r.name.slice(2);i[s]=r}})}const Ie=o=>{typeof window!="undefined"&&Promise.resolve().then(()=>Ne).then(({applyGlobalOverride:t})=>{t()}),ne.forEach(t=>{if(t&&t.name&&typeof t.name=="string"){let n=t.name.toLowerCase();n={mradiogroup:"m-radio-group",mradiobutton:"m-radio-button",mformitem:"m-form-item",moptiongroup:"m-option-group"}[n]||n.replace(/^m/,"m-"),o.component(n,t)}}),Le(o)},je={install:Ie},Ve=$.ElMessage,ze=$.ElMessageBox,qe=C({},i),Ae=i.MButtonGroup,Re=i.MBreadcrumb,De=i.MBreadcrumbItem,Ge=i.MCarousel,xe=i.MCarouselItem,Fe=i.MCascader,Ue=i.MCascaderPanel,We=i.MCheckTag,Ze=i.MCalendar,He=i.MTimePicker,Je=i.MDateTimePicker,Qe=i.MColorPicker,Xe=i.MTransfer,Ye=i.MTree,Ke=i.MTreeSelect,et=i.MUpload,tt=i.MImage,ot=i.MImageViewer,rt=i.MBacktop,nt=i.MInfiniteScroll,st=i.MAffix,at=i.MScrollbar,lt=i.MResult,ct=i.MSkeleton,it=i.MLoading,ut=i.MSpinner,dt=i.MProgress,mt=i.MBadge,pt=i.MAvatar,ft=i.MImagePreview,_t=i.MTeleport,gt=i.MConfigProvider;exports.MAffix=st;exports.MAlert=F;exports.MAvatar=pt;exports.MBacktop=rt;exports.MBadge=mt;exports.MBanner=X;exports.MBreadcrumb=Re;exports.MBreadcrumbItem=De;exports.MButton=O;exports.MButtonGroup=Ae;exports.MCalendar=Ze;exports.MCard=N;exports.MCarousel=Ge;exports.MCarouselItem=xe;exports.MCascader=Fe;exports.MCascaderPanel=Ue;exports.MCheckTag=We;exports.MColorPicker=Qe;exports.MConfigProvider=gt;exports.MDatePicker=Z;exports.MDateTimePicker=Je;exports.MDialog=U;exports.MEmpty=H;exports.MForm=I;exports.MFormItem=j;exports.MIcon=b;exports.MImage=tt;exports.MImagePreview=ft;exports.MImageViewer=ot;exports.MInfiniteScroll=nt;exports.MInput=L;exports.MLoading=it;exports.MMessage=Ve;exports.MMessageBox=ze;exports.MNotification=W;exports.MPagination=q;exports.MProgress=dt;exports.MRadio=A;exports.MRadioButton=D;exports.MRadioGroup=R;exports.MResult=lt;exports.MScrollbar=at;exports.MSelect=z;exports.MSkeleton=ct;exports.MSpinner=ut;exports.MSwitch=G;exports.MTabPane=K;exports.MTable=J;exports.MTableColumn=Q;exports.MTabs=Y;exports.MTag=x;exports.MTeleport=_t;exports.MTimePicker=He;exports.MTooltip=V;exports.MTransfer=Xe;exports.MTree=Ye;exports.MTreeSelect=Ke;exports.MUpload=et;exports.addComponentOverride=ee;exports.addOverrideClass=M;exports.applyGlobalOverride=te;exports.createOverrideComponent=re;exports.default=je;exports.forceRefreshStyles=oe;exports.mComponents=qe;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../packages/components/Icon/Icon.vue","../packages/components/Button/Button.vue","../packages/components/Card/Card.vue","../packages/components/Input/Input.vue","../packages/components/Form/Form.vue","../packages/components/FormItem/FormItem.vue","../packages/utils/classNames.js","../packages/hooks/useClassName.js","../packages/components/Tooltip/Tooltip.vue","../packages/components/Select/Select.vue","../packages/components/Option/Option.vue","../packages/components/OptionGroup/OptionGroup.vue","../packages/components/Pagination/Pagination.vue","../packages/components/Radio/Radio.vue","../packages/components/RadioGroup/RadioGroup.vue","../packages/components/RadioButton/RadioButton.vue","../packages/components/Switch/Switch.vue","../packages/components/Tag/Tag.vue","../packages/components/Alert/Alert.vue","../packages/components/Dialog/Dialog.vue","../packages/components/Notification/Notification.vue","../packages/components/DatePicker/DatePicker.vue","../packages/components/Empty/Empty.vue","../packages/components/Table/Table.vue","../packages/components/Table/TableColumn.vue","../packages/components/Banner/Banner.vue","../packages/components/Tabs/Tabs.vue","../packages/components/Tabs/TabPane.vue","../packages/utils/styleUtils.js","../packages/index.js"],"sourcesContent":["<template>\r\n <i \r\n :class=\"iconClass\" \r\n :style=\"iconStyle\"\r\n v-bind=\"$attrs\"\r\n @click=\"handleClick\"\r\n >\r\n <slot></slot>\r\n </i>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\n\r\n// 定义组件名\r\ndefineOptions({\r\n name: 'MIcon'\r\n})\r\n\r\nconst props = defineProps({\r\n name: {\r\n type: String,\r\n required: true\r\n },\r\n size: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n color: {\r\n type: String,\r\n default: 'inherit'\r\n },\r\n spin: {\r\n type: Boolean,\r\n default: false\r\n },\r\n pulse: {\r\n type: Boolean,\r\n default: false\r\n },\r\n rotate: {\r\n type: Number,\r\n default: 0\r\n },\r\n flip: {\r\n type: String,\r\n default: undefined\r\n },\r\n prefix: {\r\n type: String,\r\n default: 'icon'\r\n }\r\n})\r\n\r\nconst emit = defineEmits(['click'])\r\n\r\n// 计算图标类名\r\nconst iconClass = computed(() => {\r\n const classes = ['iconfont']\r\n \r\n // 添加图标名称类\r\n if (props.name) {\r\n classes.push(`${props.prefix}-${props.name}`)\r\n }\r\n \r\n // 添加动画类\r\n if (props.spin) {\r\n classes.push('icon-spin')\r\n }\r\n if (props.pulse) {\r\n classes.push('icon-pulse')\r\n }\r\n \r\n // 添加翻转类\r\n if (props.flip) {\r\n classes.push(`icon-flip-${props.flip}`)\r\n }\r\n \r\n return classes\r\n})\r\n\r\n// 计算图标样式\r\nconst iconStyle = computed(() => {\r\n const style = {}\r\n \r\n // 设置大小\r\n if (props.size) {\r\n if (typeof props.size === 'number') {\r\n style.fontSize = `${props.size}px`\r\n } else {\r\n style.fontSize = props.size\r\n }\r\n }\r\n \r\n // 设置颜色\r\n if (props.color) {\r\n style.color = props.color\r\n }\r\n \r\n // 设置旋转\r\n if (props.rotate !== 0) {\r\n style.transform = `rotate(${props.rotate}deg)`\r\n }\r\n \r\n return style\r\n})\r\n\r\n// 点击事件处理\r\nconst handleClick = (event) => {\r\n emit('click', event)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.iconfont {\r\n display: inline-block;\r\n font-style: normal;\r\n vertical-align: baseline;\r\n text-align: center;\r\n text-transform: none;\r\n line-height: 1;\r\n text-rendering: optimizeLegibility;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n/* 旋转动画 */\r\n.icon-spin {\r\n animation: icon-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n/* 脉冲动画 */\r\n.icon-pulse {\r\n animation: icon-pulse 1s ease-in-out infinite;\r\n}\r\n\r\n@keyframes icon-pulse {\r\n 0% {\r\n transform: scale(1);\r\n }\r\n 50% {\r\n transform: scale(1.1);\r\n }\r\n 100% {\r\n transform: scale(1);\r\n }\r\n}\r\n\r\n/* 翻转效果 */\r\n.icon-flip-horizontal {\r\n transform: scaleX(-1);\r\n}\r\n\r\n.icon-flip-vertical {\r\n transform: scaleY(-1);\r\n}\r\n\r\n.icon-flip-both {\r\n transform: scale(-1);\r\n}\r\n\r\n/* 当有旋转时,需要与翻转效果结合 */\r\n.icon-spin.icon-flip-horizontal {\r\n animation: icon-spin-flip-horizontal 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-vertical {\r\n animation: icon-spin-flip-vertical 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-both {\r\n animation: icon-spin-flip-both 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin-flip-horizontal {\r\n from {\r\n transform: rotate(0deg) scaleX(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scaleX(-1);\r\n }\r\n}\r\n\r\n@keyframes icon-spin-flip-vertical {\r\n from {\r\n transform: rotate(0deg) scaleY(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scaleY(-1);\r\n }\r\n}\r\n\r\n@keyframes icon-spin-flip-both {\r\n from {\r\n transform: rotate(0deg) scale(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scale(-1);\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-button v-bind=\"$attrs\" class=\"m-button\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-button>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MButton'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// Button 组件样式 - 使用高优先级选择器确保不被全局样式覆盖\r\n\r\n</style>","<template>\r\n <el-card v-bind=\"$attrs\" class=\"m-card\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-card>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MCard'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Card 组件样式 - 使用 m-card 类名隔离样式\r\n.m-card {\r\n // 自定义样式可以在这里添加\r\n}\r\n</style>","<template>\r\n <el-input v-bind=\"$attrs\" class=\"m-input\" :class=\"{ solid: $attrs.styleType === 'solid' }\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-input>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MInput'\r\n})\r\n</script>\r\n<style lang=\"scss\">\r\n// Input 组件样式 - 使用更具体的选择器确保样式优先级\r\n.m-input.el-input {\r\n &.solid {\r\n --el-border-color: var(--bg-tertiary-hover);\r\n \r\n .el-input__wrapper {\r\n background: var(--all-alphe-white-6);\r\n }\r\n }\r\n}\r\n</style>","<template>\r\n <el-form v-bind=\"$attrs\" class=\"m-form\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-form>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MForm'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\r\n</style>","<template>\r\n <el-form-item v-bind=\"$attrs\" class=\"m-form-item\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-form-item>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MFormItem'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// FormItem 组件样式 - 使用 m-form-item 类名隔离样式\r\n.m-form-item {\r\n // 自定义样式可以在这里添加\r\n}\r\n</style>","/**\r\n * 类名装饰器方法\r\n * @param {...(string|boolean|undefined|null)} classes - 类名参数\r\n * @returns {string} 合并后的类名字符串\r\n */\r\nexport const classNames = (...classes) => {\r\n return classes.filter(Boolean).join(' ')\r\n}\r\n\r\n/**\r\n * 排除指定属性\r\n * @param {Object} attrs - 原始属性对象\r\n * @param {...string} excludeKeys - 要排除的属性名\r\n * @returns {Object} 排除指定属性后的新对象\r\n */\r\nexport const excludeAttrs = (attrs, ...excludeKeys) => {\r\n const result = { ...attrs }\r\n excludeKeys.forEach(key => {\r\n delete result[key]\r\n })\r\n return result\r\n}\r\n\r\n","import { computed, useAttrs } from 'vue'\r\nimport { classNames, excludeAttrs } from '@packages/utils/classNames.js'\r\n\r\n/**\r\n * 类名 Hook\r\n * @param {string} defaultClass - 默认的类名\r\n * @param {string} excludeKey - 要排除的属性名,默认为 'popperClass'\r\n * @returns {Object} 包含 mergedAttrs 和 className 的对象\r\n */\r\nexport function useClassName(defaultClass, excludeKey = 'popperClass') {\r\n const attrs = useAttrs()\r\n \r\n // 排除指定属性\r\n const mergedAttrs = computed(() => excludeAttrs(attrs, excludeKey))\r\n \r\n // 计算类名\r\n const className = computed(() => classNames(defaultClass, attrs[excludeKey]))\r\n \r\n return {\r\n mergedAttrs,\r\n className\r\n }\r\n}\r\n","<template>\r\n <el-tooltip v-bind=\"mergedAttrs\" :popper-class=\"popperClass\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-tooltip>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MTooltip'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-tooltip-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-tooltip-popper {\r\n &.is-dark {\r\n color: #fff !important;\r\n background-color: var(--all-gray-6) !important;\r\n border-color: var(--all-gray-6) !important;\r\n .el-popper__arrow::before{\r\n background-color: var(--all-gray-6) !important;\r\n border-color: var(--all-gray-6) !important;\r\n }\r\n }\r\n \r\n &.is-light {\r\n color: #606266 !important;\r\n background-color: #fff !important;\r\n border: 1px solid #e4e7ed !important;\r\n \r\n .el-popper__arrow::before {\r\n background-color: #fff !important;\r\n border-color: #fff !important;\r\n }\r\n }\r\n}\r\n\r\n:deep(.el-popper) {\r\n &.is-light {\r\n background: var(--bg-tertiary-hover);\r\n border-color: var(--border-primary);\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-select\r\n class=\"m-select2\"\r\n :class=\"{ solid: $attrs.styleType === 'solid' }\"\r\n :show-arrow=\"false\"\r\n v-bind=\"$attrs\"\r\n >\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MSelect\",\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\r\n</style>\r\n","<template>\r\n <el-option v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-option>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MOption'\r\n})\r\n</script>\r\n","<template>\r\n <el-option-group v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-option-group>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MOptionGroup'\r\n})\r\n</script>\r\n","\r\n<template>\r\n <el-pagination v-bind=\"$attrs\" class=\"m-pagination\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-pagination>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MPagination'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.m-pagination {\r\n &.is-background .el-pager li.is-active{\r\n color: var(--text-quaternary) !important;\r\n }\r\n}\r\n</style>\r\n\r\n","<template>\r\n <el-radio v-bind=\"mergedAttrs\" class=\"m-radio\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MRadio'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Radio popper-class 样式\r\n// .mc-radio-popper {\r\n// 自定义单选框样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-radio-custom {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #667eea;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-success {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #67c23a;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-warning {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #e6a23c;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-danger {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #f56c6c;\r\n font-weight: 500;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-radio-group v-bind=\"mergedAttrs\" :popper-class=\"computedPopperClass\" class=\"m-radio-group\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio-group>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n name: 'MRadioGroup'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 获取attrs\r\nconst attrs = useAttrs()\r\n\r\n// 计算popper-class,合并默认类名和外部传入的类名\r\nconst computedPopperClass = computed(() => {\r\n const defaultPopperClass = 'mc-radio-group-popper'\r\n \r\n if (attrs.popperClass) {\r\n return `${defaultPopperClass} ${attrs.popperClass}`.trim()\r\n }\r\n \r\n return defaultPopperClass\r\n})\r\n\r\n// 合并其他属性(排除popperClass)\r\nconst mergedAttrs = computed(() => {\r\n const { popperClass, ...otherAttrs } = attrs\r\n return otherAttrs\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioGroup popper-class 样式\r\n.mc-radio-group-popper {\r\n // 自定义单选框组样式可以在这里添加\r\n}\r\n\r\n// 自定义主题示例\r\n.mc-radio-group-custom {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #667eea;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-success {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #67c23a;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-warning {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #e6a23c;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-danger {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #f56c6c;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-radio-button v-bind=\"mergedAttrs\" class=\"m-radio-button\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio-button>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MRadioButton'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-button-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioButton popper-class 样式\r\n// .mc-radio-button-popper {\r\n// 自定义单选框按钮样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-radio-button-custom {\r\n .el-radio-button__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n color: white;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n box-shadow: -1px 0 0 0 #4c63d2;\r\n }\r\n}\r\n\r\n.mc-radio-button-success {\r\n .el-radio-button__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n box-shadow: -1px 0 0 0 #529b2e;\r\n }\r\n}\r\n\r\n.mc-radio-button-warning {\r\n .el-radio-button__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n box-shadow: -1px 0 0 0 #c8951f;\r\n }\r\n}\r\n\r\n.mc-radio-button-danger {\r\n .el-radio-button__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n box-shadow: -1px 0 0 0 #f24545;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-switch v-bind=\"mergedAttrs\" :popper-class=\"popperClass\" class=\"m-switch\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-switch>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MSwitch'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-switch-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Switch popper-class 样式\r\n// .mc-switch-popper {\r\n// 自定义开关样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-switch-custom {\r\n .el-switch__core {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n}\r\n\r\n.mc-switch-success {\r\n .el-switch__core {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n}\r\n\r\n.mc-switch-warning {\r\n .el-switch__core {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n}\r\n\r\n.mc-switch-danger {\r\n .el-switch__core {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n}\r\n\r\n// 特殊样式变体\r\n.mc-switch-gradient {\r\n .el-switch__core {\r\n background: linear-gradient(90deg, #ff6b6b, #4ecdc4);\r\n border: none;\r\n \r\n &:after {\r\n background: white;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background: linear-gradient(90deg, #4ecdc4, #45b7d1);\r\n }\r\n}\r\n\r\n.mc-switch-neon {\r\n .el-switch__core {\r\n background-color: #1a1a1a;\r\n border: 2px solid #00ffff;\r\n box-shadow: 0 0 10px #00ffff;\r\n \r\n &:after {\r\n background: #00ffff;\r\n box-shadow: 0 0 5px #00ffff;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #00ffff;\r\n border-color: #00ffff;\r\n box-shadow: 0 0 15px #00ffff;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-tag v-bind=\"$attrs\" class=\"m-tag\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-tag>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MTag'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Tag 组件样式 - 使用 m-tag 类名隔离样式\r\n.m-tag.el-tag {\r\n // 自定义样式可以在这里添加\r\n font-size: var(--font-size-text-sm);\r\n --el-tag-border-radius: 8px;\r\n\r\n &.el-tag--primary {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-warning-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-warning-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-warning-primary);\r\n }\r\n &.el-tag--success {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-success-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-success-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-success-primary);\r\n }\r\n &.el-tag--danger {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-error-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-error-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-error-primary);\r\n }\r\n &.el-tag--info {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-primary);\r\n }\r\n &.el-tag--dark{\r\n &.el-tag--warning {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-warning-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--success {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-success-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--danger {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-error-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--info {\r\n --el-tag-bg-color: var(--bg-tertiary-hover);\r\n --el-tag-border-color: transparent;\r\n }\r\n }\r\n}\r\n</style>","<template>\r\n <el-alert v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-alert>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MAlert'\r\n})\r\n</script>\r\n","<template>\r\n <div>\r\n <el-dialog\r\n v-model=\"dialogVisible\"\r\n :width=\"width\"\r\n :title=\"title\"\r\n :draggable=\"draggable\"\r\n :close-on-click-modal=\"closeOnClickModal\"\r\n :center=\"center\"\r\n v-bind=\"$attrs\"\r\n class=\"m-dialog\"\r\n header-class=\"m-header\"\r\n >测试组\r\n <template v-if=\"$slots.header\" #header=\"{ close, titleId, titleClass }\">\r\n <slot name=\"header\" v-bind=\"{ close, titleId, titleClass }\"></slot>\r\n </template>\r\n <slot name=\"default\"></slot>\r\n <template v-if=\"$slots.footer\" #footer class=\"m-footer\">\r\n <slot name=\"footer\"></slot>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n width: {\r\n type: String,\r\n default: '440px'\r\n },\r\n center: {\r\n type: Boolean,\r\n default: true\r\n },\r\n draggable: {\r\n type: Boolean,\r\n default: true\r\n },\r\n closeOnClickModal: {\r\n type: Boolean,\r\n default: false\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\nconst emit = defineEmits(['close'])\r\nconst dialogVisible = defineModel('modelValue', {\r\n type: Boolean,\r\n default: false\r\n})\r\n\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n:deep(.m-dialog) {\r\n --el-dialog-padding-primary:24px;\r\n --el-dialog-title-font-size:24px;\r\n --el-dialog-border-radius:16px;\r\n --el-dialog-bg-color:var(--bg-tertiary);\r\n}\r\n\r\n:deep(.m-header) {\r\n padding-bottom: 24px;\r\n padding-right: 0;\r\n\r\n .el-dialog__title {\r\n line-height: 32px;\r\n font-weight: 600;\r\n color: var(--text-primary);\r\n }\r\n\r\n .el-dialog__headerbtn {\r\n width: 24px;\r\n height: 24px;\r\n right: 22px;\r\n top: 22px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n .el-dialog__close {\r\n font-size: 20px;\r\n color: var(--icon-tertiary);\r\n }\r\n\r\n &:hover{\r\n .el-dialog__close{\r\n color: var(--bg-brand-hover);\r\n }\r\n }\r\n }\r\n}\r\n\r\n:deep(.el-dialog__footer) {\r\n display: flex;\r\n >.el-button{\r\n flex: 1;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-notification v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-notification>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MNotification'\r\n})\r\n</script>\r\n","<template>\r\n <el-date-picker v-bind=\"mergedAttrs\" :popper-class=\"popperClass\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-date-picker>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\";\r\n\r\ndefineOptions({\r\n name: \"MDatePicker\",\r\n});\r\n\r\n// 定义 props,提供默认的 type 值\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: \"\",\r\n },\r\n});\r\n\r\n// 使用类名 Hook,排除 type 和 popperClass 属性\r\nconst { mergedAttrs, className: popperClass } = useClassName(\r\n \"mc-datepicker-popper\",\r\n \"popperClass\"\r\n);\r\n</script>\r\n<style lang=\"scss\">\r\n.mc-datepicker-popper {\r\n .el-picker-panel {\r\n border: 1px solid var(--border-primary);\r\n border-radius: 6px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n .current,\r\n .today:not(.in-range),\r\n .start-date,\r\n .end-date {\r\n .el-date-table-cell {\r\n .el-date-table-cell__text {\r\n color: var(--text-quaternary);\r\n border-radius: 3px;\r\n }\r\n }\r\n }\r\n\r\n .start-date {\r\n .el-date-table-cell {\r\n border-top-left-radius: 3px;\r\n border-bottom-left-radius: 3px;\r\n }\r\n }\r\n\r\n .end-date {\r\n .el-date-table-cell {\r\n border-top-right-radius: 3px;\r\n border-bottom-right-radius: 3px;\r\n }\r\n }\r\n\r\n .el-button.is-text {\r\n color: var(--text-brand);\r\n }\r\n .el-button.is-plain {\r\n background: var(--bg-brand);\r\n color: var(--text-quaternary);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-empty v-bind=\"mergedAttrs\" :image=\"imageUrl\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-empty>\r\n</template>\r\n\r\n<script>\r\n// 定义可选的图片文件名(在模块作用域中)\r\nconst availableImages = [\r\n '404',\r\n 'billing', \r\n 'cart',\r\n 'comments',\r\n 'dashboard',\r\n 'files',\r\n 'inbox',\r\n 'location',\r\n 'network',\r\n 'notifications',\r\n 'orders',\r\n 'records',\r\n 'session',\r\n 'subscription',\r\n 'todo',\r\n 'wishlist'\r\n]\r\n\r\nexport default {\r\n name: 'MEmpty'\r\n}\r\n</script>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\nconst props = defineProps({\r\n image: {\r\n type: String,\r\n default: 'orders',\r\n validator: (value) => {\r\n // 如果是完整的URL或路径,直接通过验证\r\n if (value.includes('/') || value.includes('http')) {\r\n return true\r\n }\r\n // 否则检查是否在可选列表中\r\n return availableImages.includes(value)\r\n }\r\n }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除 image 属性,避免重复绑定\r\nconst mergedAttrs = computed(() => {\r\n const { image, ...rest } = attrs\r\n return rest\r\n})\r\n\r\n// 计算图片URL\r\nconst imageUrl = computed(() => {\r\n const { image } = props\r\n \r\n // 如果是完整的URL或路径,直接返回\r\n if (image.includes('/') || image.includes('http')) {\r\n return image\r\n }\r\n \r\n // 使用 public 目录中的图片\r\n // Vite 会自动处理 public 目录中的静态资源\r\n return `/images/empty/${image}.png`\r\n})\r\n</script>\r\n","<template>\r\n <el-table v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-table>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MTable\",\r\n});\r\n</script>\r\n<style lang=\"scss\">\r\n// Table 组件样式 - 无边框设计\r\n\r\n</style>\r\n","<template>\r\n <el-table-column v-bind=\"$attrs\" class=\"m-table-column\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-table-column>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MTableColumn\",\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// TableColumn 组件样式\r\n.m-table-column.el-table-column {\r\n // 继承父级 Table 组件的样式\r\n}\r\n</style>\r\n","<template>\r\n <div \r\n v-if=\"visible\" \r\n class=\"m-banner\"\r\n :class=\"[\r\n `m-banner--${type}`,\r\n {\r\n 'm-banner--closable': closable,\r\n 'm-banner--with-icon': icon || slots.icon\r\n }\r\n ]\"\r\n :style=\"bannerStyle\"\r\n >\r\n <div class=\"m-banner__content\">\r\n <!-- 图标插槽 -->\r\n <div v-if=\"icon || slots.icon\" class=\"m-banner__icon\">\r\n <slot name=\"icon\">\r\n <m-icon :name=\"icon\" :size=\"iconSize\" />\r\n </slot>\r\n </div>\r\n \r\n <!-- 主要内容 -->\r\n <div class=\"m-banner__text\">\r\n <slot>{{ content }}</slot>\r\n </div>\r\n \r\n <!-- 关闭按钮 -->\r\n <div v-if=\"closable\" class=\"m-banner__close\" @click=\"handleClose\">\r\n <m-icon name=\"lucide-x\" :size=\"closeIconSize\" />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, useSlots } from 'vue'\r\nimport MIcon from '../Icon/Icon.vue'\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 横幅内容\r\n content: {\r\n type: String,\r\n default: ''\r\n },\r\n // 横幅类型\r\n type: {\r\n type: String,\r\n default: 'info',\r\n validator: (value) => ['info', 'success', 'warning', 'error'].includes(value)\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示\r\n visible: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 图标名称\r\n icon: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图标大小\r\n iconSize: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n // 关闭图标大小\r\n closeIconSize: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n // 自定义背景色\r\n backgroundColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 自定义文字颜色\r\n textColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 自定义边框颜色\r\n borderColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 持续时间(毫秒),0 表示不自动关闭\r\n duration: {\r\n type: Number,\r\n default: 0\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['close', 'update:visible'])\r\n\r\n// 响应式数据\r\nconst internalVisible = ref(props.visible)\r\n\r\n// 监听 visible prop 变化\r\nwatch(() => props.visible, (newVal) => {\r\n internalVisible.value = newVal\r\n})\r\n\r\n// 计算样式\r\nconst bannerStyle = computed(() => {\r\n const style = {}\r\n \r\n if (props.backgroundColor) {\r\n style.backgroundColor = props.backgroundColor\r\n }\r\n if (props.textColor) {\r\n style.color = props.textColor\r\n }\r\n if (props.borderColor) {\r\n style.borderColor = props.borderColor\r\n }\r\n \r\n return style\r\n})\r\n\r\n// 默认图标映射\r\nconst defaultIcons = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n error: 'close-circle'\r\n}\r\n\r\n// 计算实际使用的图标\r\nconst actualIcon = computed(() => {\r\n return props.icon || defaultIcons[props.type]\r\n})\r\n\r\n// 处理关闭\r\nconst handleClose = () => {\r\n internalVisible.value = false\r\n emit('update:visible', false)\r\n emit('close')\r\n}\r\n\r\n// 自动关闭逻辑\r\nwatch(internalVisible, (newVal) => {\r\n if (newVal && props.duration > 0) {\r\n setTimeout(() => {\r\n handleClose()\r\n }, props.duration)\r\n }\r\n})\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: 'MBanner'\r\n})\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n close: handleClose\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-banner {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n min-height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid;\r\n font-size: 14px;\r\n line-height: 1.5;\r\n padding: 10px;\r\n transition: all 0.3s ease;\r\n\r\n &__content {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n flex: 1;\r\n }\r\n\r\n &__icon {\r\n display: flex;\r\n align-items: center;\r\n margin-right: 8px;\r\n flex-shrink: 0;\r\n }\r\n\r\n &__text {\r\n flex: 1;\r\n word-break: break-word;\r\n }\r\n\r\n &__close {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n cursor: pointer;\r\n padding: 4px;\r\n border-radius: 3px;\r\n transition: background-color 0.2s ease;\r\n flex-shrink: 0;\r\n min-width: 20px;\r\n min-height: 20px;\r\n opacity: 0.7;\r\n\r\n &:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n // 类型样式\r\n &--info {\r\n background-color: #e1f3ff;\r\n border-color: #b3d8ff;\r\n color: #0066cc;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(0, 102, 204, 0.1);\r\n }\r\n }\r\n\r\n &--success {\r\n background-color: #f0f9ff;\r\n border-color: #b3e5b3;\r\n color: #00a854;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(0, 168, 84, 0.1);\r\n }\r\n }\r\n\r\n &--warning {\r\n background-color: #fff7e6;\r\n border-color: #ffd591;\r\n color: #fa8c16;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(250, 140, 22, 0.1);\r\n }\r\n }\r\n\r\n &--error {\r\n background-color: #fff2f0;\r\n border-color: #ffccc7;\r\n color: #ff4d4f;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(255, 77, 79, 0.1);\r\n }\r\n }\r\n\r\n // 带动画的关闭\r\n &.m-banner-leave-active {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n transition: opacity 0.3s ease, transform 0.3s ease;\r\n }\r\n}\r\n\r\n// 深色主题适配\r\n@media (prefers-color-scheme: dark) {\r\n .m-banner {\r\n &--info {\r\n background-color: rgba(24, 144, 255, 0.1);\r\n border-color: rgba(24, 144, 255, 0.3);\r\n color: #69c0ff;\r\n }\r\n\r\n &--success {\r\n background-color: rgba(82, 196, 26, 0.1);\r\n border-color: rgba(82, 196, 26, 0.3);\r\n color: #95de64;\r\n }\r\n\r\n &--warning {\r\n background-color: rgba(250, 173, 20, 0.1);\r\n border-color: rgba(250, 173, 20, 0.3);\r\n color: #ffd666;\r\n }\r\n\r\n &--error {\r\n background-color: rgba(255, 77, 79, 0.1);\r\n border-color: rgba(255, 77, 79, 0.3);\r\n color: #ff7875;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"m-tabs\" :class=\"[`m-tabs--${type}`, `m-tabs--${tabPosition}`]\">\r\n <div class=\"m-tabs__header\">\r\n <div class=\"m-tabs__nav\">\r\n <div\r\n v-for=\"(tab, index) in tabs\"\r\n :key=\"tab.name || index\"\r\n :class=\"[\r\n 'm-tabs__item',\r\n {\r\n 'm-tabs__item--active': activeName === (tab.name || index),\r\n 'm-tabs__item--disabled': tab.disabled,\r\n 'm-tabs__item--closable': tab.closable\r\n }\r\n ]\"\r\n @click=\"handleTabClick(tab, index)\"\r\n >\r\n <span class=\"m-tabs__item-text\">\r\n <slot v-if=\"tab.$slots?.label\" :name=\"`tab-${tab.name || index}`\" />\r\n <span v-else>{{ tab.label }}</span>\r\n </span>\r\n <span\r\n v-if=\"tab.closable\"\r\n class=\"m-tabs__item-close\"\r\n @click.stop=\"handleTabClose(tab, index)\"\r\n >\r\n <m-icon name=\"lucide-x\" :size=\"12\" />\r\n </span>\r\n </div>\r\n \r\n <!-- 添加按钮 -->\r\n <div\r\n v-if=\"addable || editable\"\r\n class=\"m-tabs__item m-tabs__item--add\"\r\n @click=\"handleTabAdd\"\r\n >\r\n <m-icon name=\"plus\" :size=\"12\" />\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"m-tabs__content\">\r\n <slot />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, provide, computed, useSlots, watch, nextTick } from 'vue'\r\nimport MIcon from '../Icon/Icon.vue'\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 当前激活的标签页\r\n modelValue: {\r\n type: [String, Number],\r\n default: ''\r\n },\r\n // 标签页类型\r\n type: {\r\n type: String,\r\n default: '',\r\n validator: (value) => ['', 'card', 'border-card'].includes(value)\r\n },\r\n // 标签位置\r\n tabPosition: {\r\n type: String,\r\n default: 'top',\r\n validator: (value) => ['top', 'right', 'bottom', 'left'].includes(value)\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否可添加\r\n addable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否可编辑(同时可添加和关闭)\r\n editable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 标签宽度是否自撑开\r\n stretch: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 切换前的钩子函数\r\n beforeLeave: {\r\n type: Function,\r\n default: null\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['update:modelValue', 'tab-click', 'tab-change', 'tab-remove', 'tab-add', 'edit'])\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 响应式数据\r\nconst tabs = ref([])\r\nconst activeName = ref(props.modelValue)\r\n\r\n// 监听 modelValue 变化\r\nwatch(() => props.modelValue, (newVal) => {\r\n activeName.value = newVal\r\n})\r\n\r\n// 监听 activeName 变化\r\nwatch(activeName, (newVal) => {\r\n emit('update:modelValue', newVal)\r\n emit('tab-change', newVal)\r\n})\r\n\r\n// 提供上下文给子组件\r\nprovide('tabsContext', {\r\n registerTab: (tab) => {\r\n const index = tabs.value.findIndex(t => t.name === tab.name)\r\n if (index >= 0) {\r\n tabs.value[index] = tab\r\n } else {\r\n tabs.value.push(tab)\r\n }\r\n \r\n // 如果没有指定 activeName,默认选中第一个\r\n if (!activeName.value && tabs.value.length > 0) {\r\n activeName.value = tabs.value[0].name || 0\r\n }\r\n },\r\n unregisterTab: (name) => {\r\n const index = tabs.value.findIndex(tab => tab.name === name)\r\n if (index >= 0) {\r\n tabs.value.splice(index, 1)\r\n }\r\n }\r\n})\r\n\r\n// 处理标签点击\r\nconst handleTabClick = async (tab, index) => {\r\n if (tab.disabled) return\r\n \r\n const tabName = tab.name || index\r\n \r\n // 如果点击的是当前激活的标签,直接返回\r\n if (activeName.value === tabName) return\r\n \r\n // 执行 beforeLeave 钩子\r\n if (props.beforeLeave) {\r\n try {\r\n const result = await props.beforeLeave(activeName.value, tabName)\r\n if (result === false) return\r\n } catch (error) {\r\n return\r\n }\r\n }\r\n \r\n activeName.value = tabName\r\n emit('tab-click', { name: tabName, index, disabled: tab.disabled })\r\n}\r\n\r\n// 处理标签关闭\r\nconst handleTabClose = (tab, index) => {\r\n const tabName = tab.name || index\r\n emit('tab-remove', tabName)\r\n emit('edit', tabName, 'remove')\r\n}\r\n\r\n// 处理添加标签\r\nconst handleTabAdd = () => {\r\n emit('tab-add')\r\n emit('edit', '', 'add')\r\n}\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n activeName: computed(() => activeName.value)\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-tabs {\r\n display: flex;\r\n flex-direction: column;\r\n \r\n &--left {\r\n flex-direction: row;\r\n }\r\n \r\n &--right {\r\n flex-direction: row-reverse;\r\n }\r\n \r\n &--bottom {\r\n flex-direction: column-reverse;\r\n }\r\n\r\n &__header {\r\n flex-shrink: 0;\r\n }\r\n\r\n &__nav {\r\n display: flex;\r\n border-bottom: 1px solid var(--el-border-color);\r\n position: relative;\r\n \r\n .m-tabs--card &,\r\n .m-tabs--border-card & {\r\n border-bottom: none;\r\n }\r\n \r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n flex-direction: column;\r\n border-bottom: none;\r\n border-right: 1px solid var(--el-border-color);\r\n width: 120px;\r\n }\r\n \r\n .m-tabs--right & {\r\n border-right: none;\r\n border-left: 1px solid var(--el-border-color);\r\n }\r\n }\r\n\r\n &__item {\r\n display: flex;\r\n align-items: center;\r\n padding: 8px 16px;\r\n cursor: pointer;\r\n border: 1px solid transparent;\r\n border-bottom: none;\r\n background: transparent;\r\n color: var(--el-text-color-regular);\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n position: relative;\r\n flex-shrink: 0;\r\n \r\n &:hover {\r\n color: var(--el-color-primary);\r\n }\r\n \r\n &--active {\r\n color: var(--el-color-primary);\r\n border-color: var(--el-border-color);\r\n border-bottom-color: var(--el-bg-color);\r\n background: var(--el-bg-color);\r\n \r\n &::after {\r\n content: '';\r\n position: absolute;\r\n bottom: -1px;\r\n left: 0;\r\n right: 0;\r\n height: 2px;\r\n background: var(--el-color-primary);\r\n }\r\n }\r\n \r\n &--disabled {\r\n color: var(--el-text-color-disabled);\r\n cursor: not-allowed;\r\n \r\n &:hover {\r\n color: var(--el-text-color-disabled);\r\n }\r\n }\r\n \r\n &--closable {\r\n padding-right: 24px;\r\n }\r\n \r\n &--add {\r\n padding: 8px 12px;\r\n border: 1px dashed var(--el-border-color);\r\n color: var(--el-text-color-regular);\r\n \r\n &:hover {\r\n color: var(--el-color-primary);\r\n border-color: var(--el-color-primary);\r\n }\r\n }\r\n \r\n // 卡片风格\r\n .m-tabs--card & {\r\n border: 1px solid var(--el-border-color);\r\n border-bottom: none;\r\n margin-right: 2px;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-bg-color);\r\n background: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n // 边框卡片风格\r\n .m-tabs--border-card & {\r\n border: 1px solid var(--el-border-color);\r\n border-bottom: none;\r\n margin-right: -1px;\r\n background: var(--el-fill-color-light);\r\n \r\n &--active {\r\n background: var(--el-bg-color);\r\n border-bottom-color: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n // 左侧和右侧位置\r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n border-bottom: 1px solid var(--el-border-color);\r\n border-right: none;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-border-color);\r\n border-right-color: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n .m-tabs--right & {\r\n border-bottom: 1px solid var(--el-border-color);\r\n border-left: none;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-border-color);\r\n border-left-color: var(--el-bg-color);\r\n }\r\n }\r\n }\r\n\r\n &__item-text {\r\n flex: 1;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n &__item-close {\r\n position: absolute;\r\n right: 8px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 50%;\r\n transition: background-color 0.2s ease;\r\n \r\n &:hover {\r\n background-color: var(--el-fill-color);\r\n }\r\n }\r\n\r\n &__content {\r\n flex: 1;\r\n padding: 16px 0;\r\n \r\n .m-tabs--card &,\r\n .m-tabs--border-card & {\r\n padding: 16px;\r\n border: 1px solid var(--el-border-color);\r\n border-top: none;\r\n }\r\n \r\n .m-tabs--border-card & {\r\n background: var(--el-bg-color);\r\n }\r\n \r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n flex: 1;\r\n padding: 0 0 0 16px;\r\n }\r\n \r\n .m-tabs--right & {\r\n padding: 0 16px 0 0;\r\n }\r\n }\r\n}\r\n\r\n// 响应式设计\r\n@media (max-width: 768px) {\r\n .m-tabs {\r\n &__item {\r\n padding: 6px 12px;\r\n font-size: 13px;\r\n }\r\n \r\n &--left &__nav,\r\n &--right &__nav {\r\n width: 100px;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div\r\n v-show=\"active\"\r\n class=\"m-tab-pane\"\r\n :class=\"{\r\n 'm-tab-pane--active': active,\r\n 'm-tab-pane--disabled': disabled\r\n }\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { inject, computed, onMounted, onUnmounted, useSlots } from 'vue'\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 选项卡标题\r\n label: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否禁用\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 选项卡名称,用于标识\r\n name: {\r\n type: [String, Number],\r\n default: ''\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否延迟渲染\r\n lazy: {\r\n type: Boolean,\r\n default: false\r\n }\r\n})\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 注入父组件上下文\r\nconst tabsContext = inject('tabsContext')\r\n\r\n// 计算是否激活\r\nconst active = computed(() => {\r\n if (!tabsContext) return false\r\n return tabsContext.activeName === (props.name || tabsContext.tabIndex)\r\n})\r\n\r\n// 组件挂载时注册到父组件\r\nonMounted(() => {\r\n if (tabsContext) {\r\n const tabData = {\r\n name: props.name,\r\n label: props.label,\r\n disabled: props.disabled,\r\n closable: props.closable,\r\n $slots: slots\r\n }\r\n tabsContext.registerTab(tabData)\r\n }\r\n})\r\n\r\n// 组件卸载时从父组件中移除\r\nonUnmounted(() => {\r\n if (tabsContext) {\r\n tabsContext.unregisterTab(props.name)\r\n }\r\n})\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: 'MTabPane'\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-tab-pane {\r\n display: none;\r\n \r\n &--active {\r\n display: block;\r\n }\r\n \r\n &--disabled {\r\n opacity: 0.6;\r\n pointer-events: none;\r\n }\r\n}\r\n</style>\r\n","/**\r\n * 样式工具函数\r\n * 用于确保组件样式完全覆盖 Element Plus\r\n */\r\n\r\n/**\r\n * 为元素添加高优先级样式类\r\n * @param {HTMLElement} element - 目标元素\r\n */\r\nexport function addOverrideClass(element) {\r\n if (element && element.classList) {\r\n element.classList.add('mc-ui-override');\r\n }\r\n}\r\n\r\n/**\r\n * 为 Vue 组件实例添加覆盖样式\r\n * @param {Object} componentInstance - Vue 组件实例\r\n */\r\nexport function addComponentOverride(componentInstance) {\r\n if (componentInstance && componentInstance.$el) {\r\n addOverrideClass(componentInstance.$el);\r\n }\r\n}\r\n\r\n/**\r\n * 全局应用样式覆盖\r\n * 在应用启动时调用,确保所有 Element Plus 组件都被覆盖\r\n */\r\nexport function applyGlobalOverride() {\r\n // 为 body 添加覆盖类\r\n if (typeof document !== 'undefined') {\r\n document.body.classList.add('mc-ui-override');\r\n \r\n // 监听动态添加的 Element Plus 组件\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === 1 && node.classList) {\r\n // 为新添加的 Element Plus 组件添加覆盖类\r\n if (node.className && node.className.includes('el-')) {\r\n const parent = node.closest('.mc-ui-override') || node.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n }\r\n \r\n // 检查子元素\r\n const elComponents = node.querySelectorAll('[class*=\"el-\"]');\r\n elComponents.forEach(el => {\r\n const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n });\r\n }\r\n });\r\n });\r\n });\r\n \r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * 强制刷新组件样式\r\n * @param {string} selector - CSS 选择器\r\n */\r\nexport function forceRefreshStyles(selector = '[class*=\"el-\"]') {\r\n if (typeof document !== 'undefined') {\r\n const elements = document.querySelectorAll(selector);\r\n elements.forEach(el => {\r\n const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * 创建带有样式覆盖的 Element Plus 组件配置\r\n * @param {Object} componentConfig - 组件配置\r\n * @returns {Object} 增强后的组件配置\r\n */\r\nexport function createOverrideComponent(componentConfig) {\r\n return {\r\n ...componentConfig,\r\n mounted() {\r\n addOverrideClass(this.$el);\r\n if (componentConfig.mounted) {\r\n componentConfig.mounted.call(this);\r\n }\r\n },\r\n updated() {\r\n addOverrideClass(this.$el);\r\n if (componentConfig.updated) {\r\n componentConfig.updated.call(this);\r\n }\r\n }\r\n };\r\n}\r\n","/**\r\n * @mc-markets/ui - 自定义组件库\r\n * \r\n * 提供自定义组件和工具函数\r\n * 支持 Element Plus 组件回退机制\r\n * 将 Element Plus 组件前缀从 el- 转换为 m- 并导出\r\n * 导出 Element Plus 事件相关功能(Message、MessageBox、Notification、Loading 等)\r\n * \r\n * @version 1.0.67\n */\r\n\r\nimport * as ElementPlusComponents from 'element-plus'\r\n// 导入样式文件\r\nimport MIcon from './components/Icon/Icon.vue'\r\nimport MButton from './components/Button/Button.vue'\r\nimport MCard from './components/Card/Card.vue'\r\nimport MInput from './components/Input/Input.vue'\r\nimport MForm from './components/Form/Form.vue'\r\nimport MFormItem from './components/FormItem/FormItem.vue'\r\nimport MTooltip from './components/Tooltip/Tooltip.vue'\r\nimport MSelect from './components/Select/Select.vue'\r\nimport MOption from './components/Option/Option.vue'\r\nimport MOptionGroup from './components/OptionGroup/OptionGroup.vue'\r\nimport MPagination from './components/Pagination/Pagination.vue'\r\nimport MRadio from './components/Radio/Radio.vue'\r\nimport MRadioGroup from './components/RadioGroup/RadioGroup.vue'\r\nimport MRadioButton from './components/RadioButton/RadioButton.vue'\r\nimport MSwitch from './components/Switch/Switch.vue'\r\nimport MTag from './components/Tag/Tag.vue'\r\nimport MAlert from './components/Alert/Alert.vue'\r\nimport MDialog from './components/Dialog/Dialog.vue'\r\nimport MNotification from './components/Notification/Notification.vue'\r\nimport MDatePicker from './components/DatePicker/DatePicker.vue'\r\nimport MEmpty from './components/Empty/Empty.vue'\r\nimport MTable from './components/Table/Table.vue'\r\nimport MTableColumn from './components/Table/TableColumn.vue'\r\nimport MBanner from './components/Banner/Banner.vue'\r\nimport MTabs from './components/Tabs/Tabs.vue'\r\nimport MTabPane from './components/Tabs/TabPane.vue'\r\n\r\nconst components = [MIcon, MButton, MCard, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane]\r\n\r\n// 存储转换后的 Element Plus 组件\r\nconst convertedComponents = {}\r\n\r\nfunction registerElementPlus(app) {\r\n // 获取已注册的自定义组件名称\r\n const customComponentNames = components.map(comp => {\r\n if (comp && comp.name && typeof comp.name === 'string') {\r\n let name = comp.name.toLowerCase()\r\n const nameMap = {\r\n 'mradiogroup': 'm-radio-group',\r\n 'mradiobutton': 'm-radio-button',\r\n 'mformitem': 'm-form-item',\r\n 'moptiongroup': 'm-option-group'\r\n }\r\n return nameMap[name] || name.replace(/^m/, 'm-')\r\n }\r\n return null\r\n }).filter(Boolean)\r\n \r\n Object.entries(ElementPlusComponents).forEach(([key, comp]) => {\r\n if (comp && comp.name && typeof comp.name === 'string' && comp.name.startsWith('El')) {\r\n // 将 ElOptionGroup 转换为 m-option-group\r\n const mName = 'm-' + comp.name.slice(2).replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '')\r\n \r\n // 只注册没有被自定义组件覆盖的Element Plus组件\r\n if (!customComponentNames.includes(mName)) {\r\n // 检查组件是否已经注册,避免重复注册警告\r\n if (!app._context.components[mName]) {\r\n app.component(mName, comp)\r\n }\r\n }\r\n \r\n // 存储转换后的组件用于导出\r\n const exportName = 'M' + comp.name.slice(2) // ElButton -> MButton\r\n convertedComponents[exportName] = comp\r\n }\r\n })\r\n}\r\n\r\nconst install = (app) => {\r\n // 应用全局样式覆盖\r\n if (typeof window !== 'undefined') {\r\n import('./utils/styleUtils.js').then(({ applyGlobalOverride }) => {\r\n applyGlobalOverride();\r\n });\r\n }\r\n \r\n // 先注册自定义组件\r\n components.forEach(component => {\r\n if (component && component.name && typeof component.name === 'string') {\r\n let name = component.name.toLowerCase()\r\n // 处理特定的组件名称映射\r\n const nameMap = {\r\n 'mradiogroup': 'm-radio-group',\r\n 'mradiobutton': 'm-radio-button',\r\n 'mformitem': 'm-form-item',\r\n 'moptiongroup': 'm-option-group'\r\n }\r\n name = nameMap[name] || name.replace(/^m/, 'm-')\r\n \r\n // 直接注册自定义组件,覆盖Element Plus组件\r\n app.component(name, component)\r\n }\r\n })\r\n \r\n // 然后注册转换后的 Element Plus 组件(只注册没有自定义组件覆盖的)\r\n registerElementPlus(app)\r\n}\r\n\r\nexport default { install }\r\nexport { MIcon, MButton, MCard, MInput, MForm, MFormItem, MTooltip, MSelect, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane }\r\n\r\n// 导出样式工具函数\r\nexport { \r\n addOverrideClass, \r\n addComponentOverride, \r\n applyGlobalOverride, \r\n forceRefreshStyles,\r\n createOverrideComponent \r\n} from './utils/styleUtils.js'\r\n\r\n// 手动导出常用的 Element Plus 函数(只导出函数,不导出组件)\r\nexport const MMessage = ElementPlusComponents.ElMessage\r\nexport const MMessageBox = ElementPlusComponents.ElMessageBox\r\n\r\n// 导出转换后的 Element Plus 组件\r\nexport const mComponents = { ...convertedComponents }\r\n\r\n// 导出常用的 Element Plus 组件\r\nexport const MButtonGroup = convertedComponents.MButtonGroup\r\nexport const MBreadcrumb = convertedComponents.MBreadcrumb\r\nexport const MBreadcrumbItem = convertedComponents.MBreadcrumbItem\r\nexport const MCarousel = convertedComponents.MCarousel\r\nexport const MCarouselItem = convertedComponents.MCarouselItem\r\nexport const MCascader = convertedComponents.MCascader\r\nexport const MCascaderPanel = convertedComponents.MCascaderPanel\r\nexport const MCheckTag = convertedComponents.MCheckTag\r\nexport const MCalendar = convertedComponents.MCalendar\r\nexport const MTimePicker = convertedComponents.MTimePicker\r\nexport const MDateTimePicker = convertedComponents.MDateTimePicker\r\nexport const MColorPicker = convertedComponents.MColorPicker\r\nexport const MTransfer = convertedComponents.MTransfer\r\nexport const MTree = convertedComponents.MTree\r\nexport const MTreeSelect = convertedComponents.MTreeSelect\r\nexport const MUpload = convertedComponents.MUpload\r\nexport const MImage = convertedComponents.MImage\r\nexport const MImageViewer = convertedComponents.MImageViewer\r\nexport const MBacktop = convertedComponents.MBacktop\r\nexport const MInfiniteScroll = convertedComponents.MInfiniteScroll\r\nexport const MAffix = convertedComponents.MAffix\r\nexport const MScrollbar = convertedComponents.MScrollbar\r\nexport const MResult = convertedComponents.MResult\r\nexport const MSkeleton = convertedComponents.MSkeleton\r\nexport const MLoading = convertedComponents.MLoading\r\nexport const MSpinner = convertedComponents.MSpinner\r\nexport const MProgress = convertedComponents.MProgress\r\nexport const MBadge = convertedComponents.MBadge\r\nexport const MAvatar = convertedComponents.MAvatar\r\nexport const MImagePreview = convertedComponents.MImagePreview\r\nexport const MTeleport = convertedComponents.MTeleport\r\nexport const MConfigProvider = convertedComponents.MConfigProvider\r\n"],"names":["props","__props","emit","__emit","iconClass","computed","classes","iconStyle","style","handleClick","event","_openBlock","_createElementBlock","_mergeProps","_createBlock","_component_el_button","_ctx","_createSlots","_renderSlot","name","_component_el_card","_component_el_form","_component_el_form_item","classNames","excludeAttrs","attrs","excludeKeys","result","__spreadValues","key","useClassName","defaultClass","excludeKey","useAttrs","mergedAttrs","className","popperClass","_component_el_tooltip","_unref","_component_el_select","_component_el_option","_normalizeProps","_guardReactiveProps","_component_el_option_group","_component_el_pagination","_component_el_radio","computedPopperClass","defaultPopperClass","_a","__objRest","_component_el_radio_button","_component_el_tag","_component_el_alert","dialogVisible","_useModel","_createVNode","_component_el_dialog","$slots","_withCtx","close","titleId","titleClass","_component_el_notification","_component_el_date_picker","availableImages","__default__","image","imageUrl","_component_el_empty","_component_el_table","_component_el_table_column","slots","useSlots","internalVisible","ref","watch","newVal","bannerStyle","defaultIcons","handleClose","__expose","_normalizeClass","_normalizeStyle","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","tabs","activeName","provide","tab","index","t","handleTabClick","__async","tabName","error","handleTabClose","handleTabAdd","_Fragment","_renderList","$event","_hoisted_4","_withModifiers","_hoisted_7","tabsContext","inject","active","onMounted","tabData","onUnmounted","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","forceRefreshStyles","selector","createOverrideComponent","componentConfig","__spreadProps","components","MIcon","MButton","MCard","MInput","MForm","MFormItem","MTooltip","MSelect","MOption","MOptionGroup","MPagination","MRadio","MRadioGroup","MRadioButton","MSwitch","MTag","MAlert","MDialog","MNotification","MDatePicker","MEmpty","MTable","MTableColumn","MBanner","MTabs","MTabPane","convertedComponents","registerElementPlus","app","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","component","MMessage","MMessageBox","mComponents","MButtonGroup","MBreadcrumb","MBreadcrumbItem","MCarousel","MCarouselItem","MCascader","MCascaderPanel","MCheckTag","MCalendar","MTimePicker","MDateTimePicker","MColorPicker","MTransfer","MTree","MTreeSelect","MUpload","MImage","MImageViewer","MBacktop","MInfiniteScroll","MAffix","MScrollbar","MResult","MSkeleton","MLoading","MSpinner","MProgress","MBadge","MAvatar","MImagePreview","MTeleport","MConfigProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../packages/components/Icon/Icon.vue","../packages/components/Button/Button.vue","../packages/components/Card/Card.vue","../packages/components/Input/Input.vue","../packages/components/Form/Form.vue","../packages/components/FormItem/FormItem.vue","../packages/utils/classNames.js","../packages/hooks/useClassName.js","../packages/components/Tooltip/Tooltip.vue","../packages/components/Select/Select.vue","../packages/components/Option/Option.vue","../packages/components/OptionGroup/OptionGroup.vue","../packages/components/Pagination/Pagination.vue","../packages/components/Radio/Radio.vue","../packages/components/RadioGroup/RadioGroup.vue","../packages/components/RadioButton/RadioButton.vue","../packages/components/Switch/Switch.vue","../packages/components/Tag/Tag.vue","../packages/components/Alert/Alert.vue","../packages/components/Dialog/Dialog.vue","../packages/components/Notification/Notification.vue","../packages/components/DatePicker/DatePicker.vue","../packages/components/Empty/Empty.vue","../packages/components/Table/Table.vue","../packages/components/Table/TableColumn.vue","../packages/components/Banner/Banner.vue","../packages/components/Tabs/Tabs.vue","../packages/components/Tabs/TabPane.vue","../packages/utils/styleUtils.js","../packages/index.js"],"sourcesContent":["<template>\r\n <i \r\n :class=\"iconClass\" \r\n :style=\"iconStyle\"\r\n v-bind=\"$attrs\"\r\n @click=\"handleClick\"\r\n >\r\n <slot></slot>\r\n </i>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\n\r\n// 定义组件名\r\ndefineOptions({\r\n name: 'MIcon'\r\n})\r\n\r\nconst props = defineProps({\r\n name: {\r\n type: String,\r\n required: true\r\n },\r\n size: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n color: {\r\n type: String,\r\n default: 'inherit'\r\n },\r\n spin: {\r\n type: Boolean,\r\n default: false\r\n },\r\n pulse: {\r\n type: Boolean,\r\n default: false\r\n },\r\n rotate: {\r\n type: Number,\r\n default: 0\r\n },\r\n flip: {\r\n type: String,\r\n default: undefined\r\n },\r\n prefix: {\r\n type: String,\r\n default: 'icon'\r\n }\r\n})\r\n\r\nconst emit = defineEmits(['click'])\r\n\r\n// 计算图标类名\r\nconst iconClass = computed(() => {\r\n const classes = ['iconfont']\r\n \r\n // 添加图标名称类\r\n if (props.name) {\r\n classes.push(`${props.prefix}-${props.name}`)\r\n }\r\n \r\n // 添加动画类\r\n if (props.spin) {\r\n classes.push('icon-spin')\r\n }\r\n if (props.pulse) {\r\n classes.push('icon-pulse')\r\n }\r\n \r\n // 添加翻转类\r\n if (props.flip) {\r\n classes.push(`icon-flip-${props.flip}`)\r\n }\r\n \r\n return classes\r\n})\r\n\r\n// 计算图标样式\r\nconst iconStyle = computed(() => {\r\n const style = {}\r\n \r\n // 设置大小\r\n if (props.size) {\r\n if (typeof props.size === 'number') {\r\n style.fontSize = `${props.size}px`\r\n } else {\r\n style.fontSize = props.size\r\n }\r\n }\r\n \r\n // 设置颜色\r\n if (props.color) {\r\n style.color = props.color\r\n }\r\n \r\n // 设置旋转\r\n if (props.rotate !== 0) {\r\n style.transform = `rotate(${props.rotate}deg)`\r\n }\r\n \r\n return style\r\n})\r\n\r\n// 点击事件处理\r\nconst handleClick = (event) => {\r\n emit('click', event)\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.iconfont {\r\n display: inline-block;\r\n font-style: normal;\r\n vertical-align: baseline;\r\n text-align: center;\r\n text-transform: none;\r\n line-height: 1;\r\n text-rendering: optimizeLegibility;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n/* 旋转动画 */\r\n.icon-spin {\r\n animation: icon-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n/* 脉冲动画 */\r\n.icon-pulse {\r\n animation: icon-pulse 1s ease-in-out infinite;\r\n}\r\n\r\n@keyframes icon-pulse {\r\n 0% {\r\n transform: scale(1);\r\n }\r\n 50% {\r\n transform: scale(1.1);\r\n }\r\n 100% {\r\n transform: scale(1);\r\n }\r\n}\r\n\r\n/* 翻转效果 */\r\n.icon-flip-horizontal {\r\n transform: scaleX(-1);\r\n}\r\n\r\n.icon-flip-vertical {\r\n transform: scaleY(-1);\r\n}\r\n\r\n.icon-flip-both {\r\n transform: scale(-1);\r\n}\r\n\r\n/* 当有旋转时,需要与翻转效果结合 */\r\n.icon-spin.icon-flip-horizontal {\r\n animation: icon-spin-flip-horizontal 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-vertical {\r\n animation: icon-spin-flip-vertical 1s linear infinite;\r\n}\r\n\r\n.icon-spin.icon-flip-both {\r\n animation: icon-spin-flip-both 1s linear infinite;\r\n}\r\n\r\n@keyframes icon-spin-flip-horizontal {\r\n from {\r\n transform: rotate(0deg) scaleX(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scaleX(-1);\r\n }\r\n}\r\n\r\n@keyframes icon-spin-flip-vertical {\r\n from {\r\n transform: rotate(0deg) scaleY(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scaleY(-1);\r\n }\r\n}\r\n\r\n@keyframes icon-spin-flip-both {\r\n from {\r\n transform: rotate(0deg) scale(-1);\r\n }\r\n to {\r\n transform: rotate(360deg) scale(-1);\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-button v-bind=\"$attrs\" class=\"m-button\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-button>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MButton'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n// Button 组件样式 - 使用高优先级选择器确保不被全局样式覆盖\r\n\r\n</style>","<template>\r\n <el-card v-bind=\"$attrs\" class=\"m-card\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-card>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MCard'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Card 组件样式 - 使用 m-card 类名隔离样式\r\n.m-card {\r\n // 自定义样式可以在这里添加\r\n}\r\n</style>","<template>\r\n <el-input v-bind=\"$attrs\" class=\"m-input\" :class=\"{ solid: $attrs.styleType === 'solid' }\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-input>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MInput'\r\n})\r\n</script>\r\n<style lang=\"scss\">\r\n// Input 组件样式 - 使用更具体的选择器确保样式优先级\r\n.m-input.el-input {\r\n &.solid {\r\n --el-border-color: var(--bg-tertiary-hover);\r\n \r\n .el-input__wrapper {\r\n background: var(--all-alphe-white-6);\r\n }\r\n }\r\n}\r\n</style>","<template>\r\n <el-form v-bind=\"$attrs\" class=\"m-form\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-form>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MForm'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\r\n</style>","<template>\r\n <el-form-item v-bind=\"$attrs\" class=\"m-form-item\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-form-item>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MFormItem'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// FormItem 组件样式 - 使用 m-form-item 类名隔离样式\r\n.m-form-item {\r\n // 自定义样式可以在这里添加\r\n}\r\n</style>","/**\r\n * 类名装饰器方法\r\n * @param {...(string|boolean|undefined|null)} classes - 类名参数\r\n * @returns {string} 合并后的类名字符串\r\n */\r\nexport const classNames = (...classes) => {\r\n return classes.filter(Boolean).join(' ')\r\n}\r\n\r\n/**\r\n * 排除指定属性\r\n * @param {Object} attrs - 原始属性对象\r\n * @param {...string} excludeKeys - 要排除的属性名\r\n * @returns {Object} 排除指定属性后的新对象\r\n */\r\nexport const excludeAttrs = (attrs, ...excludeKeys) => {\r\n const result = { ...attrs }\r\n excludeKeys.forEach(key => {\r\n delete result[key]\r\n })\r\n return result\r\n}\r\n\r\n","import { computed, useAttrs } from 'vue'\r\nimport { classNames, excludeAttrs } from '@packages/utils/classNames.js'\r\n\r\n/**\r\n * 类名 Hook\r\n * @param {string} defaultClass - 默认的类名\r\n * @param {string} excludeKey - 要排除的属性名,默认为 'popperClass'\r\n * @returns {Object} 包含 mergedAttrs 和 className 的对象\r\n */\r\nexport function useClassName(defaultClass, excludeKey = 'popperClass') {\r\n const attrs = useAttrs()\r\n \r\n // 排除指定属性\r\n const mergedAttrs = computed(() => excludeAttrs(attrs, excludeKey))\r\n \r\n // 计算类名\r\n const className = computed(() => classNames(defaultClass, attrs[excludeKey]))\r\n \r\n return {\r\n mergedAttrs,\r\n className\r\n }\r\n}\r\n","<template>\r\n <el-tooltip v-bind=\"mergedAttrs\" :popper-class=\"popperClass\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-tooltip>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MTooltip'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-tooltip-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-tooltip-popper {\r\n &.is-dark {\r\n color: #fff !important;\r\n background-color: var(--all-gray-6) !important;\r\n border-color: var(--all-gray-6) !important;\r\n .el-popper__arrow::before{\r\n background-color: var(--all-gray-6) !important;\r\n border-color: var(--all-gray-6) !important;\r\n }\r\n }\r\n \r\n &.is-light {\r\n color: #606266 !important;\r\n background-color: #fff !important;\r\n border: 1px solid #e4e7ed !important;\r\n \r\n .el-popper__arrow::before {\r\n background-color: #fff !important;\r\n border-color: #fff !important;\r\n }\r\n }\r\n}\r\n\r\n:deep(.el-popper) {\r\n &.is-light {\r\n background: var(--bg-tertiary-hover);\r\n border-color: var(--border-primary);\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-select\r\n class=\"m-select2\"\r\n :class=\"{ solid: $attrs.styleType === 'solid' }\"\r\n :show-arrow=\"false\"\r\n v-bind=\"$attrs\"\r\n >\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MSelect\",\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n\r\n</style>\r\n","<template>\r\n <el-option v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-option>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MOption'\r\n})\r\n</script>\r\n","<template>\r\n <el-option-group v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-option-group>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MOptionGroup'\r\n})\r\n</script>\r\n","\r\n<template>\r\n <el-pagination v-bind=\"$attrs\" class=\"m-pagination\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-pagination>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MPagination'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.m-pagination {\r\n &.is-background .el-pager li.is-active{\r\n color: var(--text-quaternary) !important;\r\n }\r\n}\r\n</style>\r\n\r\n","<template>\r\n <el-radio v-bind=\"mergedAttrs\" class=\"m-radio\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MRadio'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Radio popper-class 样式\r\n// .mc-radio-popper {\r\n// 自定义单选框样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-radio-custom {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #667eea;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-success {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #67c23a;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-warning {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #e6a23c;\r\n font-weight: 500;\r\n }\r\n}\r\n\r\n.mc-radio-danger {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #f56c6c;\r\n font-weight: 500;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-radio-group v-bind=\"mergedAttrs\" :popper-class=\"computedPopperClass\" class=\"m-radio-group\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio-group>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n name: 'MRadioGroup'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 获取attrs\r\nconst attrs = useAttrs()\r\n\r\n// 计算popper-class,合并默认类名和外部传入的类名\r\nconst computedPopperClass = computed(() => {\r\n const defaultPopperClass = 'mc-radio-group-popper'\r\n \r\n if (attrs.popperClass) {\r\n return `${defaultPopperClass} ${attrs.popperClass}`.trim()\r\n }\r\n \r\n return defaultPopperClass\r\n})\r\n\r\n// 合并其他属性(排除popperClass)\r\nconst mergedAttrs = computed(() => {\r\n const { popperClass, ...otherAttrs } = attrs\r\n return otherAttrs\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioGroup popper-class 样式\r\n.mc-radio-group-popper {\r\n // 自定义单选框组样式可以在这里添加\r\n}\r\n\r\n// 自定义主题示例\r\n.mc-radio-group-custom {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #667eea;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-success {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #67c23a;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-warning {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #e6a23c;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n\r\n.mc-radio-group-danger {\r\n .el-radio {\r\n .el-radio__input {\r\n .el-radio__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n &.is-checked .el-radio__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n }\r\n \r\n .el-radio__label {\r\n color: #f56c6c;\r\n font-weight: 500;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-radio-button v-bind=\"mergedAttrs\" class=\"m-radio-button\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-radio-button>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MRadioButton'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-radio-button-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// RadioButton popper-class 样式\r\n// .mc-radio-button-popper {\r\n// 自定义单选框按钮样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-radio-button-custom {\r\n .el-radio-button__inner {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n color: white;\r\n \r\n &:hover {\r\n background: linear-gradient(45deg, #5a6fd8, #6a4190);\r\n border-color: #5a6fd8;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n box-shadow: -1px 0 0 0 #4c63d2;\r\n }\r\n}\r\n\r\n.mc-radio-button-success {\r\n .el-radio-button__inner {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #5daf34;\r\n border-color: #5daf34;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n box-shadow: -1px 0 0 0 #529b2e;\r\n }\r\n}\r\n\r\n.mc-radio-button-warning {\r\n .el-radio-button__inner {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #d4922b;\r\n border-color: #d4922b;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n box-shadow: -1px 0 0 0 #c8951f;\r\n }\r\n}\r\n\r\n.mc-radio-button-danger {\r\n .el-radio-button__inner {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n color: white;\r\n \r\n &:hover {\r\n background-color: #f45454;\r\n border-color: #f45454;\r\n }\r\n }\r\n \r\n .el-radio-button__original-radio:checked + .el-radio-button__inner {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n box-shadow: -1px 0 0 0 #f24545;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-switch v-bind=\"mergedAttrs\" :popper-class=\"popperClass\" class=\"m-switch\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-switch>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\"\r\n\r\ndefineOptions({\r\n name: 'MSwitch'\r\n})\r\n\r\n// 定义props\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\n\r\n// 使用类名 Hook\r\nconst { mergedAttrs, className: popperClass } = useClassName('mc-switch-popper')\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Switch popper-class 样式\r\n// .mc-switch-popper {\r\n// 自定义开关样式可以在这里添加\r\n// }\r\n\r\n// 自定义主题示例\r\n.mc-switch-custom {\r\n .el-switch__core {\r\n background: linear-gradient(45deg, #667eea, #764ba2);\r\n border-color: #667eea;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background: linear-gradient(45deg, #4c63d2, #5d3a7e);\r\n border-color: #4c63d2;\r\n }\r\n}\r\n\r\n.mc-switch-success {\r\n .el-switch__core {\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #529b2e;\r\n border-color: #529b2e;\r\n }\r\n}\r\n\r\n.mc-switch-warning {\r\n .el-switch__core {\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #c8951f;\r\n border-color: #c8951f;\r\n }\r\n}\r\n\r\n.mc-switch-danger {\r\n .el-switch__core {\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n \r\n &:after {\r\n background: white;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #f24545;\r\n border-color: #f24545;\r\n }\r\n}\r\n\r\n// 特殊样式变体\r\n.mc-switch-gradient {\r\n .el-switch__core {\r\n background: linear-gradient(90deg, #ff6b6b, #4ecdc4);\r\n border: none;\r\n \r\n &:after {\r\n background: white;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background: linear-gradient(90deg, #4ecdc4, #45b7d1);\r\n }\r\n}\r\n\r\n.mc-switch-neon {\r\n .el-switch__core {\r\n background-color: #1a1a1a;\r\n border: 2px solid #00ffff;\r\n box-shadow: 0 0 10px #00ffff;\r\n \r\n &:after {\r\n background: #00ffff;\r\n box-shadow: 0 0 5px #00ffff;\r\n }\r\n }\r\n \r\n &.is-checked .el-switch__core {\r\n background-color: #00ffff;\r\n border-color: #00ffff;\r\n box-shadow: 0 0 15px #00ffff;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-tag v-bind=\"$attrs\" class=\"m-tag\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-tag>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MTag'\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Tag 组件样式 - 使用 m-tag 类名隔离样式\r\n.m-tag.el-tag {\r\n // 自定义样式可以在这里添加\r\n font-size: var(--font-size-text-sm);\r\n --el-tag-border-radius: 8px;\r\n\r\n &.el-tag--primary {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-warning-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-warning-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-warning-primary);\r\n }\r\n &.el-tag--success {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-success-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-success-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-success-primary);\r\n }\r\n &.el-tag--danger {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-error-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-error-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-error-primary);\r\n }\r\n &.el-tag--info {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-primary) 10%, transparent);\r\n --el-tag-border-color: color-mix(in srgb, var(--text-primary) 20%, transparent);\r\n --el-tag-text-color: var(--text-primary);\r\n }\r\n &.el-tag--dark{\r\n &.el-tag--warning {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-warning-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--success {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-success-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--danger {\r\n --el-tag-bg-color: color-mix(in srgb, var(--text-error-primary) 10%, transparent);\r\n --el-tag-border-color: transparent;\r\n }\r\n &.el-tag--info {\r\n --el-tag-bg-color: var(--bg-tertiary-hover);\r\n --el-tag-border-color: transparent;\r\n }\r\n }\r\n}\r\n</style>","<template>\r\n <el-alert v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-alert>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MAlert'\r\n})\r\n</script>\r\n","<template>\r\n <div>\r\n <el-dialog\r\n v-model=\"dialogVisible\"\r\n :width=\"width\"\r\n :title=\"title\"\r\n :draggable=\"draggable\"\r\n :close-on-click-modal=\"closeOnClickModal\"\r\n :center=\"center\"\r\n v-bind=\"$attrs\"\r\n class=\"m-dialog\"\r\n header-class=\"m-header\"\r\n >测试组\r\n <template v-if=\"$slots.header\" #header=\"{ close, titleId, titleClass }\">\r\n <slot name=\"header\" v-bind=\"{ close, titleId, titleClass }\"></slot>\r\n </template>\r\n <slot name=\"default\"></slot>\r\n <template v-if=\"$slots.footer\" #footer class=\"m-footer\">\r\n <slot name=\"footer\"></slot>\r\n </template>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nconst props = defineProps({\r\n width: {\r\n type: String,\r\n default: '440px'\r\n },\r\n center: {\r\n type: Boolean,\r\n default: true\r\n },\r\n draggable: {\r\n type: Boolean,\r\n default: true\r\n },\r\n closeOnClickModal: {\r\n type: Boolean,\r\n default: false\r\n },\r\n title: {\r\n type: String,\r\n default: ''\r\n }\r\n})\r\nconst emit = defineEmits(['close'])\r\nconst dialogVisible = defineModel('modelValue', {\r\n type: Boolean,\r\n default: false\r\n})\r\n\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\r\n</style>\r\n","<template>\r\n <el-notification v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-notification>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: 'MNotification'\r\n})\r\n</script>\r\n","<template>\r\n <el-date-picker v-bind=\"mergedAttrs\" :popper-class=\"popperClass\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-date-picker>\r\n</template>\r\n\r\n<script setup>\r\nimport { useClassName } from \"@packages/hooks/useClassName.js\";\r\n\r\ndefineOptions({\r\n name: \"MDatePicker\",\r\n});\r\n\r\n// 定义 props,提供默认的 type 值\r\nconst props = defineProps({\r\n popperClass: {\r\n type: String,\r\n default: \"\",\r\n },\r\n});\r\n\r\n// 使用类名 Hook,排除 type 和 popperClass 属性\r\nconst { mergedAttrs, className: popperClass } = useClassName(\r\n \"mc-datepicker-popper\",\r\n \"popperClass\"\r\n);\r\n</script>\r\n<style lang=\"scss\">\r\n.mc-datepicker-popper {\r\n .el-picker-panel {\r\n border: 1px solid var(--border-primary);\r\n border-radius: 6px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n .current,\r\n .today:not(.in-range),\r\n .start-date,\r\n .end-date {\r\n .el-date-table-cell {\r\n .el-date-table-cell__text {\r\n color: var(--text-quaternary);\r\n border-radius: 3px;\r\n }\r\n }\r\n }\r\n\r\n .start-date {\r\n .el-date-table-cell {\r\n border-top-left-radius: 3px;\r\n border-bottom-left-radius: 3px;\r\n }\r\n }\r\n\r\n .end-date {\r\n .el-date-table-cell {\r\n border-top-right-radius: 3px;\r\n border-bottom-right-radius: 3px;\r\n }\r\n }\r\n\r\n .el-button.is-text {\r\n color: var(--text-brand);\r\n }\r\n .el-button.is-plain {\r\n background: var(--bg-brand);\r\n color: var(--text-quaternary);\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <el-empty v-bind=\"mergedAttrs\" :image=\"imageUrl\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-empty>\r\n</template>\r\n\r\n<script>\r\n// 定义可选的图片文件名(在模块作用域中)\r\nconst availableImages = [\r\n '404',\r\n 'billing', \r\n 'cart',\r\n 'comments',\r\n 'dashboard',\r\n 'files',\r\n 'inbox',\r\n 'location',\r\n 'network',\r\n 'notifications',\r\n 'orders',\r\n 'records',\r\n 'session',\r\n 'subscription',\r\n 'todo',\r\n 'wishlist'\r\n]\r\n\r\nexport default {\r\n name: 'MEmpty'\r\n}\r\n</script>\r\n\r\n<script setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\nconst props = defineProps({\r\n image: {\r\n type: String,\r\n default: 'orders',\r\n validator: (value) => {\r\n // 如果是完整的URL或路径,直接通过验证\r\n if (value.includes('/') || value.includes('http')) {\r\n return true\r\n }\r\n // 否则检查是否在可选列表中\r\n return availableImages.includes(value)\r\n }\r\n }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除 image 属性,避免重复绑定\r\nconst mergedAttrs = computed(() => {\r\n const { image, ...rest } = attrs\r\n return rest\r\n})\r\n\r\n// 计算图片URL\r\nconst imageUrl = computed(() => {\r\n const { image } = props\r\n \r\n // 如果是完整的URL或路径,直接返回\r\n if (image.includes('/') || image.includes('http')) {\r\n return image\r\n }\r\n \r\n // 使用 public 目录中的图片\r\n // Vite 会自动处理 public 目录中的静态资源\r\n return `/images/empty/${image}.png`\r\n})\r\n</script>\r\n","<template>\r\n <el-table v-bind=\"$attrs\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-table>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MTable\",\r\n});\r\n</script>\r\n<style lang=\"scss\">\r\n// Table 组件样式 - 无边框设计\r\n\r\n</style>\r\n","<template>\r\n <el-table-column v-bind=\"$attrs\" class=\"m-table-column\">\r\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]>\r\n <slot :name=\"name\" />\r\n </template>\r\n </el-table-column>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n name: \"MTableColumn\",\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// TableColumn 组件样式\r\n.m-table-column.el-table-column {\r\n // 继承父级 Table 组件的样式\r\n}\r\n</style>\r\n","<template>\r\n <div \r\n v-if=\"visible\" \r\n class=\"m-banner\"\r\n :class=\"[\r\n `m-banner--${type}`,\r\n {\r\n 'm-banner--closable': closable,\r\n 'm-banner--with-icon': icon || slots.icon\r\n }\r\n ]\"\r\n :style=\"bannerStyle\"\r\n >\r\n <div class=\"m-banner__content\">\r\n <!-- 图标插槽 -->\r\n <div v-if=\"icon || slots.icon\" class=\"m-banner__icon\">\r\n <slot name=\"icon\">\r\n <m-icon :name=\"icon\" :size=\"iconSize\" />\r\n </slot>\r\n </div>\r\n \r\n <!-- 主要内容 -->\r\n <div class=\"m-banner__text\">\r\n <slot>{{ content }}</slot>\r\n </div>\r\n \r\n <!-- 关闭按钮 -->\r\n <div v-if=\"closable\" class=\"m-banner__close\" @click=\"handleClose\">\r\n <m-icon name=\"lucide-x\" :size=\"closeIconSize\" />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, computed, watch, useSlots } from 'vue'\r\nimport MIcon from '../Icon/Icon.vue'\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 横幅内容\r\n content: {\r\n type: String,\r\n default: ''\r\n },\r\n // 横幅类型\r\n type: {\r\n type: String,\r\n default: 'info',\r\n validator: (value) => ['info', 'success', 'warning', 'error'].includes(value)\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 是否显示\r\n visible: {\r\n type: Boolean,\r\n default: true\r\n },\r\n // 图标名称\r\n icon: {\r\n type: String,\r\n default: ''\r\n },\r\n // 图标大小\r\n iconSize: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n // 关闭图标大小\r\n closeIconSize: {\r\n type: [String, Number],\r\n default: '16px'\r\n },\r\n // 自定义背景色\r\n backgroundColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 自定义文字颜色\r\n textColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 自定义边框颜色\r\n borderColor: {\r\n type: String,\r\n default: ''\r\n },\r\n // 持续时间(毫秒),0 表示不自动关闭\r\n duration: {\r\n type: Number,\r\n default: 0\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['close', 'update:visible'])\r\n\r\n// 响应式数据\r\nconst internalVisible = ref(props.visible)\r\n\r\n// 监听 visible prop 变化\r\nwatch(() => props.visible, (newVal) => {\r\n internalVisible.value = newVal\r\n})\r\n\r\n// 计算样式\r\nconst bannerStyle = computed(() => {\r\n const style = {}\r\n \r\n if (props.backgroundColor) {\r\n style.backgroundColor = props.backgroundColor\r\n }\r\n if (props.textColor) {\r\n style.color = props.textColor\r\n }\r\n if (props.borderColor) {\r\n style.borderColor = props.borderColor\r\n }\r\n \r\n return style\r\n})\r\n\r\n// 默认图标映射\r\nconst defaultIcons = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n error: 'close-circle'\r\n}\r\n\r\n// 计算实际使用的图标\r\nconst actualIcon = computed(() => {\r\n return props.icon || defaultIcons[props.type]\r\n})\r\n\r\n// 处理关闭\r\nconst handleClose = () => {\r\n internalVisible.value = false\r\n emit('update:visible', false)\r\n emit('close')\r\n}\r\n\r\n// 自动关闭逻辑\r\nwatch(internalVisible, (newVal) => {\r\n if (newVal && props.duration > 0) {\r\n setTimeout(() => {\r\n handleClose()\r\n }, props.duration)\r\n }\r\n})\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: 'MBanner'\r\n})\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n close: handleClose\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-banner {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n min-height: 40px;\r\n border-radius: 4px;\r\n border: 1px solid;\r\n font-size: 14px;\r\n line-height: 1.5;\r\n padding: 10px;\r\n transition: all 0.3s ease;\r\n\r\n &__content {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n flex: 1;\r\n }\r\n\r\n &__icon {\r\n display: flex;\r\n align-items: center;\r\n margin-right: 8px;\r\n flex-shrink: 0;\r\n }\r\n\r\n &__text {\r\n flex: 1;\r\n word-break: break-word;\r\n }\r\n\r\n &__close {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 8px;\r\n cursor: pointer;\r\n padding: 4px;\r\n border-radius: 3px;\r\n transition: background-color 0.2s ease;\r\n flex-shrink: 0;\r\n min-width: 20px;\r\n min-height: 20px;\r\n opacity: 0.7;\r\n\r\n &:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n opacity: 1;\r\n }\r\n }\r\n\r\n // 类型样式\r\n &--info {\r\n background-color: #e1f3ff;\r\n border-color: #b3d8ff;\r\n color: #0066cc;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(0, 102, 204, 0.1);\r\n }\r\n }\r\n\r\n &--success {\r\n background-color: #f0f9ff;\r\n border-color: #b3e5b3;\r\n color: #00a854;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(0, 168, 84, 0.1);\r\n }\r\n }\r\n\r\n &--warning {\r\n background-color: #fff7e6;\r\n border-color: #ffd591;\r\n color: #fa8c16;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(250, 140, 22, 0.1);\r\n }\r\n }\r\n\r\n &--error {\r\n background-color: #fff2f0;\r\n border-color: #ffccc7;\r\n color: #ff4d4f;\r\n\r\n .m-banner__close:hover {\r\n background-color: rgba(255, 77, 79, 0.1);\r\n }\r\n }\r\n\r\n // 带动画的关闭\r\n &.m-banner-leave-active {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n transition: opacity 0.3s ease, transform 0.3s ease;\r\n }\r\n}\r\n\r\n// 深色主题适配\r\n@media (prefers-color-scheme: dark) {\r\n .m-banner {\r\n &--info {\r\n background-color: rgba(24, 144, 255, 0.1);\r\n border-color: rgba(24, 144, 255, 0.3);\r\n color: #69c0ff;\r\n }\r\n\r\n &--success {\r\n background-color: rgba(82, 196, 26, 0.1);\r\n border-color: rgba(82, 196, 26, 0.3);\r\n color: #95de64;\r\n }\r\n\r\n &--warning {\r\n background-color: rgba(250, 173, 20, 0.1);\r\n border-color: rgba(250, 173, 20, 0.3);\r\n color: #ffd666;\r\n }\r\n\r\n &--error {\r\n background-color: rgba(255, 77, 79, 0.1);\r\n border-color: rgba(255, 77, 79, 0.3);\r\n color: #ff7875;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"m-tabs\" :class=\"[`m-tabs--${type}`, `m-tabs--${tabPosition}`]\">\r\n <div class=\"m-tabs__header\">\r\n <div class=\"m-tabs__nav\">\r\n <div\r\n v-for=\"(tab, index) in tabs\"\r\n :key=\"tab.name || index\"\r\n :class=\"[\r\n 'm-tabs__item',\r\n {\r\n 'm-tabs__item--active': activeName === (tab.name || index),\r\n 'm-tabs__item--disabled': tab.disabled,\r\n 'm-tabs__item--closable': tab.closable\r\n }\r\n ]\"\r\n @click=\"handleTabClick(tab, index)\"\r\n >\r\n <span class=\"m-tabs__item-text\">\r\n <slot v-if=\"tab.$slots?.label\" :name=\"`tab-${tab.name || index}`\" />\r\n <span v-else>{{ tab.label }}</span>\r\n </span>\r\n <span\r\n v-if=\"tab.closable\"\r\n class=\"m-tabs__item-close\"\r\n @click.stop=\"handleTabClose(tab, index)\"\r\n >\r\n <m-icon name=\"lucide-x\" :size=\"12\" />\r\n </span>\r\n </div>\r\n \r\n <!-- 添加按钮 -->\r\n <div\r\n v-if=\"addable || editable\"\r\n class=\"m-tabs__item m-tabs__item--add\"\r\n @click=\"handleTabAdd\"\r\n >\r\n <m-icon name=\"plus\" :size=\"12\" />\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"m-tabs__content\">\r\n <slot />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { ref, provide, computed, useSlots, watch, nextTick } from 'vue'\r\nimport MIcon from '../Icon/Icon.vue'\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 当前激活的标签页\r\n modelValue: {\r\n type: [String, Number],\r\n default: ''\r\n },\r\n // 标签页类型\r\n type: {\r\n type: String,\r\n default: '',\r\n validator: (value) => ['', 'card', 'border-card'].includes(value)\r\n },\r\n // 标签位置\r\n tabPosition: {\r\n type: String,\r\n default: 'top',\r\n validator: (value) => ['top', 'right', 'bottom', 'left'].includes(value)\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否可添加\r\n addable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否可编辑(同时可添加和关闭)\r\n editable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 标签宽度是否自撑开\r\n stretch: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 切换前的钩子函数\r\n beforeLeave: {\r\n type: Function,\r\n default: null\r\n }\r\n})\r\n\r\n// 定义 emits\r\nconst emit = defineEmits(['update:modelValue', 'tab-click', 'tab-change', 'tab-remove', 'tab-add', 'edit'])\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 响应式数据\r\nconst tabs = ref([])\r\nconst activeName = ref(props.modelValue)\r\n\r\n// 监听 modelValue 变化\r\nwatch(() => props.modelValue, (newVal) => {\r\n activeName.value = newVal\r\n})\r\n\r\n// 监听 activeName 变化\r\nwatch(activeName, (newVal) => {\r\n emit('update:modelValue', newVal)\r\n emit('tab-change', newVal)\r\n})\r\n\r\n// 提供上下文给子组件\r\nprovide('tabsContext', {\r\n registerTab: (tab) => {\r\n const index = tabs.value.findIndex(t => t.name === tab.name)\r\n if (index >= 0) {\r\n tabs.value[index] = tab\r\n } else {\r\n tabs.value.push(tab)\r\n }\r\n \r\n // 如果没有指定 activeName,默认选中第一个\r\n if (!activeName.value && tabs.value.length > 0) {\r\n activeName.value = tabs.value[0].name || 0\r\n }\r\n },\r\n unregisterTab: (name) => {\r\n const index = tabs.value.findIndex(tab => tab.name === name)\r\n if (index >= 0) {\r\n tabs.value.splice(index, 1)\r\n }\r\n }\r\n})\r\n\r\n// 处理标签点击\r\nconst handleTabClick = async (tab, index) => {\r\n if (tab.disabled) return\r\n \r\n const tabName = tab.name || index\r\n \r\n // 如果点击的是当前激活的标签,直接返回\r\n if (activeName.value === tabName) return\r\n \r\n // 执行 beforeLeave 钩子\r\n if (props.beforeLeave) {\r\n try {\r\n const result = await props.beforeLeave(activeName.value, tabName)\r\n if (result === false) return\r\n } catch (error) {\r\n return\r\n }\r\n }\r\n \r\n activeName.value = tabName\r\n emit('tab-click', { name: tabName, index, disabled: tab.disabled })\r\n}\r\n\r\n// 处理标签关闭\r\nconst handleTabClose = (tab, index) => {\r\n const tabName = tab.name || index\r\n emit('tab-remove', tabName)\r\n emit('edit', tabName, 'remove')\r\n}\r\n\r\n// 处理添加标签\r\nconst handleTabAdd = () => {\r\n emit('tab-add')\r\n emit('edit', '', 'add')\r\n}\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n activeName: computed(() => activeName.value)\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-tabs {\r\n display: flex;\r\n flex-direction: column;\r\n \r\n &--left {\r\n flex-direction: row;\r\n }\r\n \r\n &--right {\r\n flex-direction: row-reverse;\r\n }\r\n \r\n &--bottom {\r\n flex-direction: column-reverse;\r\n }\r\n\r\n &__header {\r\n flex-shrink: 0;\r\n }\r\n\r\n &__nav {\r\n display: flex;\r\n border-bottom: 1px solid var(--el-border-color);\r\n position: relative;\r\n \r\n .m-tabs--card &,\r\n .m-tabs--border-card & {\r\n border-bottom: none;\r\n }\r\n \r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n flex-direction: column;\r\n border-bottom: none;\r\n border-right: 1px solid var(--el-border-color);\r\n width: 120px;\r\n }\r\n \r\n .m-tabs--right & {\r\n border-right: none;\r\n border-left: 1px solid var(--el-border-color);\r\n }\r\n }\r\n\r\n &__item {\r\n display: flex;\r\n align-items: center;\r\n padding: 8px 16px;\r\n cursor: pointer;\r\n border: 1px solid transparent;\r\n border-bottom: none;\r\n background: transparent;\r\n color: var(--el-text-color-regular);\r\n font-size: 14px;\r\n transition: all 0.3s ease;\r\n position: relative;\r\n flex-shrink: 0;\r\n \r\n &:hover {\r\n color: var(--el-color-primary);\r\n }\r\n \r\n &--active {\r\n color: var(--el-color-primary);\r\n border-color: var(--el-border-color);\r\n border-bottom-color: var(--el-bg-color);\r\n background: var(--el-bg-color);\r\n \r\n &::after {\r\n content: '';\r\n position: absolute;\r\n bottom: -1px;\r\n left: 0;\r\n right: 0;\r\n height: 2px;\r\n background: var(--el-color-primary);\r\n }\r\n }\r\n \r\n &--disabled {\r\n color: var(--el-text-color-disabled);\r\n cursor: not-allowed;\r\n \r\n &:hover {\r\n color: var(--el-text-color-disabled);\r\n }\r\n }\r\n \r\n &--closable {\r\n padding-right: 24px;\r\n }\r\n \r\n &--add {\r\n padding: 8px 12px;\r\n border: 1px dashed var(--el-border-color);\r\n color: var(--el-text-color-regular);\r\n \r\n &:hover {\r\n color: var(--el-color-primary);\r\n border-color: var(--el-color-primary);\r\n }\r\n }\r\n \r\n // 卡片风格\r\n .m-tabs--card & {\r\n border: 1px solid var(--el-border-color);\r\n border-bottom: none;\r\n margin-right: 2px;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-bg-color);\r\n background: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n // 边框卡片风格\r\n .m-tabs--border-card & {\r\n border: 1px solid var(--el-border-color);\r\n border-bottom: none;\r\n margin-right: -1px;\r\n background: var(--el-fill-color-light);\r\n \r\n &--active {\r\n background: var(--el-bg-color);\r\n border-bottom-color: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n // 左侧和右侧位置\r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n border-bottom: 1px solid var(--el-border-color);\r\n border-right: none;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-border-color);\r\n border-right-color: var(--el-bg-color);\r\n \r\n &::after {\r\n display: none;\r\n }\r\n }\r\n }\r\n \r\n .m-tabs--right & {\r\n border-bottom: 1px solid var(--el-border-color);\r\n border-left: none;\r\n \r\n &--active {\r\n border-bottom-color: var(--el-border-color);\r\n border-left-color: var(--el-bg-color);\r\n }\r\n }\r\n }\r\n\r\n &__item-text {\r\n flex: 1;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n &__item-close {\r\n position: absolute;\r\n right: 8px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n border-radius: 50%;\r\n transition: background-color 0.2s ease;\r\n \r\n &:hover {\r\n background-color: var(--el-fill-color);\r\n }\r\n }\r\n\r\n &__content {\r\n flex: 1;\r\n padding: 16px 0;\r\n \r\n .m-tabs--card &,\r\n .m-tabs--border-card & {\r\n padding: 16px;\r\n border: 1px solid var(--el-border-color);\r\n border-top: none;\r\n }\r\n \r\n .m-tabs--border-card & {\r\n background: var(--el-bg-color);\r\n }\r\n \r\n .m-tabs--left &,\r\n .m-tabs--right & {\r\n flex: 1;\r\n padding: 0 0 0 16px;\r\n }\r\n \r\n .m-tabs--right & {\r\n padding: 0 16px 0 0;\r\n }\r\n }\r\n}\r\n\r\n// 响应式设计\r\n@media (max-width: 768px) {\r\n .m-tabs {\r\n &__item {\r\n padding: 6px 12px;\r\n font-size: 13px;\r\n }\r\n \r\n &--left &__nav,\r\n &--right &__nav {\r\n width: 100px;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div\r\n v-show=\"active\"\r\n class=\"m-tab-pane\"\r\n :class=\"{\r\n 'm-tab-pane--active': active,\r\n 'm-tab-pane--disabled': disabled\r\n }\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { inject, computed, onMounted, onUnmounted, useSlots } from 'vue'\r\n\r\n// 定义 props\r\nconst props = defineProps({\r\n // 选项卡标题\r\n label: {\r\n type: String,\r\n default: ''\r\n },\r\n // 是否禁用\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 选项卡名称,用于标识\r\n name: {\r\n type: [String, Number],\r\n default: ''\r\n },\r\n // 是否可关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 是否延迟渲染\r\n lazy: {\r\n type: Boolean,\r\n default: false\r\n }\r\n})\r\n\r\n// 获取插槽\r\nconst slots = useSlots()\r\n\r\n// 注入父组件上下文\r\nconst tabsContext = inject('tabsContext')\r\n\r\n// 计算是否激活\r\nconst active = computed(() => {\r\n if (!tabsContext) return false\r\n return tabsContext.activeName === (props.name || tabsContext.tabIndex)\r\n})\r\n\r\n// 组件挂载时注册到父组件\r\nonMounted(() => {\r\n if (tabsContext) {\r\n const tabData = {\r\n name: props.name,\r\n label: props.label,\r\n disabled: props.disabled,\r\n closable: props.closable,\r\n $slots: slots\r\n }\r\n tabsContext.registerTab(tabData)\r\n }\r\n})\r\n\r\n// 组件卸载时从父组件中移除\r\nonUnmounted(() => {\r\n if (tabsContext) {\r\n tabsContext.unregisterTab(props.name)\r\n }\r\n})\r\n\r\n// 定义组件名称\r\ndefineOptions({\r\n name: 'MTabPane'\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.m-tab-pane {\r\n display: none;\r\n \r\n &--active {\r\n display: block;\r\n }\r\n \r\n &--disabled {\r\n opacity: 0.6;\r\n pointer-events: none;\r\n }\r\n}\r\n</style>\r\n","/**\r\n * 样式工具函数\r\n * 用于确保组件样式完全覆盖 Element Plus\r\n */\r\n\r\n/**\r\n * 为元素添加高优先级样式类\r\n * @param {HTMLElement} element - 目标元素\r\n */\r\nexport function addOverrideClass(element) {\r\n if (element && element.classList) {\r\n element.classList.add('mc-ui-override');\r\n }\r\n}\r\n\r\n/**\r\n * 为 Vue 组件实例添加覆盖样式\r\n * @param {Object} componentInstance - Vue 组件实例\r\n */\r\nexport function addComponentOverride(componentInstance) {\r\n if (componentInstance && componentInstance.$el) {\r\n addOverrideClass(componentInstance.$el);\r\n }\r\n}\r\n\r\n/**\r\n * 全局应用样式覆盖\r\n * 在应用启动时调用,确保所有 Element Plus 组件都被覆盖\r\n */\r\nexport function applyGlobalOverride() {\r\n // 为 body 添加覆盖类\r\n if (typeof document !== 'undefined') {\r\n document.body.classList.add('mc-ui-override');\r\n \r\n // 监听动态添加的 Element Plus 组件\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === 1 && node.classList) {\r\n // 为新添加的 Element Plus 组件添加覆盖类\r\n if (node.className && node.className.includes('el-')) {\r\n const parent = node.closest('.mc-ui-override') || node.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n }\r\n \r\n // 检查子元素\r\n const elComponents = node.querySelectorAll('[class*=\"el-\"]');\r\n elComponents.forEach(el => {\r\n const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n });\r\n }\r\n });\r\n });\r\n });\r\n \r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * 强制刷新组件样式\r\n * @param {string} selector - CSS 选择器\r\n */\r\nexport function forceRefreshStyles(selector = '[class*=\"el-\"]') {\r\n if (typeof document !== 'undefined') {\r\n const elements = document.querySelectorAll(selector);\r\n elements.forEach(el => {\r\n const parent = el.closest('.mc-ui-override') || el.parentElement;\r\n if (parent && !parent.classList.contains('mc-ui-override')) {\r\n parent.classList.add('mc-ui-override');\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * 创建带有样式覆盖的 Element Plus 组件配置\r\n * @param {Object} componentConfig - 组件配置\r\n * @returns {Object} 增强后的组件配置\r\n */\r\nexport function createOverrideComponent(componentConfig) {\r\n return {\r\n ...componentConfig,\r\n mounted() {\r\n addOverrideClass(this.$el);\r\n if (componentConfig.mounted) {\r\n componentConfig.mounted.call(this);\r\n }\r\n },\r\n updated() {\r\n addOverrideClass(this.$el);\r\n if (componentConfig.updated) {\r\n componentConfig.updated.call(this);\r\n }\r\n }\r\n };\r\n}\r\n","/**\r\n * @mc-markets/ui - 自定义组件库\r\n * \r\n * 提供自定义组件和工具函数\r\n * 支持 Element Plus 组件回退机制\r\n * 将 Element Plus 组件前缀从 el- 转换为 m- 并导出\r\n * 导出 Element Plus 事件相关功能(Message、MessageBox、Notification、Loading 等)\r\n * \r\n * @version 1.0.69\n */\r\n\r\nimport * as ElementPlusComponents from 'element-plus'\r\n// 导入样式文件\r\nimport MIcon from './components/Icon/Icon.vue'\r\nimport MButton from './components/Button/Button.vue'\r\nimport MCard from './components/Card/Card.vue'\r\nimport MInput from './components/Input/Input.vue'\r\nimport MForm from './components/Form/Form.vue'\r\nimport MFormItem from './components/FormItem/FormItem.vue'\r\nimport MTooltip from './components/Tooltip/Tooltip.vue'\r\nimport MSelect from './components/Select/Select.vue'\r\nimport MOption from './components/Option/Option.vue'\r\nimport MOptionGroup from './components/OptionGroup/OptionGroup.vue'\r\nimport MPagination from './components/Pagination/Pagination.vue'\r\nimport MRadio from './components/Radio/Radio.vue'\r\nimport MRadioGroup from './components/RadioGroup/RadioGroup.vue'\r\nimport MRadioButton from './components/RadioButton/RadioButton.vue'\r\nimport MSwitch from './components/Switch/Switch.vue'\r\nimport MTag from './components/Tag/Tag.vue'\r\nimport MAlert from './components/Alert/Alert.vue'\r\nimport MDialog from './components/Dialog/Dialog.vue'\r\nimport MNotification from './components/Notification/Notification.vue'\r\nimport MDatePicker from './components/DatePicker/DatePicker.vue'\r\nimport MEmpty from './components/Empty/Empty.vue'\r\nimport MTable from './components/Table/Table.vue'\r\nimport MTableColumn from './components/Table/TableColumn.vue'\r\nimport MBanner from './components/Banner/Banner.vue'\r\nimport MTabs from './components/Tabs/Tabs.vue'\r\nimport MTabPane from './components/Tabs/TabPane.vue'\r\n\r\nconst components = [MIcon, MButton, MCard, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane]\r\n\r\n// 存储转换后的 Element Plus 组件\r\nconst convertedComponents = {}\r\n\r\nfunction registerElementPlus(app) {\r\n // 获取已注册的自定义组件名称\r\n const customComponentNames = components.map(comp => {\r\n if (comp && comp.name && typeof comp.name === 'string') {\r\n let name = comp.name.toLowerCase()\r\n const nameMap = {\r\n 'mradiogroup': 'm-radio-group',\r\n 'mradiobutton': 'm-radio-button',\r\n 'mformitem': 'm-form-item',\r\n 'moptiongroup': 'm-option-group'\r\n }\r\n return nameMap[name] || name.replace(/^m/, 'm-')\r\n }\r\n return null\r\n }).filter(Boolean)\r\n \r\n Object.entries(ElementPlusComponents).forEach(([key, comp]) => {\r\n if (comp && comp.name && typeof comp.name === 'string' && comp.name.startsWith('El')) {\r\n // 将 ElOptionGroup 转换为 m-option-group\r\n const mName = 'm-' + comp.name.slice(2).replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '')\r\n \r\n // 只注册没有被自定义组件覆盖的Element Plus组件\r\n if (!customComponentNames.includes(mName)) {\r\n // 检查组件是否已经注册,避免重复注册警告\r\n if (!app._context.components[mName]) {\r\n app.component(mName, comp)\r\n }\r\n }\r\n \r\n // 存储转换后的组件用于导出\r\n const exportName = 'M' + comp.name.slice(2) // ElButton -> MButton\r\n convertedComponents[exportName] = comp\r\n }\r\n })\r\n}\r\n\r\nconst install = (app) => {\r\n // 应用全局样式覆盖\r\n if (typeof window !== 'undefined') {\r\n import('./utils/styleUtils.js').then(({ applyGlobalOverride }) => {\r\n applyGlobalOverride();\r\n });\r\n }\r\n \r\n // 先注册自定义组件\r\n components.forEach(component => {\r\n if (component && component.name && typeof component.name === 'string') {\r\n let name = component.name.toLowerCase()\r\n // 处理特定的组件名称映射\r\n const nameMap = {\r\n 'mradiogroup': 'm-radio-group',\r\n 'mradiobutton': 'm-radio-button',\r\n 'mformitem': 'm-form-item',\r\n 'moptiongroup': 'm-option-group'\r\n }\r\n name = nameMap[name] || name.replace(/^m/, 'm-')\r\n \r\n // 直接注册自定义组件,覆盖Element Plus组件\r\n app.component(name, component)\r\n }\r\n })\r\n \r\n // 然后注册转换后的 Element Plus 组件(只注册没有自定义组件覆盖的)\r\n registerElementPlus(app)\r\n}\r\n\r\nexport default { install }\r\nexport { MIcon, MButton, MCard, MInput, MForm, MFormItem, MTooltip, MSelect, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MDatePicker, MEmpty, MTable, MTableColumn, MBanner, MTabs, MTabPane }\r\n\r\n// 导出样式工具函数\r\nexport { \r\n addOverrideClass, \r\n addComponentOverride, \r\n applyGlobalOverride, \r\n forceRefreshStyles,\r\n createOverrideComponent \r\n} from './utils/styleUtils.js'\r\n\r\n// 手动导出常用的 Element Plus 函数(只导出函数,不导出组件)\r\nexport const MMessage = ElementPlusComponents.ElMessage\r\nexport const MMessageBox = ElementPlusComponents.ElMessageBox\r\n\r\n// 导出转换后的 Element Plus 组件\r\nexport const mComponents = { ...convertedComponents }\r\n\r\n// 导出常用的 Element Plus 组件\r\nexport const MButtonGroup = convertedComponents.MButtonGroup\r\nexport const MBreadcrumb = convertedComponents.MBreadcrumb\r\nexport const MBreadcrumbItem = convertedComponents.MBreadcrumbItem\r\nexport const MCarousel = convertedComponents.MCarousel\r\nexport const MCarouselItem = convertedComponents.MCarouselItem\r\nexport const MCascader = convertedComponents.MCascader\r\nexport const MCascaderPanel = convertedComponents.MCascaderPanel\r\nexport const MCheckTag = convertedComponents.MCheckTag\r\nexport const MCalendar = convertedComponents.MCalendar\r\nexport const MTimePicker = convertedComponents.MTimePicker\r\nexport const MDateTimePicker = convertedComponents.MDateTimePicker\r\nexport const MColorPicker = convertedComponents.MColorPicker\r\nexport const MTransfer = convertedComponents.MTransfer\r\nexport const MTree = convertedComponents.MTree\r\nexport const MTreeSelect = convertedComponents.MTreeSelect\r\nexport const MUpload = convertedComponents.MUpload\r\nexport const MImage = convertedComponents.MImage\r\nexport const MImageViewer = convertedComponents.MImageViewer\r\nexport const MBacktop = convertedComponents.MBacktop\r\nexport const MInfiniteScroll = convertedComponents.MInfiniteScroll\r\nexport const MAffix = convertedComponents.MAffix\r\nexport const MScrollbar = convertedComponents.MScrollbar\r\nexport const MResult = convertedComponents.MResult\r\nexport const MSkeleton = convertedComponents.MSkeleton\r\nexport const MLoading = convertedComponents.MLoading\r\nexport const MSpinner = convertedComponents.MSpinner\r\nexport const MProgress = convertedComponents.MProgress\r\nexport const MBadge = convertedComponents.MBadge\r\nexport const MAvatar = convertedComponents.MAvatar\r\nexport const MImagePreview = convertedComponents.MImagePreview\r\nexport const MTeleport = convertedComponents.MTeleport\r\nexport const MConfigProvider = convertedComponents.MConfigProvider\r\n"],"names":["props","__props","emit","__emit","iconClass","computed","classes","iconStyle","style","handleClick","event","_openBlock","_createElementBlock","_mergeProps","_createBlock","_component_el_button","_ctx","_createSlots","_renderSlot","name","_component_el_card","_component_el_form","_component_el_form_item","classNames","excludeAttrs","attrs","excludeKeys","result","__spreadValues","key","useClassName","defaultClass","excludeKey","useAttrs","mergedAttrs","className","popperClass","_component_el_tooltip","_unref","_component_el_select","_component_el_option","_normalizeProps","_guardReactiveProps","_component_el_option_group","_component_el_pagination","_component_el_radio","computedPopperClass","defaultPopperClass","_a","__objRest","_component_el_radio_button","_component_el_tag","_component_el_alert","dialogVisible","_useModel","_createVNode","_component_el_dialog","$slots","_withCtx","close","titleId","titleClass","_component_el_notification","_component_el_date_picker","availableImages","__default__","image","imageUrl","_component_el_empty","_component_el_table","_component_el_table_column","slots","useSlots","internalVisible","ref","watch","newVal","bannerStyle","defaultIcons","handleClose","__expose","_normalizeClass","_normalizeStyle","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","tabs","activeName","provide","tab","index","t","handleTabClick","__async","tabName","error","handleTabClose","handleTabAdd","_Fragment","_renderList","$event","_hoisted_4","_withModifiers","_hoisted_7","tabsContext","inject","active","onMounted","tabData","onUnmounted","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","forceRefreshStyles","selector","createOverrideComponent","componentConfig","__spreadProps","components","MIcon","MButton","MCard","MInput","MForm","MFormItem","MTooltip","MSelect","MOption","MOptionGroup","MPagination","MRadio","MRadioGroup","MRadioButton","MSwitch","MTag","MAlert","MDialog","MNotification","MDatePicker","MEmpty","MTable","MTableColumn","MBanner","MTabs","MTabPane","convertedComponents","registerElementPlus","app","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","component","MMessage","MMessageBox","mComponents","MButtonGroup","MBreadcrumb","MBreadcrumbItem","MCarousel","MCarouselItem","MCascader","MCascaderPanel","MCheckTag","MCalendar","MTimePicker","MDateTimePicker","MColorPicker","MTransfer","MTree","MTreeSelect","MUpload","MImage","MImageViewer","MBacktop","MInfiniteScroll","MAffix","MScrollbar","MResult","MSkeleton","MLoading","MSpinner","MProgress","MBadge","MAvatar","MImagePreview","MTeleport","MConfigProvider"],"mappings":"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"}
|