neo-cmp-cli 1.12.8 → 1.12.9

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.
Files changed (132) hide show
  1. package/README.md +204 -6
  2. package/dist/index2.js +1 -1
  3. package/dist/neo/env.js +1 -1
  4. package/dist/package.json.js +1 -1
  5. package/package.json +1 -1
  6. package/template/antd-custom-cmp-template/package.json +1 -1
  7. package/template/{neo-bi-cmps → asset-manage-template}/README.md +65 -10
  8. package/template/asset-manage-template/docs/README.md +244 -0
  9. package/template/asset-manage-template/neo.config.js +60 -0
  10. package/template/{neo-bi-cmps → asset-manage-template}/package.json +28 -16
  11. package/template/asset-manage-template/src/assets/img/chart.svg +1 -0
  12. package/template/asset-manage-template/src/components/README.md +3 -0
  13. package/template/asset-manage-template/src/components/assetManage__c/assetApi.ts +70 -0
  14. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetCreateModal.tsx +260 -0
  15. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetGrid.tsx +48 -0
  16. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetSidebar.tsx +74 -0
  17. package/template/asset-manage-template/src/components/assetManage__c/cmps/AssetToolbar.tsx +79 -0
  18. package/template/asset-manage-template/src/components/assetManage__c/cmps/assetDisplay.tsx +72 -0
  19. package/template/asset-manage-template/src/components/assetManage__c/constants.ts +28 -0
  20. package/template/asset-manage-template/src/components/assetManage__c/index.tsx +258 -0
  21. package/template/asset-manage-template/src/components/assetManage__c/model.ts +75 -0
  22. package/template/asset-manage-template/src/components/assetManage__c/style.scss +425 -0
  23. package/template/asset-manage-template/src/components/assetManage__c/types.ts +60 -0
  24. package/template/asset-manage-template/src/components/bidList__c/cmps/BidCard.tsx +47 -0
  25. package/template/asset-manage-template/src/components/bidList__c/constants.ts +6 -0
  26. package/template/asset-manage-template/src/components/bidList__c/formatUtils.ts +14 -0
  27. package/template/asset-manage-template/src/components/bidList__c/index.tsx +194 -0
  28. package/template/asset-manage-template/src/components/bidList__c/model.ts +57 -0
  29. package/template/asset-manage-template/src/components/bidList__c/style.scss +179 -0
  30. package/template/asset-manage-template/src/components/bidList__c/types.ts +10 -0
  31. package/template/asset-manage-template/src/components/bidPackage__c/cmps/BidPackageHeader.tsx +140 -0
  32. package/template/asset-manage-template/src/components/bidPackage__c/cmps/PackageItemTable.tsx +148 -0
  33. package/template/asset-manage-template/src/components/bidPackage__c/index.tsx +394 -0
  34. package/template/asset-manage-template/src/components/bidPackage__c/mainTableColumns.tsx +57 -0
  35. package/template/asset-manage-template/src/components/bidPackage__c/model.ts +86 -0
  36. package/template/asset-manage-template/src/components/bidPackage__c/style.scss +256 -0
  37. package/template/asset-manage-template/src/components/bidPackage__c/types.ts +35 -0
  38. package/template/asset-manage-template/src/components/bidPackage__c/utils.ts +19 -0
  39. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/axiosFetcher.ts +0 -0
  40. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/queryObjectData.ts +0 -0
  41. package/template/asset-manage-template/src/utils/url.ts +82 -0
  42. package/template/{neo-bi-cmps → asset-manage-template}/src/utils/xobjects.ts +0 -0
  43. package/template/{neo-bi-cmps → asset-manage-template}/tsconfig.json +1 -1
  44. package/template/echarts-custom-cmp-template/package.json +1 -1
  45. package/template/empty-custom-cmp-template/package.json +2 -2
  46. package/template/neo-custom-cmp-template/package.json +2 -2
  47. package/template/neo-custom-cmp-template/src/components/entityTable__c/index.tsx +62 -6
  48. package/template/neo-h5-cmps/package.json +2 -2
  49. package/template/neo-order-cmps/package.json +2 -2
  50. package/template/react-custom-cmp-template/package.json +1 -1
  51. package/template/react-ts-custom-cmp-template/package.json +1 -1
  52. package/template/vue2-custom-cmp-template/package.json +1 -1
  53. package/template/develop/BI /351/241/271/347/233/256/345/210/206/346/236/220/346/212/245/345/221/212.md" +0 -562
  54. package/template/develop/ChatPage /347/273/204/344/273/266/344/275/277/347/224/250/350/257/264/346/230/216/346/226/207/346/241/243.md" +0 -507
  55. package/template/develop/EntityGrid Web /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -868
  56. package/template/develop/EntityList H5 /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -1386
  57. package/template/develop/GlobalSearch/347/273/204/344/273/266/345/257/271/346/257/224/345/210/206/346/236/220.md +0 -866
  58. package/template/develop/Neo /344/270/255/345/217/257/347/224/250 amis /347/273/204/344/273/266.md" +0 -1490
  59. package/template/develop/cmpEventFunctions.ts +0 -257
  60. package/template/develop/cmpEvents.ts +0 -864
  61. package/template/develop/comTree/347/224/237/346/210/220/350/277/207/347/250/213/345/210/206/346/236/220.md +0 -469
  62. package/template/develop/commonModules.js +0 -55
  63. package/template/develop/components-table.md +0 -50
  64. package/template/develop/neo-custom-cmp-template/README.md +0 -48
  65. package/template/develop/neo-custom-cmp-template/docs/README.md +0 -13
  66. package/template/develop/neo-custom-cmp-template/neo.config.js +0 -121
  67. package/template/develop/neo-custom-cmp-template/package.json +0 -63
  68. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/README.md +0 -65
  69. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/index.tsx +0 -180
  70. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/model.ts +0 -50
  71. package/template/develop/neo-custom-cmp-template/src/components/contactCardList/style.scss +0 -260
  72. package/template/develop/neo-custom-cmp-template/src/components/contactForm/README.md +0 -94
  73. package/template/develop/neo-custom-cmp-template/src/components/contactForm/index.tsx +0 -252
  74. package/template/develop/neo-custom-cmp-template/src/components/contactForm/model.ts +0 -56
  75. package/template/develop/neo-custom-cmp-template/src/components/contactForm/style.scss +0 -120
  76. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/README.md +0 -115
  77. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/index.tsx +0 -304
  78. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/model.ts +0 -87
  79. package/template/develop/neo-custom-cmp-template/src/components/neoEntityGrid/style.scss +0 -127
  80. package/template/develop/neo-custom-cmp-template/src/utils/axiosFetcher.ts +0 -29
  81. package/template/develop/neo-custom-cmp-template/src/utils/queryObjectData.ts +0 -39
  82. package/template/develop/neo-custom-cmp-template/src/utils/xobjects.ts +0 -203
  83. package/template/develop/neo-custom-cmp-template/tsconfig.json +0 -68
  84. package/template/develop/neo-ui-component-h5.md +0 -105
  85. package/template/develop/neo-ui-component-web-xregister.md +0 -31
  86. package/template/develop/neo-ui-component-web.md +0 -292
  87. package/template/develop/neoCmps.ts +0 -7508
  88. package/template/develop/neoGlobalSearchInput /347/273/204/344/273/266/347/232/204/350/257/246/347/273/206/345/210/206/346/236/220/346/226/207/346/241/243.md" +0 -497
  89. package/template/develop/pageSchema1.json +0 -744
  90. package/template/develop//344/272/213/344/273/266/345/212/250/344/275/234/344/277/235/345/255/230/346/265/201/347/250/213/345/210/206/346/236/220.md +0 -390
  91. package/template/develop//345/215/225/345/205/203/346/265/213/350/257/225/344/275/277/347/224/250/350/257/264/346/230/216.md +0 -1139
  92. package/template/develop//345/261/236/346/200/247/351/205/215/347/275/256/351/241/271/347/261/273/345/236/213/346/261/207/346/200/273.md +0 -558
  93. package/template/neo-bi-cmps/.prettierrc.js +0 -12
  94. package/template/neo-bi-cmps/commitlint.config.js +0 -59
  95. package/template/neo-bi-cmps/neo.config.js +0 -124
  96. package/template/neo-bi-cmps/public/css/base.css +0 -283
  97. package/template/neo-bi-cmps/public/scripts/app/bluebird.js +0 -6679
  98. package/template/neo-bi-cmps/public/template.html +0 -13
  99. package/template/neo-bi-cmps/src/assets/css/common.scss +0 -127
  100. package/template/neo-bi-cmps/src/assets/css/mixin.scss +0 -47
  101. package/template/neo-bi-cmps/src/assets/img/NeoCRM.jpg +0 -0
  102. package/template/neo-bi-cmps/src/assets/img/custom-widget.svg +0 -1
  103. package/template/neo-bi-cmps/src/assets/img/favicon.png +0 -0
  104. package/template/neo-bi-cmps/src/assets/img/table.svg +0 -1
  105. package/template/neo-bi-cmps/src/components/targetNumber__c/README.md +0 -100
  106. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/configSchema.ts +0 -253
  107. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/index.scss +0 -76
  108. package/template/neo-bi-cmps/src/components/targetNumber__c/customStyleConfig/index.tsx +0 -148
  109. package/template/neo-bi-cmps/src/components/targetNumber__c/index.tsx +0 -440
  110. package/template/neo-bi-cmps/src/components/targetNumber__c/model.ts +0 -128
  111. package/template/neo-bi-cmps/src/components/targetNumber__c/style.scss +0 -173
  112. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/.prettierrc.js +0 -0
  113. /package/template/{neo-bi-cmps → asset-manage-template}/@types/neo-ui-common.d.ts +0 -0
  114. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/commitlint.config.js +0 -0
  115. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/css/base.css +0 -0
  116. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/scripts/app/bluebird.js +0 -0
  117. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/public/template.html +0 -0
  118. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/css/common.scss +0 -0
  119. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/css/mixin.scss +0 -0
  120. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/AIBtn.gif +0 -0
  121. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/NeoCRM.jpg +0 -0
  122. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/aiLogo.png +0 -0
  123. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/card-list.svg +0 -0
  124. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/contact-form.svg +0 -0
  125. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/custom-form.svg +0 -0
  126. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/custom-widget.svg +0 -0
  127. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/data-list.svg +0 -0
  128. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/detail.svg +0 -0
  129. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/favicon.png +0 -0
  130. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/map.svg +0 -0
  131. /package/template/{neo-bi-cmps → asset-manage-template}/src/assets/img/search.svg +0 -0
  132. /package/template/{develop/neo-custom-cmp-template → asset-manage-template}/src/assets/img/table.svg +0 -0
