@mc-markets/ui 1.0.91 → 1.0.93
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/QUICK_START.md +379 -0
- package/README.md +244 -5
- package/USAGE_GUIDE.md +339 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/resolver.d.ts +29 -0
- package/dist/resolver.d.ts.map +1 -0
- package/package.json +22 -3
- package/packages/resolver.d.ts +115 -0
- package/packages/resolver.js +186 -0
- package/vite.config.example.js +161 -0
package/QUICK_START.md
ADDED
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# 🚀 快速入门指南
|
|
2
|
+
|
|
3
|
+
## 项目初始化
|
|
4
|
+
|
|
5
|
+
### 1. 创建 Vue 3 项目
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 使用 Vite 创建项目
|
|
9
|
+
npm create vite@latest my-project -- --template vue
|
|
10
|
+
cd my-project
|
|
11
|
+
|
|
12
|
+
# 或使用 Vue CLI
|
|
13
|
+
npm install -g @vue/cli
|
|
14
|
+
vue create my-project
|
|
15
|
+
cd my-project
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. 安装依赖
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 安装组件库
|
|
22
|
+
npm install @mc-markets/ui
|
|
23
|
+
|
|
24
|
+
# 安装自动导入插件(推荐)
|
|
25
|
+
npm install -D unplugin-vue-components unplugin-auto-import
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 3. 配置 Vite
|
|
29
|
+
|
|
30
|
+
创建或修改 `vite.config.js`:
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
import { defineConfig } from 'vite'
|
|
34
|
+
import vue from '@vitejs/plugin-vue'
|
|
35
|
+
import AutoImport from 'unplugin-auto-import/vite'
|
|
36
|
+
import Components from 'unplugin-vue-components/vite'
|
|
37
|
+
import { McMarketsUIResolver, getMcMarketsUIImports } from '@mc-markets/ui/resolver'
|
|
38
|
+
|
|
39
|
+
export default defineConfig({
|
|
40
|
+
plugins: [
|
|
41
|
+
vue(),
|
|
42
|
+
Components({
|
|
43
|
+
resolvers: [McMarketsUIResolver()]
|
|
44
|
+
}),
|
|
45
|
+
AutoImport({
|
|
46
|
+
imports: ['vue', getMcMarketsUIImports()],
|
|
47
|
+
dts: 'src/auto-imports.d.ts'
|
|
48
|
+
})
|
|
49
|
+
]
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 4. 更新 TypeScript 配置(如果使用 TS)
|
|
54
|
+
|
|
55
|
+
修改 `tsconfig.json`,添加生成的类型文件:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"compilerOptions": {
|
|
60
|
+
// ... 其他配置
|
|
61
|
+
},
|
|
62
|
+
"include": [
|
|
63
|
+
"src/**/*",
|
|
64
|
+
"src/auto-imports.d.ts",
|
|
65
|
+
"src/components.d.ts"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 5. 创建示例页面
|
|
71
|
+
|
|
72
|
+
创建 `src/App.vue`:
|
|
73
|
+
|
|
74
|
+
```vue
|
|
75
|
+
<template>
|
|
76
|
+
<div class="app">
|
|
77
|
+
<h1>@mc-markets/ui 示例</h1>
|
|
78
|
+
|
|
79
|
+
<!-- 表单示例 -->
|
|
80
|
+
<m-form :model="form" label-width="100px">
|
|
81
|
+
<m-form-item label="用户名">
|
|
82
|
+
<m-input v-model="form.username" placeholder="请输入用户名" clearable />
|
|
83
|
+
</m-form-item>
|
|
84
|
+
|
|
85
|
+
<m-form-item label="城市">
|
|
86
|
+
<m-select v-model="form.city" placeholder="请选择城市">
|
|
87
|
+
<m-option label="北京" value="beijing" />
|
|
88
|
+
<m-option label="上海" value="shanghai" />
|
|
89
|
+
<m-option label="深圳" value="shenzhen" />
|
|
90
|
+
</m-select>
|
|
91
|
+
</m-form-item>
|
|
92
|
+
|
|
93
|
+
<m-form-item label="日期">
|
|
94
|
+
<m-date-picker v-model="form.date" placeholder="选择日期" />
|
|
95
|
+
</m-form-item>
|
|
96
|
+
|
|
97
|
+
<m-form-item label="启用状态">
|
|
98
|
+
<m-switch v-model="form.enabled" />
|
|
99
|
+
</m-form-item>
|
|
100
|
+
|
|
101
|
+
<m-form-item>
|
|
102
|
+
<m-button type="primary" @click="handleSubmit">提交</m-button>
|
|
103
|
+
<m-button @click="handleReset">重置</m-button>
|
|
104
|
+
</m-form-item>
|
|
105
|
+
</m-form>
|
|
106
|
+
|
|
107
|
+
<!-- 表格示例 -->
|
|
108
|
+
<m-table :data="tableData" style="margin-top: 20px;">
|
|
109
|
+
<m-table-column prop="name" label="姓名" width="180" />
|
|
110
|
+
<m-table-column prop="age" label="年龄" width="180" />
|
|
111
|
+
<m-table-column prop="address" label="地址" />
|
|
112
|
+
<m-table-column label="操作" width="150">
|
|
113
|
+
<template #default="{ row }">
|
|
114
|
+
<m-button size="small" @click="handleEdit(row)">编辑</m-button>
|
|
115
|
+
<m-button size="small" type="danger" @click="handleDelete(row)">
|
|
116
|
+
删除
|
|
117
|
+
</m-button>
|
|
118
|
+
</template>
|
|
119
|
+
</m-table-column>
|
|
120
|
+
</m-table>
|
|
121
|
+
|
|
122
|
+
<!-- 分页示例 -->
|
|
123
|
+
<m-pagination
|
|
124
|
+
v-model:current-page="currentPage"
|
|
125
|
+
v-model:page-size="pageSize"
|
|
126
|
+
:total="100"
|
|
127
|
+
layout="prev, pager, next"
|
|
128
|
+
style="margin-top: 20px;"
|
|
129
|
+
/>
|
|
130
|
+
</div>
|
|
131
|
+
</template>
|
|
132
|
+
|
|
133
|
+
<script setup>
|
|
134
|
+
// 无需导入任何东西!
|
|
135
|
+
// ref, reactive 等 Vue API 已自动导入
|
|
136
|
+
// Message 等组件库 API 已自动导入
|
|
137
|
+
// 组件也已自动导入,直接在模板中使用即可
|
|
138
|
+
|
|
139
|
+
const form = reactive({
|
|
140
|
+
username: '',
|
|
141
|
+
city: '',
|
|
142
|
+
date: '',
|
|
143
|
+
enabled: false
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
const tableData = ref([
|
|
147
|
+
{ name: '张三', age: 28, address: '北京市朝阳区' },
|
|
148
|
+
{ name: '李四', age: 32, address: '上海市浦东新区' },
|
|
149
|
+
{ name: '王五', age: 25, address: '深圳市南山区' }
|
|
150
|
+
])
|
|
151
|
+
|
|
152
|
+
const currentPage = ref(1)
|
|
153
|
+
const pageSize = ref(10)
|
|
154
|
+
|
|
155
|
+
const handleSubmit = () => {
|
|
156
|
+
console.log('表单数据:', form)
|
|
157
|
+
Message.success('提交成功!')
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const handleReset = () => {
|
|
161
|
+
Object.assign(form, {
|
|
162
|
+
username: '',
|
|
163
|
+
city: '',
|
|
164
|
+
date: '',
|
|
165
|
+
enabled: false
|
|
166
|
+
})
|
|
167
|
+
Message.info('已重置')
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const handleEdit = (row) => {
|
|
171
|
+
console.log('编辑:', row)
|
|
172
|
+
Message.info(`编辑 ${row.name}`)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const handleDelete = async (row) => {
|
|
176
|
+
try {
|
|
177
|
+
await MMessageBox.confirm(`确定删除 ${row.name} 吗?`, '提示')
|
|
178
|
+
Message.success('删除成功')
|
|
179
|
+
} catch {
|
|
180
|
+
Message.info('已取消删除')
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
</script>
|
|
184
|
+
|
|
185
|
+
<style scoped>
|
|
186
|
+
.app {
|
|
187
|
+
padding: 20px;
|
|
188
|
+
max-width: 1200px;
|
|
189
|
+
margin: 0 auto;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
h1 {
|
|
193
|
+
margin-bottom: 20px;
|
|
194
|
+
color: #333;
|
|
195
|
+
}
|
|
196
|
+
</style>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 6. 运行项目
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
npm run dev
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 项目结构
|
|
206
|
+
|
|
207
|
+
推荐的项目结构:
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
my-project/
|
|
211
|
+
├── src/
|
|
212
|
+
│ ├── assets/ # 静态资源
|
|
213
|
+
│ ├── components/ # 业务组件
|
|
214
|
+
│ ├── views/ # 页面组件
|
|
215
|
+
│ ├── router/ # 路由配置
|
|
216
|
+
│ ├── store/ # 状态管理
|
|
217
|
+
│ ├── utils/ # 工具函数
|
|
218
|
+
│ ├── App.vue # 根组件
|
|
219
|
+
│ ├── main.js # 入口文件
|
|
220
|
+
│ ├── auto-imports.d.ts # 自动生成的 API 类型
|
|
221
|
+
│ └── components.d.ts # 自动生成的组件类型
|
|
222
|
+
├── public/ # 公共资源
|
|
223
|
+
├── index.html # HTML 模板
|
|
224
|
+
├── vite.config.js # Vite 配置
|
|
225
|
+
├── package.json # 项目配置
|
|
226
|
+
└── tsconfig.json # TypeScript 配置(可选)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## 常用示例
|
|
230
|
+
|
|
231
|
+
### 对话框示例
|
|
232
|
+
|
|
233
|
+
```vue
|
|
234
|
+
<template>
|
|
235
|
+
<m-button @click="dialogVisible = true">打开对话框</m-button>
|
|
236
|
+
|
|
237
|
+
<m-dialog v-model="dialogVisible" title="提示">
|
|
238
|
+
<span>这是一段信息</span>
|
|
239
|
+
<template #footer>
|
|
240
|
+
<m-button @click="dialogVisible = false">取消</m-button>
|
|
241
|
+
<m-button type="primary" @click="handleConfirm">确定</m-button>
|
|
242
|
+
</template>
|
|
243
|
+
</m-dialog>
|
|
244
|
+
</template>
|
|
245
|
+
|
|
246
|
+
<script setup>
|
|
247
|
+
const dialogVisible = ref(false)
|
|
248
|
+
|
|
249
|
+
const handleConfirm = () => {
|
|
250
|
+
dialogVisible.value = false
|
|
251
|
+
Message.success('操作成功')
|
|
252
|
+
}
|
|
253
|
+
</script>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 标签页示例
|
|
257
|
+
|
|
258
|
+
```vue
|
|
259
|
+
<template>
|
|
260
|
+
<m-tabs v-model="activeTab">
|
|
261
|
+
<m-tab-pane label="用户管理" name="user">
|
|
262
|
+
用户管理内容
|
|
263
|
+
</m-tab-pane>
|
|
264
|
+
<m-tab-pane label="配置管理" name="config">
|
|
265
|
+
配置管理内容
|
|
266
|
+
</m-tab-pane>
|
|
267
|
+
<m-tab-pane label="角色管理" name="role">
|
|
268
|
+
角色管理内容
|
|
269
|
+
</m-tab-pane>
|
|
270
|
+
</m-tabs>
|
|
271
|
+
</template>
|
|
272
|
+
|
|
273
|
+
<script setup>
|
|
274
|
+
const activeTab = ref('user')
|
|
275
|
+
</script>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### 单选框组示例
|
|
279
|
+
|
|
280
|
+
```vue
|
|
281
|
+
<template>
|
|
282
|
+
<m-radio-group v-model="radio">
|
|
283
|
+
<m-radio label="1">选项 1</m-radio>
|
|
284
|
+
<m-radio label="2">选项 2</m-radio>
|
|
285
|
+
<m-radio label="3">选项 3</m-radio>
|
|
286
|
+
</m-radio-group>
|
|
287
|
+
|
|
288
|
+
<div style="margin-top: 10px;">
|
|
289
|
+
<m-radio-group v-model="radioButton">
|
|
290
|
+
<m-radio-button label="北京" />
|
|
291
|
+
<m-radio-button label="上海" />
|
|
292
|
+
<m-radio-button label="深圳" />
|
|
293
|
+
</m-radio-group>
|
|
294
|
+
</div>
|
|
295
|
+
</template>
|
|
296
|
+
|
|
297
|
+
<script setup>
|
|
298
|
+
const radio = ref('1')
|
|
299
|
+
const radioButton = ref('北京')
|
|
300
|
+
</script>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 消息提示示例
|
|
304
|
+
|
|
305
|
+
```vue
|
|
306
|
+
<template>
|
|
307
|
+
<m-button @click="Message.success('成功消息')">成功</m-button>
|
|
308
|
+
<m-button @click="Message.warning('警告消息')">警告</m-button>
|
|
309
|
+
<m-button @click="Message.info('信息消息')">信息</m-button>
|
|
310
|
+
<m-button @click="Message.error('错误消息')">错误</m-button>
|
|
311
|
+
</template>
|
|
312
|
+
|
|
313
|
+
<script setup>
|
|
314
|
+
// Message 已自动导入,直接使用即可
|
|
315
|
+
</script>
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### 通知示例
|
|
319
|
+
|
|
320
|
+
```vue
|
|
321
|
+
<template>
|
|
322
|
+
<m-button @click="showNotification">显示通知</m-button>
|
|
323
|
+
</template>
|
|
324
|
+
|
|
325
|
+
<script setup>
|
|
326
|
+
const showNotification = () => {
|
|
327
|
+
NotifiMessage({
|
|
328
|
+
title: '通知标题',
|
|
329
|
+
message: '这是通知内容',
|
|
330
|
+
type: 'success',
|
|
331
|
+
duration: 3000
|
|
332
|
+
})
|
|
333
|
+
}
|
|
334
|
+
</script>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## 更多示例
|
|
338
|
+
|
|
339
|
+
访问 [在线演示](https://daboluoxigua.github.io/mc-markets-ui/) 查看完整的组件示例和 API 文档。
|
|
340
|
+
|
|
341
|
+
## 下一步
|
|
342
|
+
|
|
343
|
+
- 📖 阅读 [使用指南](./USAGE_GUIDE.md) 了解更多高级用法
|
|
344
|
+
- 🎨 查看 [在线演示](https://daboluoxigua.github.io/mc-markets-ui/) 了解所有组件
|
|
345
|
+
- 💡 参考 [配置示例](./vite.config.example.js) 优化你的配置
|
|
346
|
+
|
|
347
|
+
## 常见问题
|
|
348
|
+
|
|
349
|
+
### Q: 为什么组件样式没有生效?
|
|
350
|
+
|
|
351
|
+
确保 `McMarketsUIResolver` 的 `importStyle` 选项为 `true`(默认),或手动导入样式:
|
|
352
|
+
|
|
353
|
+
```javascript
|
|
354
|
+
// main.js
|
|
355
|
+
import '@mc-markets/ui/dist/style.css'
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Q: TypeScript 类型提示不工作?
|
|
359
|
+
|
|
360
|
+
1. 确保 `tsconfig.json` 包含了生成的 `.d.ts` 文件
|
|
361
|
+
2. 重启 IDE
|
|
362
|
+
3. 运行一次 `npm run dev` 生成类型文件
|
|
363
|
+
|
|
364
|
+
### Q: 如何使用 Element Plus 的其他组件?
|
|
365
|
+
|
|
366
|
+
所有 Element Plus 组件都可以通过 `m-` 前缀使用,会自动转换。例如:
|
|
367
|
+
|
|
368
|
+
```vue
|
|
369
|
+
<m-carousel>
|
|
370
|
+
<m-carousel-item>内容 1</m-carousel-item>
|
|
371
|
+
<m-carousel-item>内容 2</m-carousel-item>
|
|
372
|
+
</m-carousel>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## 获取帮助
|
|
376
|
+
|
|
377
|
+
- [GitHub Issues](https://github.com/daboluoxigua/mc-markets-ui/issues)
|
|
378
|
+
- [npm 主页](https://www.npmjs.com/package/@mc-markets/ui)
|
|
379
|
+
|
package/README.md
CHANGED
|
@@ -10,14 +10,239 @@ Vue 3 组件库,基于 Element Plus 的自定义组件
|
|
|
10
10
|
|
|
11
11
|
演示站点通过 GitHub Actions 自动构建和部署,展示了所有组件的使用方法和效果。
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## ✨ 特性
|
|
14
|
+
|
|
15
|
+
- 🎨 基于 Element Plus,保持一致的设计语言
|
|
16
|
+
- 🔧 支持全局注册和按需导入
|
|
17
|
+
- 📦 智能组件注册,自动转换 Element Plus 组件前缀 (el- → m-)
|
|
18
|
+
- 🚀 支持 unplugin-vue-components 自动导入
|
|
19
|
+
- 💪 TypeScript 支持
|
|
20
|
+
- 🎯 Tree-shaking 友好
|
|
21
|
+
|
|
22
|
+
## 🚀 安装
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @mc-markets/ui
|
|
26
|
+
# 或
|
|
27
|
+
yarn add @mc-markets/ui
|
|
28
|
+
# 或
|
|
29
|
+
pnpm add @mc-markets/ui
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 📦 使用方式
|
|
33
|
+
|
|
34
|
+
### 方式一:全局注册(推荐快速上手)
|
|
35
|
+
|
|
36
|
+
在 `main.js` 或 `main.ts` 中:
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
import { createApp } from 'vue'
|
|
40
|
+
import App from './App.vue'
|
|
41
|
+
import McMarketsUI from '@mc-markets/ui'
|
|
42
|
+
import '@mc-markets/ui/dist/style.css'
|
|
43
|
+
|
|
44
|
+
const app = createApp(App)
|
|
45
|
+
app.use(McMarketsUI)
|
|
46
|
+
app.mount('#app')
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 方式二:手动按需导入
|
|
50
|
+
|
|
51
|
+
```vue
|
|
52
|
+
<template>
|
|
53
|
+
<m-button type="primary">按钮</m-button>
|
|
54
|
+
<m-input v-model="value" placeholder="请输入" />
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<script setup>
|
|
58
|
+
import { ref } from 'vue'
|
|
59
|
+
import { MButton, MInput } from '@mc-markets/ui'
|
|
60
|
+
import '@mc-markets/ui/dist/style.css'
|
|
61
|
+
|
|
62
|
+
const value = ref('')
|
|
63
|
+
</script>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 方式三:自动按需导入(推荐)⭐
|
|
67
|
+
|
|
68
|
+
使用 `unplugin-vue-components` 和 `unplugin-auto-import` 实现零配置按需导入:
|
|
69
|
+
|
|
70
|
+
#### 1. 安装插件
|
|
14
71
|
|
|
15
|
-
### 安装
|
|
16
72
|
```bash
|
|
17
|
-
npm
|
|
73
|
+
npm install -D unplugin-vue-components unplugin-auto-import
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### 2. 配置 Vite
|
|
77
|
+
|
|
78
|
+
在 `vite.config.js` 或 `vite.config.ts` 中:
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
import { defineConfig } from 'vite'
|
|
82
|
+
import vue from '@vitejs/plugin-vue'
|
|
83
|
+
import AutoImport from 'unplugin-auto-import/vite'
|
|
84
|
+
import Components from 'unplugin-vue-components/vite'
|
|
85
|
+
import { McMarketsUIResolver, getMcMarketsUIImports } from '@mc-markets/ui/resolver'
|
|
86
|
+
|
|
87
|
+
export default defineConfig({
|
|
88
|
+
plugins: [
|
|
89
|
+
vue(),
|
|
90
|
+
// 自动导入组件
|
|
91
|
+
Components({
|
|
92
|
+
resolvers: [
|
|
93
|
+
McMarketsUIResolver({
|
|
94
|
+
// prefix: 'm', // 组件前缀,默认 'm'
|
|
95
|
+
// importStyle: 'css' // 样式导入方式:'css' | 'scss' | false,默认 'css'
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
}),
|
|
99
|
+
// 自动导入 API
|
|
100
|
+
AutoImport({
|
|
101
|
+
imports: [
|
|
102
|
+
'vue',
|
|
103
|
+
getMcMarketsUIImports() // 自动导入 Message, NotifiMessage 等 API
|
|
104
|
+
],
|
|
105
|
+
dts: 'src/auto-imports.d.ts'
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
})
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### 3. 导入样式(推荐)
|
|
112
|
+
|
|
113
|
+
在 `main.js` 或 `main.ts` 中导入样式:
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
import { createApp } from 'vue'
|
|
117
|
+
import App from './App.vue'
|
|
118
|
+
// 导入组件库样式
|
|
119
|
+
import '@mc-markets/ui/dist/style.css'
|
|
120
|
+
|
|
121
|
+
createApp(App).mount('#app')
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**其他样式导入方式:**
|
|
125
|
+
|
|
126
|
+
```javascript
|
|
127
|
+
// 方式1:导入编译后的 CSS(推荐,体积更小)
|
|
128
|
+
import '@mc-markets/ui/dist/style.css'
|
|
129
|
+
|
|
130
|
+
// 方式2:导入 SCSS 源文件(可自定义变量)
|
|
131
|
+
import '@mc-markets/ui/packages/styles/index.scss'
|
|
132
|
+
|
|
133
|
+
// 方式3:通过 resolver 自动导入(会在第一个组件导入时自动引入)
|
|
134
|
+
// 在 vite.config.js 中配置 importStyle: 'css'
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
#### 4. 配置 Webpack(Vue CLI)
|
|
138
|
+
|
|
139
|
+
在 `vue.config.js` 中:
|
|
140
|
+
|
|
141
|
+
```javascript
|
|
142
|
+
const AutoImport = require('unplugin-auto-import/webpack')
|
|
143
|
+
const Components = require('unplugin-vue-components/webpack')
|
|
144
|
+
const { McMarketsUIResolver, getMcMarketsUIImports } = require('@mc-markets/ui/resolver')
|
|
145
|
+
|
|
146
|
+
module.exports = {
|
|
147
|
+
configureWebpack: {
|
|
148
|
+
plugins: [
|
|
149
|
+
Components({
|
|
150
|
+
resolvers: [McMarketsUIResolver()]
|
|
151
|
+
}),
|
|
152
|
+
AutoImport({
|
|
153
|
+
imports: [
|
|
154
|
+
'vue',
|
|
155
|
+
getMcMarketsUIImports()
|
|
156
|
+
],
|
|
157
|
+
dts: 'src/auto-imports.d.ts'
|
|
158
|
+
})
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### 5. 直接使用组件(无需手动导入)
|
|
165
|
+
|
|
166
|
+
配置完成后,可以直接在模板中使用组件,无需手动导入:
|
|
167
|
+
|
|
168
|
+
```vue
|
|
169
|
+
<template>
|
|
170
|
+
<!-- 直接使用,无需导入 -->
|
|
171
|
+
<m-button type="primary" @click="showMessage">显示消息</m-button>
|
|
172
|
+
<m-input v-model="form.name" placeholder="请输入姓名" />
|
|
173
|
+
<m-select v-model="form.city">
|
|
174
|
+
<m-option label="北京" value="beijing" />
|
|
175
|
+
<m-option label="上海" value="shanghai" />
|
|
176
|
+
</m-select>
|
|
177
|
+
<m-date-picker v-model="form.date" />
|
|
178
|
+
</template>
|
|
179
|
+
|
|
180
|
+
<script setup>
|
|
181
|
+
import { ref } from 'vue'
|
|
182
|
+
|
|
183
|
+
// API 也会自动导入,可以直接使用
|
|
184
|
+
const form = ref({
|
|
185
|
+
name: '',
|
|
186
|
+
city: '',
|
|
187
|
+
date: ''
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
const showMessage = () => {
|
|
191
|
+
// Message 已自动导入
|
|
192
|
+
Message.success('操作成功!')
|
|
193
|
+
}
|
|
194
|
+
</script>
|
|
18
195
|
```
|
|
19
196
|
|
|
20
|
-
|
|
197
|
+
## 🎯 智能组件系统
|
|
198
|
+
|
|
199
|
+
本组件库实现了智能组件注册机制:
|
|
200
|
+
|
|
201
|
+
1. **自定义组件优先**:如果定义了自定义组件(如 `MButton`),会使用自定义版本
|
|
202
|
+
2. **Element Plus 回退**:未自定义的组件会自动从 Element Plus 导入
|
|
203
|
+
3. **前缀转换**:自动将 `el-*` 转换为 `m-*`(如 `<el-button>` → `<m-button>`)
|
|
204
|
+
4. **无缝集成**:可以混合使用自定义组件和 Element Plus 组件
|
|
205
|
+
|
|
206
|
+
### 可用组件
|
|
207
|
+
|
|
208
|
+
#### 自定义组件
|
|
209
|
+
- `MIcon` - 图标
|
|
210
|
+
- `MButton` - 按钮
|
|
211
|
+
- `MInput` - 输入框
|
|
212
|
+
- `MSelect` / `MOption` / `MOptionGroup` - 选择器
|
|
213
|
+
- `MForm` / `MFormItem` - 表单
|
|
214
|
+
- `MTable` / `MTableColumn` - 表格
|
|
215
|
+
- `MDatePicker` - 日期选择器
|
|
216
|
+
- `MPagination` - 分页
|
|
217
|
+
- `MRadio` / `MRadioGroup` / `MRadioButton` - 单选框
|
|
218
|
+
- `MSwitch` - 开关
|
|
219
|
+
- `MTag` - 标签
|
|
220
|
+
- `MAlert` - 警告
|
|
221
|
+
- `MDialog` - 对话框
|
|
222
|
+
- `MTooltip` - 文字提示
|
|
223
|
+
- `MEmpty` - 空状态
|
|
224
|
+
- `MBanner` - 横幅
|
|
225
|
+
- `MTabs` / `MTabPane` - 标签页
|
|
226
|
+
- `MTabCard` / `MTabCardItem` - 卡片标签页
|
|
227
|
+
- `MBreadcrumb` - 面包屑导航
|
|
228
|
+
|
|
229
|
+
#### Element Plus 组件(自动转换前缀)
|
|
230
|
+
所有 Element Plus 组件都可以通过 `m-` 前缀使用,例如:
|
|
231
|
+
- `MCarousel` / `MCarouselItem` - 走马灯
|
|
232
|
+
- `MCascader` - 级联选择器
|
|
233
|
+
- `MColorPicker` - 颜色选择器
|
|
234
|
+
- `MTree` / `MTreeSelect` - 树形控件
|
|
235
|
+
- `MUpload` - 上传
|
|
236
|
+
- `MProgress` - 进度条
|
|
237
|
+
- 等等...
|
|
238
|
+
|
|
239
|
+
#### API 方法
|
|
240
|
+
- `Message` - 消息提示
|
|
241
|
+
- `NotifiMessage` - 通知消息
|
|
242
|
+
- `MMessageBox` - 消息弹框
|
|
243
|
+
|
|
244
|
+
## 🛠️ 文档开发
|
|
245
|
+
|
|
21
246
|
```bash
|
|
22
247
|
# 安装依赖
|
|
23
248
|
npm install
|
|
@@ -25,6 +250,20 @@ npm install
|
|
|
25
250
|
# 启动开发服务器
|
|
26
251
|
npm run dev
|
|
27
252
|
|
|
28
|
-
#
|
|
253
|
+
# 构建组件库
|
|
254
|
+
npm run build
|
|
255
|
+
|
|
256
|
+
# 构建演示站点
|
|
257
|
+
npm run build:demo
|
|
258
|
+
|
|
259
|
+
# 发布到 npm
|
|
29
260
|
npm run publish:lib
|
|
30
261
|
```
|
|
262
|
+
|
|
263
|
+
## 📄 License
|
|
264
|
+
|
|
265
|
+
MIT
|
|
266
|
+
|
|
267
|
+
## 🤝 贡献
|
|
268
|
+
|
|
269
|
+
欢迎提交 Issue 和 Pull Request!
|