@steedos/service-package-registry 3.0.0-beta.15 → 3.0.0-beta.151

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 (29) hide show
  1. package/main/default/manager/loader.js +7 -7
  2. package/main/default/manager/package-json.js +1 -1
  3. package/main/default/manager/packages.js +5 -3
  4. package/main/default/manager/registry.js +155 -12
  5. package/main/default/objectTranslations/steedos_packages.en/steedos_packages.en.objectTranslation.yml +19 -1
  6. package/main/default/objectTranslations/steedos_packages.zh-CN/steedos_packages.zh-CN.objectTranslation.yml +23 -0
  7. package/main/default/objects/steedos_packages/buttons/disable.button.js +51 -0
  8. package/main/default/objects/steedos_packages/buttons/disable.button.yml +4 -0
  9. package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.js +8 -0
  10. package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.yml +86 -0
  11. package/main/default/objects/steedos_packages/buttons/enable.button.js +58 -0
  12. package/main/default/objects/steedos_packages/buttons/enable.button.yml +4 -0
  13. package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.js +8 -0
  14. package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.yml +138 -0
  15. package/main/default/objects/steedos_packages/buttons/reload.button.js +34 -0
  16. package/main/default/objects/steedos_packages/buttons/reload.button.yml +4 -0
  17. package/main/default/objects/steedos_packages/buttons/uninstall.button.js +63 -0
  18. package/main/default/objects/steedos_packages/buttons/uninstall.button.yml +4 -0
  19. package/main/default/objects/steedos_packages/buttons/upgradePackage.button.js +22 -0
  20. package/main/default/objects/steedos_packages/buttons/upgradePackage.button.yml +147 -0
  21. package/main/default/objects/steedos_packages/fields/isUnmanaged.field.yml +4 -0
  22. package/main/default/objects/steedos_packages/listviews/all.listview.yml +1 -0
  23. package/main/default/pages/steedos_package_detail.page.amis.json +4 -33
  24. package/main/default/pages/steedos_packages_list.page.amis.json +3 -9
  25. package/main/default/routes/nodes.router.js +292 -0
  26. package/main/default/routes/registry.router.js +21 -0
  27. package/main/default/triggers/steedos_packages.trigger.js +7 -13
  28. package/package.json +6 -7
  29. package/project.package.service.js +35 -12
@@ -114,7 +114,7 @@ const loadPackages = async ()=>{
114
114
  }
115
115
  }
116
116
  } catch (error) {
117
- console.error(`start package ${packageName} error: ${error.message}`)
117
+ console.error(`start package ${packageName} error[117]: ${error.message}`)
118
118
  }
119
119
 
120
120
  }else if(package.local !== true){
@@ -132,7 +132,7 @@ const loadPackages = async ()=>{
132
132
  const packageInfo = await loadPackage(packageName);
133
133
  appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: false});
134
134
  } catch (error) {
135
- console.error(`start package ${packageName} error: ${error.message}`)
135
+ console.error(`start package ${packageName} error[135]: ${error.message}`)
136
136
  }
137
137
  }
138
138
  }else if(package.local === true && package.static != true){
@@ -147,7 +147,7 @@ const loadPackages = async ()=>{
147
147
  appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
148
148
  }
149
149
  } catch (error) {
150
- console.error(`start package ${packageName} error: ${error.message}`)
150
+ console.error(`start package ${packageName} error[150]: ${error.message}`)
151
151
  }
152
152
  }
153
153
  }
