@mc-markets/ui 1.0.101 → 1.1.1

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 CHANGED
@@ -10,263 +10,80 @@ Vue 3 组件库,基于 Element Plus 的自定义组件
10
10
 
11
11
  演示站点通过 GitHub Actions 自动构建和部署,展示了所有组件的使用方法和效果。
12
12
 
13
- ## 特性
14
-
15
- - 🎨 基于 Element Plus,保持一致的设计语言
16
- - 🔧 支持全局注册和按需导入
17
- - 📦 智能组件注册,自动转换 Element Plus 组件前缀 (el- → m-)
18
- - 🚀 支持 unplugin-vue-components 自动导入
19
- - 💪 TypeScript 支持
20
- - 🎯 Tree-shaking 友好
21
-
22
- ## 🚀 安装
13
+ ## 🚀 快速开始
23
14
 
15
+ ### 安装
24
16
  ```bash
25
- npm install @mc-markets/ui
26
- # 或
27
- yarn add @mc-markets/ui
28
- # 或
29
- pnpm add @mc-markets/ui
17
+ npm i @mc-markets/ui
30
18
  ```
31
19
 
32
- ## 📦 使用方式
33
-
34
- ### 方式一:全局注册(推荐快速上手)
20
+ ### 使用方式
35
21
 
36
- `main.js` 或 `main.ts` 中:
22
+ #### 方式一:完整导入(推荐用于演示)
37
23
 
38
- ```javascript
24
+ ```js
25
+ // main.js
39
26
  import { createApp } from 'vue'
40
27
  import App from './App.vue'
41
28
  import McMarketsUI from '@mc-markets/ui'
42
- import '@mc-markets/ui/dist/style.css'
29
+ import '@mc-markets/ui/dist/style'
43
30
 
44
31
  const app = createApp(App)
45
32
  app.use(McMarketsUI)
46
33
  app.mount('#app')
47
34
  ```
48
35
 
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` 实现零配置按需导入:
36
+ #### 方式二:自动导入(推荐用于生产)⭐
69
37
 
70
- #### 1. 安装插件
38
+ 使用 `unplugin-vue-components` 实现按需自动导入:
71
39
 
72
40
  ```bash
73
- npm install -D unplugin-vue-components unplugin-auto-import
41
+ npm i -D unplugin-vue-components
74
42
  ```
75
43
 
76
- #### 2. 配置 Vite
77
-
78
- 在 `vite.config.js` 或 `vite.config.ts` 中:
79
-
80
- ```javascript
44
+ ```js
45
+ // vite.config.js
81
46
  import { defineConfig } from 'vite'
82
47
  import vue from '@vitejs/plugin-vue'
83
- import AutoImport from 'unplugin-auto-import/vite'
84
48
  import Components from 'unplugin-vue-components/vite'
85
- import { McMarketsUIResolver, getMcMarketsUIImports } from '@mc-markets/ui'
49
+ import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
86
50
 
87
51
  export default defineConfig({
88
52
  plugins: [
89
53
  vue(),
90
- // 自动导入组件
91
54
  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'
55
+ resolvers: [McMarketsUiResolver()]
106
56
  })
107
57
  ]
108
58
  })
