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 +1 -1
- package/src/module/neoInit.js +2 -0
- package/src/module/neoInitByCopy.js +3 -0
- package/src/template/neo-custom-cmp-template/neo.config.js +23 -0
- package/src/template/neo-custom-cmp-template/src/components/entity-form/index.tsx +10 -7
- package/src/template/neo-custom-cmp-template/src/components/entity-table/index.tsx +16 -11
- package/src/utils/resetPackageVersion.js +115 -0
package/package.json
CHANGED
package/src/module/neoInit.js
CHANGED
|
@@ -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 {
|
|
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
|
+
};
|