@steedos/service-package-registry 2.7.27-beta.6 → 3.0.0-beta.100

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 +6 -8
  2. package/main/default/manager/packages.js +4 -2
  3. package/main/default/manager/registry.js +8 -1
  4. package/main/default/objectTranslations/steedos_packages.en/steedos_packages.en.objectTranslation.yml +19 -1
  5. package/main/default/objectTranslations/steedos_packages.zh-CN/steedos_packages.zh-CN.objectTranslation.yml +23 -0
  6. package/main/default/objects/steedos_packages/buttons/disable.button.js +51 -0
  7. package/main/default/objects/steedos_packages/buttons/disable.button.yml +4 -0
  8. package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.js +8 -0
  9. package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.yml +86 -0
  10. package/main/default/objects/steedos_packages/buttons/enable.button.js +58 -0
  11. package/main/default/objects/steedos_packages/buttons/enable.button.yml +4 -0
  12. package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.js +8 -0
  13. package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.yml +138 -0
  14. package/main/default/objects/steedos_packages/buttons/reload.button.js +34 -0
  15. package/main/default/objects/steedos_packages/buttons/reload.button.yml +4 -0
  16. package/main/default/objects/steedos_packages/buttons/uninstall.button.js +63 -0
  17. package/main/default/objects/steedos_packages/buttons/uninstall.button.yml +4 -0
  18. package/main/default/objects/steedos_packages/buttons/upgradePackage.button.js +22 -0
  19. package/main/default/objects/steedos_packages/buttons/upgradePackage.button.yml +147 -0
  20. package/main/default/objects/steedos_packages/fields/isUnmanaged.field.yml +4 -0
  21. package/main/default/objects/steedos_packages/listviews/all.listview.yml +1 -0
  22. package/main/default/pages/steedos_package_detail.page.amis.json +4 -33
  23. package/main/default/pages/steedos_packages_list.page.amis.json +3 -9
  24. package/main/default/routes/nodes.router.js +292 -0
  25. package/main/default/routes/registry.router.js +21 -0
  26. package/main/default/triggers/steedos_packages.trigger.js +7 -13
  27. package/package.json +6 -7
  28. package/package.service.js +3 -2
  29. package/project.package.service.js +80 -44
@@ -1,6 +1,5 @@
1
1
  const yaml = require('js-yaml');
2
2
  const _ = require('lodash');
3
- const steedos = require('@steedos/core');
4
3
  const fs = require("fs");
5
4
  const path = require('path');
6
5
  const objectql = require('@steedos/objectql');
@@ -101,7 +100,6 @@ const appendToPackagesConfig = (packageName, options, actionName)=>{
101
100
 
102
101
  const loadPackages = async ()=>{
103
102
  let schema = objectql.getSteedosSchema();
104
- let broker = schema.broker;
105
103
  const packages = loadPackagesConfig();
106
104
  for (const packageName in packages) {
107
105
  const package = packages[packageName]
@@ -116,7 +114,7 @@ const loadPackages = async ()=>{
116
114
  }
117
115
  }
118
116
  } catch (error) {
119
- broker.logger.error(`start package ${packageName} error: ${error.message}`)
117
+ console.error(`start package ${packageName} error[117]: ${error.message}`)
120
118
  }
121
119
 
122
120
  }else if(package.local !== true){
@@ -134,7 +132,7 @@ const loadPackages = async ()=>{
134
132
  const packageInfo = await loadPackage(packageName);
135
133
  appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: false});
136
134
  } catch (error) {
137
- broker.logger.error(`start package ${packageName} error: ${error.message}`)
135
+ console.error(`start package ${packageName} error[135]: ${error.message}`)
138
136
  }
139
137
  }
140
138
  }else if(package.local === true && package.static != true){
@@ -149,7 +147,7 @@ const loadPackages = async ()=>{
149
147
  appendToPackagesConfig(packageInfo.name, {version: packageInfo.version, description: packageInfo.description, local: true});
150
148
  }
151
149
  } catch (error) {
152
- broker.logger.error(`start package ${packageName} error: ${error.message}`)
150
+ console.error(`start package ${packageName} error[150]: ${error.message}`)
153
151
  }
154
152
  }
155
153
  }
@@ -183,7 +181,7 @@ const destroyExistThePackageService = async (packageInfo)=>{
183
181
  });
184
182
  }
185
183
  if (svc) {
186
- broker.logger.info(`Destroy previous '${schema.name}' service...`);
184
+ console.info(`Destroy previous '${schema.name}' service...`);
187
185
  await broker.destroyService(svc);
188
186
  }
189
187
  }
