@chenpeng001/my-antd-extend 1.0.0

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/README.md ADDED
@@ -0,0 +1,172 @@
1
+ # Vue 3 + Vite
2
+
3
+ This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
+
5
+ Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
6
+
7
+ my-antd-extend/
8
+ ├── packages/ # 组件库源码
9
+ │ ├── MyButton/
10
+ │ │ ├── index.vue
11
+ │ │ └── index.js
12
+ │ ├── MyInput/
13
+ │ │ ├── index.vue
14
+ │ │ └── index.js
15
+ │ ├── MyTable/
16
+ │ │ ├── index.vue
17
+ │ │ └── index.js
18
+ │ └── index.js # 统一导出入口
19
+ ├── examples/ # 开发环境示例
20
+ │ ├── App.vue
21
+ │ └── main.js
22
+ ├── dist/ # 打包输出目录
23
+ ├── index.html
24
+ ├── package.json
25
+ ├── vite.config.js
26
+ └── README.md
27
+
28
+ 1. 创建项目
29
+ # 创建项目
30
+ npm create vite@latest my-antd-extend -- --template vue
31
+ cd my-antd-extend
32
+
33
+ # 安装依赖
34
+ npm install ant-design-vue vue-router@4
35
+
36
+ # 安装开发依赖
37
+ npm install -D @vitejs/plugin-vue-jsx
38
+
39
+ 2. 调整目录结构
40
+ <!DOCTYPE html>
41
+ <html lang="zh-CN">
42
+ <head>
43
+ <meta charset="UTF-8" />
44
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
45
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
46
+ <title>My Antd Extend</title>
47
+ </head>
48
+ <body>
49
+ <div id="app"></div>
50
+ <script type="module" src="/examples/main.js"></script>
51
+ </body>
52
+ </html>
53
+
54
+ 3. 编写组件
55
+ 组件1: MyButton (packages/MyButton/index.vue)
56
+ <template>
57
+ <a-button
58
+ v-bind="$attrs"
59
+ v-on="$listeners"
60
+ :type="type"
61
+ :size="size"
62
+ :loading="loading"
63
+ :class="['my-btn', customClass]"
64
+ >
65
+ <!-- 支持图标插槽 -->
66
+ <template #icon v-if="$slots.icon">
67
+ <slot name="icon" />
68
+ </template>
69
+ <!-- 默认插槽显示文本 -->
70
+ <slot />
71
+ </a-button>
72
+ </template>
73
+
74
+ <script>
75
+ export default {
76
+ name: 'MyButton',
77
+ inheritAttrs: false,
78
+ props: {
79
+ // 按钮类型
80
+ type: {
81
+ type: String,
82
+ default: 'primary',
83
+ validator: (val) => ['primary', 'default', 'dashed', 'text', 'link'].includes(val)
84
+ },
85
+ // 按钮大小
86
+ size: {
87
+ type: String,
88
+ default: 'default',
89
+ validator: (val) => ['large', 'default', 'small'].includes(val)
90
+ },
91
+ // 加载状态
92
+ loading: {
93
+ type: Boolean,
94
+ default: false
95
+ },
96
+ // 自定义样式类
97
+ customClass: {
98
+ type: String,
99
+ default: ''
100
+ },
101
+ // 是否显示确认弹窗
102
+ confirmBefore: {
103
+ type: Boolean,
104
+ default: false
105
+ },
106
+ confirmText: {
107
+ type: String,
108
+ default: '确定执行此操作吗?'
109
+ }
110
+ },
111
+ methods: {
112
+ handleClick(event) {
113
+ // 如果有确认弹窗,先弹窗再执行
114
+ if (this.confirmBefore) {
115
+ this.$confirm({
116
+ title: '提示',
117
+ content: this.confirmText,
118
+ onOk: () => {
119
+ this.$emit('click', event)
120
+ }
121
+ })
122
+ } else {
123
+ this.$emit('click', event)
124
+ }
125
+ }
126
+ }
127
+ }
128
+ </script>
129
+
130
+ <style scoped>
131
+ .my-btn {
132
+ /* 添加业务默认样式 */
133
+ border-radius: 6px;
134
+ font-weight: 500;
135
+ transition: all 0.3s;
136
+ }
137
+
138
+ /* 自定义业务主题色 */
139
+ .my-btn-primary {
140
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
141
+ border: none;
142
+ }
143
+
144
+ .my-btn-primary:hover {
145
+ background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
146
+ transform: translateY(-2px);
147
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
148
+ }
149
+ </style>
150
+
151
+ # My Antd Extend
152
+
153
+ 基于 Ant Design Vue 3 二次封装的组件库。
154
+
155
+ ## 安装
156
+
157
+ ```bash
158
+ npm install @your-name/my-antd-extend
159
+ # or
160
+ pnpm add @your-name/my-antd-extend
161
+
162
+ 使用
163
+ 全局注册
164
+
165
+ import { createApp } from 'vue'
166
+ import MyAntdExtend from '@your-name/my-antd-extend'
167
+ import 'ant-design-vue/dist/reset.css'
168
+ import App from './App.vue'
169
+
170
+ const app = createApp(App)
171
+ app.use(MyAntdExtend)
172
+ app.mount('#app')
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
package/dist/icons.svg ADDED
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <symbol id="bluesky-icon" viewBox="0 0 16 17">
3
+ <g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
4
+ <defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
5
+ </symbol>
6
+ <symbol id="discord-icon" viewBox="0 0 20 19">
7
+ <path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
8
+ </symbol>
9
+ <symbol id="documentation-icon" viewBox="0 0 21 20">
10
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
11
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
12
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
13
+ </symbol>
14
+ <symbol id="github-icon" viewBox="0 0 19 19">
15
+ <path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
16
+ </symbol>
17
+ <symbol id="social-icon" viewBox="0 0 20 20">
18
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
19
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
20
+ </symbol>
21
+ <symbol id="x-icon" viewBox="0 0 19 19">
22
+ <path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
23
+ </symbol>
24
+ </svg>
@@ -0,0 +1,2 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("vue");var t=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},n={name:`MyButton`,inheritAttrs:!1,props:{type:{type:String,default:`primary`,validator:e=>[`primary`,`default`,`dashed`,`text`,`link`].includes(e)},size:{type:String,default:`default`,validator:e=>[`large`,`default`,`small`].includes(e)},loading:{type:Boolean,default:!1},customClass:{type:String,default:``},confirmBefore:{type:Boolean,default:!1},confirmText:{type:String,default:`确定执行此操作吗?`}},methods:{handleClick(e){this.confirmBefore?this.$confirm({title:`提示`,content:this.confirmText,onOk:()=>{this.$emit(`click`,e)}}):this.$emit(`click`,e)}}};function r(t,n,r,i,a,o){let s=(0,e.resolveComponent)(`a-button`);return(0,e.openBlock)(),(0,e.createBlock)(s,(0,e.mergeProps)(t.$attrs,(0,e.toHandlers)(t.$listeners),{type:r.type,size:r.size,loading:r.loading,class:[`my-btn`,r.customClass]}),(0,e.createSlots)({default:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`default`,{},void 0,!0)]),_:2},[t.$slots.icon?{name:`icon`,fn:(0,e.withCtx)(()=>[(0,e.renderSlot)(t.$slots,`icon`,{},void 0,!0)]),key:`0`}:void 0]),1040,[`type`,`size`,`loading`,`class`])}var i=t(n,[[`render`,r],[`__scopeId`,`data-v-33c74d35`]]);i.install=e=>{e.component(i.name,i)};var a=i,o={name:`MyInput`,inheritAttrs:!1,props:{value:{type:[String,Number],default:``},placeholder:{type:String,default:`请输入`},size:{type:String,default:`default`},maxLength:{type:Number,default:0},showCount:{type:Boolean,default:!1},trim:{type:Boolean,default:!1}},data(){return{currentLength:0}},watch:{value:{immediate:!0,handler(e){this.currentLength=String(e||``).length}}},methods:{handleInput(e){let t=e.target.value;this.maxLength>0&&t.length>this.maxLength&&(t=t.slice(0,this.maxLength)),this.trim&&(t=t.trim()),this.currentLength=t.length,this.$emit(`input`,t),this.$emit(`update:value`,t)},handlePressEnter(e){this.$emit(`pressEnter`,e)}}},s={class:`my-input-wrapper`},c={key:0,class:`input-count`};function l(t,n,r,i,a,o){let l=(0,e.resolveComponent)(`a-input`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,s,[(0,e.createVNode)(l,(0,e.mergeProps)(t.$attrs,(0,e.toHandlers)(t.$listeners),{value:r.value,placeholder:r.placeholder||`请输入`,size:r.size,onInput:o.handleInput,onPressEnter:o.handlePressEnter}),(0,e.createSlots)({_:2},[(0,e.renderList)(t.$slots,(n,r)=>({name:r,fn:(0,e.withCtx)(n=>[(0,e.renderSlot)(t.$slots,r,(0,e.normalizeProps)((0,e.guardReactiveProps)(n)),void 0,!0)])}))]),1040,[`value`,`placeholder`,`size`,`onInput`,`onPressEnter`]),r.showCount&&r.maxLength?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,c,(0,e.toDisplayString)(a.currentLength)+` / `+(0,e.toDisplayString)(r.maxLength),1)):(0,e.createCommentVNode)(``,!0)])}var u=t(o,[[`render`,l],[`__scopeId`,`data-v-496504de`]]);u.install=e=>{e.component(u.name,u)};var d=u,f={name:`MyTable`,components:{MyButton:i},inheritAttrs:!1,props:{dataSource:{type:Array,default:()=>[]},columns:{type:Array,default:()=>[]},showIndex:{type:Boolean,default:!1},indexTitle:{type:String,default:`序号`},bordered:{type:Boolean,default:!0},size:{type:String,default:`middle`},loading:{type:Boolean,default:!1},rowKey:{type:String,default:`id`},pagination:{type:Object,default:()=>({})},showToolbar:{type:Boolean,default:!0},showRefresh:{type:Boolean,default:!0},showTotal:{type:Boolean,default:!0}},computed:{mergedColumns(){let e=[...this.columns];return this.showIndex&&(e=[{title:this.indexTitle+`1`,key:this.rowKey,dataIndex:this.rowKey,width:100},...e]),e},mergedPagination(){return{current:1,pageSize:10,showSizeChanger:!0,showQuickJumper:!0,pageSizeOptions:[`10`,`20`,`50`,`100`],showTotal:this.showTotal?e=>`共 ${e} 条`:void 0,...this.pagination}}},methods:{handleTableChange(e,t,n){this.$emit(`tableChange`,{pagination:e,filters:t,sorter:n}),this.$emit(`change`,e,t,n)},handleRefresh(){this.$emit(`refresh`)}}},p={class:`my-table-wrapper`},m={key:0,class:`table-toolbar`},h={class:`toolbar-left`},g={class:`toolbar-right`};function _(t,n,r,i,a,o){let s=(0,e.resolveComponent)(`my-button`),c=(0,e.resolveComponent)(`a-table`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,p,[r.showToolbar?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,m,[(0,e.createElementVNode)(`div`,h,[(0,e.renderSlot)(t.$slots,`toolbar-left`,{},void 0,!0)]),(0,e.createElementVNode)(`div`,g,[(0,e.renderSlot)(t.$slots,`toolbar-right`,{},()=>[r.showRefresh?((0,e.openBlock)(),(0,e.createBlock)(s,{key:0,size:`small`,onClick:o.handleRefresh},{default:(0,e.withCtx)(()=>[...n[0]||=[(0,e.createTextVNode)(` 刷新 `,-1)]]),_:1},8,[`onClick`])):(0,e.createCommentVNode)(``,!0)],!0)])])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(c,(0,e.mergeProps)(t.$attrs,(0,e.toHandlers)(t.$listeners),{columns:o.mergedColumns,"data-source":r.dataSource,pagination:o.mergedPagination,loading:r.loading,"row-key":r.rowKey||`id`,bordered:r.bordered,size:r.size,onChange:o.handleTableChange}),(0,e.createSlots)({_:2},[(0,e.renderList)(t.$slots,(n,r)=>({name:r,fn:(0,e.withCtx)(n=>[(0,e.renderSlot)(t.$slots,r,(0,e.normalizeProps)((0,e.guardReactiveProps)(n)),void 0,!0)])}))]),1040,[`columns`,`data-source`,`pagination`,`loading`,`row-key`,`bordered`,`size`,`onChange`])])}var v=t(f,[[`render`,_],[`__scopeId`,`data-v-71012379`]]);v.install=e=>{e.component(v.name,v)};var y=v,b=[a,d,y],x=(e,t={})=>{b.forEach(t=>{t.install?e.use(t):e.component(t.name,t)}),t.theme&&e.provide(`theme`,t.theme)},S={install:x,MyButton:a,MyInput:d,MyTable:y,version:`1.0.0`};exports.MyButton=a,exports.MyInput=d,exports.MyTable=y,exports.default=S,exports.install=x;
2
+ //# sourceMappingURL=my-antd-extend.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"my-antd-extend.cjs.js","names":["MyButton","MyInput","MyTable","MyButton","MyInput","MyTable"],"sources":["../packages/MyButton/index.vue","../packages/MyButton/index.js","../packages/MyInput/index.vue","../packages/MyInput/index.js","../packages/MyTable/index.vue","../packages/MyTable/index.js","../packages/index.js"],"sourcesContent":["<template>\r\n <a-button\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :type=\"type\"\r\n :size=\"size\"\r\n :loading=\"loading\"\r\n :class=\"['my-btn', customClass]\"\r\n >\r\n <!-- 支持图标插槽 -->\r\n <template #icon v-if=\"$slots.icon\">\r\n <slot name=\"icon\" />\r\n </template>\r\n <!-- 默认插槽显示文本 -->\r\n <slot />\r\n </a-button>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyButton\",\r\n inheritAttrs: false,\r\n props: {\r\n // 按钮类型\r\n type: {\r\n type: String,\r\n default: \"primary\",\r\n validator: (val) =>\r\n [\"primary\", \"default\", \"dashed\", \"text\", \"link\"].includes(val),\r\n },\r\n // 按钮大小\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n validator: (val) => [\"large\", \"default\", \"small\"].includes(val),\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 自定义样式类\r\n customClass: {\r\n type: String,\r\n default: \"\",\r\n },\r\n // 是否显示确认弹窗\r\n confirmBefore: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n confirmText: {\r\n type: String,\r\n default: \"确定执行此操作吗?\",\r\n },\r\n },\r\n methods: {\r\n handleClick(event) {\r\n // 如果有确认弹窗,先弹窗再执行\r\n if (this.confirmBefore) {\r\n this.$confirm({\r\n title: \"提示\",\r\n content: this.confirmText,\r\n onOk: () => {\r\n this.$emit(\"click\", event);\r\n },\r\n });\r\n } else {\r\n this.$emit(\"click\", event);\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-btn {\r\n /* 添加业务默认样式 */\r\n border-radius: 6px;\r\n font-weight: 500;\r\n transition: all 0.3s;\r\n}\r\n\r\n/* 自定义业务主题色 */\r\n.my-btn-primary {\r\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n border: none;\r\n}\r\n\r\n.my-btn-primary:hover {\r\n background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);\r\n transform: translateY(-2px);\r\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\r\n}\r\n</style>","import MyButton from './index.vue'\r\n\r\nMyButton.install = (app) => {\r\n app.component(MyButton.name, MyButton)\r\n}\r\n\r\nexport default MyButton","<template>\r\n <div class=\"my-input-wrapper\">\r\n <a-input\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :value=\"value\"\r\n :placeholder=\"placeholder || '请输入'\"\r\n :size=\"size\"\r\n @input=\"handleInput\"\r\n @pressEnter=\"handlePressEnter\"\r\n >\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-input>\r\n <!-- 字数统计 -->\r\n <span v-if=\"showCount && maxLength\" class=\"input-count\">\r\n {{ currentLength }} / {{ maxLength }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyInput\",\r\n inheritAttrs: false,\r\n props: {\r\n value: {\r\n type: [String, Number],\r\n default: \"\",\r\n },\r\n placeholder: {\r\n type: String,\r\n default: \"请输入\",\r\n },\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n },\r\n maxLength: {\r\n type: Number,\r\n default: 0,\r\n },\r\n showCount: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 是否自动去除首尾空格\r\n trim: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n currentLength: 0,\r\n };\r\n },\r\n watch: {\r\n value: {\r\n immediate: true,\r\n handler(val) {\r\n this.currentLength = String(val || \"\").length;\r\n },\r\n },\r\n },\r\n methods: {\r\n handleInput(event) {\r\n let value = event.target.value;\r\n\r\n // 字数限制\r\n if (this.maxLength > 0 && value.length > this.maxLength) {\r\n value = value.slice(0, this.maxLength);\r\n }\r\n\r\n // 去除空格\r\n if (this.trim) {\r\n value = value.trim();\r\n }\r\n\r\n this.currentLength = value.length;\r\n this.$emit(\"input\", value);\r\n this.$emit(\"update:value\", value);\r\n },\r\n handlePressEnter(event) {\r\n this.$emit(\"pressEnter\", event);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-input-wrapper {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n\r\n.input-count {\r\n position: absolute;\r\n right: 12px;\r\n bottom: 4px;\r\n font-size: 12px;\r\n color: #999;\r\n pointer-events: none;\r\n}\r\n\r\n/* 自定义输入框样式 */\r\n:deep(.ant-input) {\r\n border-radius: 6px;\r\n transition: all 0.3s;\r\n}\r\n\r\n:deep(.ant-input:focus) {\r\n border-color: #667eea;\r\n box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2);\r\n}\r\n\r\n:deep(.ant-input:hover) {\r\n border-color: #667eea;\r\n}\r\n</style>","import MyInput from './index.vue'\r\n\r\nMyInput.install = (app) => {\r\n app.component(MyInput.name, MyInput)\r\n}\r\n\r\nexport default MyInput","<template>\r\n <div class=\"my-table-wrapper\">\r\n <!-- 表格工具栏 -->\r\n <div v-if=\"showToolbar\" class=\"table-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <slot name=\"toolbar-left\" />\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-right\">\r\n <my-button v-if=\"showRefresh\" size=\"small\" @click=\"handleRefresh\">\r\n 刷新\r\n </my-button>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <!-- 表格 -->\r\n <a-table\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :columns=\"mergedColumns\"\r\n :data-source=\"dataSource\"\r\n :pagination=\"mergedPagination\"\r\n :loading=\"loading\"\r\n :row-key=\"rowKey || 'id'\"\r\n :bordered=\"bordered\"\r\n :size=\"size\"\r\n @change=\"handleTableChange\"\r\n >\r\n <!-- 透传所有插槽 -->\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-table>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport MyButton from \"../MyButton/index.vue\";\r\n\r\nexport default {\r\n name: \"MyTable\",\r\n components: {\r\n MyButton,\r\n },\r\n inheritAttrs: false,\r\n props: {\r\n // 数据源\r\n dataSource: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 列配置\r\n columns: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 是否显示序号列\r\n showIndex: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 序号列标题\r\n indexTitle: {\r\n type: String,\r\n default: \"序号\",\r\n },\r\n // 是否显示边框\r\n bordered: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 表格大小\r\n size: {\r\n type: String,\r\n default: \"middle\",\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 行唯一标识\r\n rowKey: {\r\n type: String,\r\n default: \"id\",\r\n },\r\n // 分页配置\r\n pagination: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n // 是否显示工具栏\r\n showToolbar: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示刷新按钮\r\n showRefresh: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示总条数\r\n showTotal: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n computed: {\r\n // 合并列配置(添加序号列)\r\n mergedColumns() {\r\n let cols = [...this.columns];\r\n if (this.showIndex) {\r\n cols = [\r\n {\r\n title: this.indexTitle + \"1\",\r\n key: this.rowKey,\r\n dataIndex: this.rowKey,\r\n width: 100,\r\n },\r\n ...cols,\r\n ];\r\n }\r\n\r\n return cols;\r\n },\r\n // 合并分页配置\r\n mergedPagination() {\r\n const defaultPagination = {\r\n current: 1,\r\n pageSize: 10,\r\n showSizeChanger: true,\r\n showQuickJumper: true,\r\n pageSizeOptions: [\"10\", \"20\", \"50\", \"100\"],\r\n showTotal: this.showTotal ? (total) => `共 ${total} 条` : undefined,\r\n };\r\n\r\n return {\r\n ...defaultPagination,\r\n ...this.pagination,\r\n };\r\n },\r\n },\r\n methods: {\r\n // 表格变化事件(分页、排序等)\r\n handleTableChange(pagination, filters, sorter) {\r\n this.$emit(\"tableChange\", { pagination, filters, sorter });\r\n this.$emit(\"change\", pagination, filters, sorter);\r\n },\r\n // 刷新按钮\r\n handleRefresh() {\r\n this.$emit(\"refresh\");\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-table-wrapper {\r\n background: #fff;\r\n border-radius: 8px;\r\n padding: 16px;\r\n}\r\n\r\n.table-toolbar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.toolbar-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.toolbar-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n/* 自定义表格样式 */\r\n:deep(.ant-table) {\r\n border-radius: 6px;\r\n}\r\n\r\n:deep(.ant-table-thead > tr > th) {\r\n background: #fafafa;\r\n font-weight: 600;\r\n color: #262626;\r\n}\r\n\r\n:deep(.ant-table-tbody > tr:hover > td) {\r\n background: #f0f4ff;\r\n}\r\n\r\n:deep(.ant-pagination) {\r\n margin-top: 16px;\r\n}\r\n</style>","import MyTable from './index.vue'\r\n\r\nMyTable.install = (app) => {\r\n app.component(MyTable.name, MyTable)\r\n}\r\n\r\nexport default MyTable","// 导入所有组件\r\nimport MyButton from './MyButton/index'\r\nimport MyInput from './MyInput/index'\r\nimport MyTable from './MyTable/index'\r\n\r\n// 组件列表\r\nconst components = [\r\n MyButton,\r\n MyInput,\r\n MyTable\r\n]\r\n\r\n// 定义 install 方法\r\nconst install = (app, options = {}) => {\r\n // 注册所有组件\r\n components.forEach(component => {\r\n if (component.install) {\r\n app.use(component)\r\n } else {\r\n app.component(component.name, component)\r\n }\r\n })\r\n\r\n // 可以传入全局配置\r\n if (options.theme) {\r\n // 注入全局主题配置\r\n app.provide('theme', options.theme)\r\n }\r\n}\r\n\r\n// 支持按需引入\r\nexport {\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n install\r\n}\r\n\r\n// 默认导出(支持 Vue.use)\r\nexport default {\r\n install,\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n version: '1.0.0'\r\n}"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ .my-btn[data-v-33c74d35]{border-radius:6px;font-weight:500;transition:all .3s}.my-btn-primary[data-v-33c74d35]{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border:none}.my-btn-primary[data-v-33c74d35]:hover{background:linear-gradient(135deg,#764ba2 0%,#667eea 100%);transform:translateY(-2px);box-shadow:0 4px 12px #667eea66}.my-input-wrapper[data-v-496504de]{width:100%;display:inline-block;position:relative}.input-count[data-v-496504de]{color:#999;pointer-events:none;font-size:12px;position:absolute;bottom:4px;right:12px}[data-v-496504de] .ant-input{border-radius:6px;transition:all .3s}[data-v-496504de] .ant-input:focus{border-color:#667eea;box-shadow:0 0 0 2px #667eea33}[data-v-496504de] .ant-input:hover{border-color:#667eea}.my-table-wrapper[data-v-71012379]{background:#fff;border-radius:8px;padding:16px}.table-toolbar[data-v-71012379]{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.toolbar-left[data-v-71012379],.toolbar-right[data-v-71012379]{align-items:center;gap:8px;display:flex}[data-v-71012379] .ant-table{border-radius:6px}[data-v-71012379] .ant-table-thead>tr>th{color:#262626;background:#fafafa;font-weight:600}[data-v-71012379] .ant-table-tbody>tr:hover>td{background:#f0f4ff}[data-v-71012379] .ant-pagination{margin-top:16px}
2
+ /*$vite$:1*/
@@ -0,0 +1,314 @@
1
+ import { createBlock as e, createCommentVNode as t, createElementBlock as n, createElementVNode as r, createSlots as i, createTextVNode as a, createVNode as o, guardReactiveProps as s, mergeProps as c, normalizeProps as l, openBlock as u, renderList as d, renderSlot as f, resolveComponent as p, toDisplayString as m, toHandlers as h, withCtx as g } from "vue";
2
+ //#region \0plugin-vue:export-helper
3
+ var _ = (e, t) => {
4
+ let n = e.__vccOpts || e;
5
+ for (let [e, r] of t) n[e] = r;
6
+ return n;
7
+ }, v = {
8
+ name: "MyButton",
9
+ inheritAttrs: !1,
10
+ props: {
11
+ type: {
12
+ type: String,
13
+ default: "primary",
14
+ validator: (e) => [
15
+ "primary",
16
+ "default",
17
+ "dashed",
18
+ "text",
19
+ "link"
20
+ ].includes(e)
21
+ },
22
+ size: {
23
+ type: String,
24
+ default: "default",
25
+ validator: (e) => [
26
+ "large",
27
+ "default",
28
+ "small"
29
+ ].includes(e)
30
+ },
31
+ loading: {
32
+ type: Boolean,
33
+ default: !1
34
+ },
35
+ customClass: {
36
+ type: String,
37
+ default: ""
38
+ },
39
+ confirmBefore: {
40
+ type: Boolean,
41
+ default: !1
42
+ },
43
+ confirmText: {
44
+ type: String,
45
+ default: "确定执行此操作吗?"
46
+ }
47
+ },
48
+ methods: { handleClick(e) {
49
+ this.confirmBefore ? this.$confirm({
50
+ title: "提示",
51
+ content: this.confirmText,
52
+ onOk: () => {
53
+ this.$emit("click", e);
54
+ }
55
+ }) : this.$emit("click", e);
56
+ } }
57
+ };
58
+ function y(t, n, r, a, o, s) {
59
+ let l = p("a-button");
60
+ return u(), e(l, c(t.$attrs, h(t.$listeners), {
61
+ type: r.type,
62
+ size: r.size,
63
+ loading: r.loading,
64
+ class: ["my-btn", r.customClass]
65
+ }), i({
66
+ default: g(() => [f(t.$slots, "default", {}, void 0, !0)]),
67
+ _: 2
68
+ }, [t.$slots.icon ? {
69
+ name: "icon",
70
+ fn: g(() => [f(t.$slots, "icon", {}, void 0, !0)]),
71
+ key: "0"
72
+ } : void 0]), 1040, [
73
+ "type",
74
+ "size",
75
+ "loading",
76
+ "class"
77
+ ]);
78
+ }
79
+ var b = /*#__PURE__*/ _(v, [["render", y], ["__scopeId", "data-v-33c74d35"]]);
80
+ //#endregion
81
+ //#region packages/MyButton/index.js
82
+ b.install = (e) => {
83
+ e.component(b.name, b);
84
+ };
85
+ var x = b, S = {
86
+ name: "MyInput",
87
+ inheritAttrs: !1,
88
+ props: {
89
+ value: {
90
+ type: [String, Number],
91
+ default: ""
92
+ },
93
+ placeholder: {
94
+ type: String,
95
+ default: "请输入"
96
+ },
97
+ size: {
98
+ type: String,
99
+ default: "default"
100
+ },
101
+ maxLength: {
102
+ type: Number,
103
+ default: 0
104
+ },
105
+ showCount: {
106
+ type: Boolean,
107
+ default: !1
108
+ },
109
+ trim: {
110
+ type: Boolean,
111
+ default: !1
112
+ }
113
+ },
114
+ data() {
115
+ return { currentLength: 0 };
116
+ },
117
+ watch: { value: {
118
+ immediate: !0,
119
+ handler(e) {
120
+ this.currentLength = String(e || "").length;
121
+ }
122
+ } },
123
+ methods: {
124
+ handleInput(e) {
125
+ let t = e.target.value;
126
+ this.maxLength > 0 && t.length > this.maxLength && (t = t.slice(0, this.maxLength)), this.trim && (t = t.trim()), this.currentLength = t.length, this.$emit("input", t), this.$emit("update:value", t);
127
+ },
128
+ handlePressEnter(e) {
129
+ this.$emit("pressEnter", e);
130
+ }
131
+ }
132
+ }, C = { class: "my-input-wrapper" }, w = {
133
+ key: 0,
134
+ class: "input-count"
135
+ };
136
+ function T(e, r, a, _, v, y) {
137
+ let b = p("a-input");
138
+ return u(), n("div", C, [o(b, c(e.$attrs, h(e.$listeners), {
139
+ value: a.value,
140
+ placeholder: a.placeholder || "请输入",
141
+ size: a.size,
142
+ onInput: y.handleInput,
143
+ onPressEnter: y.handlePressEnter
144
+ }), i({ _: 2 }, [d(e.$slots, (t, n) => ({
145
+ name: n,
146
+ fn: g((t) => [f(e.$slots, n, l(s(t)), void 0, !0)])
147
+ }))]), 1040, [
148
+ "value",
149
+ "placeholder",
150
+ "size",
151
+ "onInput",
152
+ "onPressEnter"
153
+ ]), a.showCount && a.maxLength ? (u(), n("span", w, m(v.currentLength) + " / " + m(a.maxLength), 1)) : t("", !0)]);
154
+ }
155
+ var E = /*#__PURE__*/ _(S, [["render", T], ["__scopeId", "data-v-496504de"]]);
156
+ //#endregion
157
+ //#region packages/MyInput/index.js
158
+ E.install = (e) => {
159
+ e.component(E.name, E);
160
+ };
161
+ var D = E, O = {
162
+ name: "MyTable",
163
+ components: { MyButton: b },
164
+ inheritAttrs: !1,
165
+ props: {
166
+ dataSource: {
167
+ type: Array,
168
+ default: () => []
169
+ },
170
+ columns: {
171
+ type: Array,
172
+ default: () => []
173
+ },
174
+ showIndex: {
175
+ type: Boolean,
176
+ default: !1
177
+ },
178
+ indexTitle: {
179
+ type: String,
180
+ default: "序号"
181
+ },
182
+ bordered: {
183
+ type: Boolean,
184
+ default: !0
185
+ },
186
+ size: {
187
+ type: String,
188
+ default: "middle"
189
+ },
190
+ loading: {
191
+ type: Boolean,
192
+ default: !1
193
+ },
194
+ rowKey: {
195
+ type: String,
196
+ default: "id"
197
+ },
198
+ pagination: {
199
+ type: Object,
200
+ default: () => ({})
201
+ },
202
+ showToolbar: {
203
+ type: Boolean,
204
+ default: !0
205
+ },
206
+ showRefresh: {
207
+ type: Boolean,
208
+ default: !0
209
+ },
210
+ showTotal: {
211
+ type: Boolean,
212
+ default: !0
213
+ }
214
+ },
215
+ computed: {
216
+ mergedColumns() {
217
+ let e = [...this.columns];
218
+ return this.showIndex && (e = [{
219
+ title: this.indexTitle + "1",
220
+ key: this.rowKey,
221
+ dataIndex: this.rowKey,
222
+ width: 100
223
+ }, ...e]), e;
224
+ },
225
+ mergedPagination() {
226
+ return {
227
+ current: 1,
228
+ pageSize: 10,
229
+ showSizeChanger: !0,
230
+ showQuickJumper: !0,
231
+ pageSizeOptions: [
232
+ "10",
233
+ "20",
234
+ "50",
235
+ "100"
236
+ ],
237
+ showTotal: this.showTotal ? (e) => `共 ${e} 条` : void 0,
238
+ ...this.pagination
239
+ };
240
+ }
241
+ },
242
+ methods: {
243
+ handleTableChange(e, t, n) {
244
+ this.$emit("tableChange", {
245
+ pagination: e,
246
+ filters: t,
247
+ sorter: n
248
+ }), this.$emit("change", e, t, n);
249
+ },
250
+ handleRefresh() {
251
+ this.$emit("refresh");
252
+ }
253
+ }
254
+ }, k = { class: "my-table-wrapper" }, A = {
255
+ key: 0,
256
+ class: "table-toolbar"
257
+ }, j = { class: "toolbar-left" }, M = { class: "toolbar-right" };
258
+ function N(m, _, v, y, b, x) {
259
+ let S = p("my-button"), C = p("a-table");
260
+ return u(), n("div", k, [v.showToolbar ? (u(), n("div", A, [r("div", j, [f(m.$slots, "toolbar-left", {}, void 0, !0)]), r("div", M, [f(m.$slots, "toolbar-right", {}, () => [v.showRefresh ? (u(), e(S, {
261
+ key: 0,
262
+ size: "small",
263
+ onClick: x.handleRefresh
264
+ }, {
265
+ default: g(() => [..._[0] ||= [a(" 刷新 ", -1)]]),
266
+ _: 1
267
+ }, 8, ["onClick"])) : t("", !0)], !0)])])) : t("", !0), o(C, c(m.$attrs, h(m.$listeners), {
268
+ columns: x.mergedColumns,
269
+ "data-source": v.dataSource,
270
+ pagination: x.mergedPagination,
271
+ loading: v.loading,
272
+ "row-key": v.rowKey || "id",
273
+ bordered: v.bordered,
274
+ size: v.size,
275
+ onChange: x.handleTableChange
276
+ }), i({ _: 2 }, [d(m.$slots, (e, t) => ({
277
+ name: t,
278
+ fn: g((e) => [f(m.$slots, t, l(s(e)), void 0, !0)])
279
+ }))]), 1040, [
280
+ "columns",
281
+ "data-source",
282
+ "pagination",
283
+ "loading",
284
+ "row-key",
285
+ "bordered",
286
+ "size",
287
+ "onChange"
288
+ ])]);
289
+ }
290
+ var P = /*#__PURE__*/ _(O, [["render", N], ["__scopeId", "data-v-71012379"]]);
291
+ //#endregion
292
+ //#region packages/MyTable/index.js
293
+ P.install = (e) => {
294
+ e.component(P.name, P);
295
+ };
296
+ var F = P, I = [
297
+ x,
298
+ D,
299
+ F
300
+ ], L = (e, t = {}) => {
301
+ I.forEach((t) => {
302
+ t.install ? e.use(t) : e.component(t.name, t);
303
+ }), t.theme && e.provide("theme", t.theme);
304
+ }, R = {
305
+ install: L,
306
+ MyButton: x,
307
+ MyInput: D,
308
+ MyTable: F,
309
+ version: "1.0.0"
310
+ };
311
+ //#endregion
312
+ export { x as MyButton, D as MyInput, F as MyTable, R as default, L as install };
313
+
314
+ //# sourceMappingURL=my-antd-extend.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"my-antd-extend.esm.js","names":["MyButton","MyInput","MyTable","MyButton","MyInput","MyTable"],"sources":["../packages/MyButton/index.vue","../packages/MyButton/index.js","../packages/MyInput/index.vue","../packages/MyInput/index.js","../packages/MyTable/index.vue","../packages/MyTable/index.js","../packages/index.js"],"sourcesContent":["<template>\r\n <a-button\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :type=\"type\"\r\n :size=\"size\"\r\n :loading=\"loading\"\r\n :class=\"['my-btn', customClass]\"\r\n >\r\n <!-- 支持图标插槽 -->\r\n <template #icon v-if=\"$slots.icon\">\r\n <slot name=\"icon\" />\r\n </template>\r\n <!-- 默认插槽显示文本 -->\r\n <slot />\r\n </a-button>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyButton\",\r\n inheritAttrs: false,\r\n props: {\r\n // 按钮类型\r\n type: {\r\n type: String,\r\n default: \"primary\",\r\n validator: (val) =>\r\n [\"primary\", \"default\", \"dashed\", \"text\", \"link\"].includes(val),\r\n },\r\n // 按钮大小\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n validator: (val) => [\"large\", \"default\", \"small\"].includes(val),\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 自定义样式类\r\n customClass: {\r\n type: String,\r\n default: \"\",\r\n },\r\n // 是否显示确认弹窗\r\n confirmBefore: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n confirmText: {\r\n type: String,\r\n default: \"确定执行此操作吗?\",\r\n },\r\n },\r\n methods: {\r\n handleClick(event) {\r\n // 如果有确认弹窗,先弹窗再执行\r\n if (this.confirmBefore) {\r\n this.$confirm({\r\n title: \"提示\",\r\n content: this.confirmText,\r\n onOk: () => {\r\n this.$emit(\"click\", event);\r\n },\r\n });\r\n } else {\r\n this.$emit(\"click\", event);\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-btn {\r\n /* 添加业务默认样式 */\r\n border-radius: 6px;\r\n font-weight: 500;\r\n transition: all 0.3s;\r\n}\r\n\r\n/* 自定义业务主题色 */\r\n.my-btn-primary {\r\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n border: none;\r\n}\r\n\r\n.my-btn-primary:hover {\r\n background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);\r\n transform: translateY(-2px);\r\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\r\n}\r\n</style>","import MyButton from './index.vue'\r\n\r\nMyButton.install = (app) => {\r\n app.component(MyButton.name, MyButton)\r\n}\r\n\r\nexport default MyButton","<template>\r\n <div class=\"my-input-wrapper\">\r\n <a-input\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :value=\"value\"\r\n :placeholder=\"placeholder || '请输入'\"\r\n :size=\"size\"\r\n @input=\"handleInput\"\r\n @pressEnter=\"handlePressEnter\"\r\n >\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-input>\r\n <!-- 字数统计 -->\r\n <span v-if=\"showCount && maxLength\" class=\"input-count\">\r\n {{ currentLength }} / {{ maxLength }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyInput\",\r\n inheritAttrs: false,\r\n props: {\r\n value: {\r\n type: [String, Number],\r\n default: \"\",\r\n },\r\n placeholder: {\r\n type: String,\r\n default: \"请输入\",\r\n },\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n },\r\n maxLength: {\r\n type: Number,\r\n default: 0,\r\n },\r\n showCount: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 是否自动去除首尾空格\r\n trim: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n currentLength: 0,\r\n };\r\n },\r\n watch: {\r\n value: {\r\n immediate: true,\r\n handler(val) {\r\n this.currentLength = String(val || \"\").length;\r\n },\r\n },\r\n },\r\n methods: {\r\n handleInput(event) {\r\n let value = event.target.value;\r\n\r\n // 字数限制\r\n if (this.maxLength > 0 && value.length > this.maxLength) {\r\n value = value.slice(0, this.maxLength);\r\n }\r\n\r\n // 去除空格\r\n if (this.trim) {\r\n value = value.trim();\r\n }\r\n\r\n this.currentLength = value.length;\r\n this.$emit(\"input\", value);\r\n this.$emit(\"update:value\", value);\r\n },\r\n handlePressEnter(event) {\r\n this.$emit(\"pressEnter\", event);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-input-wrapper {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n\r\n.input-count {\r\n position: absolute;\r\n right: 12px;\r\n bottom: 4px;\r\n font-size: 12px;\r\n color: #999;\r\n pointer-events: none;\r\n}\r\n\r\n/* 自定义输入框样式 */\r\n:deep(.ant-input) {\r\n border-radius: 6px;\r\n transition: all 0.3s;\r\n}\r\n\r\n:deep(.ant-input:focus) {\r\n border-color: #667eea;\r\n box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2);\r\n}\r\n\r\n:deep(.ant-input:hover) {\r\n border-color: #667eea;\r\n}\r\n</style>","import MyInput from './index.vue'\r\n\r\nMyInput.install = (app) => {\r\n app.component(MyInput.name, MyInput)\r\n}\r\n\r\nexport default MyInput","<template>\r\n <div class=\"my-table-wrapper\">\r\n <!-- 表格工具栏 -->\r\n <div v-if=\"showToolbar\" class=\"table-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <slot name=\"toolbar-left\" />\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-right\">\r\n <my-button v-if=\"showRefresh\" size=\"small\" @click=\"handleRefresh\">\r\n 刷新\r\n </my-button>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <!-- 表格 -->\r\n <a-table\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :columns=\"mergedColumns\"\r\n :data-source=\"dataSource\"\r\n :pagination=\"mergedPagination\"\r\n :loading=\"loading\"\r\n :row-key=\"rowKey || 'id'\"\r\n :bordered=\"bordered\"\r\n :size=\"size\"\r\n @change=\"handleTableChange\"\r\n >\r\n <!-- 透传所有插槽 -->\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-table>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport MyButton from \"../MyButton/index.vue\";\r\n\r\nexport default {\r\n name: \"MyTable\",\r\n components: {\r\n MyButton,\r\n },\r\n inheritAttrs: false,\r\n props: {\r\n // 数据源\r\n dataSource: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 列配置\r\n columns: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 是否显示序号列\r\n showIndex: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 序号列标题\r\n indexTitle: {\r\n type: String,\r\n default: \"序号\",\r\n },\r\n // 是否显示边框\r\n bordered: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 表格大小\r\n size: {\r\n type: String,\r\n default: \"middle\",\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 行唯一标识\r\n rowKey: {\r\n type: String,\r\n default: \"id\",\r\n },\r\n // 分页配置\r\n pagination: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n // 是否显示工具栏\r\n showToolbar: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示刷新按钮\r\n showRefresh: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示总条数\r\n showTotal: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n computed: {\r\n // 合并列配置(添加序号列)\r\n mergedColumns() {\r\n let cols = [...this.columns];\r\n if (this.showIndex) {\r\n cols = [\r\n {\r\n title: this.indexTitle + \"1\",\r\n key: this.rowKey,\r\n dataIndex: this.rowKey,\r\n width: 100,\r\n },\r\n ...cols,\r\n ];\r\n }\r\n\r\n return cols;\r\n },\r\n // 合并分页配置\r\n mergedPagination() {\r\n const defaultPagination = {\r\n current: 1,\r\n pageSize: 10,\r\n showSizeChanger: true,\r\n showQuickJumper: true,\r\n pageSizeOptions: [\"10\", \"20\", \"50\", \"100\"],\r\n showTotal: this.showTotal ? (total) => `共 ${total} 条` : undefined,\r\n };\r\n\r\n return {\r\n ...defaultPagination,\r\n ...this.pagination,\r\n };\r\n },\r\n },\r\n methods: {\r\n // 表格变化事件(分页、排序等)\r\n handleTableChange(pagination, filters, sorter) {\r\n this.$emit(\"tableChange\", { pagination, filters, sorter });\r\n this.$emit(\"change\", pagination, filters, sorter);\r\n },\r\n // 刷新按钮\r\n handleRefresh() {\r\n this.$emit(\"refresh\");\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-table-wrapper {\r\n background: #fff;\r\n border-radius: 8px;\r\n padding: 16px;\r\n}\r\n\r\n.table-toolbar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.toolbar-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.toolbar-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n/* 自定义表格样式 */\r\n:deep(.ant-table) {\r\n border-radius: 6px;\r\n}\r\n\r\n:deep(.ant-table-thead > tr > th) {\r\n background: #fafafa;\r\n font-weight: 600;\r\n color: #262626;\r\n}\r\n\r\n:deep(.ant-table-tbody > tr:hover > td) {\r\n background: #f0f4ff;\r\n}\r\n\r\n:deep(.ant-pagination) {\r\n margin-top: 16px;\r\n}\r\n</style>","import MyTable from './index.vue'\r\n\r\nMyTable.install = (app) => {\r\n app.component(MyTable.name, MyTable)\r\n}\r\n\r\nexport default MyTable","// 导入所有组件\r\nimport MyButton from './MyButton/index'\r\nimport MyInput from './MyInput/index'\r\nimport MyTable from './MyTable/index'\r\n\r\n// 组件列表\r\nconst components = [\r\n MyButton,\r\n MyInput,\r\n MyTable\r\n]\r\n\r\n// 定义 install 方法\r\nconst install = (app, options = {}) => {\r\n // 注册所有组件\r\n components.forEach(component => {\r\n if (component.install) {\r\n app.use(component)\r\n } else {\r\n app.component(component.name, component)\r\n }\r\n })\r\n\r\n // 可以传入全局配置\r\n if (options.theme) {\r\n // 注入全局主题配置\r\n app.provide('theme', options.theme)\r\n }\r\n}\r\n\r\n// 支持按需引入\r\nexport {\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n install\r\n}\r\n\r\n// 默认导出(支持 Vue.use)\r\nexport default {\r\n install,\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n version: '1.0.0'\r\n}"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("vue")):typeof define==`function`&&define.amd?define([`exports`,`vue`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.MyAntdExtend={},e.Vue))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},r={name:`MyButton`,inheritAttrs:!1,props:{type:{type:String,default:`primary`,validator:e=>[`primary`,`default`,`dashed`,`text`,`link`].includes(e)},size:{type:String,default:`default`,validator:e=>[`large`,`default`,`small`].includes(e)},loading:{type:Boolean,default:!1},customClass:{type:String,default:``},confirmBefore:{type:Boolean,default:!1},confirmText:{type:String,default:`确定执行此操作吗?`}},methods:{handleClick(e){this.confirmBefore?this.$confirm({title:`提示`,content:this.confirmText,onOk:()=>{this.$emit(`click`,e)}}):this.$emit(`click`,e)}}};function i(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`a-button`);return(0,t.openBlock)(),(0,t.createBlock)(s,(0,t.mergeProps)(e.$attrs,(0,t.toHandlers)(e.$listeners),{type:r.type,size:r.size,loading:r.loading,class:[`my-btn`,r.customClass]}),(0,t.createSlots)({default:(0,t.withCtx)(()=>[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)]),_:2},[e.$slots.icon?{name:`icon`,fn:(0,t.withCtx)(()=>[(0,t.renderSlot)(e.$slots,`icon`,{},void 0,!0)]),key:`0`}:void 0]),1040,[`type`,`size`,`loading`,`class`])}var a=n(r,[[`render`,i],[`__scopeId`,`data-v-33c74d35`]]);a.install=e=>{e.component(a.name,a)};var o=a,s={name:`MyInput`,inheritAttrs:!1,props:{value:{type:[String,Number],default:``},placeholder:{type:String,default:`请输入`},size:{type:String,default:`default`},maxLength:{type:Number,default:0},showCount:{type:Boolean,default:!1},trim:{type:Boolean,default:!1}},data(){return{currentLength:0}},watch:{value:{immediate:!0,handler(e){this.currentLength=String(e||``).length}}},methods:{handleInput(e){let t=e.target.value;this.maxLength>0&&t.length>this.maxLength&&(t=t.slice(0,this.maxLength)),this.trim&&(t=t.trim()),this.currentLength=t.length,this.$emit(`input`,t),this.$emit(`update:value`,t)},handlePressEnter(e){this.$emit(`pressEnter`,e)}}},c={class:`my-input-wrapper`},l={key:0,class:`input-count`};function u(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`a-input`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,c,[(0,t.createVNode)(s,(0,t.mergeProps)(e.$attrs,(0,t.toHandlers)(e.$listeners),{value:r.value,placeholder:r.placeholder||`请输入`,size:r.size,onInput:o.handleInput,onPressEnter:o.handlePressEnter}),(0,t.createSlots)({_:2},[(0,t.renderList)(e.$slots,(n,r)=>({name:r,fn:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,r,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)),void 0,!0)])}))]),1040,[`value`,`placeholder`,`size`,`onInput`,`onPressEnter`]),r.showCount&&r.maxLength?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,l,(0,t.toDisplayString)(a.currentLength)+` / `+(0,t.toDisplayString)(r.maxLength),1)):(0,t.createCommentVNode)(``,!0)])}var d=n(s,[[`render`,u],[`__scopeId`,`data-v-496504de`]]);d.install=e=>{e.component(d.name,d)};var f=d,p={name:`MyTable`,components:{MyButton:a},inheritAttrs:!1,props:{dataSource:{type:Array,default:()=>[]},columns:{type:Array,default:()=>[]},showIndex:{type:Boolean,default:!1},indexTitle:{type:String,default:`序号`},bordered:{type:Boolean,default:!0},size:{type:String,default:`middle`},loading:{type:Boolean,default:!1},rowKey:{type:String,default:`id`},pagination:{type:Object,default:()=>({})},showToolbar:{type:Boolean,default:!0},showRefresh:{type:Boolean,default:!0},showTotal:{type:Boolean,default:!0}},computed:{mergedColumns(){let e=[...this.columns];return this.showIndex&&(e=[{title:this.indexTitle+`1`,key:this.rowKey,dataIndex:this.rowKey,width:100},...e]),e},mergedPagination(){return{current:1,pageSize:10,showSizeChanger:!0,showQuickJumper:!0,pageSizeOptions:[`10`,`20`,`50`,`100`],showTotal:this.showTotal?e=>`共 ${e} 条`:void 0,...this.pagination}}},methods:{handleTableChange(e,t,n){this.$emit(`tableChange`,{pagination:e,filters:t,sorter:n}),this.$emit(`change`,e,t,n)},handleRefresh(){this.$emit(`refresh`)}}},m={class:`my-table-wrapper`},h={key:0,class:`table-toolbar`},g={class:`toolbar-left`},_={class:`toolbar-right`};function v(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`my-button`),c=(0,t.resolveComponent)(`a-table`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,[r.showToolbar?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,h,[(0,t.createElementVNode)(`div`,g,[(0,t.renderSlot)(e.$slots,`toolbar-left`,{},void 0,!0)]),(0,t.createElementVNode)(`div`,_,[(0,t.renderSlot)(e.$slots,`toolbar-right`,{},()=>[r.showRefresh?((0,t.openBlock)(),(0,t.createBlock)(s,{key:0,size:`small`,onClick:o.handleRefresh},{default:(0,t.withCtx)(()=>[...n[0]||=[(0,t.createTextVNode)(` 刷新 `,-1)]]),_:1},8,[`onClick`])):(0,t.createCommentVNode)(``,!0)],!0)])])):(0,t.createCommentVNode)(``,!0),(0,t.createVNode)(c,(0,t.mergeProps)(e.$attrs,(0,t.toHandlers)(e.$listeners),{columns:o.mergedColumns,"data-source":r.dataSource,pagination:o.mergedPagination,loading:r.loading,"row-key":r.rowKey||`id`,bordered:r.bordered,size:r.size,onChange:o.handleTableChange}),(0,t.createSlots)({_:2},[(0,t.renderList)(e.$slots,(n,r)=>({name:r,fn:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,r,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)),void 0,!0)])}))]),1040,[`columns`,`data-source`,`pagination`,`loading`,`row-key`,`bordered`,`size`,`onChange`])])}var y=n(p,[[`render`,v],[`__scopeId`,`data-v-71012379`]]);y.install=e=>{e.component(y.name,y)};var b=y,x=[o,f,b],S=(e,t={})=>{x.forEach(t=>{t.install?e.use(t):e.component(t.name,t)}),t.theme&&e.provide(`theme`,t.theme)},C={install:S,MyButton:o,MyInput:f,MyTable:b,version:`1.0.0`};e.MyButton=o,e.MyInput=f,e.MyTable=b,e.default=C,e.install=S});
2
+ //# sourceMappingURL=my-antd-extend.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"my-antd-extend.umd.js","names":["MyButton","MyInput","MyTable","MyButton","MyInput","MyTable"],"sources":["../packages/MyButton/index.vue","../packages/MyButton/index.js","../packages/MyInput/index.vue","../packages/MyInput/index.js","../packages/MyTable/index.vue","../packages/MyTable/index.js","../packages/index.js"],"sourcesContent":["<template>\r\n <a-button\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :type=\"type\"\r\n :size=\"size\"\r\n :loading=\"loading\"\r\n :class=\"['my-btn', customClass]\"\r\n >\r\n <!-- 支持图标插槽 -->\r\n <template #icon v-if=\"$slots.icon\">\r\n <slot name=\"icon\" />\r\n </template>\r\n <!-- 默认插槽显示文本 -->\r\n <slot />\r\n </a-button>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyButton\",\r\n inheritAttrs: false,\r\n props: {\r\n // 按钮类型\r\n type: {\r\n type: String,\r\n default: \"primary\",\r\n validator: (val) =>\r\n [\"primary\", \"default\", \"dashed\", \"text\", \"link\"].includes(val),\r\n },\r\n // 按钮大小\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n validator: (val) => [\"large\", \"default\", \"small\"].includes(val),\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 自定义样式类\r\n customClass: {\r\n type: String,\r\n default: \"\",\r\n },\r\n // 是否显示确认弹窗\r\n confirmBefore: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n confirmText: {\r\n type: String,\r\n default: \"确定执行此操作吗?\",\r\n },\r\n },\r\n methods: {\r\n handleClick(event) {\r\n // 如果有确认弹窗,先弹窗再执行\r\n if (this.confirmBefore) {\r\n this.$confirm({\r\n title: \"提示\",\r\n content: this.confirmText,\r\n onOk: () => {\r\n this.$emit(\"click\", event);\r\n },\r\n });\r\n } else {\r\n this.$emit(\"click\", event);\r\n }\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-btn {\r\n /* 添加业务默认样式 */\r\n border-radius: 6px;\r\n font-weight: 500;\r\n transition: all 0.3s;\r\n}\r\n\r\n/* 自定义业务主题色 */\r\n.my-btn-primary {\r\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\r\n border: none;\r\n}\r\n\r\n.my-btn-primary:hover {\r\n background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);\r\n transform: translateY(-2px);\r\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\r\n}\r\n</style>","import MyButton from './index.vue'\r\n\r\nMyButton.install = (app) => {\r\n app.component(MyButton.name, MyButton)\r\n}\r\n\r\nexport default MyButton","<template>\r\n <div class=\"my-input-wrapper\">\r\n <a-input\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :value=\"value\"\r\n :placeholder=\"placeholder || '请输入'\"\r\n :size=\"size\"\r\n @input=\"handleInput\"\r\n @pressEnter=\"handlePressEnter\"\r\n >\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-input>\r\n <!-- 字数统计 -->\r\n <span v-if=\"showCount && maxLength\" class=\"input-count\">\r\n {{ currentLength }} / {{ maxLength }}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: \"MyInput\",\r\n inheritAttrs: false,\r\n props: {\r\n value: {\r\n type: [String, Number],\r\n default: \"\",\r\n },\r\n placeholder: {\r\n type: String,\r\n default: \"请输入\",\r\n },\r\n size: {\r\n type: String,\r\n default: \"default\",\r\n },\r\n maxLength: {\r\n type: Number,\r\n default: 0,\r\n },\r\n showCount: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 是否自动去除首尾空格\r\n trim: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n currentLength: 0,\r\n };\r\n },\r\n watch: {\r\n value: {\r\n immediate: true,\r\n handler(val) {\r\n this.currentLength = String(val || \"\").length;\r\n },\r\n },\r\n },\r\n methods: {\r\n handleInput(event) {\r\n let value = event.target.value;\r\n\r\n // 字数限制\r\n if (this.maxLength > 0 && value.length > this.maxLength) {\r\n value = value.slice(0, this.maxLength);\r\n }\r\n\r\n // 去除空格\r\n if (this.trim) {\r\n value = value.trim();\r\n }\r\n\r\n this.currentLength = value.length;\r\n this.$emit(\"input\", value);\r\n this.$emit(\"update:value\", value);\r\n },\r\n handlePressEnter(event) {\r\n this.$emit(\"pressEnter\", event);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-input-wrapper {\r\n position: relative;\r\n display: inline-block;\r\n width: 100%;\r\n}\r\n\r\n.input-count {\r\n position: absolute;\r\n right: 12px;\r\n bottom: 4px;\r\n font-size: 12px;\r\n color: #999;\r\n pointer-events: none;\r\n}\r\n\r\n/* 自定义输入框样式 */\r\n:deep(.ant-input) {\r\n border-radius: 6px;\r\n transition: all 0.3s;\r\n}\r\n\r\n:deep(.ant-input:focus) {\r\n border-color: #667eea;\r\n box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2);\r\n}\r\n\r\n:deep(.ant-input:hover) {\r\n border-color: #667eea;\r\n}\r\n</style>","import MyInput from './index.vue'\r\n\r\nMyInput.install = (app) => {\r\n app.component(MyInput.name, MyInput)\r\n}\r\n\r\nexport default MyInput","<template>\r\n <div class=\"my-table-wrapper\">\r\n <!-- 表格工具栏 -->\r\n <div v-if=\"showToolbar\" class=\"table-toolbar\">\r\n <div class=\"toolbar-left\">\r\n <slot name=\"toolbar-left\" />\r\n </div>\r\n <div class=\"toolbar-right\">\r\n <slot name=\"toolbar-right\">\r\n <my-button v-if=\"showRefresh\" size=\"small\" @click=\"handleRefresh\">\r\n 刷新\r\n </my-button>\r\n </slot>\r\n </div>\r\n </div>\r\n\r\n <!-- 表格 -->\r\n <a-table\r\n v-bind=\"$attrs\"\r\n v-on=\"$listeners\"\r\n :columns=\"mergedColumns\"\r\n :data-source=\"dataSource\"\r\n :pagination=\"mergedPagination\"\r\n :loading=\"loading\"\r\n :row-key=\"rowKey || 'id'\"\r\n :bordered=\"bordered\"\r\n :size=\"size\"\r\n @change=\"handleTableChange\"\r\n >\r\n <!-- 透传所有插槽 -->\r\n <template v-for=\"(_, slot) in $slots\" v-slot:[slot]=\"scope\">\r\n <slot :name=\"slot\" v-bind=\"scope\" />\r\n </template>\r\n </a-table>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport MyButton from \"../MyButton/index.vue\";\r\n\r\nexport default {\r\n name: \"MyTable\",\r\n components: {\r\n MyButton,\r\n },\r\n inheritAttrs: false,\r\n props: {\r\n // 数据源\r\n dataSource: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 列配置\r\n columns: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n // 是否显示序号列\r\n showIndex: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 序号列标题\r\n indexTitle: {\r\n type: String,\r\n default: \"序号\",\r\n },\r\n // 是否显示边框\r\n bordered: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 表格大小\r\n size: {\r\n type: String,\r\n default: \"middle\",\r\n },\r\n // 加载状态\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n // 行唯一标识\r\n rowKey: {\r\n type: String,\r\n default: \"id\",\r\n },\r\n // 分页配置\r\n pagination: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n // 是否显示工具栏\r\n showToolbar: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示刷新按钮\r\n showRefresh: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n // 是否显示总条数\r\n showTotal: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n computed: {\r\n // 合并列配置(添加序号列)\r\n mergedColumns() {\r\n let cols = [...this.columns];\r\n if (this.showIndex) {\r\n cols = [\r\n {\r\n title: this.indexTitle + \"1\",\r\n key: this.rowKey,\r\n dataIndex: this.rowKey,\r\n width: 100,\r\n },\r\n ...cols,\r\n ];\r\n }\r\n\r\n return cols;\r\n },\r\n // 合并分页配置\r\n mergedPagination() {\r\n const defaultPagination = {\r\n current: 1,\r\n pageSize: 10,\r\n showSizeChanger: true,\r\n showQuickJumper: true,\r\n pageSizeOptions: [\"10\", \"20\", \"50\", \"100\"],\r\n showTotal: this.showTotal ? (total) => `共 ${total} 条` : undefined,\r\n };\r\n\r\n return {\r\n ...defaultPagination,\r\n ...this.pagination,\r\n };\r\n },\r\n },\r\n methods: {\r\n // 表格变化事件(分页、排序等)\r\n handleTableChange(pagination, filters, sorter) {\r\n this.$emit(\"tableChange\", { pagination, filters, sorter });\r\n this.$emit(\"change\", pagination, filters, sorter);\r\n },\r\n // 刷新按钮\r\n handleRefresh() {\r\n this.$emit(\"refresh\");\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.my-table-wrapper {\r\n background: #fff;\r\n border-radius: 8px;\r\n padding: 16px;\r\n}\r\n\r\n.table-toolbar {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 16px;\r\n}\r\n\r\n.toolbar-left {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n.toolbar-right {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n}\r\n\r\n/* 自定义表格样式 */\r\n:deep(.ant-table) {\r\n border-radius: 6px;\r\n}\r\n\r\n:deep(.ant-table-thead > tr > th) {\r\n background: #fafafa;\r\n font-weight: 600;\r\n color: #262626;\r\n}\r\n\r\n:deep(.ant-table-tbody > tr:hover > td) {\r\n background: #f0f4ff;\r\n}\r\n\r\n:deep(.ant-pagination) {\r\n margin-top: 16px;\r\n}\r\n</style>","import MyTable from './index.vue'\r\n\r\nMyTable.install = (app) => {\r\n app.component(MyTable.name, MyTable)\r\n}\r\n\r\nexport default MyTable","// 导入所有组件\r\nimport MyButton from './MyButton/index'\r\nimport MyInput from './MyInput/index'\r\nimport MyTable from './MyTable/index'\r\n\r\n// 组件列表\r\nconst components = [\r\n MyButton,\r\n MyInput,\r\n MyTable\r\n]\r\n\r\n// 定义 install 方法\r\nconst install = (app, options = {}) => {\r\n // 注册所有组件\r\n components.forEach(component => {\r\n if (component.install) {\r\n app.use(component)\r\n } else {\r\n app.component(component.name, component)\r\n }\r\n })\r\n\r\n // 可以传入全局配置\r\n if (options.theme) {\r\n // 注入全局主题配置\r\n app.provide('theme', options.theme)\r\n }\r\n}\r\n\r\n// 支持按需引入\r\nexport {\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n install\r\n}\r\n\r\n// 默认导出(支持 Vue.use)\r\nexport default {\r\n install,\r\n MyButton,\r\n MyInput,\r\n MyTable,\r\n version: '1.0.0'\r\n}"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@chenpeng001/my-antd-extend",
3
+ "version": "1.0.0",
4
+ "description": "基于 Ant Design Vue 3 的二次封装组件库",
5
+ "author": "chenpeng",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "ant-design-vue",
9
+ "vue3",
10
+ "components",
11
+ "ui-library"
12
+ ],
13
+ "main": "dist/my-antd-extend.cjs.js",
14
+ "module": "dist/my-antd-extend.esm.js",
15
+ "unpkg": "dist/my-antd-extend.umd.js",
16
+ "jsdelivr": "dist/my-antd-extend.umd.js",
17
+ "types": "dist/index.d.ts",
18
+ "files": [
19
+ "dist",
20
+ "packages"
21
+ ],
22
+ "scripts": {
23
+ "dev": "vite",
24
+ "build": "vite build",
25
+ "preview": "vite preview",
26
+ "prepublishOnly": "npm run build"
27
+ },
28
+ "peerDependencies": {
29
+ "ant-design-vue": "^3.0.0",
30
+ "vue": "^3.0.0"
31
+ },
32
+ "devDependencies": {
33
+ "@vitejs/plugin-vue": "^4.0.0",
34
+ "@vitejs/plugin-vue-jsx": "^3.0.0",
35
+ "ant-design-vue": "^3.0.0",
36
+ "vite": "^4.0.0",
37
+ "vue": "^3.0.0"
38
+ }
39
+ }
@@ -0,0 +1,7 @@
1
+ import MyButton from './index.vue'
2
+
3
+ MyButton.install = (app) => {
4
+ app.component(MyButton.name, MyButton)
5
+ }
6
+
7
+ export default MyButton
@@ -0,0 +1,95 @@
1
+ <template>
2
+ <a-button
3
+ v-bind="$attrs"
4
+ v-on="$listeners"
5
+ :type="type"
6
+ :size="size"
7
+ :loading="loading"
8
+ :class="['my-btn', customClass]"
9
+ >
10
+ <!-- 支持图标插槽 -->
11
+ <template #icon v-if="$slots.icon">
12
+ <slot name="icon" />
13
+ </template>
14
+ <!-- 默认插槽显示文本 -->
15
+ <slot />
16
+ </a-button>
17
+ </template>
18
+
19
+ <script>
20
+ export default {
21
+ name: "MyButton",
22
+ inheritAttrs: false,
23
+ props: {
24
+ // 按钮类型
25
+ type: {
26
+ type: String,
27
+ default: "primary",
28
+ validator: (val) =>
29
+ ["primary", "default", "dashed", "text", "link"].includes(val),
30
+ },
31
+ // 按钮大小
32
+ size: {
33
+ type: String,
34
+ default: "default",
35
+ validator: (val) => ["large", "default", "small"].includes(val),
36
+ },
37
+ // 加载状态
38
+ loading: {
39
+ type: Boolean,
40
+ default: false,
41
+ },
42
+ // 自定义样式类
43
+ customClass: {
44
+ type: String,
45
+ default: "",
46
+ },
47
+ // 是否显示确认弹窗
48
+ confirmBefore: {
49
+ type: Boolean,
50
+ default: false,
51
+ },
52
+ confirmText: {
53
+ type: String,
54
+ default: "确定执行此操作吗?",
55
+ },
56
+ },
57
+ methods: {
58
+ handleClick(event) {
59
+ // 如果有确认弹窗,先弹窗再执行
60
+ if (this.confirmBefore) {
61
+ this.$confirm({
62
+ title: "提示",
63
+ content: this.confirmText,
64
+ onOk: () => {
65
+ this.$emit("click", event);
66
+ },
67
+ });
68
+ } else {
69
+ this.$emit("click", event);
70
+ }
71
+ },
72
+ },
73
+ };
74
+ </script>
75
+
76
+ <style scoped>
77
+ .my-btn {
78
+ /* 添加业务默认样式 */
79
+ border-radius: 6px;
80
+ font-weight: 500;
81
+ transition: all 0.3s;
82
+ }
83
+
84
+ /* 自定义业务主题色 */
85
+ .my-btn-primary {
86
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
87
+ border: none;
88
+ }
89
+
90
+ .my-btn-primary:hover {
91
+ background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
92
+ transform: translateY(-2px);
93
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
94
+ }
95
+ </style>
@@ -0,0 +1,7 @@
1
+ import MyInput from './index.vue'
2
+
3
+ MyInput.install = (app) => {
4
+ app.component(MyInput.name, MyInput)
5
+ }
6
+
7
+ export default MyInput
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <div class="my-input-wrapper">
3
+ <a-input
4
+ v-bind="$attrs"
5
+ v-on="$listeners"
6
+ :value="value"
7
+ :placeholder="placeholder || '请输入'"
8
+ :size="size"
9
+ @input="handleInput"
10
+ @pressEnter="handlePressEnter"
11
+ >
12
+ <template v-for="(_, slot) in $slots" v-slot:[slot]="scope">
13
+ <slot :name="slot" v-bind="scope" />
14
+ </template>
15
+ </a-input>
16
+ <!-- 字数统计 -->
17
+ <span v-if="showCount && maxLength" class="input-count">
18
+ {{ currentLength }} / {{ maxLength }}
19
+ </span>
20
+ </div>
21
+ </template>
22
+
23
+ <script>
24
+ export default {
25
+ name: "MyInput",
26
+ inheritAttrs: false,
27
+ props: {
28
+ value: {
29
+ type: [String, Number],
30
+ default: "",
31
+ },
32
+ placeholder: {
33
+ type: String,
34
+ default: "请输入",
35
+ },
36
+ size: {
37
+ type: String,
38
+ default: "default",
39
+ },
40
+ maxLength: {
41
+ type: Number,
42
+ default: 0,
43
+ },
44
+ showCount: {
45
+ type: Boolean,
46
+ default: false,
47
+ },
48
+ // 是否自动去除首尾空格
49
+ trim: {
50
+ type: Boolean,
51
+ default: false,
52
+ },
53
+ },
54
+ data() {
55
+ return {
56
+ currentLength: 0,
57
+ };
58
+ },
59
+ watch: {
60
+ value: {
61
+ immediate: true,
62
+ handler(val) {
63
+ this.currentLength = String(val || "").length;
64
+ },
65
+ },
66
+ },
67
+ methods: {
68
+ handleInput(event) {
69
+ let value = event.target.value;
70
+
71
+ // 字数限制
72
+ if (this.maxLength > 0 && value.length > this.maxLength) {
73
+ value = value.slice(0, this.maxLength);
74
+ }
75
+
76
+ // 去除空格
77
+ if (this.trim) {
78
+ value = value.trim();
79
+ }
80
+
81
+ this.currentLength = value.length;
82
+ this.$emit("input", value);
83
+ this.$emit("update:value", value);
84
+ },
85
+ handlePressEnter(event) {
86
+ this.$emit("pressEnter", event);
87
+ },
88
+ },
89
+ };
90
+ </script>
91
+
92
+ <style scoped>
93
+ .my-input-wrapper {
94
+ position: relative;
95
+ display: inline-block;
96
+ width: 100%;
97
+ }
98
+
99
+ .input-count {
100
+ position: absolute;
101
+ right: 12px;
102
+ bottom: 4px;
103
+ font-size: 12px;
104
+ color: #999;
105
+ pointer-events: none;
106
+ }
107
+
108
+ /* 自定义输入框样式 */
109
+ :deep(.ant-input) {
110
+ border-radius: 6px;
111
+ transition: all 0.3s;
112
+ }
113
+
114
+ :deep(.ant-input:focus) {
115
+ border-color: #667eea;
116
+ box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2);
117
+ }
118
+
119
+ :deep(.ant-input:hover) {
120
+ border-color: #667eea;
121
+ }
122
+ </style>
@@ -0,0 +1,7 @@
1
+ import MyTable from './index.vue'
2
+
3
+ MyTable.install = (app) => {
4
+ app.component(MyTable.name, MyTable)
5
+ }
6
+
7
+ export default MyTable
@@ -0,0 +1,202 @@
1
+ <template>
2
+ <div class="my-table-wrapper">
3
+ <!-- 表格工具栏 -->
4
+ <div v-if="showToolbar" class="table-toolbar">
5
+ <div class="toolbar-left">
6
+ <slot name="toolbar-left" />
7
+ </div>
8
+ <div class="toolbar-right">
9
+ <slot name="toolbar-right">
10
+ <my-button v-if="showRefresh" size="small" @click="handleRefresh">
11
+ 刷新
12
+ </my-button>
13
+ </slot>
14
+ </div>
15
+ </div>
16
+
17
+ <!-- 表格 -->
18
+ <a-table
19
+ v-bind="$attrs"
20
+ v-on="$listeners"
21
+ :columns="mergedColumns"
22
+ :data-source="dataSource"
23
+ :pagination="mergedPagination"
24
+ :loading="loading"
25
+ :row-key="rowKey || 'id'"
26
+ :bordered="bordered"
27
+ :size="size"
28
+ @change="handleTableChange"
29
+ >
30
+ <!-- 透传所有插槽 -->
31
+ <template v-for="(_, slot) in $slots" v-slot:[slot]="scope">
32
+ <slot :name="slot" v-bind="scope" />
33
+ </template>
34
+ </a-table>
35
+ </div>
36
+ </template>
37
+
38
+ <script>
39
+ import MyButton from "../MyButton/index.vue";
40
+
41
+ export default {
42
+ name: "MyTable",
43
+ components: {
44
+ MyButton,
45
+ },
46
+ inheritAttrs: false,
47
+ props: {
48
+ // 数据源
49
+ dataSource: {
50
+ type: Array,
51
+ default: () => [],
52
+ },
53
+ // 列配置
54
+ columns: {
55
+ type: Array,
56
+ default: () => [],
57
+ },
58
+ // 是否显示序号列
59
+ showIndex: {
60
+ type: Boolean,
61
+ default: false,
62
+ },
63
+ // 序号列标题
64
+ indexTitle: {
65
+ type: String,
66
+ default: "序号",
67
+ },
68
+ // 是否显示边框
69
+ bordered: {
70
+ type: Boolean,
71
+ default: true,
72
+ },
73
+ // 表格大小
74
+ size: {
75
+ type: String,
76
+ default: "middle",
77
+ },
78
+ // 加载状态
79
+ loading: {
80
+ type: Boolean,
81
+ default: false,
82
+ },
83
+ // 行唯一标识
84
+ rowKey: {
85
+ type: String,
86
+ default: "id",
87
+ },
88
+ // 分页配置
89
+ pagination: {
90
+ type: Object,
91
+ default: () => ({}),
92
+ },
93
+ // 是否显示工具栏
94
+ showToolbar: {
95
+ type: Boolean,
96
+ default: true,
97
+ },
98
+ // 是否显示刷新按钮
99
+ showRefresh: {
100
+ type: Boolean,
101
+ default: true,
102
+ },
103
+ // 是否显示总条数
104
+ showTotal: {
105
+ type: Boolean,
106
+ default: true,
107
+ },
108
+ },
109
+ computed: {
110
+ // 合并列配置(添加序号列)
111
+ mergedColumns() {
112
+ let cols = [...this.columns];
113
+ if (this.showIndex) {
114
+ cols = [
115
+ {
116
+ title: this.indexTitle + "1",
117
+ key: this.rowKey,
118
+ dataIndex: this.rowKey,
119
+ width: 100,
120
+ },
121
+ ...cols,
122
+ ];
123
+ }
124
+
125
+ return cols;
126
+ },
127
+ // 合并分页配置
128
+ mergedPagination() {
129
+ const defaultPagination = {
130
+ current: 1,
131
+ pageSize: 10,
132
+ showSizeChanger: true,
133
+ showQuickJumper: true,
134
+ pageSizeOptions: ["10", "20", "50", "100"],
135
+ showTotal: this.showTotal ? (total) => `共 ${total} 条` : undefined,
136
+ };
137
+
138
+ return {
139
+ ...defaultPagination,
140
+ ...this.pagination,
141
+ };
142
+ },
143
+ },
144
+ methods: {
145
+ // 表格变化事件(分页、排序等)
146
+ handleTableChange(pagination, filters, sorter) {
147
+ this.$emit("tableChange", { pagination, filters, sorter });
148
+ this.$emit("change", pagination, filters, sorter);
149
+ },
150
+ // 刷新按钮
151
+ handleRefresh() {
152
+ this.$emit("refresh");
153
+ },
154
+ },
155
+ };
156
+ </script>
157
+
158
+ <style scoped>
159
+ .my-table-wrapper {
160
+ background: #fff;
161
+ border-radius: 8px;
162
+ padding: 16px;
163
+ }
164
+
165
+ .table-toolbar {
166
+ display: flex;
167
+ justify-content: space-between;
168
+ align-items: center;
169
+ margin-bottom: 16px;
170
+ }
171
+
172
+ .toolbar-left {
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 8px;
176
+ }
177
+
178
+ .toolbar-right {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: 8px;
182
+ }
183
+
184
+ /* 自定义表格样式 */
185
+ :deep(.ant-table) {
186
+ border-radius: 6px;
187
+ }
188
+
189
+ :deep(.ant-table-thead > tr > th) {
190
+ background: #fafafa;
191
+ font-weight: 600;
192
+ color: #262626;
193
+ }
194
+
195
+ :deep(.ant-table-tbody > tr:hover > td) {
196
+ background: #f0f4ff;
197
+ }
198
+
199
+ :deep(.ant-pagination) {
200
+ margin-top: 16px;
201
+ }
202
+ </style>
@@ -0,0 +1,46 @@
1
+ // 导入所有组件
2
+ import MyButton from './MyButton/index'
3
+ import MyInput from './MyInput/index'
4
+ import MyTable from './MyTable/index'
5
+
6
+ // 组件列表
7
+ const components = [
8
+ MyButton,
9
+ MyInput,
10
+ MyTable
11
+ ]
12
+
13
+ // 定义 install 方法
14
+ const install = (app, options = {}) => {
15
+ // 注册所有组件
16
+ components.forEach(component => {
17
+ if (component.install) {
18
+ app.use(component)
19
+ } else {
20
+ app.component(component.name, component)
21
+ }
22
+ })
23
+
24
+ // 可以传入全局配置
25
+ if (options.theme) {
26
+ // 注入全局主题配置
27
+ app.provide('theme', options.theme)
28
+ }
29
+ }
30
+
31
+ // 支持按需引入
32
+ export {
33
+ MyButton,
34
+ MyInput,
35
+ MyTable,
36
+ install
37
+ }
38
+
39
+ // 默认导出(支持 Vue.use)
40
+ export default {
41
+ install,
42
+ MyButton,
43
+ MyInput,
44
+ MyTable,
45
+ version: '1.0.0'
46
+ }