neo-cmp-cli 1.3.8 → 1.3.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-cmp-cli",
3
- "version": "1.3.8",
3
+ "version": "1.3.10",
4
4
  "description": "前端脚手架:自定义组件开发工具,支持react 和 vue2.0技术栈。",
5
5
  "keywords": [
6
6
  "neo-cli",
@@ -1,6 +1,7 @@
1
1
  const { gitClone } = require('akfun');
2
2
  const { consoleTag } = require('../utils/neoParams'); // 输出标记
3
3
  const { replaceInPackage } = require('../utils/replaceInPackage');
4
+ const { resetPackageVersion } = require('../utils/resetPackageVersion');
4
5
 
5
6
  const templateList = {
6
7
  react: {
@@ -41,6 +42,7 @@ const neoInit = function (type, projectName) {
41
42
  replaceInPackage(finalProjectName, currentTemplate.projectName, finalProjectName);
42
43
  replaceInPackage(finalProjectPath, 'wibetter', 'xxx');
43
44
  replaceInPackage(finalProjectPath, 'neo自定义组件模板', 'neo自定义组件');
45
+ resetPackageVersion(finalProjectPath);
44
46
  },
45
47
  consoleTag
46
48
  );
@@ -2,6 +2,7 @@ const fs = require('fs-extra');
2
2
  const path = require('path');
3
3
  const { consoleTag } = require('../utils/neoParams'); // 输出标记
4
4
  const { replaceInPackage } = require('../utils/replaceInPackage');
5
+ const { resetPackageVersion } = require('../utils/resetPackageVersion');
5
6
 
6
7
  const templateList = {
7
8
  react: {
@@ -46,6 +47,8 @@ const neoInitByCopy = function (type, projectName) {
46
47
  replaceInPackage(finalProjectPath, currentTemplate.projectName, finalProjectName);
47
48
  replaceInPackage(finalProjectPath, 'wibetter', 'xxx');
48
49
  replaceInPackage(finalProjectPath, 'neo自定义组件模板', 'neo自定义组件');
50
+ resetPackageVersion(finalProjectPath);
51
+
49
52
  console.log(`${consoleTag}已创建自定义组件(${finalProjectName})!`);
50
53
  })
51
54
  .catch((err) => console.error(`${consoleTag}自定义组件模板下载失败:`, err));
@@ -119,4 +119,27 @@ module.exports = {
119
119
  assetsRoot: resolve('dist') // 上传指定目录下的脚本文件
120
120
  */
121
121
  },
122
+ publishCmp: {
123
+ // 用于构建并发布至 NeoCRM 的相关配置
124
+ credentials: {
125
+ client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
126
+ client_secret: 'xxx', // 客户端秘钥,从创建连接器的客户端信息中获取(Client_Secret)
127
+ username: 'xx', // 用户在销售易系统中的用户名
128
+ /**
129
+ * password 为 用户在销售易系统中的账号密码加上 8 位安全令牌。
130
+ * 例如,用户密码为 123456,安全令牌为 ABCDEFGH,则 password 的值应为 123456ABCDEFGH。
131
+ */
132
+ password: 'xx xx' // 用户账户密码 + 8 位安全令牌
133
+ },
134
+ /*
135
+ 【特别说明】以下配置项都自带默认值,非必填。如需自定义请自行配置。
136
+ NODE_ENV: 'production',
137
+ entry: { // 根据 src/components 目录下的文件自动生成 entry 相关配置
138
+ InfoCardModel: './src/components/entity-form/model.ts',
139
+ infoCard: './src/components/entity-form/register.ts'
140
+ },
141
+ cssExtract: false, // 不额外提取css文件
142
+ assetsRoot: resolve('dist') // 上传指定目录下的脚本文件
143
+ */
144
+ },
122
145
  };
@@ -110,8 +110,6 @@ export default class EntityForm extends React.PureComponent<
110
110
  > {
111
111
  constructor(props: EntityFormProps) {
112
112
  super(props);
113
- const { xObjectDataApi } = props;
114
- const { xObjectApiKey } = xObjectDataApi || {};
115
113
 
116
114
  // 初始化组件状态
117
115
  this.state = {
@@ -124,16 +122,21 @@ export default class EntityForm extends React.PureComponent<
124
122
  submitSuccess: false,
125
123
  };
126
124
 
125
+ // 绑定方法上下文
126
+ this.loadFieldList = this.loadFieldList.bind(this);
127
+ this.handleSubmit = this.handleSubmit.bind(this);
128
+ this.handleReset = this.handleReset.bind(this);
129
+ }
130
+
131
+ componentDidMount() {
132
+ const { xObjectDataApi } = this.props;
133
+ const { xObjectApiKey } = xObjectDataApi || {};
134
+
127
135
  if (xObjectApiKey) {
128
136
  // 初始化字段列表和业务类型列表
129
137
  this.getEntityTypeList(xObjectApiKey);
130
138
  this.loadFieldList();
131
139
  }
132
-
133
- // 绑定方法上下文
134
- this.loadFieldList = this.loadFieldList.bind(this);
135
- this.handleSubmit = this.handleSubmit.bind(this);
136
- this.handleReset = this.handleReset.bind(this);
137
140
  }
138
141
 
139
142
  /**
@@ -126,8 +126,8 @@ export default class EntityTable extends React.PureComponent<
126
126
  > {
127
127
  constructor(props: EntityTableProps) {
128
128
  super(props);
129
- const { xObjectDataApi } = props;
130
- const { xObjectApiKey, fields, page, pageSize } = xObjectDataApi || {};
129
+ const { xObjectDataApi } = this.props;
130
+ const { page, pageSize } = xObjectDataApi || {};
131
131
 
132
132
  // 初始化组件状态
133
133
  this.state = {
@@ -147,6 +147,20 @@ export default class EntityTable extends React.PureComponent<
147
147
  entityTypeList: [],
148
148
  };
149
149
 
150
+ // 绑定方法上下文
151
+ this.loadData = this.loadData.bind(this);
152
+ this.handleAdd = this.handleAdd.bind(this);
153
+ this.handleEdit = this.handleEdit.bind(this);
154
+ this.handleDelete = this.handleDelete.bind(this);
155
+ this.handleModalOk = this.handleModalOk.bind(this);
156
+ this.handleModalCancel = this.handleModalCancel.bind(this);
157
+ this.handleTableChange = this.handleTableChange.bind(this);
158
+ }
159
+
160
+ componentDidMount() {
161
+ const { xObjectDataApi } = this.props;
162
+ const { xObjectApiKey, fields, page, pageSize } = xObjectDataApi || {};
163
+
150
164
  if (xObjectApiKey) {
151
165
  // 初始化字段列表、加载数据和业务类型列表
152
166
  this.getEntityTypeList(xObjectApiKey);
@@ -156,15 +170,6 @@ export default class EntityTable extends React.PureComponent<
156
170
  this.loadData(page, pageSize);
157
171
  }
158
172
  }
159
-
160
- // 绑定方法上下文
161
- this.loadData = this.loadData.bind(this);
162
- this.handleAdd = this.handleAdd.bind(this);
163
- this.handleEdit = this.handleEdit.bind(this);
164
- this.handleDelete = this.handleDelete.bind(this);
165
- this.handleModalOk = this.handleModalOk.bind(this);
166
- this.handleModalCancel = this.handleModalCancel.bind(this);
167
- this.handleTableChange = this.handleTableChange.bind(this);
168
173
  }
169
174
 
170
175
  /**
@@ -0,0 +1,115 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+
4
+ /**
5
+ * 重置 package.json 文件中的版本号到指定版本
6
+ * @param dir 项目目录
7
+ * @param version 目标版本号,默认为 '1.0.0'
8
+ * @returns 替换结果对象: { success: boolean, message: string, filePath?: string, oldVersion?: string, newVersion?: string }
9
+ */
10
+ function resetPackageVersion(dir, version = '1.0.0') {
11
+ try {
12
+ // 检查目录是否存在
13
+ if (!fs.existsSync(dir)) {
14
+ return {
15
+ success: false,
16
+ message: `目录不存在: ${dir}`
17
+ };
18
+ }
19
+
20
+ // 检查是否为目录
21
+ const stat = fs.statSync(dir);
22
+ if (!stat.isDirectory()) {
23
+ return {
24
+ success: false,
25
+ message: `指定路径不是目录: ${dir}`
26
+ };
27
+ }
28
+
29
+ // 构建package.json的完整路径
30
+ const packageJsonPath = path.join(dir, 'package.json');
31
+
32
+ // 检查package.json文件是否存在
33
+ if (!fs.existsSync(packageJsonPath)) {
34
+ return {
35
+ success: false,
36
+ message: `package.json文件不存在: ${packageJsonPath}`
37
+ };
38
+ }
39
+
40
+ // 读取并解析package.json文件
41
+ const content = fs.readFileSync(packageJsonPath, 'utf8');
42
+ let packageJson = {};
43
+
44
+ try {
45
+ packageJson = JSON.parse(content);
46
+ } catch (error) {
47
+ return {
48
+ success: false,
49
+ message: `package.json 文件解析失败: ${error.message}。`
50
+ };
51
+ }
52
+
53
+
54
+ // 保存旧版本号
55
+ const oldVersion = packageJson.version || '未定义';
56
+
57
+ // 检查版本号是否已经是目标版本
58
+ if (packageJson.version === version) {
59
+ return {
60
+ success: true,
61
+ message: `package.json 版本号已经是 ${version}`,
62
+ filePath: packageJsonPath,
63
+ oldVersion,
64
+ newVersion: version
65
+ };
66
+ }
67
+
68
+ // 更新版本号
69
+ packageJson.version = version;
70
+
71
+ // 写入package.json,保持格式化(2空格缩进)
72
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf8');
73
+
74
+ return {
75
+ success: true,
76
+ message: `已将 package.json 版本号从 ${oldVersion} 重置为 ${version}`,
77
+ filePath: packageJsonPath,
78
+ oldVersion,
79
+ newVersion: version
80
+ };
81
+ } catch (error) {
82
+ return {
83
+ success: false,
84
+ message: `resetPackageVersion 运行失败: ${error.message}`
85
+ };
86
+ }
87
+ }
88
+
89
+ /**
90
+ * 批量重置多个目录中 package.json 文件的版本号
91
+ * @param dirs 目录数组
92
+ * @param version 目标版本号,默认为 '1.0.0'
93
+ * @returns 批量重置结果
94
+ */
95
+ function resetVersionInMulPackages(dirs, version = '1.0.0') {
96
+ const results = dirs.map((dir) => ({
97
+ dir,
98
+ result: resetPackageVersion(dir, version)
99
+ }));
100
+
101
+ const successCount = results.filter((r) => r.result.success).length;
102
+ const failedCount = results.length - successCount;
103
+
104
+ return {
105
+ total: dirs.length,
106
+ success: successCount,
107
+ failed: failedCount,
108
+ results
109
+ };
110
+ }
111
+
112
+ module.exports = {
113
+ resetPackageVersion,
114
+ resetVersionInMulPackages
115
+ };