@@ -249,7 +247,7 @@ const loadPackage = async (packageName, packagePath)=>{
249
247
  let schema = objectql.getSteedosSchema();
250
248
  let broker = schema.broker;
251
249
  if(!fs.existsSync(packagePath) || !fs.existsSync(path.join(packagePath, 'package.json'))){
252
- broker.logger.warn(`已经从 steedos-packages.yml 文件中删除无效的软件包配置 ${packageName} : ${packagePath}`)
250
+ console.warn(`已经从 steedos-packages.yml 文件中删除无效的软件包配置 ${packageName} : ${packagePath}`)
253
251
  removePackageConfig(packageName);
254
252
  return ;
255
253
  }
@@ -264,7 +262,7 @@ const loadPackage = async (packageName, packagePath)=>{
264
262
  }
265
263
 
266
264
  await destroyExistThePackageService(packageInfo);
267
- await steedos.loadPackage(packagePath);
265
+ await metaDataCore.loadPackage(packagePath);
268
266
  // const packageConfig = getPackageConfig(packageName);
269
267
  // if(packageInfo.dependencies){
270
268
  // for (const dependencyName in packageInfo.dependencies) {
@@ -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,
@@ -282,10 +282,17 @@ async function yarnAddPackage(yarnPackage){
282
282
  paths: [path.join(installDir, 'node_modules')]
283
283
  }))
284
284
  if(fs.existsSync(path.join(packagePath, 'package.service.js'))){
285
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, no-undef
286
+ const schema = require(path.join(packagePath, 'package.service.js'));
287
+ schema.settings.packageInfo = {
288
+ ...schema.settings?.packageInfo,
289
+ ...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {}),
290
+ }
285
291
  steedosPackages.push({
286
292
  name: parsed.name,
287
293
  version: parsed.rawSpec,
288
- path: packagePath
294
+ path: packagePath,
295
+ isUnmanaged: schema.settings.packageInfo.isUnmanaged
289
296
  })
290
297
  }
291
298
  })
