@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 +172 -0
- package/dist/favicon.svg +1 -0
- package/dist/icons.svg +24 -0
- package/dist/my-antd-extend.cjs.js +2 -0
- package/dist/my-antd-extend.cjs.js.map +1 -0
- package/dist/my-antd-extend.css +2 -0
- package/dist/my-antd-extend.esm.js +314 -0
- package/dist/my-antd-extend.esm.js.map +1 -0
- package/dist/my-antd-extend.umd.js +2 -0
- package/dist/my-antd-extend.umd.js.map +1 -0
- package/package.json +39 -0
- package/packages/MyButton/index.js +7 -0
- package/packages/MyButton/index.vue +95 -0
- package/packages/MyInput/index.js +7 -0
- package/packages/MyInput/index.vue +122 -0
- package/packages/MyTable/index.js +7 -0
- package/packages/MyTable/index.vue +202 -0
- package/packages/index.js +46 -0
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')
|
package/dist/favicon.svg
ADDED
|
@@ -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":";;;;;;GAmBK,IAAU;CACb,MAAM;CACN,cAAc;CACd,OAAO;EAEL,MAAM;GACJ,MAAM;GACN,SAAS;GACT,YAAY,MACV;IAAC;IAAW;IAAW;IAAU;IAAQ;GAAM,EAAE,SAAS,CAAG;EACjE;EAEA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,YAAY,MAAQ;IAAC;IAAS;IAAW;GAAO,EAAE,SAAS,CAAG;EAChE;EAEA,SAAS;GACP,MAAM;GACN,SAAS;EACX;EAEA,aAAa;GACX,MAAM;GACN,SAAS;EACX;EAEA,eAAe;GACb,MAAM;GACN,SAAS;EACX;EACA,aAAa;GACX,MAAM;GACN,SAAS;EACX;CACF;CACA,SAAS,EACP,YAAY,GAAO;EAEjB,AAAI,KAAK,gBACP,KAAK,SAAS;GACZ,OAAO;GACP,SAAS,KAAK;GACd,YAAY;IACV,KAAK,MAAM,SAAS,CAAK;GAC3B;EACF,CAAC,IAED,KAAK,MAAM,SAAS,CAAK;CAE7B,EACF;AACF;;;aAvEE,EAcW,GAdX,EAcW,EAbD,QACR,EAAiB,EAAX,UAAU,GAAA;EACf,MAAM,EAAA;EACN,MAAM,EAAA;EACN,SAAS,EAAA;EACT,OAAK,CAAA,UAAa,EAAA,WAAW;;mBAOtB,CAAR,EAAQ,EAAA,QAAA,WAAA,CAAA,GAAA,KAAA,GAAA,EAAA,CAAA,CAAA;;KAJc,EAAA,OAAO,OAAA;QAAlB;cACW,CAApB,EAAoB,EAAA,QAAA,QAAA,CAAA,GAAA,KAAA,GAAA,EAAA,CAAA,CAAA;;;;;;;;;;;;ACT1B,EAAS,WAAW,MAAQ;CACxB,EAAI,UAAUA,EAAS,MAAMA,CAAQ;AACzC;AAEA,IAAA,IAAeA,GCiBV,IAAU;CACb,MAAM;CACN,cAAc;CACd,OAAO;EACL,OAAO;GACL,MAAM,CAAC,QAAQ,MAAM;GACrB,SAAS;EACX;EACA,aAAa;GACX,MAAM;GACN,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;EACX;EACA,WAAW;GACT,MAAM;GACN,SAAS;EACX;EACA,WAAW;GACT,MAAM;GACN,SAAS;EACX;EAEA,MAAM;GACJ,MAAM;GACN,SAAS;EACX;CACF;CACA,OAAO;EACL,OAAO,EACL,eAAe,EACjB;CACF;CACA,OAAO,EACL,OAAO;EACL,WAAW;EACX,QAAQ,GAAK;GACX,KAAK,gBAAgB,OAAO,KAAO,EAAE,EAAE;EACzC;CACF,EACF;CACA,SAAS;EACP,YAAY,GAAO;GACjB,IAAI,IAAQ,EAAM,OAAO;GAczB,AAXI,KAAK,YAAY,KAAK,EAAM,SAAS,KAAK,cAC5C,IAAQ,EAAM,MAAM,GAAG,KAAK,SAAS,IAInC,KAAK,SACP,IAAQ,EAAM,KAAK,IAGrB,KAAK,gBAAgB,EAAM,QAC3B,KAAK,MAAM,SAAS,CAAK,GACzB,KAAK,MAAM,gBAAgB,CAAK;EAClC;EACA,iBAAiB,GAAO;GACtB,KAAK,MAAM,cAAc,CAAK;EAChC;CACF;AACF,SAvFO,OAAM,mBAAkB;;CAeS,OAAM;;;;aAf5C,EAkBM,OAlBN,GAkBM,CAjBJ,EAYU,GAZV,EAYU,EAXA,QACR,EAAiB,EAAX,UAAU,GAAA;EACf,OAAO,EAAA;EACP,aAAa,EAAA,eAAW;EACxB,MAAM,EAAA;EACN,SAAO,EAAA;EACP,cAAY,EAAA;oBAEiB,EAAA,SAAZ,GAAG;QAAwB;SACP,MADoB,CACxD,EAAoC,EAAA,QAAvB,GAAI,EAAA,EAAU,CAAK,CAAA,GAAA,KAAA,GAAA,EAAA,CAAA,CAAA;;;;;;;KAIxB,EAAA,aAAa,EAAA,aAAA,EAAA,GAAzB,EAEO,QAFP,GAEO,EADF,EAAA,aAAa,IAAG,QAAG,EAAG,EAAA,SAAS,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;;;;ACfxC,EAAQ,WAAW,MAAQ;CACvB,EAAI,UAAUC,EAAQ,MAAMA,CAAO;AACvC;AAEA,IAAA,IAAeA,GCkCV,IAAU;CACb,MAAM;CACN,YAAY,EACV,UAAA,EACF;CACA,cAAc;CACd,OAAO;EAEL,YAAY;GACV,MAAM;GACN,eAAe,CAAC;EAClB;EAEA,SAAS;GACP,MAAM;GACN,eAAe,CAAC;EAClB;EAEA,WAAW;GACT,MAAM;GACN,SAAS;EACX;EAEA,YAAY;GACV,MAAM;GACN,SAAS;EACX;EAEA,UAAU;GACR,MAAM;GACN,SAAS;EACX;EAEA,MAAM;GACJ,MAAM;GACN,SAAS;EACX;EAEA,SAAS;GACP,MAAM;GACN,SAAS;EACX;EAEA,QAAQ;GACN,MAAM;GACN,SAAS;EACX;EAEA,YAAY;GACV,MAAM;GACN,gBAAgB,CAAC;EACnB;EAEA,aAAa;GACX,MAAM;GACN,SAAS;EACX;EAEA,aAAa;GACX,MAAM;GACN,SAAS;EACX;EAEA,WAAW;GACT,MAAM;GACN,SAAS;EACX;CACF;CACA,UAAU;EAER,gBAAgB;GACd,IAAI,IAAO,CAAC,GAAG,KAAK,OAAO;GAa3B,OAZI,KAAK,cACP,IAAO,CACL;IACE,OAAO,KAAK,aAAa;IACzB,KAAK,KAAK;IACV,WAAW,KAAK;IAChB,OAAO;GACT,GACA,GAAG,CACL,IAGK;EACT;EAEA,mBAAmB;GAUjB,OAAO;IARL,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;KAAC;KAAM;KAAM;KAAM;IAAK;IACzC,WAAW,KAAK,aAAa,MAAU,KAAK,EAAK,MAAO,KAAA;IAKxD,GAAG,KAAK;GACV;EACF;CACF;CACA,SAAS;EAEP,kBAAkB,GAAY,GAAS,GAAQ;GAE7C,AADA,KAAK,MAAM,eAAe;IAAE;IAAY;IAAS;GAAO,CAAC,GACzD,KAAK,MAAM,UAAU,GAAY,GAAS,CAAM;EAClD;EAEA,gBAAgB;GACd,KAAK,MAAM,SAAS;EACtB;CACF;AACF,SAzJO,OAAM,mBAAkB;;CAEH,OAAM;SACvB,OAAM,eAAc,SAGpB,OAAM,gBAAe;;;aAN9B,EAiCM,OAjCN,GAiCM,CA/BO,EAAA,eAAA,EAAA,GAAX,EAWM,OAXN,GAWM,CAVJ,EAEM,OAFN,GAEM,CADJ,EAA4B,EAAA,QAAA,gBAAA,CAAA,GAAA,KAAA,GAAA,EAAA,CAAA,CAAA,GAE9B,EAMM,OANN,GAMM,CALJ,EAIO,EAAA,QAAA,iBAAA,CAAA,SAAA,CAHY,EAAA,eAAA,EAAA,GAAjB,EAEY,GAAA;;EAFkB,MAAK;EAAS,SAAO,EAAA;;mBAEnD,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAFkE,QAElE,EAAA,CAAA,CAAA,CAAA;;yDAMN,EAgBU,GAhBV,EAgBU,EAfA,QACR,EAAiB,EAAX,UAAU,GAAA;EACf,SAAS,EAAA;EACT,eAAa,EAAA;EACb,YAAY,EAAA;EACZ,SAAS,EAAA;EACT,WAAS,EAAA,UAAM;EACf,UAAU,EAAA;EACV,MAAM,EAAA;EACN,UAAQ,EAAA;oBAGqB,EAAA,SAAZ,GAAG;QAAwB;SACP,MADoB,CACxD,EAAoC,EAAA,QAAvB,GAAI,EAAA,EAAU,CAAK,CAAA,GAAA,KAAA,GAAA,EAAA,CAAA,CAAA;;;;;;;;;;;;;;;AC7BxC,EAAQ,WAAW,MAAQ;CACvB,EAAI,UAAUC,EAAQ,MAAMA,CAAO;AACvC;AAEA,IAAA,IAAeA,GCAT,IAAa;CACfC;CACAC;CACAC;AACJ,GAGM,KAAW,GAAK,IAAU,CAAC,MAAM;CAWnC,AATA,EAAW,SAAQ,MAAa;EAC5B,AAAI,EAAU,UACV,EAAI,IAAI,CAAS,IAEjB,EAAI,UAAU,EAAU,MAAM,CAAS;CAE/C,CAAC,GAGG,EAAQ,SAER,EAAI,QAAQ,SAAS,EAAQ,KAAK;AAE1C,GAWA,IAAe;CACX;CACA,UAAA;CACA,SAAA;CACA,SAAA;CACA,SAAS;AACb"}
|
|
@@ -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,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,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,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
|
+
}
|