109
59
  ```
110
60
 
111
- #### 3. 导入样式(推荐)
112
-
113
- 在 `main.js` 或 `main.ts` 中导入样式:
114
-
115
- ```javascript
116
- import { createApp } from 'vue'
117
- import App from './App.vue'
118
-
119
- // 导入组件库样式(必需)
120
- import '@mc-markets/ui/dist/style.css'
121
-
122
- // 导入字体图标样式(如果使用图标组件)
123
- import '@mc-markets/ui/styles/font'
124
- import '@mc-markets/ui/styles/colorfont'
125
-
126
- createApp(App).mount('#app')
127
- ```
128
-
129
- **自动导入样式(推荐):**
130
-
131
- 配置 resolver 的 `importStyle: 'css'` 后,会自动导入以下文件:
132
- - `@mc-markets/ui/dist/style.css` - 主样式文件
133
- - `@mc-markets/ui/styles/font` - 字体图标样式
134
- - `@mc-markets/ui/styles/colorfont` - 彩色字体图标样式
135
-
136
- ```javascript
137
- // vite.config.js
138
- McMarketsUIResolver({
139
- importStyle: 'css' // 自动导入所有必需的样式
140
- })
141
- ```
142
-
143
- **其他样式导入方式:**
144
-
145
- ```javascript
146
- // 方式1:导入编译后的 CSS(推荐,体积更小)
147
- import '@mc-markets/ui/dist/style.css'
148
-
149
- // 方式2:导入独立 SCSS 文件(不依赖 Element Plus,推荐)
150
- import '@mc-markets/ui/styles/standalone'
151
-
152
- // 方式3:导入 SCSS 源文件(包含自定义变量)
153
- import '@mc-markets/ui/styles/index'
154
-
155
- // 方式4:手动导入所有样式
156
- import '@mc-markets/ui/dist/style.css'
157
- import '@mc-markets/ui/styles/font'
158
- import '@mc-markets/ui/styles/colorfont'
159
- ```
160
-
161
- #### 4. 配置 Webpack(Vue CLI)
162
-
163
- 在 `vue.config.js` 中:
164
-
165
- ```javascript
166
- const AutoImport = require('unplugin-auto-import/webpack')
167
- const Components = require('unplugin-vue-components/webpack')
168
- const { McMarketsUIResolver, getMcMarketsUIImports } = require('@mc-markets/ui')
169
-
170
- module.exports = {
171
- configureWebpack: {
172
- plugins: [
173
- Components({
174
- resolvers: [McMarketsUIResolver()]
175
- }),
176
- AutoImport({
177
- imports: [
178
- 'vue',
179
- getMcMarketsUIImports()
180
- ],
181
- dts: 'src/auto-imports.d.ts'
182
- })
183
- ]
184
- }
185
- }
186
- ```
187
-
188
- #### 5. 直接使用组件(无需手动导入)
189
-
190
- 配置完成后,可以直接在模板中使用组件,无需手动导入:
61
+ 然后就可以直接在模板中使用组件,无需手动导入:
191
62
 
192
63
  ```vue
193
64
  <template>
194
- <!-- 直接使用,无需导入 -->
195
- <m-button type="primary" @click="showMessage">显示消息</m-button>
196
- <m-input v-model="form.name" placeholder="请输入姓名" />
197
- <m-select v-model="form.city">
198
- <m-option label="北京" value="beijing" />
199
- <m-option label="上海" value="shanghai" />
200
- </m-select>
201
- <m-date-picker v-model="form.date" />
65
+ <m-button type="primary">按钮</m-button>
66
+ <m-input v-model="value" />
202
67
  </template>