@@ -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: Verification information
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: "##### Verification Information Description (.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
+ }
@@ -0,0 +1,138 @@
1
+ name: installPackageFromUrl
2
+ label: 手动安装软件包
3
+ 'on': list
4
+ #TODO: ${'steedos_packages.install.initialization_failure' | t} ,${'steedos_packages.install.installation_success' | t},${'steedos_packages.install.installation_failure' | t},等待amis合并分支,可用该代码,用于form组件的message属性
5
+ amis_schema: |-
6
+ {
7
+ "type": "service",
8
+ "body": [
9
+ {
10
+ "type": "button",
11
+ "label": "${'steedos_packages.install.install_package_from_url' | t}",
12
+ "id": "u:install_package_from_url",
13
+ "onEvent": {
14
+ "click": {
15
+ "actions": [
16
+ {
17
+ "actionType": "dialog",
18
+ "dialog": {
19
+ "type": "dialog",
20
+ "title": "${'steedos_packages.install.install_package_from_url' | t}",
21
+ "data": {
22
+ "registryOptions": [
23
+ {
24
+ "label": "${'steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_taobao' | t}",
25
+ "value": "https://registry.npmmirror.com"
26
+ },
27
+ {
28
+ "label": "${'steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_cnpm' | t}",
29
+ "value": "https://r.cnpmjs.org"
30
+ },
31
+ {
32
+ "label": "${'steedos_packages_button_installPackageFromUrl_dialog_field_registry_option_npmjs' | t}",
33
+ "value": "https://registry.npmjs.org"
34
+ }
35
+ ]
36
+ },
37
+ "body": [
38
+ {
39
+ "type": "form",
40
+ "id": "u:add9d810b386",
41
+ "title": "",
42
+ "body": [
43
+ {
44
+ "label": "${'steedos_packages.install.package_name' | t}",
45
+ "type": "input-text",
46
+ "name": "package",
47
+ "id": "u:524cb8f8d888",
48
+ "required": true
49
+ },
50
+ {
51
+ "label": "${'steedos_packages_button_installPackageFromUrl_dialog_field_registry' | t}",
52
+ "type": "input-text",
53
+ "name": "registry",
54
+ "id": "u:524cb8f8d666",
55
+ "required": false,
56
+ "source": "${registryOptions}"
57
+ }
58
+ ],
59
+ "mode": "normal",
60
+ "api": {
61
+ "method": "post",
62
+ "url": "${context.rootUrl}/api/nodes/package/add",
63
+ "data": {
64
+ "&": "$$"
65
+ },
66
+ "dataType": "json",
67
+ "requestAdaptor": "api.data = {package: api.body.registry ? `${api.body.package} --registry ${api.body.registry}` : api.body.package};",
68
+ "headers": {
69
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
70
+ }
71
+ },
72
+ "messages": {
73
+ "fetchFailed": "Initialization failed",
74
+ "saveSuccess": "Installation successful",
75
+ "saveFailed": "Installation failed"
76
+ },
77
+ "onEvent": {
78
+ "submitSucc": {
79
+ "weight": 0,
80
+ "actions": [
81
+ {
82
+ "actionType": "wait",
83
+ "args": {
84
+ "time": 3000
85
+ }
86
+ },
87
+ {
88
+ "actionType": "broadcast",
89
+ "args": {
90
+ "eventName": "@data.changed.steedos_packages"
91
+ },
92
+ "data": {
93
+ "objectName": "steedos_packages",
94
+ "recordId": "install"
95
+ }
96
+ }
97
+ ]
98
+ }
99
+ }
100
+ },
101
+ {
102
+ "type": "tpl",
103
+ "tpl": "<br/>"
104
+ },
105
+ {
106
+ "type": "markdown",
107
+ "value": "${'steedos_packages_button_installPackageFromUrl_dialog_describe1' | t}"
108
+ },
109
+ {
110
+ "type": "markdown",
111
+ "value": "${'steedos_packages_button_installPackageFromUrl_dialog_describe2' | t}"
112
+ }
113
+ ],
114
+ "id": "u:efa30bace722",
115
+ "closeOnEsc": true,
116
+ "closeOnOutside": false,
117
+ "showCloseButton": true,
118
+ "size": "lg"
119
+ }
120
+ }
121
+ ],
122
+ "weight": 0
123
+ }
124
+ }
125
+ }
126
+ ],
127
+ "regions": [
128
+ "body"
129
+ ],
130
+ "data": {
131
+
132
+ },
133
+ "bodyClassName": "p-0",
134
+ "id": "u:43363bc48c62"
135
+ }
136
+ is_enable: true
137
+ type: amis_button
138
+ visible: true
@@ -0,0 +1,34 @@
1
+ module.exports = {
2
+ reload: function (object_name, record_id, permission, data) {
3
+ SteedosUI.notification.info({message: t('steedos_packages.reload.toastr_info')})
4
+ const record = data?.record || {};
5
+ //TODO nodeID
6
+ Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/reload'), {type: 'post', async: false, data: JSON.stringify({
7
+ module: record.name,
8
+ nodeID: record.node_id
9
+ }),
10
+ success: function(){
11
+ setTimeout(function(){
12
+ SteedosUI.notification.success({message: t('steedos_packages.reload.toastr_success')})
13
+ window.location.reload()
14
+ }, 1000 * 5)
15
+ },
16
+ error: function(XMLHttpRequest){
17
+ SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.error})
18
+ }
19
+ })
20
+ },
21
+ reloadVisible: function (object_name,record_id, permission, data) {
22
+ if(Steedos.settings.public.enable_saas){
23
+ return false;
24
+ }
25
+ const record = data?.record;
26
+ if(record.isUnmanaged){
27
+ return false
28
+ }
29
+ if(record.status === 'enable'){
30
+ return true;
31
+ }
32
+ return false
33
+ }
34
+ }
@@ -0,0 +1,4 @@
1
+ name: reload
2
+ is_enable: true
3
+ label: 重新加载
4
+ 'on': record
@@ -0,0 +1,63 @@
1
+ /*
2
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
3
+ * @Date: 2025-07-07 16:57:38
4
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
5
+ * @LastEditTime: 2025-09-02 14:13:23
6
+ */
7
+ module.exports = {
8
+ uninstall: 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
+
14
+ SteedosUI.Modal.confirm({
15
+ title: t('steedos_packages.uninstall.text') + ` ${record.name}?` ,
16
+ content: t('steedos_packages.uninstall.content'),
17
+ okText: t('steedos_packages.uninstall.title'),
18
+ cancelText: t('Cancel'),
19
+ width: 480,
20
+ onOk: function(){
21
+ return new Promise((resolve, reject) => {
22
+ Steedos.authRequest(Steedos.absoluteUrl('/api/nodes/uninstall'), {type: 'post', async: false, data: JSON.stringify({
23
+ module: record.name,
24
+ nodeID: window.$("#steedos_package_main_node").val()
25
+ }),
26
+ success: function(data){
27
+ if(data.status == 1){
28
+ SteedosUI.notification.error({message: data.msg});
29
+ resolve(data);
30
+ return;
31
+ }
32
+ setTimeout(function(){
33
+ SteedosUI.notification.success({
34
+ message: t('steedos_packages.uninstall.toastr_success')
35
+ });
36
+ resolve(data);
37
+ navigate("/app/admin/steedos_packages")
38
+ }, 1000 * 2)
39
+ },
40
+ error: function(XMLHttpRequest){
41
+ SteedosUI.notification.error({message: XMLHttpRequest.responseJSON.msg});
42
+ reject()
43
+ }
44
+ })
45
+ })
46
+ }
47
+ });
48
+ })
49
+ },
50
+ uninstallVisible: function (object_name,record_id, permission, data) {
51
+ if(Steedos.settings.public.enable_saas){
52
+ return false;
53
+ }
54
+ const record = data?.record;
55
+ if(record.local || record.static){
56
+ return false;
57
+ }
58
+ if(record.status){
59
+ return true;
60
+ }
61
+ return false
62
+ }
63
+ }
@@ -0,0 +1,4 @@
1
+ name: uninstall
2
+ is_enable: true
3
+ label: 卸载
4
+ 'on': record