@mc-markets/ui 1.0.73 → 1.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +15 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/packages/components/Dialog/Dialog.vue +1 -1
- package/packages/styles/index.scss +1 -0
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/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/NotifiMessage/NotifiMessage.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-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=\"mergedAttrs\" class=\"mc-alert\">\r\n <!-- 自定义图标插槽 -->\r\n <template v-if=\"iconUrl\" #icon>\r\n <img :src=\"iconUrl\" :alt=\"`${type} icon`\" class=\"mc-alert-icon\" />\r\n </template>\r\n \r\n <!-- 其他插槽 -->\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>\r\n// 定义可选的Alert类型\r\nconst availableTypes = ['success', 'warning', 'error']\r\n\r\nexport default {\r\n name: 'MAlert'\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 type: {\r\n type: String,\r\n default: 'success',\r\n validator: (value) => availableTypes.includes(value)\r\n },\r\n useCustomIcon: {\r\n type: Boolean,\r\n default: true\r\n }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除已处理的属性,确保 type 属性正确传递\r\nconst mergedAttrs = computed(() => {\r\n const { useCustomIcon, ...rest } = attrs\r\n return {\r\n ...rest,\r\n type: props.type // 确保 type 属性正确传递给 el-alert\r\n }\r\n})\r\n\r\n// 计算图标URL\r\nconst iconUrl = computed(() => {\r\n if (!props.useCustomIcon) {\r\n return null\r\n }\r\n \r\n return `/images/alert/alert-${props.type}.png`\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-alert.el-alert {\r\n --el-alert-padding: 14px 16px;\r\n .mc-alert-icon {\r\n width: 16px;\r\n height: 16px;\r\n object-fit: contain;\r\n }\r\n .el-alert__close-btn{\r\n top: 50%;\r\n transform: translateY(-50%);\r\n }\r\n // Error 类型样式\r\n &.el-alert--error.is-light {\r\n background-color: var(--all-red-10);\r\n color: var(--text-error-primary);\r\n border-color: var(--all-red-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--text-error-primary);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n \r\n // Warning 类型样式\r\n &.el-alert--warning.is-light {\r\n background-color: var(--all-orange-10);\r\n color: var(--text-warning-primary);\r\n border-color: var(--all-orange-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--text-warning-primary);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n \r\n // Success 类型样式\r\n &.el-alert--success.is-light {\r\n background-color: var(--all-green-10);\r\n color: var(--all-green-4);\r\n border-color: var(--all-green-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--all-green-4);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n}\r\n\r\n</style>","<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\ndefineOptions({\r\n name: 'MDialog'\r\n})\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\" class=\"mc-notification\">\r\n <!-- 其他插槽 -->\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>\r\nexport default {\r\n name: \"MNotification\",\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Notification 基础样式\r\n// 如需自定义样式,可以在这里添加\r\n</style>\r\n","<template>\r\n <teleport to=\"body\">\r\n <transition-group name=\"notification\" tag=\"div\" class=\"notification-container\">\r\n <div\r\n v-for=\"notification in notifications\"\r\n :key=\"notification.id\"\r\n :class=\"[\r\n 'custom-notification',\r\n `notification-${notification.position}`\r\n ]\"\r\n >\r\n <!-- 图标 -->\r\n <div class=\"notification-icon\">\r\n <img \r\n src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/MCImages/userCenter/icon-quota-tip.png\" \r\n alt=\"notification icon\"\r\n />\r\n </div>\r\n\r\n <!-- 内容区域 -->\r\n <div class=\"notification-content\">\r\n <!-- 标题 -->\r\n <div class=\"notification-title\">{{ notification.title }}</div>\r\n \r\n <!-- 消息内容 -->\r\n <div class=\"notification-message\">{{ notification.message }}</div>\r\n \r\n <!-- 自定义插槽内容 -->\r\n <div v-if=\"notification.slotContent\" class=\"notification-action\">\r\n <component :is=\"notification.slotContent\" />\r\n </div>\r\n </div>\r\n\r\n <!-- 关闭按钮 -->\r\n <button \r\n v-if=\"notification.showClose\"\r\n class=\"notification-close\"\r\n @click=\"closeNotification(notification.id)\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </transition-group>\r\n </teleport>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue'\r\n\r\n// 全局通知列表\r\nconst notifications = ref([])\r\nlet notificationId = 0\r\n\r\n// 创建 NotifiMessage 静态方法对象\r\nconst NotifiMessage = {\r\n // 默认配置\r\n defaultOptions: {\r\n title: '',\r\n message: '',\r\n duration: 4500,\r\n position: 'top-right',\r\n showClose: true,\r\n offset: 20\r\n },\r\n\r\n // 显示通知\r\n show(options = {}) {\r\n const config = {\r\n ...this.defaultOptions,\r\n ...options,\r\n id: ++notificationId\r\n }\r\n\r\n // 添加到通知列表\r\n notifications.value.push(config)\r\n\r\n // 如果设置了自动关闭时间,则自动关闭\r\n if (config.duration > 0) {\r\n setTimeout(() => {\r\n this.close(config.id)\r\n }, config.duration)\r\n }\r\n\r\n return {\r\n close: () => this.close(config.id)\r\n }\r\n },\r\n\r\n // 关闭指定通知\r\n close(id) {\r\n const index = notifications.value.findIndex(n => n.id === id)\r\n if (index > -1) {\r\n notifications.value.splice(index, 1)\r\n }\r\n },\r\n\r\n // 关闭所有通知\r\n closeAll() {\r\n notifications.value = []\r\n },\r\n\r\n // 便捷方法\r\n success(options = {}) {\r\n return this.show(options)\r\n },\r\n\r\n warning(options = {}) {\r\n return this.show(options)\r\n },\r\n\r\n error(options = {}) {\r\n return this.show(options)\r\n }\r\n}\r\n\r\n// 关闭通知的方法\r\nconst closeNotification = (id) => {\r\n const index = notifications.value.findIndex(n => n.id === id)\r\n if (index > -1) {\r\n notifications.value.splice(index, 1)\r\n }\r\n}\r\n\r\n\r\n// Vue 组件定义\r\nexport default {\r\n name: 'MNotifiMessage',\r\n setup() {\r\n return {\r\n notifications,\r\n closeNotification\r\n }\r\n }\r\n}\r\n\r\n// 导出类供直接使用\r\nexport { NotifiMessage }\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.notification-container {\r\n position: fixed;\r\n z-index: 9999;\r\n pointer-events: none;\r\n}\r\n\r\n.custom-notification {\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n width: 400px;\r\n background: #201F24;\r\n border-radius: 12px;\r\n padding: 16px;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 4px;\r\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\r\n pointer-events: auto;\r\n z-index: 9999;\r\n \r\n // 多个通知的堆叠效果\r\n &:nth-child(2) { top: 100px; }\r\n &:nth-child(3) { top: 180px; }\r\n &:nth-child(4) { top: 260px; }\r\n &:nth-child(5) { top: 340px; }\r\n \r\n .notification-icon {\r\n flex-shrink: 0;\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n transform: translate(-9px, -8px);\r\n \r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n }\r\n \r\n .notification-content {\r\n flex: 1;\r\n \r\n .notification-title {\r\n color: #FFFFFF;\r\n font-size: 16px;\r\n font-weight: 600;\r\n margin-bottom: 8px;\r\n }\r\n \r\n .notification-message {\r\n color: rgba(255, 255, 255, 0.8);\r\n font-size: 14px;\r\n line-height: 1.5;\r\n margin-bottom: 16px;\r\n }\r\n \r\n .notification-action {\r\n .custom-action-link {\r\n color: #FFD905;\r\n font-size: 14px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n transition: all 0.2s ease;\r\n \r\n &:hover {\r\n color: #FFF;\r\n }\r\n \r\n span {\r\n line-height: 1;\r\n }\r\n \r\n .arrow {\r\n transition: transform 0.2s ease;\r\n display: flex;\r\n align-items: center;\r\n line-height: 1;\r\n }\r\n \r\n &:hover .arrow {\r\n transform: translateX(2px);\r\n }\r\n }\r\n }\r\n }\r\n \r\n .notification-close {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px;\r\n width: 24px;\r\n height: 24px;\r\n border: none;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: rgba(255, 255, 255, 0.6);\r\n border-radius: 50%;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 16px;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n \r\n &:hover {\r\n background: rgba(255, 255, 255, 0.2);\r\n color: rgba(255, 255, 255, 0.9);\r\n }\r\n }\r\n}\r\n\r\n// 动画效果\r\n.notification-enter-active {\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.notification-leave-active {\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.notification-enter-from {\r\n opacity: 0;\r\n transform: translateX(100%);\r\n}\r\n\r\n.notification-leave-to {\r\n opacity: 0;\r\n transform: translateX(100%);\r\n}\r\n\r\n.notification-move {\r\n transition: transform 0.3s ease;\r\n}\r\n\r\n// 响应式设计\r\n@media (max-width: 480px) {\r\n .custom-notification {\r\n width: calc(100vw - 40px);\r\n left: 20px !important;\r\n right: 20px !important;\r\n }\r\n}\r\n</style>\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.73\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 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 MNotifiMessage, { NotifiMessage } from './components/NotifiMessage/NotifiMessage.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, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MNotifiMessage, 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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\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 console.log('🔧 自定义组件列表:', customComponentNames)\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 console.log(`✅ 注册 Element Plus 组件: ${mName}`)\r\n } else {\r\n console.log(`⚠️ 组件 ${mName} 已存在,跳过注册`)\r\n }\r\n } else {\r\n console.log(`🎯 自定义组件覆盖: ${mName} (使用自定义组件)`)\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 console.log('🚀 开始安装 @mc-markets/ui 组件库...')\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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\r\n }\r\n name = nameMap[name] || name.replace(/^m/, 'm-')\r\n \r\n // 强制注册自定义组件,确保覆盖任何已存在的组件\r\n app.component(name, component)\r\n console.log(`🎯 注册自定义组件: ${name} (${component.name})`)\r\n }\r\n })\r\n \r\n // 然后注册转换后的 Element Plus 组件(只注册没有自定义组件覆盖的)\r\n registerElementPlus(app)\r\n \r\n console.log('✅ @mc-markets/ui 组件库安装完成!')\r\n}\r\n\r\n// 工具函数:检查组件注册状态\r\nexport function checkComponentRegistration(app) {\r\n const registeredComponents = Object.keys(app._context.components || {})\r\n const customComponents = 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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\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 console.log('📊 组件注册状态报告:')\r\n console.log('已注册的组件:', registeredComponents.filter(name => name.startsWith('m-')))\r\n console.log('自定义组件:', customComponents)\r\n \r\n return {\r\n registered: registeredComponents,\r\n custom: customComponents,\r\n conflicts: registeredComponents.filter(name => \r\n name.startsWith('m-') && customComponents.includes(name)\r\n )\r\n }\r\n}\r\n\r\nexport default { install }\r\nexport { MIcon, MButton, MInput, MForm, MFormItem, MTooltip, MSelect, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MNotifiMessage, 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// 导出 NotifiMessage 类\r\nexport { NotifiMessage }\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_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","availableTypes","__default__","useCustomIcon","rest","__spreadProps","iconUrl","_component_el_alert","dialogVisible","_useModel","_createVNode","_component_el_dialog","$slots","_withCtx","close","titleId","titleClass","_sfc_main","_component_el_notification","notifications","ref","notificationId","NotifiMessage","options","config","id","index","closeNotification","_hoisted_1","_hoisted_2","_hoisted_3","notification","_createElementVNode","_toDisplayString","_hoisted_4","$event","$setup","_component_el_date_picker","availableImages","image","imageUrl","_component_el_empty","_component_el_table","_component_el_table_column","slots","useSlots","internalVisible","watch","newVal","bannerStyle","defaultIcons","handleClose","__expose","_normalizeClass","_normalizeStyle","tabs","activeName","provide","tab","t","handleTabClick","__async","tabName","error","handleTabClose","handleTabAdd","_Fragment","_renderList","_withModifiers","_hoisted_7","tabsContext","inject","active","onMounted","tabData","onUnmounted","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","forceRefreshStyles","selector","createOverrideComponent","componentConfig","components","MIcon","MButton","MInput","MForm","MFormItem","MTooltip","MSelect","MOption","MOptionGroup","MPagination","MRadio","MRadioGroup","MRadioButton","MSwitch","MTag","MAlert","MDialog","MNotification","MNotifiMessage","MDatePicker","MEmpty","MTable","MTableColumn","MBanner","MTabs","MTabPane","convertedComponents","registerElementPlus","app","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","component","checkComponentRegistration","registeredComponents","customComponents","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/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/NotifiMessage/NotifiMessage.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-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=\"mergedAttrs\" class=\"mc-alert\">\r\n <!-- 自定义图标插槽 -->\r\n <template v-if=\"iconUrl\" #icon>\r\n <img :src=\"iconUrl\" :alt=\"`${type} icon`\" class=\"mc-alert-icon\" />\r\n </template>\r\n \r\n <!-- 其他插槽 -->\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>\r\n// 定义可选的Alert类型\r\nconst availableTypes = ['success', 'warning', 'error']\r\n\r\nexport default {\r\n name: 'MAlert'\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 type: {\r\n type: String,\r\n default: 'success',\r\n validator: (value) => availableTypes.includes(value)\r\n },\r\n useCustomIcon: {\r\n type: Boolean,\r\n default: true\r\n }\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\n// 排除已处理的属性,确保 type 属性正确传递\r\nconst mergedAttrs = computed(() => {\r\n const { useCustomIcon, ...rest } = attrs\r\n return {\r\n ...rest,\r\n type: props.type // 确保 type 属性正确传递给 el-alert\r\n }\r\n})\r\n\r\n// 计算图标URL\r\nconst iconUrl = computed(() => {\r\n if (!props.useCustomIcon) {\r\n return null\r\n }\r\n \r\n return `/images/alert/alert-${props.type}.png`\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.mc-alert.el-alert {\r\n --el-alert-padding: 14px 16px;\r\n .mc-alert-icon {\r\n width: 16px;\r\n height: 16px;\r\n object-fit: contain;\r\n }\r\n .el-alert__close-btn{\r\n top: 50%;\r\n transform: translateY(-50%);\r\n }\r\n // Error 类型样式\r\n &.el-alert--error.is-light {\r\n background-color: var(--all-red-10);\r\n color: var(--text-error-primary);\r\n border-color: var(--all-red-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--text-error-primary);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n \r\n // Warning 类型样式\r\n &.el-alert--warning.is-light {\r\n background-color: var(--all-orange-10);\r\n color: var(--text-warning-primary);\r\n border-color: var(--all-orange-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--text-warning-primary);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n \r\n // Success 类型样式\r\n &.el-alert--success.is-light {\r\n background-color: var(--all-green-10);\r\n color: var(--all-green-4);\r\n border-color: var(--all-green-10);\r\n \r\n .el-alert__title,\r\n .el-alert__description,\r\n .el-alert__close-btn {\r\n color: var(--all-green-4);\r\n }\r\n \r\n .el-alert__icon {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n}\r\n\r\n</style>","<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\ndefineOptions({\r\n name: 'MDialog'\r\n})\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\" class=\"mc-notification\">\r\n <!-- 其他插槽 -->\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>\r\nexport default {\r\n name: \"MNotification\",\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n// Notification 基础样式\r\n// 如需自定义样式,可以在这里添加\r\n</style>\r\n","<template>\r\n <teleport to=\"body\">\r\n <transition-group name=\"notification\" tag=\"div\" class=\"notification-container\">\r\n <div\r\n v-for=\"notification in notifications\"\r\n :key=\"notification.id\"\r\n :class=\"[\r\n 'custom-notification',\r\n `notification-${notification.position}`\r\n ]\"\r\n >\r\n <!-- 图标 -->\r\n <div class=\"notification-icon\">\r\n <img \r\n src=\"https://cfdsaas-pre.oss-cn-hongkong.aliyuncs.com/mc-assets/MCImages/userCenter/icon-quota-tip.png\" \r\n alt=\"notification icon\"\r\n />\r\n </div>\r\n\r\n <!-- 内容区域 -->\r\n <div class=\"notification-content\">\r\n <!-- 标题 -->\r\n <div class=\"notification-title\">{{ notification.title }}</div>\r\n \r\n <!-- 消息内容 -->\r\n <div class=\"notification-message\">{{ notification.message }}</div>\r\n \r\n <!-- 自定义插槽内容 -->\r\n <div v-if=\"notification.slotContent\" class=\"notification-action\">\r\n <component :is=\"notification.slotContent\" />\r\n </div>\r\n </div>\r\n\r\n <!-- 关闭按钮 -->\r\n <button \r\n v-if=\"notification.showClose\"\r\n class=\"notification-close\"\r\n @click=\"closeNotification(notification.id)\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </transition-group>\r\n </teleport>\r\n</template>\r\n\r\n<script>\r\nimport { ref } from 'vue'\r\n\r\n// 全局通知列表\r\nconst notifications = ref([])\r\nlet notificationId = 0\r\n\r\n// 创建 NotifiMessage 静态方法对象\r\nconst NotifiMessage = {\r\n // 默认配置\r\n defaultOptions: {\r\n title: '',\r\n message: '',\r\n duration: 4500,\r\n position: 'top-right',\r\n showClose: true,\r\n offset: 20\r\n },\r\n\r\n // 显示通知\r\n show(options = {}) {\r\n const config = {\r\n ...this.defaultOptions,\r\n ...options,\r\n id: ++notificationId\r\n }\r\n\r\n // 添加到通知列表\r\n notifications.value.push(config)\r\n\r\n // 如果设置了自动关闭时间,则自动关闭\r\n if (config.duration > 0) {\r\n setTimeout(() => {\r\n this.close(config.id)\r\n }, config.duration)\r\n }\r\n\r\n return {\r\n close: () => this.close(config.id)\r\n }\r\n },\r\n\r\n // 关闭指定通知\r\n close(id) {\r\n const index = notifications.value.findIndex(n => n.id === id)\r\n if (index > -1) {\r\n notifications.value.splice(index, 1)\r\n }\r\n },\r\n\r\n // 关闭所有通知\r\n closeAll() {\r\n notifications.value = []\r\n },\r\n\r\n // 便捷方法\r\n success(options = {}) {\r\n return this.show(options)\r\n },\r\n\r\n warning(options = {}) {\r\n return this.show(options)\r\n },\r\n\r\n error(options = {}) {\r\n return this.show(options)\r\n }\r\n}\r\n\r\n// 关闭通知的方法\r\nconst closeNotification = (id) => {\r\n const index = notifications.value.findIndex(n => n.id === id)\r\n if (index > -1) {\r\n notifications.value.splice(index, 1)\r\n }\r\n}\r\n\r\n\r\n// Vue 组件定义\r\nexport default {\r\n name: 'MNotifiMessage',\r\n setup() {\r\n return {\r\n notifications,\r\n closeNotification\r\n }\r\n }\r\n}\r\n\r\n// 导出类供直接使用\r\nexport { NotifiMessage }\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.notification-container {\r\n position: fixed;\r\n z-index: 9999;\r\n pointer-events: none;\r\n}\r\n\r\n.custom-notification {\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n width: 400px;\r\n background: #201F24;\r\n border-radius: 12px;\r\n padding: 16px;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 4px;\r\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\r\n pointer-events: auto;\r\n z-index: 9999;\r\n \r\n // 多个通知的堆叠效果\r\n &:nth-child(2) { top: 100px; }\r\n &:nth-child(3) { top: 180px; }\r\n &:nth-child(4) { top: 260px; }\r\n &:nth-child(5) { top: 340px; }\r\n \r\n .notification-icon {\r\n flex-shrink: 0;\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n transform: translate(-9px, -8px);\r\n \r\n img {\r\n width: 100%;\r\n height: 100%;\r\n object-fit: contain;\r\n }\r\n }\r\n \r\n .notification-content {\r\n flex: 1;\r\n \r\n .notification-title {\r\n color: #FFFFFF;\r\n font-size: 16px;\r\n font-weight: 600;\r\n margin-bottom: 8px;\r\n }\r\n \r\n .notification-message {\r\n color: rgba(255, 255, 255, 0.8);\r\n font-size: 14px;\r\n line-height: 1.5;\r\n margin-bottom: 16px;\r\n }\r\n \r\n .notification-action {\r\n .custom-action-link {\r\n color: #FFD905;\r\n font-size: 14px;\r\n font-weight: 500;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n transition: all 0.2s ease;\r\n \r\n &:hover {\r\n color: #FFF;\r\n }\r\n \r\n span {\r\n line-height: 1;\r\n }\r\n \r\n .arrow {\r\n transition: transform 0.2s ease;\r\n display: flex;\r\n align-items: center;\r\n line-height: 1;\r\n }\r\n \r\n &:hover .arrow {\r\n transform: translateX(2px);\r\n }\r\n }\r\n }\r\n }\r\n \r\n .notification-close {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px;\r\n width: 24px;\r\n height: 24px;\r\n border: none;\r\n background: rgba(255, 255, 255, 0.1);\r\n color: rgba(255, 255, 255, 0.6);\r\n border-radius: 50%;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 16px;\r\n line-height: 1;\r\n transition: all 0.2s ease;\r\n \r\n &:hover {\r\n background: rgba(255, 255, 255, 0.2);\r\n color: rgba(255, 255, 255, 0.9);\r\n }\r\n }\r\n}\r\n\r\n// 动画效果\r\n.notification-enter-active {\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.notification-leave-active {\r\n transition: all 0.3s ease;\r\n}\r\n\r\n.notification-enter-from {\r\n opacity: 0;\r\n transform: translateX(100%);\r\n}\r\n\r\n.notification-leave-to {\r\n opacity: 0;\r\n transform: translateX(100%);\r\n}\r\n\r\n.notification-move {\r\n transition: transform 0.3s ease;\r\n}\r\n\r\n// 响应式设计\r\n@media (max-width: 480px) {\r\n .custom-notification {\r\n width: calc(100vw - 40px);\r\n left: 20px !important;\r\n right: 20px !important;\r\n }\r\n}\r\n</style>\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.74\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 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 MNotifiMessage, { NotifiMessage } from './components/NotifiMessage/NotifiMessage.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, MInput, MForm, MFormItem, MTooltip, MSelect, MOption, MOptionGroup, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MNotifiMessage, 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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\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 console.log('🔧 自定义组件列表:', customComponentNames)\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 console.log(`✅ 注册 Element Plus 组件: ${mName}`)\r\n } else {\r\n console.log(`⚠️ 组件 ${mName} 已存在,跳过注册`)\r\n }\r\n } else {\r\n console.log(`🎯 自定义组件覆盖: ${mName} (使用自定义组件)`)\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 console.log('🚀 开始安装 @mc-markets/ui 组件库...')\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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\r\n }\r\n name = nameMap[name] || name.replace(/^m/, 'm-')\r\n \r\n // 强制注册自定义组件,确保覆盖任何已存在的组件\r\n app.component(name, component)\r\n console.log(`🎯 注册自定义组件: ${name} (${component.name})`)\r\n }\r\n })\r\n \r\n // 然后注册转换后的 Element Plus 组件(只注册没有自定义组件覆盖的)\r\n registerElementPlus(app)\r\n \r\n console.log('✅ @mc-markets/ui 组件库安装完成!')\r\n}\r\n\r\n// 工具函数:检查组件注册状态\r\nexport function checkComponentRegistration(app) {\r\n const registeredComponents = Object.keys(app._context.components || {})\r\n const customComponents = 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 'mtabs': 'm-tabs',\r\n 'mtabpane': 'm-tab-pane'\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 console.log('📊 组件注册状态报告:')\r\n console.log('已注册的组件:', registeredComponents.filter(name => name.startsWith('m-')))\r\n console.log('自定义组件:', customComponents)\r\n \r\n return {\r\n registered: registeredComponents,\r\n custom: customComponents,\r\n conflicts: registeredComponents.filter(name => \r\n name.startsWith('m-') && customComponents.includes(name)\r\n )\r\n }\r\n}\r\n\r\nexport default { install }\r\nexport { MIcon, MButton, MInput, MForm, MFormItem, MTooltip, MSelect, MPagination, MRadio, MRadioGroup, MRadioButton, MSwitch, MTag, MAlert, MDialog, MNotification, MNotifiMessage, 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// 导出 NotifiMessage 类\r\nexport { NotifiMessage }\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_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","availableTypes","__default__","useCustomIcon","rest","__spreadProps","iconUrl","_component_el_alert","dialogVisible","_useModel","_createVNode","_component_el_dialog","$slots","_withCtx","close","titleId","titleClass","_sfc_main","_component_el_notification","notifications","ref","notificationId","NotifiMessage","options","config","id","index","closeNotification","_hoisted_1","_hoisted_2","_hoisted_3","notification","_createElementVNode","_toDisplayString","_hoisted_4","$event","$setup","_component_el_date_picker","availableImages","image","imageUrl","_component_el_empty","_component_el_table","_component_el_table_column","slots","useSlots","internalVisible","watch","newVal","bannerStyle","defaultIcons","handleClose","__expose","_normalizeClass","_normalizeStyle","tabs","activeName","provide","tab","t","handleTabClick","__async","tabName","error","handleTabClose","handleTabAdd","_Fragment","_renderList","_withModifiers","_hoisted_7","tabsContext","inject","active","onMounted","tabData","onUnmounted","addOverrideClass","element","addComponentOverride","componentInstance","applyGlobalOverride","mutations","mutation","node","parent","el","forceRefreshStyles","selector","createOverrideComponent","componentConfig","components","MIcon","MButton","MInput","MForm","MFormItem","MTooltip","MSelect","MOption","MOptionGroup","MPagination","MRadio","MRadioGroup","MRadioButton","MSwitch","MTag","MAlert","MDialog","MNotification","MNotifiMessage","MDatePicker","MEmpty","MTable","MTableColumn","MBanner","MTabs","MTabPane","convertedComponents","registerElementPlus","app","customComponentNames","comp","ElementPlusComponents","mName","exportName","install","styleUtils","component","checkComponentRegistration","registeredComponents","customComponents","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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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
1
|
+
var te = Object.defineProperty, se = Object.defineProperties;
|
|
2
|
+
var oe = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var j = Object.getOwnPropertySymbols;
|
|
4
4
|
var Q = Object.prototype.hasOwnProperty, X = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var J = (t, e, o) => e in t ?
|
|
5
|
+
var J = (t, e, o) => e in t ? te(t, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : t[e] = o, T = (t, e) => {
|
|
6
6
|
for (var o in e || (e = {}))
|
|
7
7
|
Q.call(e, o) && J(t, o, e[o]);
|
|
8
8
|
if (j)
|
|
9
9
|
for (var o of j(e))
|
|
10
10
|
X.call(e, o) && J(t, o, e[o]);
|
|
11
11
|
return t;
|
|
12
|
-
}, A = (t, e) =>
|
|
12
|
+
}, A = (t, e) => se(t, oe(e));
|
|
13
13
|
var z = (t, e) => {
|
|
14
14
|
var o = {};
|
|
15
15
|
for (var s in t)
|
|
@@ -36,7 +36,7 @@ var Y = (t, e, o) => new Promise((s, a) => {
|
|
|
36
36
|
l((o = o.apply(t, e)).next());
|
|
37
37
|
});
|
|
38
38
|
import * as q from "element-plus";
|
|
39
|
-
import { computed as h, createElementBlock as $, openBlock as i, mergeProps as M, renderSlot as m, createBlock as _, createSlots as g, renderList as b, withCtx as p, useAttrs as G, unref as k, normalizeProps as F, guardReactiveProps as U, createElementVNode as C, mergeModels as K, useModel as
|
|
39
|
+
import { computed as h, createElementBlock as $, openBlock as i, mergeProps as M, renderSlot as m, createBlock as _, createSlots as g, renderList as b, withCtx as p, useAttrs as G, unref as k, normalizeProps as F, guardReactiveProps as U, createElementVNode as C, mergeModels as K, useModel as ne, createVNode as E, ref as L, Teleport as ae, TransitionGroup as re, Fragment as x, normalizeClass as I, createCommentVNode as w, toDisplayString as V, resolveDynamicComponent as le, useSlots as W, watch as R, normalizeStyle as ie, createTextVNode as ce, provide as ue, withModifiers as me, inject as pe, onMounted as de, onUnmounted as fe, withDirectives as _e, vShow as be } from "vue";
|
|
40
40
|
import { ElButton as ge, ElInput as Me, ElForm as $e, ElFormItem as ve, ElTooltip as he, ElSelect as ye, ElOption as Ce, ElOptionGroup as ke, ElPagination as Se, ElRadio as Te, ElRadioGroup as Be, ElRadioButton as we, ElSwitch as Oe, ElTag as Ee, ElAlert as Ie, ElDialog as Pe, ElNotification as Ne, ElDatePicker as je, ElEmpty as Ae, ElTable as ze, ElTableColumn as Le } from "element-plus/es";
|
|
41
41
|
import "element-plus/es/components/base/style/index";
|
|
42
42
|
import "element-plus/es/components/button/style/index";
|
|
@@ -503,7 +503,7 @@ const Ze = /* @__PURE__ */ Object.assign({
|
|
|
503
503
|
}),
|
|
504
504
|
emits: /* @__PURE__ */ K(["close"], ["update:modelValue"]),
|
|
505
505
|
setup(t, { emit: e }) {
|
|
506
|
-
const o =
|
|
506
|
+
const o = ne(t, "modelValue");
|
|
507
507
|
return (s, a) => {
|
|
508
508
|
const n = Pe;
|
|
509
509
|
return i(), $("div", null, [
|
|
@@ -520,7 +520,6 @@ const Ze = /* @__PURE__ */ Object.assign({
|
|
|
520
520
|
"header-class": "m-header"
|
|
521
521
|
}), g({
|
|
522
522
|
default: p(() => [
|
|
523
|
-
a[1] || (a[1] = x("测试组 ", -1)),
|
|
524
523
|
m(s.$slots, "default")
|
|
525
524
|
]),
|
|
526
525
|
_: 2
|
|
@@ -615,14 +614,14 @@ const vs = {
|
|
|
615
614
|
class: "notification-action"
|
|
616
615
|
}, gt = ["onClick"];
|
|
617
616
|
function Mt(t, e, o, s, a, n) {
|
|
618
|
-
return i(), _(
|
|
619
|
-
E(
|
|
617
|
+
return i(), _(ae, { to: "body" }, [
|
|
618
|
+
E(re, {
|
|
620
619
|
name: "notification",
|
|
621
620
|
tag: "div",
|
|
622
621
|
class: "notification-container"
|
|
623
622
|
}, {
|
|
624
623
|
default: p(() => [
|
|
625
|
-
(i(!0), $(
|
|
624
|
+
(i(!0), $(x, null, b(s.notifications, (r) => (i(), $("div", {
|
|
626
625
|
key: r.id,
|
|
627
626
|
class: I([
|
|
628
627
|
"custom-notification",
|
|
@@ -639,7 +638,7 @@ function Mt(t, e, o, s, a, n) {
|
|
|
639
638
|
C("div", ft, V(r.title), 1),
|
|
640
639
|
C("div", _t, V(r.message), 1),
|
|
641
640
|
r.slotContent ? (i(), $("div", bt, [
|
|
642
|
-
(i(), _(
|
|
641
|
+
(i(), _(le(r.slotContent)))
|
|
643
642
|
])) : w("", !0)
|
|
644
643
|
]),
|
|
645
644
|
r.showClose ? (i(), $("button", {
|
|
@@ -860,7 +859,7 @@ const $t = /* @__PURE__ */ O(pt, [["render", Mt]]), vt = /* @__PURE__ */ Object.
|
|
|
860
859
|
"m-banner--with-icon": t.icon || k(s).icon
|
|
861
860
|
}
|
|
862
861
|
]]),
|
|
863
|
-
style:
|
|
862
|
+
style: ie(l.value)
|
|
864
863
|
}, [
|
|
865
864
|
C("div", Tt, [
|
|
866
865
|
t.icon || k(s).icon ? (i(), $("div", Bt, [
|
|
@@ -873,7 +872,7 @@ const $t = /* @__PURE__ */ O(pt, [["render", Mt]]), vt = /* @__PURE__ */ Object.
|
|
|
873
872
|
])) : w("", !0),
|
|
874
873
|
C("div", wt, [
|
|
875
874
|
m(u.$slots, "default", {}, () => [
|
|
876
|
-
|
|
875
|
+
ce(V(t.content), 1)
|
|
877
876
|
], !0)
|
|
878
877
|
]),
|
|
879
878
|
t.closable ? (i(), $("div", {
|
|
@@ -979,7 +978,7 @@ const $t = /* @__PURE__ */ O(pt, [["render", Mt]]), vt = /* @__PURE__ */ Object.
|
|
|
979
978
|
}, [
|
|
980
979
|
C("div", It, [
|
|
981
980
|
C("div", Pt, [
|
|
982
|
-
(i(!0), $(
|
|
981
|
+
(i(!0), $(x, null, b(n.value, (f, S) => {
|
|
983
982
|
var H;
|
|
984
983
|
return i(), $("div", {
|
|
985
984
|
key: f.name || S,
|
|
@@ -991,7 +990,7 @@ const $t = /* @__PURE__ */ O(pt, [["render", Mt]]), vt = /* @__PURE__ */ Object.
|
|
|
991
990
|
"m-tabs__item--closable": f.closable
|
|
992
991
|
}
|
|
993
992
|
]),
|
|
994
|
-
onClick: (
|
|
993
|
+
onClick: (ee) => l(f, S)
|
|
995
994
|
}, [
|
|
996
995
|
C("span", jt, [
|
|
997
996
|
(H = f.$slots) != null && H.label ? m(u.$slots, `tab-${f.name || S}`, { key: 0 }, void 0, !0) : (i(), $("span", At, V(f.label), 1))
|
|
@@ -999,7 +998,7 @@ const $t = /* @__PURE__ */ O(pt, [["render", Mt]]), vt = /* @__PURE__ */ Object.
|
|
|
999
998
|
f.closable ? (i(), $("span", {
|
|
1000
999
|
key: 0,
|
|
1001
1000
|
class: "m-tabs__item-close",
|
|
1002
|
-
onClick: me((
|
|
1001
|
+
onClick: me((ee) => d(f, S), ["stop"])
|
|
1003
1002
|
}, [
|
|
1004
1003
|
E(P, {
|
|
1005
1004
|
name: "lucide-x",
|