package/README.md CHANGED
@@ -368,7 +368,205 @@ const result = await customApi.run({
368
368
  });
369
369
  ```
370
370
 
371
- ### 5. 默认复用平台第三方依赖
371
+ ### 5. 添加事件动作
372
+
373
+ 以下说明如何在自定义组件中添加 **可触发事件**、**可执行动作(组件函数)**,以及(不推荐)**广播事件**,以便在 Neo 页面设计器的属性面板 / 事件配置中完成事件与动作绑定。
374
+
375
+ #### 添加可触发的组件事件
376
+
377
+ **1. 在组件中添加可触发的事件**
378
+
379
+ **步骤 1:** 从 `neo-ui-common` 导入 `NeoEvent`。
380
+
381
+ > **备注:** 无需单独安装 `neo-ui-common`,组件在 Neo 平台运行时会自动注入。
382
+
383
+ ```typescript
384
+ // 引入 neo-ui-common / NeoEvent
385
+ // @ts-ignore
386
+ import { NeoEvent } from 'neo-ui-common';
387
+ ```
388
+
389
+ **步骤 2:** 使用 `@NeoEvent.dispatch` 将某个方法声明为可由设计器绑定的触发事件方法。
390
+
391
+ ```typescript
392
+ /**
393
+ * 表单提交事件
394
+ */
395
+ @NeoEvent.dispatch
396
+ onSubmit() {
397
+ console.log('触发了表单提交事件:', this.props);
398
+ }
399
+ ```
400
+
401
+ **2. 在组件模型中声明会触发的事件**
402
+
403
+ 上述步骤仅在运行时定义了事件方法,页面设计器还不知道该组件对外暴露哪些事件,因此需要在 **组件模型**(如 `*Model` 描述类)中声明:
404
+
405
+ ```typescript
406
+ /**
407
+ * @file Object Form 表单组件对接编辑器的描述文件
408
+ * @description 定义组件在 Neo 平台编辑器中的配置信息
409
+ */
410
+ export class EntityFormModel {
411
+ // ... 组件模型其他内容
412
+
413
+ /**
414
+ * 声明当前组件会触发的所有事件
415
+ * 备注:页面设计器端可用于进行事件绑定,在组件属性配置模式中配置事件动作
416
+ */
417
+ events = [
418
+ {
419
+ apiKey: 'onSubmit', // 事件名称(需与组件方法名一致)
420
+ label: '提交表单后', // 设计器中展示的名称
421
+ helpText: '表单提交后触发该事件', // 信息图标 hover 时的提示文本
422
+ },
423
+ ];
424
+ }
425
+ ```
426
+
427
+ **3. 发布自定义组件**
428
+
429
+ 发布后即可在页面设计器 / 属性配置面板中看到该组件可绑定的事件列表。
430
+
431
+ ---
432
+
433
+ #### 添加可执行的组件动作(组件函数)
434
+
435
+ **1. 在组件中添加可执行的组件动作方法**
436
+
437
+ **步骤 1:** 导入 `NeoEvent`(同上,无需安装 `neo-ui-common`)。
438
+
439
+ ```typescript
440
+ // 引入 neo-ui-common / NeoEvent
441
+ // @ts-ignore
442
+ import { NeoEvent } from 'neo-ui-common';
443
+ ```
444
+
445
+ **步骤 2:** 使用 `@NeoEvent.function` 将方法声明为可被其他组件或事件流调用的 **组件动作**。
446
+
447
+ ```typescript
448
+ /**
449
+ * 加载表格数据
450
+ * @param page 页码,默认为 1
451
+ * @param pageSize 每页条数,默认为 10
452
+ */
453
+ @NeoEvent.function
454
+ async loadData(page = 1, pageSize = 10) {
455
+ const { xObjectApiKey } = this.props.xObjectDataApi || {};
456
+ if (!xObjectApiKey) return;
457
+
458
+ this.setState({ loading: true, error: null });
459
+
460
+ try {
461
+ const result = await xObject.query(this.props.xObjectDataApi);
462
+
463
+ if (result && result.status) {
464
+ const records = result.data || [];
465
+ const totalSize = result.totalSize || 0;
466
+
467
+ this.setState({
468
+ dataSource: records,
469
+ pagination: {
470
+ current: page,
471
+ pageSize,
472
+ total: totalSize,
473
+ },
474
+ loading: false,
475
+ });
476
+ } else {
477
+ this.setState({
478
+ error: result?.msg || '获取数据失败',
479
+ loading: false,
480
+ });
481
+ }
482
+ } catch (error: any) {
483
+ this.setState({
484
+ error: error.message || '获取数据失败',
485
+ loading: false,
486
+ });
487
+ }
488
+ }
489
+ ```
490
+
491
+ > 示例中使用了 `xObject.query`,请确保已从 `neo-open-api` 引入 `xObject`,并与实际业务 props 一致。
492
+
493
+ **2. 在组件模型中声明可使用的组件函数**
494
+
495
+ 同样需要在模型中声明,设计器才能识别出可被调用的组件动作:
496
+
497
+ ```typescript
498
+ /**
499
+ * @file XObject 表格组件对接编辑器的描述文件
500
+ * @description 定义组件在 Neo 平台编辑器中的配置信息
501
+ */
502
+ export class EntityFormModel {
503
+ // ... 组件模型其他内容
504
+
505
+ // 当前组件支持的函数列表(其他组件可触发当前组件的函数)
506
+ functions = [
507
+ {
508
+ apiKey: 'loadData',
509
+ label: '刷新表格',
510
+ helpTextKey: '刷新当前表格数据',
511
+ },
512
+ {
513
+ apiKey: 'handleDelete',
514
+ label: '删除记录',
515
+ helpTextKey: '删除表格中指定记录',
516
+ funcInParams: [
517
+ {
518
+ apiKey: 'id',
519
+ label: '记录ID',
520
+ type: 'String',
521
+ required: true,
522
+ },
523
+ ],
524
+ },
525
+ ];
526
+ }
527
+ ```
528
+
529
+ **3. 发布自定义组件**
530
+
531
+ 发布后在页面设计器 / 属性配置面板 / 事件配置面板中可看到并选用上述组件函数(组件动作)。
532
+
533
+ ---
534
+
535
+ #### 广播事件(不推荐使用)
536
+
537
+ 全局广播自由度高、难以追踪,请优先使用 **可触发事件 + 组件函数** 的声明式能力。
538
+
539
+ **1. 在组件中触发广播事件**
540
+
541
+ ```typescript
542
+ // @ts-ignore
543
+ import { NeoEvent } from 'neo-ui-common';
544
+
545
+ componentDidMount() {
546
+ // ... 其他代码
547
+ console.log('触发了一个广播事件 entityFormInit。');
548
+ NeoEvent.broadcast('entityFormInit', this.props);
549
+ }
550
+ ```
551
+
552
+ **2. 在组件中接收广播事件**
553
+
554
+ ```typescript
555
+ // @ts-ignore
556
+ import { NeoEvent } from 'neo-ui-common';
557
+
558
+ componentDidMount() {
559
+ // ... 其他代码
560
+ NeoEvent.listen('entityFormInit', (eventData: any) => {
561
+ console.log('EntityCardList 监听到了广播事件 entityFormInit: ', eventData);
562
+ // ... 其他逻辑
563
+ });
564
+ }
565
+ ```
566
+
567
+ 事件名在 `broadcast` 与 `listen` 中需保持一致。
568
+
569
+ ### 6. 默认复用平台第三方依赖
372
570
 
373
571
  自定义组件构建过程中默认会剔除掉平台已有依赖模块(比如 antd、echarts、axios、lodash 等),确保自定义组件构建后的资源体积较小。
374
572
 
@@ -399,7 +597,7 @@ const result = await customApi.run({
399
597
 
400
598
  > **注意**:自定义组件中请使用依赖包支持的版本,如版本不匹配运行时可能出现异常。
401
599
 
402
- ### 6. 本地调试自定义组件
600
+ ### 7. 本地调试自定义组件
403
601
 
404
602
  #### 步骤 1:启动外链调试模式
405
603
 
@@ -417,7 +615,7 @@ neo linkDebug
417
615
 
418
616
  页面设计器开启 debug 模式后,左侧会展示**外部链接**管理面板。将第 1 步生成的「外链脚本地址」添加进来,即可在此页面设计器 / 组件物料面板中看到对应自定义组件。
419
617
 
420
- ### 7. 发布自定义组件至 NeoCRM
618
+ ### 8. 发布自定义组件至 NeoCRM
421
619
 
422
620
  执行 `neo push cmp` 即可构建并发布自定义组件至 NeoCRM 平台,其构建后资源也会上传到 NeoCRM 平台端提供的 CDN 中。
423
621
 
@@ -465,7 +663,7 @@ A: 请检查 `neo.config.js` 文件中是否配置了 `neoConfig.auth`,确保
465
663
 
466
664
  发布成功后,即可在对应租户环境下的页面设计器和表单设计器中使用此自定义组件。
467
665
 
468
- ### 8. 拉取线上自定义组件至本地项目
666
+ ### 9. 拉取线上自定义组件至本地项目
469
667
 
470
668
  执行 `neo pull cmp` 即可从 NeoCRM 平台拉取自定义组件源码到当前项目。该命令会将线上自定义组件的源码下载并解析到当前项目的 `src/components` 目录下。
471
669
 
@@ -493,7 +691,7 @@ neo pull cmp -n xxCmp
493
691
  - 如果组件源码中包含新增的依赖包,拉取完成后会提示执行 `npm install` 或 `yarn install`
494
692
  - zip 源文件会保留在 `.neo-cli/zip-source` 目录下,可手动删除
495
693
 
496
- ### 9. 删除线上自定义组件
694
+ ### 10. 删除线上自定义组件
497
695
 
498
696
  执行 `neo delete cmp` 即可从 NeoCRM 平台删除指定的自定义组件。该命令会删除平台上的自定义组件,删除后该组件将无法在页面设计器和表单设计器中使用。
499
697
 
@@ -520,7 +718,7 @@ neo delete cmp -n xxCmp
520
718
  - ⚠️ **影响范围**:删除组件后,所有使用该组件的页面和表单将受到影响,请确保没有正在使用的场景
521
719
  - 💡 **建议先备份**:删除前建议先使用 `neo pull cmp` 拉取组件源码到本地进行备份
522
720
 
523
- ### 10. 自定义组件之间实现模块共享
721
+ ### 11. 自定义组件之间实现模块共享
524
722
 
525
723
  **步骤 1**:在自定义组件A(customCmpA)/ 配置文件中定义要共享出来的模块A(xxModuleA)
526
724
 
package/dist/index2.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),s=require("figlet"),o=require("yargs"),a=require("chalk"),n=require("inquirer"),t=require("ora"),i=require("./main2.js"),c=require("./utils/common.js"),p=require("./neo/env.js"),m=require("./package.json.js");var l;exports.__require=function(){if(l)return e.__exports;l=1;const r=s,u=o,g=a,d=n,h=t,{neoInit:y,neoInitByCopy:v,inspect:b,neoConfigInit:f,validateProjectName:C,getCmpTypeByDir:$,NeoService:x,NeoLoginService:T,hasNeoProject:w,consoleTag:j}=i.__require(),{errorLog:U,successLog:D,warningLog:L}=c.__require(),_=i.__require(),{getNeoCrmAPI:N}=p.__require(),q=m.default,M=r.textSync("neo",{font:"Lean"}),S=_.projectConfig,R=function(e){return g.green(g.bold(e))},A={"config init":"初始化配置文件",config:"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},k={...A,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式",preview:"预览自定义组件","pull cmp":"拉取线上自定义组件","push cmp":"发布自定义组件到平台","delete cmp":"删除线上自定义组件",pull:"拉取线上自定义组件",push:"发布自定义组件到平台",delete:"删除线上自定义组件"};return u.middleware(function(e){if(e.help||e.version)return;const s=function(e){if(!e._||0===e._.length)return"";const s=e._.join(" ");if(k[s])return s;const o=e._[0];return k[o]?o:s||o}(e);if(!s)return;const o=k[s]||s;A[s]&&(console.log(g.green(M)),console.log(g.green(`当前版本:v${q.version}.\n`))),console.log(""),console.log(g.cyan(`执行命令: ${o}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.usage(R("Usage")+": $0 init [options]").option("type",{alias:"t",describe:"自定义组件类型(react ts 技术栈/ vue2.0 技术栈/ react 技术栈)"}).option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.type&&e.name)w()&&(U(`${j}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?y(e.type,e.name):v(e.type,e.name);else{const s=[],o=[{name:"react&ts 自定义组件",value:"react-ts",short:"react-ts"},{name:"Neo 自定义业务组件",value:"neo",short:"neo"},{name:"Neo H5 自定义业务组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"antd 自定义组件",value:"antd",short:"antd"},{name:"echarts 自定义组件",value:"echarts",short:"echarts"},{name:"vue2 自定义组件",value:"vue2",short:"vue2"}];e.type||s.push({name:"type",type:"list",message:"请选择您要创建的自定义组件类型: ",default:"react-ts",choices:o}),e.name||s.push({name:"name",type:"input",message:"请设置自定义组件项目名称(默认 neoCustomCmp):",default:"neoCustomCmp"}),d.prompt(s).then(s=>{const{isValid:o,errors:a}=C(s.name);o||(U(a.join("\n")),process.exit(1)),"github"===e.mode?y(s.type,s.name):v(s.type,s.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.usage(R("Usage")+": $0 config init").alias("h","help")},()=>{f("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.usage(R("Usage")+": $0 login").alias("h","help")},()=>{const e=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"灰度环境(crm-gray.xiaoshouyi.com)",value:"gray"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}]}];d.prompt(e).then(async e=>{const s=N(e.env,S.neoConfig);try{const e=new T(s);await e.login(),process.exit(0)}catch(e){U(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}})}).command("logout","登出 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new T;await e.logout(),process.exit(0)}catch(e){U(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.usage(R("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)_.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];d.prompt(e).then(e=>{const{isValid:s,errors:o}=C(e.name);s||(U(o.join("\n")),process.exit(1)),e.name?_.createCmpProjectByTemplate(e.name):(U("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.usage(R("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("targetDevice",{alias:"d",describe:"终端类型(all: 所有端, web: 网页端, mobile: 移动端),不指定则交互选择",choices:["all","web","mobile"]}).alias("h","help")},e=>{const s=[{name:"所有端(all)",value:"all"},{name:"网页端(web)",value:"web"},{name:"移动端(mobile)",value:"mobile"}];if(e.name&&void 0!==e.targetDevice)_.createCmpByTemplate(e.name,{targetDevice:e.targetDevice});else if(e.name){const o=[{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];d.prompt(o).then(s=>{_.createCmpByTemplate(e.name,{targetDevice:s.targetDevice})})}else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"},{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];d.prompt(e).then(e=>{e.name?_.createCmpByTemplate(e.name,{targetDevice:e.targetDevice}):(U("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.usage(R("Usage")+": $0 pull cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo pull cmp] 即将拉取自定义组件:${e.name},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);try{await _.pullCmp(e.name)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}else{const e=new x,s=h("正在拉取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表拉取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要拉取的自定义组件:",choices:[{name:"拉取所有组件(ALL)",value:"ALL"},...o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))]}];try{const s=await d.prompt(a);if(s.cmpType)if("ALL"===s.cmpType){L(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${o.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);for(let s=0,a=o.length;s<a;s++){const n=o[s];console.log(g.gray(`[neo pull cmp] 正在拉取第 ${s+1}/${a} 个组件: ${n.cmpType}`)),await _.pullCmp(n.cmpType,e)}D("[neo pull cmp]拉取所有组件命令已执行完成。")}else L(`[neo pull cmp] 即将拉取自定义组件:${s.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`),await _.pullCmp(s.cmpType,e);else U("请选择要拉取的自定义组件。"),process.exit(1)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.usage(R("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)_.deleteCmp(e.name);else{const e=new x,s=h("正在获取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表获取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];d.prompt(a).then(s=>{s.cmpType?_.deleteCmp(s.cmpType,e):(U("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(仅预览组件本身内容)",e=>{e.usage(R("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)_.previewCmp(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];d.prompt(s).then(e=>{e.cmpType||(U("未选择要预览的自定义组件。"),process.exit(1)),_.previewCmp(e.cmpType)})}}).command("dev","开启本地调试模式",e=>{e.usage(R("Usage")+": $0 dev").alias("h","help")},()=>{_.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.usage(R("Usage")+": $0 linkDebug").alias("h","help")},e=>{_.linkDebug()}).command("build","构建生产环境代码",e=>{e.usage(R("Usage")+": $0 build").alias("h","help")},e=>{_.build()}).command("build2lib","构建 UMD 模块",e=>{e.usage(R("Usage")+": $0 build2lib").alias("h","help")},e=>{_.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.usage(R("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)_.publish2oss(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];d.prompt(s).then(e=>{e.cmpType||(U("未选择要发布的自定义组件。"),process.exit(1)),_.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 push cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo push cmp] 即将构建并发布自定义组件:${e.name} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);try{await _.pushCmp(e.name)}catch(e){U(e.message||e.msg||"发布自定义组件失败"),process.exit(1)}}else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];d.prompt(s).then(async s=>{s.cmpType||(U("请选择要发布的自定义组件。"),process.exit(1));try{if("ALL"===s.cmpType){L(`[neo push cmp] 即将构建并发布当前目录下的所有自定义组件(共 ${e.length} 个)到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);for(let s=0,o=e.length;s<o;s++){const a=e[s];console.log(g.gray(`[neo push cmp] 正在拉取第 ${s+1}/${o} 个组件: ${a}`)),await _.pushCmp(a,!0)}D("[neo push cmp]发布所有组件命令已执行完成。")}else L(`[neo push cmp] 即将构建并发布自定义组件:${s.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`),await _.pushCmp(s.cmpType)}catch(e){U(e.message||e.msg||"发布失败"),process.exit(1)}})}}).command("build2esm","构建 ESM 模块",e=>{e.usage(R("Usage")+": $0 build2esm").alias("h","help")},()=>{_.build2esm()}).command("inspect","输出当前配置文件",e=>{e.usage(R("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{b(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.usage(R("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(cursor/vscode/auto),默认为 auto(自动检测)",default:"auto",choices:["cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{_.openEditor(e.editor,e.name)}).alias("h","help").alias("v","version").strict().fail((e,s,o)=>{U(`\n运行命令时发生错误: ${e}。\n`),console.log(R("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览指定自定义组件(仅预览组件本身内容)"},{cmd:"linkDebug",desc:"开启外链调试模式(在线上页面设计器端调试)"},{cmd:"login",desc:"登录 NeoCRM 平台(OAuth2 授权)"},{cmd:"logout",desc:"登出 NeoCRM 平台"},{cmd:"pull cmp [options]",desc:"拉取线上自定义组件"},{cmd:"delete cmp [options]",desc:"删除线上自定义组件"},{cmd:"push cmp [options]",desc:"构建并发布自定义组件到 NeoCRM 平台"},{cmd:"open [options]",desc:"使用 Cursor 或 VSCode 打开项目"}].forEach(({cmd:e,desc:s})=>{console.log(` ${g.cyan(e.padEnd(25))} ${s}`)}),console.log(""),console.log(`使用 ${g.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":R("Usage:"),"Commands:":R("Commands:"),"Options:":R("Options:")}).parseAsync().catch(e=>{e&&(U(`\n运行命令时发生错误: ${e.message||e}。\n`),process.exit(1))}),e.__exports};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./_virtual/index.js"),s=require("figlet"),o=require("yargs"),a=require("chalk"),n=require("inquirer"),t=require("ora"),c=require("./main2.js"),i=require("./utils/common.js"),p=require("./neo/env.js"),m=require("./package.json.js");var l;exports.__require=function(){if(l)return e.__exports;l=1;const r=s,u=o,g=a,d=n,h=t,{neoInit:y,neoInitByCopy:v,inspect:b,neoConfigInit:f,validateProjectName:C,getCmpTypeByDir:$,NeoService:x,NeoLoginService:T,hasNeoProject:w,consoleTag:j}=c.__require(),{errorLog:U,successLog:D,warningLog:L}=i.__require(),_=c.__require(),{getNeoCrmAPI:N}=p.__require(),q=m.default,M=r.textSync("neo",{font:"Lean"}),S=_.projectConfig,R=function(e){return g.green(g.bold(e))},A={"config init":"初始化配置文件",config:"初始化配置文件",dev:"开启本地调试模式",build:"构建生产环境代码",build2lib:"构建 UMD 模块",build2esm:"构建 ESM 模块",publish2oss:"发布到 OSS",inspect:"输出配置文件",open:"打开项目"},k={...A,init:"初始化自定义组件项目",login:"登录 NeoCRM 平台",logout:"登出 NeoCRM 平台","create project":"创建自定义组件项目","create cmp":"创建自定义组件",linkDebug:"开启外链调试模式",preview:"预览自定义组件","pull cmp":"拉取线上自定义组件","push cmp":"发布自定义组件到平台","delete cmp":"删除线上自定义组件",pull:"拉取线上自定义组件",push:"发布自定义组件到平台",delete:"删除线上自定义组件"};return u.middleware(function(e){if(e.help||e.version)return;const s=function(e){if(!e._||0===e._.length)return"";const s=e._.join(" ");if(k[s])return s;const o=e._[0];return k[o]?o:s||o}(e);if(!s)return;const o=k[s]||s;A[s]&&(console.log(g.green(M)),console.log(g.green(`当前版本:v${q.version}.\n`))),console.log(""),console.log(g.cyan(`执行命令: ${o}`)),console.log("")}).command("init [options]","根据模板创建一个自定义组件",e=>{e.usage(R("Usage")+": $0 init [options]").option("type",{alias:"t",describe:"自定义组件类型(react ts 技术栈/ vue2.0 技术栈/ react 技术栈)"}).option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.type&&e.name)w()&&(U(`${j}创建自定义组件失败,当前目录(${process.cwd()})已经是一个自定义组件项目,请勿重复创建。`),process.exit(1)),"github"===e.mode?y(e.type,e.name):v(e.type,e.name);else{const s=[],o=[{name:"react&ts 自定义组件",value:"react-ts",short:"react-ts"},{name:"Neo 自定义业务组件",value:"neo",short:"neo"},{name:"Neo H5 自定义业务组件",value:"neo-h5-cmps",short:"neo-h5-cmps"},{name:"antd 自定义组件",value:"antd",short:"antd"},{name:"echarts 自定义组件",value:"echarts",short:"echarts"},{name:"vue2 自定义组件",value:"vue2",short:"vue2"}];e.type||s.push({name:"type",type:"list",message:"请选择您要创建的自定义组件类型: ",default:"react-ts",choices:o}),e.name||s.push({name:"name",type:"input",message:"请设置自定义组件项目名称(默认 neoCustomCmp):",default:"neoCustomCmp"}),d.prompt(s).then(s=>{const{isValid:o,errors:a}=C(s.name);o||(U(a.join("\n")),process.exit(1)),"github"===e.mode?y(s.type,s.name):v(s.type,s.name)})}}).command("config init","创建 neo.config.js 配置文件",e=>{e.usage(R("Usage")+": $0 config init").alias("h","help")},()=>{f("neo.config.js")}).command("login","登录 NeoCRM 平台(OAuth2 授权)",e=>{e.usage(R("Usage")+": $0 login").alias("h","help")},()=>{const e=[{name:"env",type:"list",message:"请选择您要登录的环境:",default:"cd",choices:[{name:"线上生产环境(crm.xiaoshouyi.com)",value:"production"},{name:"灰度环境(crm-gray.xiaoshouyi.com)",value:"gray"},{name:"沙盒环境(crm-sandbox.xiaoshouyi.com)",value:"sandbox"},{name:"开发环境(crm-cd.xiaoshouyi.com)",value:"cd"},{name:"tencentuat环境(crm-tencentuat.xiaoshouyi.com)",value:"tencentuat"},{name:"自定义环境(在neo.config.js / neoConfig 中自行配置)",value:"custom"}]}];d.prompt(e).then(async e=>{const s=N(e.env,S.neoConfig);try{const e=new T(s);await e.login(),process.exit(0)}catch(e){U(`\n登录失败: ${e.message||e.msg}`),process.exit(1)}})}).command("logout","登出 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 logout").alias("h","help")},async()=>{try{const e=new T;await e.logout(),process.exit(0)}catch(e){U(`\n登出失败: ${e.message||e.msg}`),process.exit(1)}}).command("create","创建项目或者组件",e=>e.command("project [options]","创建自定义组件项目(含工程代码)",e=>{e.usage(R("Usage")+": $0 project [options]").option("name",{alias:"n",describe:"自定义组件项目名称"}).alias("h","help")},e=>{if(e.name)_.createCmpProjectByTemplate(e.name);else{const e=[{name:"name",type:"input",message:"请设置自定义组件项目名称:"}];d.prompt(e).then(e=>{const{isValid:s,errors:o}=C(e.name);s||(U(o.join("\n")),process.exit(1)),e.name?_.createCmpProjectByTemplate(e.name):(U("自定义组件项目名称不能为空。"),process.exit(1))})}}).command("cmp [options]","创建自定义组件",e=>{e.usage(R("Usage")+": $0 cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).option("targetDevice",{alias:"d",describe:"终端类型(all: 所有端, web: 网页端, mobile: 移动端),不指定则交互选择",choices:["all","web","mobile"]}).alias("h","help")},e=>{const s=[{name:"所有端(all)",value:"all"},{name:"网页端(web)",value:"web"},{name:"移动端(mobile)",value:"mobile"}];if(e.name&&void 0!==e.targetDevice)_.createCmpByTemplate(e.name,{targetDevice:e.targetDevice});else if(e.name){const o=[{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];d.prompt(o).then(s=>{_.createCmpByTemplate(e.name,{targetDevice:s.targetDevice})})}else{const e=[{name:"name",type:"input",message:"请设置自定义组件名称:"},{name:"targetDevice",type:"list",message:"请选择终端类型:",default:"all",choices:s}];d.prompt(e).then(e=>{e.name?_.createCmpByTemplate(e.name,{targetDevice:e.targetDevice}):(U("自定义组件名称不能为空。"),process.exit(1))})}})).command("pull cmp [options]","拉取线上自定义组件",e=>{e.usage(R("Usage")+": $0 pull cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo pull cmp] 即将拉取自定义组件:${e.name},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);try{await _.pullCmp(e.name)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}else{const e=new x,s=h("正在拉取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表拉取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要拉取的自定义组件:",choices:[{name:"拉取所有组件(ALL)",value:"ALL"},...o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))]}];try{const s=await d.prompt(a);if(s.cmpType)if("ALL"===s.cmpType){L(`[neo pull cmp] 即将拉取当前租户下的所有自定义组件(共 ${o.length} 个),如本地存在同名组件目录,将可能被覆盖,请提前备份本地修改。`);for(let s=0,a=o.length;s<a;s++){const n=o[s];console.log(g.gray(`[neo pull cmp] 正在拉取第 ${s+1}/${a} 个组件: ${n.cmpType}`)),await _.pullCmp(n.cmpType,e)}D("[neo pull cmp]拉取所有组件命令已执行完成。")}else L(`[neo pull cmp] 即将拉取自定义组件:${s.cmpType},如本地已存在同名组件目录,将可能被覆盖,请提前备份本地修改。`),await _.pullCmp(s.cmpType,e);else U("请选择要拉取的自定义组件。"),process.exit(1)}catch(e){U(e.message||e.msg||"拉取线上自定义组件失败"),process.exit(1)}}}).command("delete cmp [options]","删除线上自定义组件",e=>{e.usage(R("Usage")+": $0 delete cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name)_.deleteCmp(e.name);else{const e=new x,s=h("正在获取线上自定义组件列表...").start(),o=await e.getCustomCmpList();0===o.length&&(U("当前租户暂无任何自定义组件。"),process.exit(1)),s.stop("线上自定义组件列表获取成功。");const a=[{name:"cmpType",type:"list",message:"请选择要删除的自定义组件:",choices:o.map(e=>({name:`${e.label}(${e.cmpType})`,value:e.cmpType}))}];d.prompt(a).then(s=>{s.cmpType?_.deleteCmp(s.cmpType,e):(U("自定义组件名称不能为空。"),process.exit(1))})}}).command("preview [options]","预览指定自定义组件(仅预览组件本身内容)",e=>{e.usage(R("Usage")+": $0 preview [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)_.previewCmp(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要预览的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];d.prompt(s).then(e=>{e.cmpType||(U("未选择要预览的自定义组件。"),process.exit(1)),_.previewCmp(e.cmpType)})}}).command("dev","开启本地调试模式",e=>{e.usage(R("Usage")+": $0 dev").alias("h","help")},()=>{_.dev()}).command("linkDebug","开启外链调试模式(在线上页面设计器端调试)",e=>{e.usage(R("Usage")+": $0 linkDebug").alias("h","help")},e=>{_.linkDebug()}).command("build","构建生产环境代码",e=>{e.usage(R("Usage")+": $0 build").alias("h","help")},e=>{_.build()}).command("build2lib","构建 UMD 模块",e=>{e.usage(R("Usage")+": $0 build2lib").alias("h","help")},e=>{_.build2lib()}).command("publish2oss [options]","发布到oss",e=>{e.usage(R("Usage")+": $0 publish2oss [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},e=>{if(e.name)_.publish2oss(e.name);else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:e.map(e=>({name:e,value:e}))}];d.prompt(s).then(e=>{e.cmpType||(U("未选择要发布的自定义组件。"),process.exit(1)),_.publish2oss(e.cmpType)})}}).command("push cmp [options]","构建并发布自定义组件到 NeoCRM 平台",e=>{e.usage(R("Usage")+": $0 push cmp [options]").option("name",{alias:"n",describe:"自定义组件名称"}).alias("h","help")},async e=>{if(e.name){L(`[neo push cmp] 即将构建并发布自定义组件:${e.name} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);try{await _.pushCmp(e.name)}catch(e){U(e.message||e.msg||"发布自定义组件失败"),process.exit(1)}}else{const e=$(S.componentsDir);0===e.length&&(U("当前自定义组件目录中未找到自定义组件。(./src/components 目录下)"),process.exit(1));const s=[{name:"cmpType",type:"list",message:"请选择要发布的自定义组件:",choices:[{name:"发布所有组件(ALL)",value:"ALL"},...e.map(e=>({name:e,value:e}))]}];d.prompt(s).then(async s=>{s.cmpType||(U("请选择要发布的自定义组件。"),process.exit(1));try{if("ALL"===s.cmpType){L(`[neo push cmp] 即将构建并发布当前目录下的所有自定义组件(共 ${e.length} 个)到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`);for(let s=0,o=e.length;s<o;s++){const a=e[s];console.log(g.gray(`[neo push cmp] 正在拉取第 ${s+1}/${o} 个组件: ${a}`)),await _.pushCmp(a,!0)}D("[neo push cmp]发布所有组件命令已执行完成。")}else L(`[neo push cmp] 即将构建并发布自定义组件:${s.cmpType} 到 NeoCRM 平台,请确保已经通过 neo login 登录到正确的环境。`),await _.pushCmp(s.cmpType)}catch(e){U(e.message||e.msg||"发布失败"),process.exit(1)}})}}).command("build2esm","构建 ESM 模块",e=>{e.usage(R("Usage")+": $0 build2esm").alias("h","help")},()=>{_.build2esm()}).command("inspect","输出当前配置文件",e=>{e.usage(R("Usage")+": $0 inspect").option("type",{alias:"t",describe:"环境类型(本地调试环境/生产环境/library构建环境)",default:"build"}).alias("h","help")},e=>{b(e.type)}).command("open [options]","使用 Cursor 或 VSCode 打开项目",e=>{e.usage(R("Usage")+": $0 open [options]").option("editor",{alias:"e",describe:"编辑器类型(cursor/vscode/auto),默认为 auto(自动检测)",default:"auto",choices:["cursor","vscode","code","auto"]}).option("name",{alias:"n",describe:"要打开的项目名称,默认为当前目录"}).alias("h","help")},e=>{_.openEditor(e.editor,e.name)}).alias("h","help").alias("v","version").strict().fail((e,s,o)=>{U(`\n运行命令时发生错误: ${e}。\n`),console.log(R("当前可用命令列表:")),console.log("");[{cmd:"init [options]",desc:"根据模板创建一个自定义组件"},{cmd:"create project [options]",desc:"创建自定义组件项目(含工程代码)"},{cmd:"create cmp [options]",desc:"创建自定义组件"},{cmd:"preview [options]",desc:"预览指定自定义组件(仅预览组件本身内容)"},{cmd:"linkDebug",desc:"开启外链调试模式(在线上页面设计器端调试)"},{cmd:"login",desc:"登录 NeoCRM 平台(OAuth2 授权)"},{cmd:"logout",desc:"登出 NeoCRM 平台"},{cmd:"pull cmp [options]",desc:"拉取线上自定义组件"},{cmd:"delete cmp [options]",desc:"删除线上自定义组件"},{cmd:"push cmp [options]",desc:"构建并发布自定义组件到 NeoCRM 平台"},{cmd:"open [options]",desc:"使用 Cursor 或 VSCode 打开项目"}].forEach(({cmd:e,desc:s})=>{console.log(` ${g.cyan(e.padEnd(25))} ${s}`)}),console.log(""),console.log(`使用 ${g.cyan("neo <command> --help")} 查看具体命令的帮助信息。`),console.log(""),process.exit(1)}).help().updateStrings({"Usage:":R("Usage:"),"Commands:":R("Commands:"),"Options:":R("Options:")}).parseAsync().catch(e=>{e&&(U(`\n运行命令时发生错误: ${e.message||e}。\n`),process.exit(1))}),e.__exports};
package/dist/neo/env.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("lodash");var t,e;exports.__require=function(){if(e)return t;e=1;const a=o,s={neoBaseURL:"https://crm.xiaoshouyi.com",loginURL:"https://login.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login.xiaoshouyi.com/auc/oauth2/token"},n={neoBaseURL:"https://crm-gray.xiaoshouyi.com",loginURL:"https://login.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login.xiaoshouyi.com/auc/oauth2/token"},u={neoBaseURL:"https://crm-sandbox.xiaoshouyi.com",loginURL:"https://login-sandbox.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-sandbox.xiaoshouyi.com/auc/oauth2/token"},i={neoBaseURL:"https://crm-cd.xiaoshouyi.com",loginURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/token"},c={neoBaseURL:"https://crm-cd.xiaoshouyi.com",loginURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/token",delete:"/rest/metadata/v3.0/ui/customComponents",saveAPI:"/rest/metadata/v3.0/ui/customComponents/actions/saveOrUpdateComponent",queryAll_v1:"/rest/metadata/v3.0/ui/components/filter?custom=true",queryAll:"/rest/metadata/v3.0/ui/customComponents/actions/queryCustomComponents",getCodeLibAPI:o=>`/rest/metadata/v3.0/ui/customComponents/${o}/codeLib`,uploadAPI:"/rest/metadata/v3.0/ui/customComponents/actions/upload",getUserInfoAPI:"/rest/auc/v2.0/userInfo"};return t={DefaultNeoCrmAPI:c,getNeoCrmAPI:(o="cd",t={})=>{let e=a.cloneDeep(c),h=i;switch(o){case"production":h=s;break;case"gray":h=n;break;case"sandbox":h=u;break;case"cd":default:h=i;break;case"custom":h={...t,neoBaseURL:t.neoBaseURL,loginURL:t.loginURL||t.loginAPI,tokenURL:t.tokenURL||t.tokenAPI}}return{...e,...h}}}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("lodash");var t,e;exports.__require=function(){if(e)return t;e=1;const a=o,n={production:{neoBaseURL:"https://crm.xiaoshouyi.com",loginURL:"https://login.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login.xiaoshouyi.com/auc/oauth2/token"},gray:{neoBaseURL:"https://crm-gray.xiaoshouyi.com",loginURL:"https://login.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login.xiaoshouyi.com/auc/oauth2/token"},sandbox:{neoBaseURL:"https://crm-sandbox.xiaoshouyi.com",loginURL:"https://login-sandbox.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-sandbox.xiaoshouyi.com/auc/oauth2/token"},cd:{neoBaseURL:"https://crm-cd.xiaoshouyi.com",loginURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/token"},tencentuat:{neoBaseURL:"https://crm-tencentuat.xiaoshouyi.com",loginURL:"https://login-tencentuat.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-tencentuat.xiaoshouyi.com/auc/oauth2/token"}},u={neoBaseURL:"https://crm-cd.xiaoshouyi.com",loginURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/auth",tokenURL:"https://login-cd.xiaoshouyi.com/auc/oauth2/token",delete:"/rest/metadata/v3.0/ui/customComponents",saveAPI:"/rest/metadata/v3.0/ui/customComponents/actions/saveOrUpdateComponent",queryAll_v1:"/rest/metadata/v3.0/ui/components/filter?custom=true",queryAll:"/rest/metadata/v3.0/ui/customComponents/actions/queryCustomComponents",getCodeLibAPI:o=>`/rest/metadata/v3.0/ui/customComponents/${o}/codeLib`,uploadAPI:"/rest/metadata/v3.0/ui/customComponents/actions/upload",getUserInfoAPI:"/rest/auc/v2.0/userInfo"};return t={DefaultNeoCrmAPI:u,getNeoCrmAPI:(o="cd",t={})=>{let e,s=a.cloneDeep(u);return e="custom"===o?{...t,neoBaseURL:t.neoBaseURL,loginURL:t.loginURL||t.loginAPI,tokenURL:t.tokenURL||t.tokenAPI}:n[o]||n.cd,{...s,...e}}}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.12.6";const o={version:e};exports.default=o,exports.version=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="1.12.9";const o={version:e};exports.default=o,exports.version=e;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-cmp-cli",
3
- "version": "1.12.8",
3
+ "version": "1.12.9",
4
4
  "description": "Neo 自定义组件开发工具,支持react 和 vue2.0技术栈。",
5
5
  "keywords": [
6
6
  "neo-cli",
@@ -48,7 +48,7 @@
48
48
  "@commitlint/config-conventional": "^18.0.0",
49
49
  "@types/react": "^16.9.11",
50
50
  "@types/react-dom": "^16.9.15",
51
- "neo-cmp-cli": "^1.12.8",
51
+ "neo-cmp-cli": "^1.12.9",
52
52
  "husky": "^4.2.5",
53
53
  "lint-staged": "^10.2.9",
54
54
  "prettier": "^2.0.5"
@@ -12,8 +12,7 @@
12
12
  - 自定义组件中可用的配置项类型 请见 [当前可用表单项](https://github.com/wibetter/neo-register/blob/master/docs/FormItemType.md);
13
13
  - 自定义组件最外层请设置一个唯一的 ClassName(比如 xx-cmpType-container),所有内容样式请放在该 ClassName 中,避免自定义组件样式相互干扰;
14
14
  - 默认开启代码规范检测(含样式内容),如需关闭,请调整 neo.config.js 相关配置;
15
- - 请使用 react 16 版本;
16
- - 支持在自定义组件中使用 Open API,详细见[使用说明](https://www.npmjs.com/package/neo-open-api)。
15
+ - 请使用 react 16 版本。
17
16
 
18
17
  ### 自定义组件注册器使用说明
19
18
  - [neo-register 使用说明](https://www.npmjs.com/package/neo-register?activeTab=readme)
@@ -26,22 +25,34 @@
26
25
  $ npm i 或者 yarn
27
26
  ```
28
27
 
29
- 2. **linkDebug: 外链调试(在线上页面设计器端预览自定义组件)**
28
+ 2. **preview: 组件预览模式(带热更新)**
29
+ > preview模式:用于预览自定义组件内容。
30
+ ```bash
31
+ $ npm run preview
32
+ ```
33
+
34
+ 3. **linkDebug: 外链调试(在线上页面设计器端预览自定义组件)**
30
35
  > linkDebug模式:用于在线上页面设计器中预览和调试自定义组件。
31
36
  ```bash
32
37
  $ npm run linkDebug
33
38
  ```
34
39
 
35
- 3. **发布到 NeoCRM 平台**
40
+ 4. **发布到 NeoCRM 中**
36
41
  > 需要确保 package.json 中的 name 值唯一,version 值不重复。
37
42
  ```bash
38
43
  $ npm run pushCmp
39
44
  ```
40
45
 
41
- ### OAuth2 登录授权
42
- 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要进行授权登录。
43
46
 
44
- #### 使用步骤
47
+ ### 🔐 授权配置
48
+
49
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
50
+
51
+ #### 方式一:OAuth2 登录授权(推荐)
52
+
53
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
54
+
55
+ ##### 使用步骤
45
56
 
46
57
  1. **登录 NeoCRM 平台**
47
58
  ```bash
@@ -61,7 +72,7 @@ $ npm run pushCmp
61
72
 
62
73
  功能:清除本地保存的 token 文件,下次使用需要重新登录。
63
74
 
64
- #### neo login 选择「自定义环境」时的授权配置示例
75
+ ##### neo login 选择「自定义环境」时的授权配置示例
65
76
 
66
77
  ```javascript
67
78
  // neo.config.js
@@ -75,14 +86,14 @@ module.exports = {
75
86
  }
76
87
  ```
77
88
 
78
- #### Token 有效期
89
+ ##### Token 有效期
79
90
 
80
91
  - **access_token**:默认有效期 2 小时
81
92
  - **refresh_token**:默认有效期 30 天
82
93
  - 系统会在 access_token 过期前 5 分钟自动刷新
83
94
  - 如果 refresh_token 也过期,需要重新执行 `neo login`
84
95
 
85
- #### 常见问题
96
+ ##### 常见问题
86
97
 
87
98
  **Q1: 浏览器无法自动打开怎么办?**
88
99
  A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
@@ -93,6 +104,50 @@ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo l
93
104
  **Q3: 授权登录后没有正常跳回 redirect_uri**
94
105
  A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
95
106
 
107
+ #### 方式二:密码授权配置
108
+
109
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
110
+
111
+ ```javascript
112
+ module.exports = {
113
+ neoConfig: {
114
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
115
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
116
+ // NeoCRM 授权配置
117
+ auth: {
118
+ client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
119
+ client_secret: 'xxx', // 客户端秘钥,从创建连接器的客户端信息中获取(Client_Secret)
120
+ username: 'xx', // 用户在销售易系统中的用户名
121
+ /**
122
+ * password 为 用户在销售易系统中的账号密码加上 8 位安全令牌。
123
+ * 例如,用户密码为 123456,安全令牌为 ABCDEFGH,则 password 的值应为 123456ABCDEFGH。
124
+ */
125
+ password: 'xx xx' // 用户账户密码 + 8 位安全令牌
126
+ },
127
+ },
128
+ }
129
+ ```
130
+
131
+ ##### 授权配置获取方式
132
+
133
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
134
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
135
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
136
+
137
+ 2. **安全令牌**:如何获取安全令牌
138
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
139
+ - 按照文档说明获取 8 位安全令牌
140
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
141
+
142
+ #### OAuth2 模式 vs 密码模式
143
+
144
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
145
+ |------|------------------|---------|
146
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
147
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
148
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
149
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
150
+
96
151
  ---
97
152
 
98
153
  ### 配置项说明(neo-cmp-cli)