@@ -173,7 +173,7 @@ const destroyExistThePackageService = async (packageInfo)=>{
173
173
  let schema = objectql.getSteedosSchema();
174
174
  let broker = schema.broker;
175
175
  let svc = broker.getLocalService({
176
- name: `~packages-${packageInfo.name}`
176
+ name: `${packageInfo.name}`
177
177
  });
178
178
  if(!svc){
179
179
  svc = broker.getLocalService({
@@ -181,7 +181,7 @@ const destroyExistThePackageService = async (packageInfo)=>{
181
181
  });
182
182
  }
183
183
  if (svc) {
184
- console.info(`Destroy previous '${schema.name}' service...`);
184
+ console.info(`Destroy previous '${packageInfo.name}' service...`);
185
185
  await broker.destroyService(svc);
186
186
  }
187
187
  }
@@ -280,7 +280,7 @@ const disablePackage = async (packageName)=>{
280
280
  let schema = objectql.getSteedosSchema();
281
281
  let broker = schema.broker;
282
282
  const serviceList = broker.registry.getServiceList({ withActions: true });
283
- const service = _.find(serviceList, (_service)=>{return _service.name == `~packages-${packageName}` || _service.name == packageName;})
283
+ const service = _.find(serviceList, (_service)=>{return _service.name == `${packageName}` || _service.name == packageName;})
284
284
  if(service){
285
285
  await broker.destroyService(service);
286
286
  }
@@ -301,7 +301,7 @@ const removePackage = async (packageName)=>{
301
301
  let schema = objectql.getSteedosSchema();
302
302
  let broker = schema.broker;
303
303
  const serviceList = broker.registry.getServiceList({ withActions: true });
304
- const service = _.find(serviceList, (_service)=>{return _service.name == `~packages-${packageName}` || _service.name == packageName;})
304
+ const service = _.find(serviceList, (_service)=>{return _service.name == `${packageName}` || _service.name == packageName;})
305
305
  if(service){
306
306
  await broker.destroyService(service);
307
307
  }
@@ -68,7 +68,7 @@ const packageJson = async (packageName, options) => {
68
68
  try {
69
69
  data = await got(packageUrl, gotOptions).json();
70
70
  } catch (error) {
71
- if (error.response.statusCode === 404) {
71
+ if (error?.response?.statusCode === 404) {
72
72
  throw new PackageNotFoundError(packageName);
73
73
  }
74
74
 
@@ -62,7 +62,7 @@ const getAllPackages = async ()=>{
62
62
  }
63
63
  })
64
64
  _.map(_.map(onlinePackages, 'metadata'), (packageInfo)=>{
65
- const packageName = packageInfo.name.replace(`~packages-`, '');
65
+ const packageName = packageInfo.name.replace(``, '');
66
66
  const _package = _.find(packages, (_p)=>{return _p.name == packageName})
67
67
  if(_package){
68
68
  _package.status = 'enable'
@@ -71,6 +71,7 @@ const getAllPackages = async ()=>{
71
71
  _package.instance_id = packageInfo.instanceID
72
72
  _package.version = packageInfo.version
73
73
  _package.homepage = packageInfo.homepage
74
+ _package.isUnmanaged = packageInfo.isUnmanaged
74
75
  }else{
75
76
  packages.push({
76
77
  label: packageInfo.label || packageName,
@@ -84,7 +85,8 @@ const getAllPackages = async ()=>{
84
85
  instance_id: packageInfo.instanceID,
85
86
  status : 'enable',
86
87
  version : packageInfo.version,
87
- local: false
88
+ local: false,
89
+ isUnmanaged: packageInfo.isUnmanaged
88
90
  })
89
91
  }
90
92
  })
@@ -129,7 +131,7 @@ const maintainSystemFiles = ()=>{
129
131
  const getPackageVersions = async (packageName, options)=>{
130
132
  //TODO 处理 registry_url
131
133
 
132
- let registry_url = registryUrl(packageName.toLowerCase().split('/')[0]);
134
+ let registry_url = process.env.NPM_REGISTRY_URL || registryUrl(packageName.toLowerCase().split('/')[0]);
133
135
 
134
136
  const result = await packageJson(packageName.toLowerCase(), {
135
137
  allVersions: true,
@@ -269,26 +269,169 @@ async function installModule(module, version, url, registry_url) {
269
269
  return activePromise;
270
270
  }
271
271
 
272
+
273
+ /**
274
+ * 对比两个 package.json 对象的依赖变化,返回新增和修改的依赖
275
+ * @param {Object} oldPkg 修改前的 package.json 对象
276
+ * @param {Object} newPkg 修改后的 package.json 对象
277
+ * @returns {Array} 包含变化信息的数组,每个元素包含名称、版本号、路径和变化类型
278
+ */
279
+ function comparePackageJsonChanges(oldPkg, newPkg) {
280
+ const changes = [];
281
+
282
+ // 检查 dependencies 变化
283
+ const oldDeps = oldPkg?.dependencies || {};
284
+ const newDeps = newPkg?.dependencies || {};
285
+
286
+ // 检查 devDependencies 变化
287
+ const oldDevDeps = oldPkg?.devDependencies || {};
288
+ const newDevDeps = newPkg?.devDependencies || {};
289
+
290
+ // 对比 dependencies
291
+ for (const [pkg, newVersion] of Object.entries(newDeps)) {
292
+ const oldVersion = oldDeps[pkg];
293
+
294
+ if (oldVersion === undefined) {
295
+ // 新增的依赖
296
+ changes.push({
297
+ name: pkg,
298
+ version: newVersion,
299
+ path: 'dependencies',
300
+ changeType: 'added'
301
+ });
302
+ } else if (oldVersion !== newVersion) {
303
+ // 版本变化的依赖
304
+ changes.push({
305
+ name: pkg,
306
+ version: newVersion,
307
+ oldVersion: oldVersion,
308
+ path: 'dependencies',
309
+ changeType: 'changed'
310
+ });
311
+ }
312
+ }
313
+
314
+ // 对比 devDependencies
315
+ for (const [pkg, newVersion] of Object.entries(newDevDeps)) {
316
+ const oldVersion = oldDevDeps[pkg];
317
+
318
+ if (oldVersion === undefined) {
319
+ // 新增的依赖
320
+ changes.push({
321
+ name: pkg,
322
+ version: newVersion,
323
+ path: 'devDependencies',
324
+ changeType: 'added'
325
+ });
326
+ } else if (oldVersion !== newVersion) {
327
+ // 版本变化的依赖
328
+ changes.push({
329
+ name: pkg,
330
+ version: newVersion,
331
+ oldVersion: oldVersion,
332
+ path: 'devDependencies',
333
+ changeType: 'changed'
334
+ });
335
+ }
336
+ }
337
+
338
+ return changes;
339
+ }
340
+
341
+ function loadJson(filePath){
342
+ const packageData = fs.readFileSync(filePath, 'utf8');
343
+ return JSON.parse(packageData);
344
+ }
345
+
272
346
  async function yarnAddPackage(yarnPackage){
273
347
  var installDir = settings.userDir || ".";
348
+
349
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
350
+ const oldPackageInfo = loadJson(path.join(installDir, 'package.json'));
351
+
274
352
  var yarnArgs = ['add', '-E', ...yarnPackage.split(' '), '--json'];
275
353
  const data = await exec.run(yarnCommand, yarnArgs, {cwd: installDir}, true);
354
+
355
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
356
+ const newPackageInfo = loadJson(path.join(installDir, 'package.json'));
357
+
358
+ const changes = comparePackageJsonChanges(oldPackageInfo, newPackageInfo);
276
359
  const formatData = JSON.parse(_.last(_.compact(data.stdout.split('\n'))))
360
+ // console.log(`yarnAddPackage:`, yarnPackage, formatData, data)
277
361
  // 解析 yarn add 返回的结果
278
362
  const steedosPackages = [];
279
- _.each(formatData.data.trees, (module)=>{
280
- const parsed = npa(module.name);
281
- const packagePath = path.dirname(require.resolve(`${parsed.name}/package.json`, {
282
- paths: [path.join(installDir, 'node_modules')]
283
- }))
284
- if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
285
- steedosPackages.push({
286
- name: parsed.name,
287
- version: parsed.rawSpec,
288
- path: packagePath
289
- })
363
+ if(formatData.data.trees){
364
+ _.each(formatData.data.trees, (module)=>{
365
+ const parsed = npa(module.name);
366
+ const packagePath = path.dirname(require.resolve(`${parsed.name}/package.json`, {
367
+ paths: [path.join(installDir, 'node_modules')]
368
+ }))
369
+ if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
370
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
371
+ const schema = require(path.join(packagePath, 'package.service.js'));
372
+ schema.settings.packageInfo = {
373
+ ...schema.settings?.packageInfo,
374
+ ...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {}),
375
+ }
376
+ steedosPackages.push({
377
+ name: parsed.name,
378
+ version: parsed.rawSpec,
379
+ path: packagePath,
380
+ isUnmanaged: schema.settings.packageInfo.isUnmanaged
381
+ })
382
+ }
383
+ })
384
+ }else{
385
+ // console.log('changes', changes, npa(yarnPackage));
386
+ const module = npa(yarnPackage);
387
+ if(module.name){
388
+ // eslint-disable-next-line no-undef
389
+ const packagePath = path.dirname(require.resolve(`${module.name}/package.json`, {
390
+ paths: [path.join(installDir, 'node_modules')]
391
+ }));
392
+ if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
393
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
394
+ const schema = require(path.join(packagePath, 'package.service.js'));
395
+ const packageInfo = loadJson(path.join(packagePath, 'package.json'));
396
+ schema.settings.packageInfo = {
397
+ ...schema.settings?.packageInfo,
398
+ ...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {}),
399
+ }
400
+ steedosPackages.push({
401
+ name: module.name,
402
+ version: packageInfo.version,
403
+ path: packagePath,
404
+ isUnmanaged: schema.settings.packageInfo.isUnmanaged
405
+ })
406
+ }
407
+
290
408
  }
291
- })
409
+
410
+ for (const change of changes) {
411
+ // eslint-disable-next-line no-undef
412
+ const packagePath = path.dirname(require.resolve(`${change.name}/package.json`, {
413
+ paths: [path.join(installDir, 'node_modules')]
414
+ }))
415
+ if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
416
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
417
+ const schema = require(path.join(packagePath, 'package.service.js'));
418
+ schema.settings.packageInfo = {
419
+ ...schema.settings?.packageInfo,
420
+ ...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {}),
421
+ }
422
+ if(!_.find(steedosPackages, {name: change.name})){
423
+ steedosPackages.push({
424
+ name: change.name,
425
+ version: change.version,
426
+ path: packagePath,
427
+ isUnmanaged: schema.settings.packageInfo.isUnmanaged
428
+ })
429
+ }
430
+
431
+ }
432
+ }
433
+ }
434
+ // console.log('steedosPackages===>', steedosPackages);
292
435
  return steedosPackages;
293
436
  }
294
437
 
@@ -124,4 +124,22 @@ actions:
124
124
  uninstall:
125
125
  label: Uninstall
126
126
  upgradePackage:
127
- label: Upgrade Package
127
+ label: Upgrade Package
128
+ edit_npmrc:
129
+ label: NPM Settings
130
+ CustomLabels:
131
+ steedos_packages_tab_introduce_title: Introduction
132
+ steedos_packages_tab_components_title: Package Components
133
+ steedos_packages_tab_details_title: Details
134
+ steedos_packages_button_enable_dialog_title: Enable
135
+ steedos_packages_button_enable_dialog_confirm_text_prefix: "Make sure to enable \""
136
+ steedos_packages_button_enable_dialog_confirm_text_suffix: "\"?"
137
+ steedos_packages_button_enable_dialog_button_ok: Enable
138
+ steedos_packages_button_enable_dialog_message_success: Enabled Successfully
139
+ steedos_packages_button_edit_npmrc_dialog_describe: "##### NPM Settings (.npmrc):\r- `; Set a new registry for scoped packages`\r- `@myscope:registry=https://mycustomregistry.example.org`\r- `; Configure authentication information for the new registry (optional)`\r- `//mycustomregistry.example.org:_authToken=\"Authentication Token\"`"
140
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry: Registry
141
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_taobao: taobao
142
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_cnpm: cnpm
143
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_npmjs: npmjs
144
+ steedos_packages_button_installPackageFromUrl_dialog_describe1: "##### You can specify a version using one of the following options:\r- `package-name` Install the 'latest' version of the package.\r- `package-name@1.2.3` Install a specific version of the package from the registry.\r- `package-name@tag` Install a specific 'tag', such as beta, next, or latest."
145
+ steedos_packages_button_installPackageFromUrl_dialog_describe2: "##### You can also specify packages from different locations:\r- `package-name` Install the package from the npm registry.\r- `file:/path/to/local/folder` Install a package located on your local filesystem. This is useful for testing packages you haven’t published to the registry yet.\r- `file:/path/to/local/tarball.tgz` Install from a gzipped tarball, which can be used to share packages before publishing.\r- `link:/path/to/local/folder` Install a symbolic link to a package on your local filesystem. Useful in monorepo environments.\r- `<git remote url>` Install a package from a remote Git repository.\r- `<git remote url>#<branch/commit/tag>` Install a package from a specific git branch, commit, or tag in the remote Git repository.\r- `https://my-project.org/package.tgz` Install from a remote gzipped tarball."
@@ -0,0 +1,23 @@
1
+ name: steedos_packages
2
+ label: 软件包
3
+ description:
4
+ actions:
5
+ edit_npmrc:
6
+ label: 验证信息
7
+ CustomLabels:
8
+ steedos_packages_tab_introduce_title: 简介
9
+ steedos_packages_tab_components_title: 软件包组件
10
+ steedos_packages_tab_details_title: 详细信息
11
+ steedos_packages_button_enable_dialog_title: 启用
12
+ steedos_packages_button_enable_dialog_confirm_text_prefix: 确定要启用「
13
+ steedos_packages_button_enable_dialog_confirm_text_suffix: 」?
14
+ steedos_packages_button_enable_dialog_button_ok: 启用
15
+ steedos_packages_button_enable_dialog_message_success: 已启用
16
+ steedos_packages_button_edit_npmrc_dialog_describe: "##### 验证信息说明(.npmrc):\r- `; 为范围包设置新的注册表`\r- `@myscope:registry=https://mycustomregistry.example.org`\r- `; 配置新注册表的认证信息(可选)`\r- `//mycustomregistry.example.org:_authToken=\"认证信息\"`"
17
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry: 镜像源
18
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_taobao: 淘宝源
19
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_cnpm: cnpm
20
+ steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_npmjs: 官方源
21
+ steedos_packages_button_installPackageFromUrl_dialog_describe1: "##### 您可以使用以下选项之一指定版本: \r- `package-name`安装包的“最新”版本。 \r- `package-name@1.2.3`从以下位置安装包的特定版本 注册表。 \r- `package-name@tag`安装特定的“标签”。(例如)beta、next、latest"
22
+ steedos_packages_button_installPackageFromUrl_dialog_describe2: "##### 您还可以指定来自不同位置的包:\r- `package-name` 从 npm 注册表安装包 \r- `file:/path/to/local/folder`安装一个位于本地文件系统的包。这对于测试您尚未发布到注册表的软件包很有用。 \r- `file:/path/to/local/tarball.tgz`从 gzip 压缩的 tarball,可用于在发布包之前共享包。 \r- `link:/path/to/local/folder`安装指向软件包的符号链接:在本地文件系统上。适用于monorepo环境。 \r- `<git remote url>`从远程 Git 存储库安装包。 \r- `<git remote url>#<branch/commit/tag>`从远程安装软件包特定 git 分支、git commit 或 git 标签处的 git 存储库。 \r- `https://my-project.org/package.tgz` 从远程gzip压缩压缩包。"
23
+
@@ -0,0 +1,51 @@
1
+ module.exports = {
2
+ disable: function (object_name, record_id) {
3
+ Steedos.sobject(object_name).retrieve(record_id).then((record)=>{
4
+ if(!record){
5
+ return SteedosUI.notification.error({message: '未找到软件包'})
6
+ }
7
+ SteedosUI.Modal.confirm({
8
+ title: t('steedos_packages.disable.title'),
9
+ content: t('steedos_packages.disable.text') + ` ${record.name}?`,
10
+ okText: t('steedos_packages.disable.title'),
11
+ cancelText: t('Cancel'),
12
+ onOk: function(){
13
+ Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/disable'), {type: 'post', async: false, data: JSON.stringify({
14
+ module: record.name,
15
+ nodeID: window.$("#steedos_package_main_node").val()
16
+ }),
17
+ success: function(data){
18
+ if(data.status == 1){
19
+ SteedosUI.notification.error({message: data.msg});
20
+ return;
21
+ }
22
+ setTimeout(function(){
23
+ SteedosUI.notification.success({
24
+ message: t('steedos_packages.disable.toastr_success')
25
+ });
26
+ window.location.reload()
27
+ }, 1000 * 2)
28
+ },
29
+ error: function(XMLHttpRequest){
30
+ SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
31
+ }
32
+ })
33
+ }
34
+ });
35
+ })
36
+
37
+ },
38
+ disableVisible: function (object_name, record_id, permission, data) {
39
+ if(Steedos.settings.public.enable_saas){
40
+ return false;
41
+ }
42
+ const record = data?.record || {};
43
+ if(record.isUnmanaged){
44
+ return false
45
+ }
46
+ if (record.status === 'enable') {
47
+ return true;
48
+ }
49
+ return false
50
+ }
51
+ }
@@ -0,0 +1,4 @@
1
+ name: disable
2
+ is_enable: true
3
+ label: 停用
4
+ 'on': record
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ edit_npmrcVisible: function (object_name, record_id) {
3
+ if(Steedos.settings.public.enable_saas){
4
+ return false;
5
+ }
6
+ return Steedos.isSpaceAdmin();
7
+ }
8
+ }
@@ -0,0 +1,86 @@
1
+ name: edit_npmrc
2
+ amis_schema: |-
3
+ {
4
+ "type": "service",
5
+ "body": [
6
+ {
7
+ "type": "button",
8
+ "label": "${'CustomAction.steedos_packages.edit_npmrc' | t}",
9
+ "id": "u:edit_npmrc",
10
+ "editorState": "default",
11
+ "onEvent": {
12
+ "click": {
13
+ "weight": 0,
14
+ "actions": [
15
+ {
16
+ "actionType": "dialog",
17
+ "dialog": {
18
+ "type": "dialog",
19
+ "title": "${'CustomAction.steedos_packages.edit_npmrc' | t}",
20
+ "body": [
21
+ {
22
+ "type": "form",
23
+ "title": "表单",
24
+ "body": [
25
+ {
26
+ "type": "editor",
27
+ "label": false,
28
+ "name": "npmrc",
29
+ "id": "u:71b44f532def",
30
+ "language": "bat"
31
+ }
32
+ ],
33
+ "id": "u:c9b0e17d4ebd",
34
+ "initApi": {
35
+ "url": "/api/nodes/npmrc",
36
+ "method": "get"
37
+ },
38
+ "api": {
39
+ "url": "/api/nodes/npmrc",
40
+ "method": "post",
41
+ "requestAdaptor": "",
42
+ "adaptor": "",
43
+ "messages": {}
44
+ }
45
+ },
46
+ {
47
+ "type": "tpl",
48
+ "tpl": "<br/>"
49
+ },
50
+ {
51
+ "type": "markdown",
52
+ "value": "${'steedos_packages_button_edit_npmrc_dialog_describe' | t}"
53
+ }
54
+ ],
55
+ "showCloseButton": true,
56
+ "showErrorMsg": true,
57
+ "showLoading": true,
58
+ "className": "app-popover",
59
+ "id": "u:00682dd0eb74",
60
+ "closeOnEsc": false,
61
+ "size": "lg"
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ }
68
+ ],
69
+ "regions": [
70
+ "body"
71
+ ],
72
+ "data": {
73
+ "context": {},
74
+ "dataComponentId": "",
75
+ "record_id": "",
76
+ "record": {},
77
+ "permissions": {}
78
+ },
79
+ "bodyClassName": "p-0",
80
+ "id": "u:743d34f49376"
81
+ }
82
+ is_enable: true
83
+ label: 验证信息
84
+ 'on': list
85
+ type: amis_button
86
+ visible: true
@@ -0,0 +1,58 @@
1
+ /*
2
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
3
+ * @Date: 2025-07-07 16:57:38
4
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
5
+ * @LastEditTime: 2025-09-01 17:04:07
6
+ */
7
+ module.exports = {
8
+ enable: function (object_name, record_id) {
9
+ Steedos.sobject(object_name).retrieve(record_id).then((record)=>{
10
+ if(!record){
11
+ return SteedosUI.notification.error({message: '未找到软件包'})
12
+ }
13
+ console.log('record.....',record)
14
+
15
+ SteedosUI.Modal.confirm({
16
+ title: t('steedos_packages.enable.title'),
17
+ content: t('steedos_packages.enable.text') + ` ${record.name}?`,
18
+ okText: t('steedos_packages.enable.title'),
19
+ cancelText: t('Cancel'),
20
+ onOk: function(){
21
+ Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/enable'), {type: 'post', async: false, data: JSON.stringify({
22
+ module: record.name,
23
+ nodeID: window.$("#steedos_package_main_node").val()
24
+ }),
25
+ success: function(data){
26
+ if(data.status == 1){
27
+ SteedosUI.notification.error({message: data.msg});
28
+ return;
29
+ }
30
+ setTimeout(function(){
31
+ SteedosUI.notification.success({
32
+ message: t('steedos_packages.enable.toastr_success')
33
+ });
34
+ window.location.reload()
35
+ }, 1000 * 2)
36
+ },
37
+ error: function(XMLHttpRequest){
38
+ SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
39
+ }
40
+ })
41
+ }
42
+ });
43
+ })
44
+ },
45
+ enableVisible: function (object_name,record_id, permission, data) {
46
+ if(Steedos.settings.public.enable_saas){
47
+ return false;
48
+ }
49
+ const record = data?.record || {};
50
+ if(record.isUnmanaged){
51
+ return false
52
+ }
53
+ if(record.status !== 'enable'){
54
+ return true;
55
+ }
56
+ return false
57
+ }
58
+ }
@@ -0,0 +1,4 @@
1
+ name: enable
2
+ is_enable: true
3
+ label: 启用
4
+ 'on': record
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ installPackageFromUrlVisible: function (object_name, record_id) {
3
+ if(Steedos.settings.public.enable_saas){
4
+ return false;
5
+ }
6
+ return Steedos.isSpaceAdmin();
7
+ }
8
+ }