203
-
204
- <script setup>
205
- import { ref } from 'vue'
206
-
207
- // API 也会自动导入,可以直接使用
208
- const form = ref({
209
- name: '',
210
- city: '',
211
- date: ''
212
- })
213
-
214
- const showMessage = () => {
215
- // Message 已自动导入
216
- Message.success('操作成功!')
217
- }
218
- </script>
219
68
  ```
220
69
 
221
- ## 🎯 智能组件系统
222
-
223
- 本组件库实现了智能组件注册机制:
70
+ 📘 详细配置请查看 [Resolver 使用指南](./RESOLVER_USAGE.md)
224
71
 
225
- 1. **自定义组件优先**:如果定义了自定义组件(如 `MButton`),会使用自定义版本
226
- 2. **Element Plus 回退**:未自定义的组件会自动从 Element Plus 导入
227
- 3. **前缀转换**:自动将 `el-*` 转换为 `m-*`(如 `<el-button>` → `<m-button>`)
228
- 4. **无缝集成**:可以混合使用自定义组件和 Element Plus 组件
72
+ #### 方式三:手动按需导入
229
73
 
230
- ### 可用组件
231
-
232
- #### 自定义组件
233
- - `MIcon` - 图标
234
- - `MButton` - 按钮
235
- - `MInput` - 输入框
236
- - `MSelect` / `MOption` / `MOptionGroup` - 选择器
237
- - `MForm` / `MFormItem` - 表单
238
- - `MTable` / `MTableColumn` - 表格
239
- - `MDatePicker` - 日期选择器
240
- - `MPagination` - 分页
241
- - `MRadio` / `MRadioGroup` / `MRadioButton` - 单选框
242
- - `MSwitch` - 开关
243
- - `MTag` - 标签
244
- - `MAlert` - 警告
245
- - `MDialog` - 对话框
246
- - `MTooltip` - 文字提示
247
- - `MEmpty` - 空状态
248
- - `MBanner` - 横幅
249
- - `MTabs` / `MTabPane` - 标签页
250
- - `MTabCard` / `MTabCardItem` - 卡片标签页
251
- - `MBreadcrumb` - 面包屑导航
252
-
253
- #### Element Plus 组件(自动转换前缀)
254
- 所有 Element Plus 组件都可以通过 `m-` 前缀使用,例如:
255
- - `MCarousel` / `MCarouselItem` - 走马灯
256
- - `MCascader` - 级联选择器
257
- - `MColorPicker` - 颜色选择器
258
- - `MTree` / `MTreeSelect` - 树形控件
259
- - `MUpload` - 上传
260
- - `MProgress` - 进度条
261
- - 等等...
262
-
263
- #### API 方法
264
- - `Message` - 消息提示
265
- - `NotifiMessage` - 通知消息
266
- - `MMessageBox` - 消息弹框
74
+ ```vue
75
+ <script setup>
76
+ import { MButton, MInput } from '@mc-markets/ui'
77
+ import '@mc-markets/ui/dist/style'
78
+ </script>
267
79
 
268
- ## 🛠️ 文档开发
80
+ <template>
81
+ <m-button type="primary">按钮</m-button>
82
+ <m-input v-model="value" />
83
+ </template>
84
+ ```
269
85
 
86
+ ### 文档开发模式
270
87
  ```bash
271
88
  # 安装依赖
272
89
  npm install
@@ -274,20 +91,6 @@ npm install
274
91
  # 启动开发服务器
275
92
  npm run dev
276
93
 
277
- # 构建组件库
278
- npm run build
279
-
280
- # 构建演示站点
281
- npm run build:demo
282
-
283
- # 发布到 npm
94
+ # 构建发布
284
95
  npm run publish:lib
