@mc-markets/ui 1.0.92 → 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 +30 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/resolver.d.ts +5 -2
- package/dist/resolver.d.ts.map +1 -1
- package/package.json +17 -4
- package/packages/resolver.d.ts +115 -0
- package/packages/resolver.js +22 -15
- 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
|
@@ -91,8 +91,8 @@ export default defineConfig({
|
|
|
91
91
|
Components({
|
|
92
92
|
resolvers: [
|
|
93
93
|
McMarketsUIResolver({
|
|
94
|
-
// prefix: 'm',
|
|
95
|
-
// importStyle:
|
|
94
|
+
// prefix: 'm', // 组件前缀,默认 'm'
|
|
95
|
+
// importStyle: 'css' // 样式导入方式:'css' | 'scss' | false,默认 'css'
|
|
96
96
|
})
|
|
97
97
|
]
|
|
98
98
|
}),
|
|
@@ -108,7 +108,33 @@ export default defineConfig({
|
|
|
108
108
|
})
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
#### 3.
|
|
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)
|
|
112
138
|
|
|
113
139
|
在 `vue.config.js` 中:
|
|
114
140
|
|
|
@@ -135,7 +161,7 @@ module.exports = {
|
|
|
135
161
|
}
|
|
136
162
|
```
|
|
137
163
|
|
|
138
|
-
####
|
|
164
|
+
#### 5. 直接使用组件(无需手动导入)
|
|
139
165
|
|
|
140
166
|
配置完成后,可以直接在模板中使用组件,无需手动导入:
|
|
141
167
|
|