cy-element-ui 1.1.26 → 1.1.28

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
@@ -1,5 +1,18 @@
1
1
  # cy-element-ui 组件开发指南
2
2
 
3
+ ## 环境要求
4
+
5
+ | 工具 | 版本要求 | 说明 |
6
+ |------|---------|------|
7
+ | **Node.js** | >= 14.x(推荐 16.x) | 项目使用 webpack 4 + Babel 6,需 Node.js 支持 |
8
+ | **npm** | >= 6.x | 包管理器,也可使用 yarn |
9
+ | **Git** | 任意版本 | 用于版本管理和发布流程 |
10
+ | **Make** | 可选 | Linux/macOS 原生支持;Windows 下可用 [Gow](https://github.com/bmatzku/gow)、[MinGW](http://www.mingw.org/) 或直接用 `node build/bin/new-cy.js` 替代 make 命令 |
11
+
12
+ > Windows 用户注意:`make new-cy xxx` 可替换为 `node build/bin/new-cy.js xxx`,效果完全相同。
13
+
14
+ ---
15
+
3
16
  ## 一、在项目中安装使用
4
17
 
5
18
  ### 1.1 安装依赖
@@ -129,13 +142,14 @@ export default {
129
142
  ### 2.1 整体架构
130
143
 
131
144
  ```
132
- element-dev/ # 项目根目录
145
+ chanyan-ui/ # 项目根目录
133
146
  ├── build/ # 构建工具目录
134
147
  │ ├── bin/ # 脚本命令
135
148
  │ │ ├── build-entry.js # 生成入口文件脚本
136
149
  │ │ ├── gen-cy-types.js # 生成cy组件类型定义
137
150
  │ │ ├── new.js # 创建el组件脚本
138
151
  │ │ └── new-cy.js # 创建cy组件脚本
152
+ │ ├── dist.js # 完整构建脚本(Node API方式,替代CLI)
139
153
  │ ├── webpack.conf.js # UMD构建配置
140
154
  │ ├── webpack.common.js # CommonJS构建配置
141
155
  │ ├── webpack.component.js # 组件单独构建配置
@@ -144,8 +158,12 @@ element-dev/ # 项目根目录
144
158
  │ ├── docs/ # 文档内容
145
159
  │ │ └── zh-CN/ # 中文文档
146
160
  │ │ └── cy/ # 产研组件文档
161
+ │ ├── pages/zh-CN/ # 页面容器
162
+ │ │ ├── component.vue # 组件页容器(Element UI组件+开发指南等)
163
+ │ │ ├── independent.vue # 独立菜单通用容器(如产研)
164
+ │ │ └── index.vue # 首页
147
165
  │ ├── nav.config.json # 导航配置
148
- │ └── route.config.js # 路由配置
166
+ │ └── route.config.js # 路由配置(自动识别独立菜单标记)
149
167
  ├── packages/ # 组件源码目录
150
168
  │ ├── cy/ # 产研自定义组件
151
169
  │ │ ├── treeSelect/ # 树形选择器
@@ -169,8 +187,10 @@ element-dev/ # 项目根目录
169
187
  |----------|----------|------|----------|
170
188
  | 一级 | `build/` | 构建工具 | 包含所有构建脚本和webpack配置文件 |
171
189
  | 二级 | `build/bin/` | 命令脚本 | new.js创建el组件,new-cy.js创建cy组件 |
190
+ | 二级 | `build/dist.js` | 完整构建脚本 | 统一管理完整构建流程(替代CLI方式) |
172
191
  | 一级 | `examples/` | 示例站点 | 组件展示文档和示例代码 |
173
192
  | 二级 | `examples/docs/zh-CN/cy/` | 产研组件文档 | cy组件的中文文档目录 |
193
+ | 二级 | `examples/pages/zh-CN/` | 页面容器 | component.vue(组件页)、independent.vue(独立菜单通用容器) |
174
194
  | 一级 | `packages/` | 组件源码 | 所有el和cy组件的源代码 |
175
195
  | 二级 | `packages/cy/` | 产研组件 | 自定义的cy-*组件,独立目录管理 |
176
196
  | 三级 | `packages/cy/treeSelect/` | 树形选择器 | CyTreeSelect组件源码 |
@@ -489,27 +509,37 @@ export default {
489
509
 
490
510
  修改 `examples/nav.config.json`:
491
511
 
512
+ > **注意**:产研等独立菜单使用 `independent` + `pathPrefix` 标记,路由会自动处理。详见 [九、新增独立菜单](#九新增独立菜单类似产研)。
513
+
514
+ **普通组件(添加到"组件"菜单下):**
515
+
516
+ 在 `"name": "组件"` 的 groups 中找到对应分组,添加一项:
517
+
492
518
  ```json
493
519
  {
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
- }
520
+ "path": "/advancedSelect",
521
+ "title": "AdvancedSelect 高级选择器"
522
+ }
523
+ ```
524
+
525
+ **独立菜单(如"产研"):**
526
+
527
+ ```json
528
+ {
529
+ "name": "产研",
530
+ "independent": true,
531
+ "pathPrefix": "/cy",
532
+ "groups": [
533
+ {
534
+ "groupName": "基础组件",
535
+ "list": [
536
+ { "path": "/cy/treeSelect", "title": "TreeSelect 下拉树" },
537
+ { "path": "/cy/tabDialog", "title": "TabDialog 页签对话框" },
538
+ { "path": "/cy/subTitle", "title": "SubTitle 副标题" },
539
+ { "path": "/cy/selectDisplayInput", "title": "SelectDisplayInput 选择显示输入框" }
540
+ ]
541
+ }
542
+ ]
513
543
  }
514
544
  ```
515
545
 
@@ -534,26 +564,43 @@ npm run dist
534
564
 
535
565
  ### 6.2 分步构建
536
566
 
567
+ > **注意**:当前 `dist` 命令已统一由 `build/dist.js` 管理(使用 webpack Node API),以下为内部流程说明。
568
+
569
+ **完整构建(推荐):**
570
+
537
571
  ```bash
538
- # 清理构建目录
539
- npm run clean
572
+ npm run dist
573
+ ```
540
574
 
541
- # 生成入口文件
542
- npm run build:file
575
+ 该命令自动依次执行:
576
+
577
+ | 步骤 | 命令/操作 | 说明 |
578
+ |------|----------|------|
579
+ | 1 | `npm run clean` | 清理 lib 目录 |
580
+ | 2 | `npm run build:file` | 自动生成 src/index.js 入口文件 |
581
+ | 3 | eslint + lint | 代码质量检查 |
582
+ | 4 | Webpack UMD | 打包 lib/index.js |
583
+ | 5 | Webpack CommonJS | 打包 lib/element-ui.common.js |
584
+ | 6 | Webpack Component | 各组件单独打包到 lib/ |
585
+ | 7 | `npm run build:utils` | 构建工具函数 |
586
+ | 8 | `npm run build:umd` | UMD 补充处理 |
587
+ | 9 | `npm run build:theme` | 编译 SCSS 主题样式 |
543
588
 
544
- # 构建 UMD 版本
545
- npx webpack --config build/webpack.conf.js
589
+ **手动单步执行(调试用):**
546
590
 
547
- # 构建 CommonJS 版本
548
- npx webpack --config build/webpack.common.js
591
+ ```bash
592
+ # 清理
593
+ npm run clean
549
594
 
550
- # 构建组件单独文件
551
- npx webpack --config build/webpack.component.js
595
+ # 生成入口文件
596
+ npm run build:file
552
597
 
553
- # 构建工具函数
554
- npm run build:utils
598
+ # 单独执行某一步webpack构建
599
+ npx webpack --config build/webpack.conf.js # UMD
600
+ npx webpack --config build/webpack.common.js # CommonJS
601
+ npx webpack --config build/webpack.component.js # 组件单独打包
555
602
 
556
- # 构建主题样式
603
+ # 样式编译
557
604
  npm run build:theme
558
605
  ```
559
606
 
@@ -596,7 +643,18 @@ npm login
596
643
  ### 7.3 发布
597
644
 
598
645
  ```bash
599
- npm publish
646
+ # 发布(scoped 包需要 --access public)
647
+ npm publish --access public
648
+ ```
649
+
650
+ **发布后在其他项目中更新:**
651
+
652
+ ```bash
653
+ # 清除缓存,确保拉取最新版
654
+ rmdir /s /q node_modules\cy-element-ui
655
+ npm cache clean --force
656
+ del package-lock.json
657
+ npm install cy-element-ui@latest
600
658
  ```
601
659
 
602
660
  ---
@@ -622,8 +680,173 @@ npm publish
622
680
  2. **类型定义**:cy组件的类型定义文件不带 `cy-` 前缀,使用连字符命名(如 `tree-select.d.ts`)
623
681
  3. **样式命名**:使用 BEM 命名规范,cy组件样式类名以 `cy-` 开头
624
682
  4. **文档语言**:仅提供中文文档,不提供其他语言版本
683
+ 5. **async/await**:项目支持 async/await(babel-preset-env + stage-2 自动转译)
684
+
685
+ ---
686
+
687
+ ## 九、新增独立菜单(类似产研)
688
+
689
+ ### 9.1 概念说明
690
+
691
+ 本项目支持在顶部导航栏中添加**独立的菜单分类**,与"组件"菜单完全隔离。例如现有的"产研"菜单就是一个独立菜单——它有自己的路由容器、侧边栏、文档目录,不会与"组件"页面混在一起。
692
+
693
+ ### 9.2 工作原理
694
+
695
+ | 文件 | 作用 |
696
+ |------|------|
697
+ | `examples/nav.config.json` | 通过 `independent: true` + `pathPrefix` 标记独立菜单 |
698
+ | `examples/route.config.js` | 自动识别标记,生成独立父路由 + 容器 |
699
+ | `examples/pages/zh-CN/independent.vue` | 通用容器组件(自动过滤侧边栏数据) |
700
+
701
+ **无需为每个独立菜单单独创建 vue 文件!**
702
+
703
+ ### 9.3 新增步骤详解
704
+
705
+ 以新增一个名为"数据平台"、路径前缀 `/dp` 的独立菜单为例:
706
+
707
+ #### 步骤 1:修改 nav.config.json
708
+
709
+ 在 `"zh-CN"` 数组末尾添加一个新对象:
710
+
711
+ ```json
712
+ {
713
+ "name": "数据平台",
714
+ "independent": true,
715
+ "pathPrefix": "/dp",
716
+ "groups": [
717
+ {
718
+ "groupName": "基础组件",
719
+ "list": [
720
+ {
721
+ "path": "/dp/dataTable",
722
+ "title": "DataTable 数据表格"
723
+ },
724
+ {
725
+ "path": "/dp/dataChart",
726
+ "title": "DataChart 数据图表"
727
+ }
728
+ ]
729
+ }
730
+ ]
731
+ }
732
+ ```
733
+
734
+ **关键字段说明:**
735
+
736
+ | 字段 | 是否必须 | 说明 |
737
+ |------|---------|------|
738
+ | `name` | 必须 | 导航栏显示名称,也是容器匹配的标识 |
739
+ | `independent` | 必须 | 固定为 `true`,标记为独立菜单 |
740
+ | `pathPrefix` | 必须 | URL 路径前缀,如 `/dp` → 最终路径 `/zh-CN/dp/dataTable` |
741
+ | `groups` | 必须(或用 children) | 子项分组列表(与组件菜单结构一致) |
742
+ | `groups[].list[].path` | 必须 | **必须以 pathPrefix 开头**,如 `/dp/dataTable` |
743
+
744
+ #### 步骤 2:创建文档文件
745
+
746
+ 每个子组件需要对应的 md 文档:
747
+
748
+ ```
749
+ examples/docs/zh-CN/
750
+ ├── dp/ # 新建目录(与 pathPrefix 对应)
751
+ │ ├── dataTable.md # DataTable 组件文档
752
+ │ └── dataChart.md # DataChart 组件文档
753
+ └── cy/ # 已有的产研文档
754
+ ├── treeSelect.md
755
+ └── ...
756
+ ```
757
+
758
+ 文档格式参照 [五、编写组件文档](#五编写组件文档)。
759
+
760
+ #### 步骤 3:创建组件源码(如果是有代码的新组件)
761
+
762
+ 如果这个独立菜单下包含全新的自定义组件:
763
+
764
+ ```bash
765
+ # 使用 Makefile 创建组件
766
+ make new-cy dataTable 数据表格
767
+ make new-cy dataChart 数据图表
768
+ ```
769
+
770
+ 这会自动创建:
771
+ - `packages/cy/dataTable/src/main.vue`
772
+ - `packages/theme-chalk/src/cy/dataTable.scss`
773
+ - 并更新 `components.json`、样式 index.scss 等
774
+
775
+ > 如果只是引用已有组件做展示页,则不需要创建组件源码,只需写文档即可。
776
+
777
+ #### 步骤 4:(可选)添加 i18n 翻译
778
+
779
+ 如果导航栏文字需要国际化,修改 `examples/i18n/component.json`:
780
+
781
+ ```json
782
+ [
783
+ {
784
+ "lang": "zh-CN",
785
+ "header": {
786
+ "guide": "指南",
787
+ "components": "组件",
788
+ "chanyan": "产研",
789
+ "dataPlatform": "数据平台", // ← 新增
790
+ ...
791
+ }
792
+ }
793
+ ]
794
+ ```
795
+
796
+ 然后修改 `examples/components/header.vue` 中的导航链接:
797
+
798
+ ```html
799
+ <li class="nav-item">
800
+ <router-link :to="`/${ lang }/dp`">{{ langConfig.dataPlatform }}</router-link>
801
+ </li>
802
+ ```
803
+
804
+ #### 步骤 5:验证
805
+
806
+ ```bash
807
+ # 启动开发服务器
808
+ npm run dev
809
+ ```
810
+
811
+ 访问 `http://localhost:8086/#/zh-CN/dp`,应能看到:
812
+ 1. 顶部导航栏新增"数据平台"入口
813
+ 2. 点击后进入独立页面,侧边栏只显示"基础组件"分组下的子项
814
+ 3. 点击子项能正常显示对应文档内容
815
+
816
+ ### 9.4 路由生成规则
817
+
818
+ 当 `route.config.js` 遇到 `independent: true` 的菜单时,自动执行以下操作:
819
+
820
+ ```
821
+ 输入:name="数据平台", pathPrefix="/dp"
822
+
823
+ 自动生成的路由结构:
824
+ /zh-CN/dp (redirect → /zh-CN/dp/dataTable)
825
+ ├── dataTable → examples/docs/zh-CN/dp/dataTable.md
826
+ └── dataChart → examples/docs/zh-CN/dp/dataChart.md
827
+ ```
828
+
829
+ 与"产研"的路由完全平行:
830
+
831
+ ```
832
+ /zh-CN/component (component.vue 容器)
833
+ ├── installation, button, ... (Element UI 组件)
834
+
835
+ /zh-CN/cy (independent.vue 容器)
836
+ ├── treeSelect, tabDialog, ... (产研组件)
837
+
838
+ /zh-CN/dp (independent.vue 容器) ← 新增
839
+ ├── dataTable, dataChart (数据平台组件)
840
+ ```
841
+
842
+ ### 9.5 注意事项
843
+
844
+ 1. **pathPrefix 必须唯一**:不能有两个独立菜单使用相同的 `pathPrefix`
845
+ 2. **子项 path 必须以 pathPrefix 开头**:否则路由无法正确剥离前缀
846
+ 3. **文档目录名与 pathPrefix 一致**:如 `/dp` 的文档放在 `docs/zh-CN/dp/` 下
847
+ 4. **不需要手动改 route.config.js 或创建新的 vue 容器**:全部自动处理
625
848
 
626
849
  ---
627
850
 
628
- **版本**: v1.0
629
- **最后更新**: 2024
851
+ **版本**: v1.1.26
852
+ **最后更新**: 20265月
@@ -199,7 +199,7 @@ function normalizeComponent(
199
199
  // ESM COMPAT FLAG
200
200
  __webpack_require__.r(__webpack_exports__);
201
201
 
202
- // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/selectDisplayInput/src/main.vue?vue&type=template&id=007a9b22
202
+ // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/selectDisplayInput/src/main.vue?vue&type=template&id=963f9c64
203
203
  var render = function () {
204
204
  var _vm = this
205
205
  var _h = _vm.$createElement
@@ -252,7 +252,7 @@ var staticRenderFns = []
252
252
  render._withStripped = true
253
253
 
254
254
 
255
- // CONCATENATED MODULE: ./packages/cy/selectDisplayInput/src/main.vue?vue&type=template&id=007a9b22
255
+ // CONCATENATED MODULE: ./packages/cy/selectDisplayInput/src/main.vue?vue&type=template&id=963f9c64
256
256
 
257
257
  // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/selectDisplayInput/src/main.vue?vue&type=script&lang=js
258
258
  //
@@ -266,35 +266,34 @@ render._withStripped = true
266
266
  //
267
267
  //
268
268
  //
269
+ //
270
+ //
271
+ //
269
272
 
270
273
  /* harmony default export */ var mainvue_type_script_lang_js = ({
271
274
  name: 'CySelectDisplayInput',
272
275
  props: {
273
- // 文本框 需要显示的内容
276
+ // 文本框需要显示的内容(Number 或 String)
274
277
  value: {
275
278
  type: [Number, String],
276
279
  default: ''
277
280
  },
278
-
279
- // 文本框 的提示文本
281
+ // 文本框未选择时的占位提示文本
280
282
  placeholder: {
281
283
  type: String,
282
284
  default: ''
283
285
  },
284
-
285
- // 选择按钮 的文字
286
+ // 选择按钮上的文字
286
287
  btnText: {
287
288
  type: String,
288
289
  default: '选择'
289
290
  },
290
-
291
- // 选择按钮 的显示条件
291
+ // 选择按钮的显示条件
292
292
  showBtn: {
293
293
  type: Boolean,
294
294
  default: true
295
295
  },
296
-
297
- // 是否显示 删除按钮
296
+ // 是否显示删除按钮
298
297
  showDelete: {
299
298
  type: Boolean,
300
299
  default: false
@@ -305,23 +304,40 @@ render._withStripped = true
305
304
  },
306
305
 
307
306
  computed: {
308
- // 文本框 是否需要点击,如果为true,输入框中的字体会变蓝并将鼠标变为小手
307
+ // 文本框是否需要点击,如果为 true,输入框中的字体会变蓝并将鼠标变为小手
309
308
  cursor: function cursor() {
310
- // 判断父组件是否坚挺了info事件
311
309
  return this.$listeners.info;
312
310
  }
313
311
  },
314
312
  created: function created() {},
315
313
 
316
314
  methods: {
315
+ /**
316
+ * 点击显示区:仅当已赋值时触发 info 事件
317
+ * @returns {void}
318
+ */
317
319
  handleInfo: function handleInfo() {
318
320
  if (this.value) {
319
321
  this.$emit('info');
320
322
  }
321
323
  },
324
+
325
+
326
+ /**
327
+ * 点击选择按钮:触发 click 事件
328
+ * @fires {Event} click
329
+ * @returns {void}
330
+ */
322
331
  handleClick: function handleClick() {
323
332
  this.$emit('click');
324
333
  },
334
+
335
+
336
+ /**
337
+ * 点击删除按钮:触发 delete 事件
338
+ * @fires {Event} delete
339
+ * @returns {void}
340
+ */
325
341
  handleDelete: function handleDelete() {
326
342
  this.$emit('delete');
327
343
  }
package/lib/CySubTitle.js CHANGED
@@ -199,7 +199,7 @@ function normalizeComponent(
199
199
  // ESM COMPAT FLAG
200
200
  __webpack_require__.r(__webpack_exports__);
201
201
 
202
- // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/subTitle/src/main.vue?vue&type=template&id=2e5c88fc
202
+ // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/subTitle/src/main.vue?vue&type=template&id=afb2cdd0
203
203
  var render = function () {
204
204
  var _vm = this
205
205
  var _h = _vm.$createElement
@@ -218,7 +218,7 @@ var staticRenderFns = []
218
218
  render._withStripped = true
219
219
 
220
220
 
221
- // CONCATENATED MODULE: ./packages/cy/subTitle/src/main.vue?vue&type=template&id=2e5c88fc
221
+ // CONCATENATED MODULE: ./packages/cy/subTitle/src/main.vue?vue&type=template&id=afb2cdd0
222
222
 
223
223
  // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cy/subTitle/src/main.vue?vue&type=script&lang=js
224
224
  //
@@ -232,20 +232,29 @@ render._withStripped = true
232
232
  //
233
233
  //
234
234
  //
235
+ //
236
+ //
237
+ //
235
238
 
236
239
  /* harmony default export */ var mainvue_type_script_lang_js = ({
237
240
  name: 'CySubTitle',
238
241
  props: {
242
+ // 标题文本
239
243
  title: {
240
244
  type: String,
241
245
  default: ''
242
246
  },
247
+ // 左侧装饰边框线的颜色(传入后通过 lineStyle 应用到边框)
243
248
  lineColor: {
244
249
  type: String,
245
250
  default: ''
246
251
  }
247
252
  },
248
253
  computed: {
254
+ /**
255
+ * 根据 lineColor 生成左边框颜色样式;未传入时返回空对象
256
+ * @returns {Object} 包含 borderLeftColor 的样式对象或空对象
257
+ */
249
258
  lineStyle: function lineStyle() {
250
259
  if (this.lineColor) {
251
260
  return {