285
96
  ```
286
-
287
- ## 📄 License
288
-
289
- MIT
290
-
291
- ## 🤝 贡献
292
-
293
- 欢迎提交 Issue 和 Pull Request!
@@ -0,0 +1,257 @@
1
+ # @mc-markets/ui Resolver 使用指南
2
+
3
+ ## 什么是 Resolver?
4
+
5
+ Resolver 是 `unplugin-vue-components` 的一个功能,它可以自动识别和导入组件库的组件,无需手动导入。
6
+
7
+ ## 安装
8
+
9
+ 首先,确保你已经安装了必要的依赖:
10
+
11
+ ```bash
12
+ npm install @mc-markets/ui
13
+ npm install -D unplugin-vue-components
14
+ ```
15
+
16
+ ## 使用方法
17
+
18
+ ### Vite 配置
19
+
20
+ 在你的 `vite.config.js` 或 `vite.config.ts` 中:
21
+
22
+ ```js
23
+ import { defineConfig } from 'vite'
24
+ import vue from '@vitejs/plugin-vue'
25
+ import Components from 'unplugin-vue-components/vite'
26
+ import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
27
+
28
+ export default defineConfig({
29
+ plugins: [
30
+ vue(),
31
+ Components({
32
+ resolvers: [
33
+ McMarketsUiResolver({
34
+ importStyle: true, // 自动导入样式
35
+ styleType: 'css', // 样式类型: 'css' | 'scss'
36
+ fallbackToElementPlus: false // 是否回退到 Element Plus
37
+ })
38
+ ]
39
+ })
40
+ ]
41
+ })
42
+ ```
43
+
44
+ ### Webpack 配置
45
+
46
+ 在你的 `webpack.config.js` 中:
47
+
48
+ ```js
49
+ const Components = require('unplugin-vue-components/webpack')
50
+ const { McMarketsUiResolver } = require('@mc-markets/ui/resolver')
51
+
52
+ module.exports = {
53
+ plugins: [
54
+ Components({
55
+ resolvers: [McMarketsUiResolver()]
56
+ })
57
+ ]
58
+ }
59
+ ```
60
+
61
+ ### Rollup 配置
62
+
63
+ ```js
64
+ import Components from 'unplugin-vue-components/rollup'
65
+ import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
66
+
67
+ export default {
68
+ plugins: [
69
+ Components({
70
+ resolvers: [McMarketsUiResolver()]
71
+ })
72
+ ]
73
+ }
74
+ ```
75
+
76
+ ## 配置选项
77
+
78
+ ### importStyle
79
+
80
+ - **类型**: `boolean`
81
+ - **默认值**: `true`
82
+ - **说明**: 是否自动导入样式文件
83
+
84
+ ```js
85
+ McMarketsUiResolver({
86
+ importStyle: true // 会自动导入组件样式
87
+ })
88
+ ```
89
+
90
+ ### styleType
91
+
92
+ - **类型**: `'css' | 'scss'`
93
+ - **默认值**: `'css'`
94
+ - **说明**: 样式文件类型
95
+
96
+ ```js
97
+ // 使用 CSS 样式(打包后的)
98
+ McMarketsUiResolver({
99
+ styleType: 'css' // 导入 @mc-markets/ui/dist/style
100
+ })
101
+
102
+ // 使用 SCSS 样式(源文件)
103
+ McMarketsUiResolver({
104
+ styleType: 'scss' // 导入 @mc-markets/ui/styles/index
105
+ })
106
+ ```
107
+
108
+ 如果使用 `scss`,需要确保项目中配置了 SCSS 处理器。
109
+
110
+ ### fallbackToElementPlus
111
+
112
+ - **类型**: `boolean`
113
+ - **默认值**: `false`
114
+ - **说明**: 对于未自定义的组件,是否回退到 Element Plus
115
+
116
+ ```js
117
+ McMarketsUiResolver({
118
+ fallbackToElementPlus: true
119
+ })
120
+ ```
121
+
122
+ 当设置为 `true` 时,如果使用了 `@mc-markets/ui` 未自定义的组件(如 `MCard`),会尝试从库中导入转换后的 Element Plus 组件。
123
+
124
+ ## 使用示例
125
+
126
+ 配置好 resolver 后,你可以直接在模板中使用组件,无需手动导入:
127
+
128
+ ```vue
129
+ <template>
130
+ <div>
131
+ <!-- 自动导入 MButton -->
132
+ <m-button type="primary">主要按钮</m-button>
133
+
134
+ <!-- 自动导入 MInput -->
135
+ <m-input v-model="value" placeholder="请输入" />
136
+
137
+ <!-- 自动导入 MDialog -->
138
+ <m-dialog v-model="visible" title="对话框">
139
+ <p>对话框内容</p>
140
+ </m-dialog>
141
+ </div>
142
+ </template>
143
+
144
+ <script setup>
145
+ import { ref } from 'vue'
146
+
147
+ const value = ref('')
148
+ const visible = ref(false)
149
+ </script>
150
+ ```
151
+
152
+ ## 与其他 Resolver 一起使用
153
+
154
+ 你可以同时使用多个 resolver:
155
+
156
+ ```js
157
+ import { defineConfig } from 'vite'
158
+ import Components from 'unplugin-vue-components/vite'
159
+ import {
160
+ McMarketsUiResolver
161
+ } from '@mc-markets/ui/resolver'
162
+ import {
163
+ ElementPlusResolver,
164
+ VantResolver
165
+ } from 'unplugin-vue-components/resolvers'
166
+
167
+ export default defineConfig({
168
+ plugins: [
169
+ Components({
170
+ resolvers: [
171
+ McMarketsUiResolver(),
172
+ ElementPlusResolver(), // Element Plus 组件
173
+ VantResolver() // Vant 组件
174
+ ]
175
+ })
176
+ ]
177
+ })
178
+ ```
179
+
180
+ ## 支持的组件
181
+
182
+ 目前支持自动导入的自定义组件包括:
183
+
184
+ - `MIcon` - 图标
185
+ - `MButton` - 按钮
186
+ - `MInput` - 输入框
187
+ - `MForm` - 表单
188
+ - `MFormItem` - 表单项
189
+ - `MTooltip` - 文字提示
190
+ - `MSelect` - 选择器
191
+ - `MOption` - 选项
192
+ - `MOptionGroup` - 选项组
193
+ - `MPagination` - 分页
194
+ - `MRadio` - 单选框
195
+ - `MRadioGroup` - 单选框组
196
+ - `MRadioButton` - 单选按钮
197
+ - `MSwitch` - 开关
198
+ - `MTag` - 标签
199
+ - `MAlert` - 警告
200
+ - `MDialog` - 对话框
201
+ - `MNotification` - 通知
202
+ - `MMessage` - 消息提示
203
+ - `MNotifiMessage` - 通知消息
204
+ - `MDatePicker` - 日期选择器
205
+ - `MEmpty` - 空状态
206
+ - `MTable` - 表格
207
+ - `MTableColumn` - 表格列
208
+ - `MBanner` - 横幅
209
+ - `MTabs` - 标签页
210
+ - `MTabPane` - 标签面板
211
+ - `MTabCard` - 标签卡片
212
+ - `MTabCardItem` - 标签卡片项
213
+ - `MBreadcrumb` - 面包屑
214
+
215
+ ## 注意事项
216
+
217
+ 1. **组件前缀**: 所有组件必须使用 `M` 前缀(如 `MButton`、`MInput`)才能被 resolver 识别。
218
+
219
+ 2. **样式导入**:
220
+ - 如果使用 `styleType: 'css'`,会导入打包后的 CSS 文件
221
+ - 如果使用 `styleType: 'scss'`,会导入源 SCSS 文件,需要项目支持 SCSS
222
+
223
+ 3. **按需加载**: Resolver 会自动实现按需加载,只导入你使用的组件。
224
+
225
+ 4. **类型支持**: Resolver 提供了完整的 TypeScript 类型定义。
226
+
227
+ ## 常见问题
228
+
229
+ ### Q: 组件没有被自动导入?
230
+
231
+ A: 请确保:
232
+ 1. 组件名称使用了 `M` 前缀(如 `<m-button>`)
233
+ 2. Vite/Webpack 配置正确
234
+ 3. 重启开发服务器
235
+
236
+ ### Q: 样式没有生效?
237
+
238
+ A: 请检查:
239
+ 1. `importStyle` 选项是否设置为 `true`
240
+ 2. 如果使用 `styleType: 'scss'`,确保项目配置了 SCSS 处理器
241
+
242
+ ### Q: 可以和 Element Plus 一起使用吗?
243
+
244
+ A: 可以!你可以同时使用 `McMarketsUiResolver` 和 `ElementPlusResolver`:
245
+
246
+ ```js
247
+ resolvers: [
248
+ McMarketsUiResolver(),
249
+ ElementPlusResolver()
250
+ ]
251
+ ```
252
+
253
+ ## 更多资源
254
+
255
+ - [unplugin-vue-components 文档](https://github.com/antfu/unplugin-vue-components)
256
+ - [@mc-markets/ui 文档](https://daboluoxigua.github.io/mc-markets-ui/)
257
+