cy-element-ui 1.1.23 → 1.1.25
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 +629 -494
- package/lib/element-ui.common.js +44893 -0
- package/lib/index.js +23 -1
- package/lib/theme-chalk/index.css +1 -1
- package/lib/theme-chalk/testComponent.css +1 -0
- package/package.json +2 -2
- package/packages/cy/testComponent/index.js +8 -0
- package/packages/cy/testComponent/src/main.vue +44 -0
- package/packages/examples/demo-styles/cy/testComponent.scss +3 -0
- package/packages/examples/docs/en-US/cy/cy-testComponent.md +1 -0
- package/packages/examples/docs/zh-CN/cy/cy-testComponent.md +1 -0
- package/packages/packages/theme-chalk/src/cy/testComponent.scss +4 -0
- package/packages/theme-chalk/src/cy/index.scss +1 -0
- package/packages/theme-chalk/src/cy/testComponent.scss +76 -0
- package/src/index.js +7 -4
- package/types/cy/cy-element-ui.d.ts +8 -4
- package/types/cy/select-display-input.d.ts +4 -16
- package/types/cy/sub-title.d.ts +4 -7
- package/types/cy/tab-dialog.d.ts +5 -49
- package/types/cy/test-component.d.ts +7 -0
- package/types/cy/tree-select.d.ts +7 -44
- package/types/cy/cy-select-display-input.d.ts +0 -7
- package/types/cy/cy-sub-title.d.ts +0 -7
- package/types/cy/cy-tab-dialog.d.ts +0 -7
- package/types/cy/cy-tree-select.d.ts +0 -7
package/README.md
CHANGED
|
@@ -1,494 +1,629 @@
|
|
|
1
|
-
# cy-element-ui 组件开发指南
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
###
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
examples
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
|
309
|
-
|
|
310
|
-
| `
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
|
315
|
-
|
|
316
|
-
| `packages/
|
|
317
|
-
| `packages/theme-chalk/src/
|
|
318
|
-
| `
|
|
319
|
-
| `
|
|
320
|
-
| `
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
{
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
1
|
+
# cy-element-ui 组件开发指南
|
|
2
|
+
|
|
3
|
+
## 一、在项目中安装使用
|
|
4
|
+
|
|
5
|
+
### 1.1 安装依赖
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 使用 npm
|
|
9
|
+
npm install cy-element-ui --save
|
|
10
|
+
|
|
11
|
+
# 使用 yarn
|
|
12
|
+
yarn add cy-element-ui
|
|
13
|
+
|
|
14
|
+
# 使用淘宝镜像
|
|
15
|
+
npm install cy-element-ui --save --registry=https://registry.npmmirror.com
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 1.2 全局引入
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
// main.js
|
|
22
|
+
import Vue from 'vue';
|
|
23
|
+
import CyElementUI from 'cy-element-ui';
|
|
24
|
+
import 'cy-element-ui/lib/theme-chalk/index.css';
|
|
25
|
+
|
|
26
|
+
Vue.use(CyElementUI);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 1.3 按需引入
|
|
30
|
+
|
|
31
|
+
#### 方法一:手动引入
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
import Vue from 'vue';
|
|
35
|
+
import { CyTreeSelect, CyTabDialog, ElButton } from 'cy-element-ui';
|
|
36
|
+
import 'cy-element-ui/lib/theme-chalk/cy/treeSelect.css';
|
|
37
|
+
import 'cy-element-ui/lib/theme-chalk/cy/tabDialog.css';
|
|
38
|
+
import 'cy-element-ui/lib/theme-chalk/button.css';
|
|
39
|
+
|
|
40
|
+
Vue.use(CyTreeSelect);
|
|
41
|
+
Vue.use(CyTabDialog);
|
|
42
|
+
Vue.use(ElButton);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
#### 方法二:使用 babel-plugin-component
|
|
46
|
+
|
|
47
|
+
**安装插件:**
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm install babel-plugin-component --save-dev
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**配置 `.babelrc`:**
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"plugins": [
|
|
58
|
+
["component", {
|
|
59
|
+
"libraryName": "cy-element-ui",
|
|
60
|
+
"styleLibraryName": "theme-chalk"
|
|
61
|
+
}]
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**使用:**
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
import Vue from 'vue';
|
|
70
|
+
import { CyTreeSelect, CyTabDialog, ElButton } from 'cy-element-ui';
|
|
71
|
+
|
|
72
|
+
Vue.use(CyTreeSelect);
|
|
73
|
+
Vue.use(CyTabDialog);
|
|
74
|
+
Vue.use(ElButton);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 1.4 使用示例
|
|
78
|
+
|
|
79
|
+
```vue
|
|
80
|
+
<template>
|
|
81
|
+
<div class="app-container">
|
|
82
|
+
<!-- 使用 Element UI 组件 -->
|
|
83
|
+
<el-button type="primary">Element Button</el-button>
|
|
84
|
+
|
|
85
|
+
<!-- 使用产研自定义组件 -->
|
|
86
|
+
<cy-tree-select
|
|
87
|
+
v-model="selectedIds"
|
|
88
|
+
:data="treeData"
|
|
89
|
+
placeholder="请选择"
|
|
90
|
+
></cy-tree-select>
|
|
91
|
+
|
|
92
|
+
<cy-tab-dialog
|
|
93
|
+
title="标签对话框"
|
|
94
|
+
:visible="dialogVisible"
|
|
95
|
+
@close="dialogVisible = false"
|
|
96
|
+
>
|
|
97
|
+
<div slot="tab1">标签1内容</div>
|
|
98
|
+
<div slot="tab2">标签2内容</div>
|
|
99
|
+
</cy-tab-dialog>
|
|
100
|
+
</div>
|
|
101
|
+
</template>
|
|
102
|
+
|
|
103
|
+
<script>
|
|
104
|
+
export default {
|
|
105
|
+
name: 'App',
|
|
106
|
+
data() {
|
|
107
|
+
return {
|
|
108
|
+
selectedIds: [],
|
|
109
|
+
dialogVisible: false,
|
|
110
|
+
treeData: [
|
|
111
|
+
{
|
|
112
|
+
id: '1',
|
|
113
|
+
label: '一级节点',
|
|
114
|
+
children: [
|
|
115
|
+
{ id: '1-1', label: '二级节点' }
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
</script>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 二、项目架构
|
|
128
|
+
|
|
129
|
+
### 2.1 整体架构
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
element-dev/ # 项目根目录
|
|
133
|
+
├── build/ # 构建工具目录
|
|
134
|
+
│ ├── bin/ # 脚本命令
|
|
135
|
+
│ │ ├── build-entry.js # 生成入口文件脚本
|
|
136
|
+
│ │ ├── gen-cy-types.js # 生成cy组件类型定义
|
|
137
|
+
│ │ ├── new.js # 创建el组件脚本
|
|
138
|
+
│ │ └── new-cy.js # 创建cy组件脚本
|
|
139
|
+
│ ├── webpack.conf.js # UMD构建配置
|
|
140
|
+
│ ├── webpack.common.js # CommonJS构建配置
|
|
141
|
+
│ ├── webpack.component.js # 组件单独构建配置
|
|
142
|
+
│ └── webpack.demo.js # 示例站点构建配置
|
|
143
|
+
├── examples/ # 示例文档站点
|
|
144
|
+
│ ├── docs/ # 文档内容
|
|
145
|
+
│ │ └── zh-CN/ # 中文文档
|
|
146
|
+
│ │ └── cy/ # 产研组件文档
|
|
147
|
+
│ ├── nav.config.json # 导航配置
|
|
148
|
+
│ └── route.config.js # 路由配置
|
|
149
|
+
├── packages/ # 组件源码目录
|
|
150
|
+
│ ├── cy/ # 产研自定义组件
|
|
151
|
+
│ │ ├── treeSelect/ # 树形选择器
|
|
152
|
+
│ │ ├── tabDialog/ # 标签对话框
|
|
153
|
+
│ │ ├── subTitle/ # 副标题
|
|
154
|
+
│ │ └── selectDisplayInput/ # 选择显示输入框
|
|
155
|
+
│ └── theme-chalk/ # 主题样式源码
|
|
156
|
+
│ └── src/ # SCSS源码
|
|
157
|
+
│ └── cy/ # cy组件样式
|
|
158
|
+
├── src/ # 核心源码
|
|
159
|
+
│ └── index.js # 组件库主入口(自动生成)
|
|
160
|
+
├── types/ # 类型定义
|
|
161
|
+
│ └── cy/ # cy组件类型定义
|
|
162
|
+
├── components.json # 组件配置清单
|
|
163
|
+
└── Makefile # 命令脚本
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 2.2 目录职责说明
|
|
167
|
+
|
|
168
|
+
| 目录层级 | 目录路径 | 职责 | 详细说明 |
|
|
169
|
+
|----------|----------|------|----------|
|
|
170
|
+
| 一级 | `build/` | 构建工具 | 包含所有构建脚本和webpack配置文件 |
|
|
171
|
+
| 二级 | `build/bin/` | 命令脚本 | new.js创建el组件,new-cy.js创建cy组件 |
|
|
172
|
+
| 一级 | `examples/` | 示例站点 | 组件展示文档和示例代码 |
|
|
173
|
+
| 二级 | `examples/docs/zh-CN/cy/` | 产研组件文档 | cy组件的中文文档目录 |
|
|
174
|
+
| 一级 | `packages/` | 组件源码 | 所有el和cy组件的源代码 |
|
|
175
|
+
| 二级 | `packages/cy/` | 产研组件 | 自定义的cy-*组件,独立目录管理 |
|
|
176
|
+
| 三级 | `packages/cy/treeSelect/` | 树形选择器 | CyTreeSelect组件源码 |
|
|
177
|
+
| 二级 | `packages/theme-chalk/src/cy/` | cy样式 | 产研组件的SCSS样式文件 |
|
|
178
|
+
| 一级 | `src/` | 核心入口 | 自动生成的组件注册入口文件 |
|
|
179
|
+
| 一级 | `types/cy/` | 类型定义 | cy组件的TypeScript类型定义 |
|
|
180
|
+
|
|
181
|
+
### 2.3 组件结构规范
|
|
182
|
+
|
|
183
|
+
**产研自定义组件结构(cy组件):**
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
packages/
|
|
187
|
+
└── cy/ # cy组件根目录
|
|
188
|
+
├── treeSelect/ # 组件目录(驼峰式)
|
|
189
|
+
│ ├── index.js # 组件导出文件
|
|
190
|
+
│ └── src/ # 源码目录
|
|
191
|
+
│ └── main.vue # 主组件文件(必须)
|
|
192
|
+
├── tabDialog/
|
|
193
|
+
├── subTitle/
|
|
194
|
+
└── selectDisplayInput/
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**组件目录命名规则:**
|
|
198
|
+
- cy组件:驼峰式(如 `treeSelect`)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 三、创建新组件
|
|
203
|
+
|
|
204
|
+
### 3.1 创建 cy 组件(产研自定义)
|
|
205
|
+
|
|
206
|
+
使用 Makefile 命令创建组件:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
make new-cy <component-name> [中文名]
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**示例:**
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
make new-cy advancedSelect 高级选择器
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**执行该命令后自动完成以下操作:**
|
|
219
|
+
|
|
220
|
+
#### 3.1.1 自动创建的文件
|
|
221
|
+
|
|
222
|
+
| 文件路径 | 说明 | 是否必须修改 |
|
|
223
|
+
|----------|------|-------------|
|
|
224
|
+
| `packages/cy/advancedSelect/index.js` | 组件导出文件 | 否(自动生成) |
|
|
225
|
+
| `packages/cy/advancedSelect/src/main.vue` | 组件实现文件 | 是(必须编写逻辑) |
|
|
226
|
+
| `examples/docs/zh-CN/cy/cy-advancedSelect.md` | 中文文档文件 | 是(必须编写文档) |
|
|
227
|
+
| `packages/theme-chalk/src/cy/advancedSelect.scss` | 组件样式文件 | 是(必须编写样式) |
|
|
228
|
+
| `examples/demo-styles/cy/advancedSelect.scss` | 示例页面样式文件 | 否(可选) |
|
|
229
|
+
| `types/cy/advancedSelect.d.ts` | 类型定义文件(不带 cy- 前缀) | 否(自动生成) |
|
|
230
|
+
|
|
231
|
+
#### 3.1.2 自动修改的文件
|
|
232
|
+
|
|
233
|
+
| 文件路径 | 修改内容 | 说明 |
|
|
234
|
+
|----------|---------|------|
|
|
235
|
+
| `packages/theme-chalk/src/cy/index.scss` | 添加 `@import "./advancedSelect.scss";` | 引入组件样式到主题 |
|
|
236
|
+
| `examples/demo-styles/cy/index.scss` | 添加 `@import "./advancedSelect.scss";` | 引入组件样式到示例 |
|
|
237
|
+
| `components.json` | 添加组件配置项 | 注册组件到构建系统 |
|
|
238
|
+
| `examples/nav.config.json` | 添加导航菜单项 | 注册组件到文档导航 |
|
|
239
|
+
|
|
240
|
+
#### 3.1.3 开发人员需要完成的工作
|
|
241
|
+
|
|
242
|
+
| 步骤 | 工作内容 | 文件 | 优先级 |
|
|
243
|
+
|------|---------|------|--------|
|
|
244
|
+
| 1 | 编写组件逻辑和模板 | `packages/cy/advancedSelect/src/main.vue` | 高 |
|
|
245
|
+
| 2 | 编写组件样式 | `packages/theme-chalk/src/cy/advancedSelect.scss` | 高 |
|
|
246
|
+
| 3 | 编写组件文档 | `examples/docs/zh-CN/cy/cy-advancedSelect.md` | 高 |
|
|
247
|
+
| 4 | 重新生成入口 | `npm run build:file` | 必须 |
|
|
248
|
+
|
|
249
|
+
#### 3.1.4 生成的文件内容示例
|
|
250
|
+
|
|
251
|
+
**`packages/cy/advancedSelect/index.js`:**
|
|
252
|
+
|
|
253
|
+
```javascript
|
|
254
|
+
import CyAdvancedSelect from './src/main';
|
|
255
|
+
|
|
256
|
+
/* istanbul ignore next */
|
|
257
|
+
CyAdvancedSelect.install = function(Vue) {
|
|
258
|
+
Vue.component(CyAdvancedSelect.name, CyAdvancedSelect);
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
export default CyAdvancedSelect;
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**`packages/cy/advancedSelect/src/main.vue`:**
|
|
265
|
+
|
|
266
|
+
```vue
|
|
267
|
+
<template>
|
|
268
|
+
<div class="cy-advanced-select"></div>
|
|
269
|
+
</template>
|
|
270
|
+
|
|
271
|
+
<script>
|
|
272
|
+
export default {
|
|
273
|
+
name: 'CyAdvancedSelect'
|
|
274
|
+
};
|
|
275
|
+
</script>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### 3.2 创建 el 组件(Element UI 风格)
|
|
279
|
+
|
|
280
|
+
使用 Makefile 命令创建组件:
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
make new <component-name> [中文名]
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**示例:**
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
make new custom-button 自定义按钮
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**执行该命令后自动完成以下操作:**
|
|
293
|
+
|
|
294
|
+
#### 3.2.1 自动创建的文件
|
|
295
|
+
|
|
296
|
+
| 文件路径 | 说明 | 是否必须修改 |
|
|
297
|
+
|----------|------|-------------|
|
|
298
|
+
| `packages/custom-button/index.js` | 组件导出文件 | 否(自动生成) |
|
|
299
|
+
| `packages/custom-button/src/main.vue` | 组件实现文件 | 是(必须编写逻辑) |
|
|
300
|
+
| `examples/docs/zh-CN/custom-button.md` | 中文文档文件 | 是(必须编写文档) |
|
|
301
|
+
| `packages/theme-chalk/src/custom-button.scss` | 组件样式文件 | 是(必须编写样式) |
|
|
302
|
+
| `examples/demo-styles/custom-button.scss` | 示例页面样式文件 | 否(可选) |
|
|
303
|
+
|
|
304
|
+
#### 3.2.2 自动修改的文件
|
|
305
|
+
|
|
306
|
+
| 文件路径 | 修改内容 | 说明 |
|
|
307
|
+
|----------|---------|------|
|
|
308
|
+
| `packages/theme-chalk/src/index.scss` | 添加 `@import "./custom-button.scss";` | 引入组件样式到主题 |
|
|
309
|
+
| `examples/demo-styles/index.scss` | 添加 `@import "./custom-button.scss";` | 引入组件样式到示例 |
|
|
310
|
+
| `components.json` | 添加组件配置项 | 注册组件到构建系统 |
|
|
311
|
+
|
|
312
|
+
#### 3.2.3 开发人员需要完成的工作
|
|
313
|
+
|
|
314
|
+
| 步骤 | 工作内容 | 文件 | 优先级 |
|
|
315
|
+
|------|---------|------|--------|
|
|
316
|
+
| 1 | 编写组件逻辑和模板 | `packages/custom-button/src/main.vue` | 高 |
|
|
317
|
+
| 2 | 编写组件样式 | `packages/theme-chalk/src/custom-button.scss` | 高 |
|
|
318
|
+
| 3 | 编写组件文档 | `examples/docs/zh-CN/custom-button.md` | 高 |
|
|
319
|
+
| 4 | 添加导航配置 | `examples/nav.config.json` | 高 |
|
|
320
|
+
| 5 | 重新生成入口 | `npm run build:file` | 必须 |
|
|
321
|
+
|
|
322
|
+
### 3.3 组件配置文件详解
|
|
323
|
+
|
|
324
|
+
#### components.json
|
|
325
|
+
|
|
326
|
+
组件配置清单,定义所有需要打包的组件:
|
|
327
|
+
|
|
328
|
+
```json
|
|
329
|
+
[
|
|
330
|
+
{ "name": "CyTreeSelect", "path": "./packages/cy/treeSelect/index.js" },
|
|
331
|
+
{ "name": "CyTabDialog", "path": "./packages/cy/tabDialog/index.js" },
|
|
332
|
+
{ "name": "CySubTitle", "path": "./packages/cy/subTitle/index.js" },
|
|
333
|
+
{ "name": "CySelectDisplayInput", "path": "./packages/cy/selectDisplayInput/index.js" },
|
|
334
|
+
{ "name": "Button", "path": "./packages/button/index.js" },
|
|
335
|
+
{ "name": "Input", "path": "./packages/input/index.js" }
|
|
336
|
+
]
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
**字段说明:**
|
|
340
|
+
- `name`:组件名称(使用 PascalCase,cy组件以Cy开头,el组件首字母大写)
|
|
341
|
+
- `path`:组件导出文件路径(相对于项目根目录)
|
|
342
|
+
|
|
343
|
+
#### 自动生成入口文件
|
|
344
|
+
|
|
345
|
+
运行 `npm run build:file` 自动生成 `src/index.js`,包含:
|
|
346
|
+
|
|
347
|
+
1. 所有组件的 import 语句
|
|
348
|
+
2. 组件数组定义(components)
|
|
349
|
+
3. install 函数(注册所有组件、指令、原型方法)
|
|
350
|
+
4. 默认导出对象(包含版本号、install方法、所有组件)
|
|
351
|
+
|
|
352
|
+
### 3.4 组件命名规范
|
|
353
|
+
|
|
354
|
+
| 类型 | 前缀 | 命名方式 | 示例 |
|
|
355
|
+
|------|------|---------|------|
|
|
356
|
+
| Element UI 组件 | `El` | PascalCase | `ElButton`, `ElInput` |
|
|
357
|
+
| 产研自定义组件 | `Cy` | PascalCase | `CyTreeSelect`, `CyTabDialog` |
|
|
358
|
+
| 组件目录(el) | - | 小写连字符 | `custom-button` |
|
|
359
|
+
| 组件目录(cy) | - | 驼峰式 | `treeSelect` |
|
|
360
|
+
| 样式文件 | - | 小写连字符 | `button.scss`, `tree-select.scss` |
|
|
361
|
+
| 文档文件 | - | `cy-`前缀+小写连字符 | `cy-tree-select.md` |
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 四、修改现有组件
|
|
366
|
+
|
|
367
|
+
### 4.1 修改组件代码
|
|
368
|
+
|
|
369
|
+
**步骤 1:定位组件文件**
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# 修改 cy 组件
|
|
373
|
+
vi packages/cy/treeSelect/src/main.vue
|
|
374
|
+
|
|
375
|
+
# 修改 el 组件
|
|
376
|
+
vi packages/button/src/button.vue
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**步骤 2:修改组件逻辑**
|
|
380
|
+
|
|
381
|
+
```vue
|
|
382
|
+
<script>
|
|
383
|
+
export default {
|
|
384
|
+
name: 'CyTreeSelect',
|
|
385
|
+
props: {
|
|
386
|
+
// 添加或修改属性
|
|
387
|
+
allowClear: {
|
|
388
|
+
type: Boolean,
|
|
389
|
+
default: false
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
methods: {
|
|
393
|
+
// 添加或修改方法
|
|
394
|
+
clearSelection() {
|
|
395
|
+
if (this.allowClear) {
|
|
396
|
+
this.selectedValues = [];
|
|
397
|
+
this.$emit('input', []);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
</script>
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### 4.2 修改组件样式
|
|
406
|
+
|
|
407
|
+
```scss
|
|
408
|
+
// packages/theme-chalk/src/cy/treeSelect.scss
|
|
409
|
+
.cy-tree-select {
|
|
410
|
+
// 添加新样式
|
|
411
|
+
&__clear-btn {
|
|
412
|
+
position: absolute;
|
|
413
|
+
right: 30px;
|
|
414
|
+
top: 50%;
|
|
415
|
+
transform: translateY(-50%);
|
|
416
|
+
cursor: pointer;
|
|
417
|
+
color: #909399;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### 4.3 更新组件文档
|
|
423
|
+
|
|
424
|
+
同步更新对应的文档文件,添加新属性和方法的说明。
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## 五、编写组件文档
|
|
429
|
+
|
|
430
|
+
### 5.1 创建文档文件
|
|
431
|
+
|
|
432
|
+
**中文文档路径:**
|
|
433
|
+
|
|
434
|
+
```
|
|
435
|
+
examples/docs/zh-CN/cy/cy-<component-name>.md
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**文档内容结构:**
|
|
439
|
+
|
|
440
|
+
```markdown
|
|
441
|
+
## CyAdvancedSelect 高级选择器
|
|
442
|
+
|
|
443
|
+
### 介绍
|
|
444
|
+
|
|
445
|
+
高级选择器组件,支持多选、搜索过滤、标签展示等功能。
|
|
446
|
+
|
|
447
|
+
### 基本用法
|
|
448
|
+
|
|
449
|
+
```html
|
|
450
|
+
<cy-advanced-select
|
|
451
|
+
v-model="selectedValues"
|
|
452
|
+
:options="options"
|
|
453
|
+
placeholder="请选择"
|
|
454
|
+
></cy-advanced-select>
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
```javascript
|
|
458
|
+
export default {
|
|
459
|
+
data() {
|
|
460
|
+
return {
|
|
461
|
+
selectedValues: [],
|
|
462
|
+
options: [
|
|
463
|
+
{ value: '1', label: '选项1' },
|
|
464
|
+
{ value: '2', label: '选项2' },
|
|
465
|
+
{ value: '3', label: '选项3' }
|
|
466
|
+
]
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### 属性
|
|
473
|
+
|
|
474
|
+
| 属性 | 说明 | 类型 | 默认值 |
|
|
475
|
+
|------|------|------|--------|
|
|
476
|
+
| value / v-model | 选中值数组 | Array | [] |
|
|
477
|
+
| options | 选项列表 | Array | [] |
|
|
478
|
+
| placeholder | 占位提示 | String | '请选择' |
|
|
479
|
+
|
|
480
|
+
### 事件
|
|
481
|
+
|
|
482
|
+
| 事件名 | 说明 | 参数 |
|
|
483
|
+
|--------|------|------|
|
|
484
|
+
| input | 选中值变化时触发 | 选中的值数组 |
|
|
485
|
+
| change | 选中值变化时触发 | 选中的选项对象数组 |
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### 5.2 配置导航
|
|
489
|
+
|
|
490
|
+
修改 `examples/nav.config.json`:
|
|
491
|
+
|
|
492
|
+
```json
|
|
493
|
+
{
|
|
494
|
+
"zh-CN": {
|
|
495
|
+
"title": "组件",
|
|
496
|
+
"children": [
|
|
497
|
+
{
|
|
498
|
+
"path": "/chanyan",
|
|
499
|
+
"title": "产研组件",
|
|
500
|
+
"children": [
|
|
501
|
+
{
|
|
502
|
+
"path": "/chanyan/treeSelect",
|
|
503
|
+
"title": "TreeSelect 树形选择器"
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"path": "/chanyan/advancedSelect",
|
|
507
|
+
"title": "AdvancedSelect 高级选择器"
|
|
508
|
+
}
|
|
509
|
+
]
|
|
510
|
+
}
|
|
511
|
+
]
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
## 六、打包构建
|
|
519
|
+
|
|
520
|
+
### 6.1 完整构建
|
|
521
|
+
|
|
522
|
+
```bash
|
|
523
|
+
npm run dist
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
**构建内容:**
|
|
527
|
+
|
|
528
|
+
| 文件路径 | 说明 |
|
|
529
|
+
|----------|------|
|
|
530
|
+
| `lib/index.js` | UMD格式主入口 |
|
|
531
|
+
| `lib/element-ui.common.js` | CommonJS格式入口 |
|
|
532
|
+
| `lib/theme-chalk/` | 主题样式目录 |
|
|
533
|
+
| `lib/[component].js` | 各组件单独打包文件 |
|
|
534
|
+
|
|
535
|
+
### 6.2 分步构建
|
|
536
|
+
|
|
537
|
+
```bash
|
|
538
|
+
# 清理构建目录
|
|
539
|
+
npm run clean
|
|
540
|
+
|
|
541
|
+
# 生成入口文件
|
|
542
|
+
npm run build:file
|
|
543
|
+
|
|
544
|
+
# 构建 UMD 版本
|
|
545
|
+
npx webpack --config build/webpack.conf.js
|
|
546
|
+
|
|
547
|
+
# 构建 CommonJS 版本
|
|
548
|
+
npx webpack --config build/webpack.common.js
|
|
549
|
+
|
|
550
|
+
# 构建组件单独文件
|
|
551
|
+
npx webpack --config build/webpack.component.js
|
|
552
|
+
|
|
553
|
+
# 构建工具函数
|
|
554
|
+
npm run build:utils
|
|
555
|
+
|
|
556
|
+
# 构建主题样式
|
|
557
|
+
npm run build:theme
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### 6.3 内存不足问题处理
|
|
561
|
+
|
|
562
|
+
如果构建时出现内存不足错误(退出码 `-1073741510`),可以增加 Node.js 内存限制:
|
|
563
|
+
|
|
564
|
+
```bash
|
|
565
|
+
# 方式一:临时设置环境变量
|
|
566
|
+
$env:NODE_OPTIONS="--max-old-space-size=8192"
|
|
567
|
+
npm run dist
|
|
568
|
+
|
|
569
|
+
# 方式二:直接使用 node 命令
|
|
570
|
+
node --max-old-space-size=8192 node_modules/webpack/bin/webpack.js --config build/webpack.component.js
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## 七、发布到 npm
|
|
576
|
+
|
|
577
|
+
### 7.1 更新版本号
|
|
578
|
+
|
|
579
|
+
```bash
|
|
580
|
+
# 升级补丁版本(1.1.3 → 1.1.4)
|
|
581
|
+
npm version patch
|
|
582
|
+
|
|
583
|
+
# 升级次要版本(1.1.3 → 1.2.0)
|
|
584
|
+
npm version minor
|
|
585
|
+
|
|
586
|
+
# 升级主要版本(1.1.3 → 2.0.0)
|
|
587
|
+
npm version major
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
### 7.2 登录 npm
|
|
591
|
+
|
|
592
|
+
```bash
|
|
593
|
+
npm login
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
### 7.3 发布
|
|
597
|
+
|
|
598
|
+
```bash
|
|
599
|
+
npm publish
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
---
|
|
603
|
+
|
|
604
|
+
## 八、开发流程最佳实践
|
|
605
|
+
|
|
606
|
+
### 8.1 开发流程
|
|
607
|
+
|
|
608
|
+
```
|
|
609
|
+
1. 创建组件 → make new-cy <name> [中文名]
|
|
610
|
+
2. 编写代码 → 修改 packages/cy/<name>/src/main.vue
|
|
611
|
+
3. 编写样式 → 修改 packages/theme-chalk/src/cy/<name>.scss
|
|
612
|
+
4. 编写文档 → 修改 examples/docs/zh-CN/cy/cy-<name>.md
|
|
613
|
+
5. 生成入口 → npm run build:file
|
|
614
|
+
6. 启动开发 → npm run dev
|
|
615
|
+
7. 完整构建 → npm run dist
|
|
616
|
+
8. 发布 npm → npm publish
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### 8.2 注意事项
|
|
620
|
+
|
|
621
|
+
1. **不使用单元测试**:本项目不编写单元测试,所有组件通过示例站点验证
|
|
622
|
+
2. **类型定义**:cy组件的类型定义文件不带 `cy-` 前缀,使用连字符命名(如 `tree-select.d.ts`)
|
|
623
|
+
3. **样式命名**:使用 BEM 命名规范,cy组件样式类名以 `cy-` 开头
|
|
624
|
+
4. **文档语言**:仅提供中文文档,不提供其他语言版本
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
**版本**: v1.0
|
|
629
|
+
**最后更新**: 2024年
|