@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.
- package/main/default/manager/loader.js +6 -8
- package/main/default/manager/packages.js +4 -2
- package/main/default/manager/registry.js +8 -1
- package/main/default/objectTranslations/steedos_packages.en/steedos_packages.en.objectTranslation.yml +19 -1
- package/main/default/objectTranslations/steedos_packages.zh-CN/steedos_packages.zh-CN.objectTranslation.yml +23 -0
- package/main/default/objects/steedos_packages/buttons/disable.button.js +51 -0
- package/main/default/objects/steedos_packages/buttons/disable.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.js +8 -0
- package/main/default/objects/steedos_packages/buttons/edit_npmrc.button.yml +86 -0
- package/main/default/objects/steedos_packages/buttons/enable.button.js +58 -0
- package/main/default/objects/steedos_packages/buttons/enable.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.js +8 -0
- package/main/default/objects/steedos_packages/buttons/installPackageFromUrl.button.yml +138 -0
- package/main/default/objects/steedos_packages/buttons/reload.button.js +34 -0
- package/main/default/objects/steedos_packages/buttons/reload.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/uninstall.button.js +63 -0
- package/main/default/objects/steedos_packages/buttons/uninstall.button.yml +4 -0
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.js +22 -0
- package/main/default/objects/steedos_packages/buttons/upgradePackage.button.yml +147 -0
- package/main/default/objects/steedos_packages/fields/isUnmanaged.field.yml +4 -0
- package/main/default/objects/steedos_packages/listviews/all.listview.yml +1 -0
- package/main/default/pages/steedos_package_detail.page.amis.json +4 -33
- package/main/default/pages/steedos_packages_list.page.amis.json +3 -9
- package/main/default/routes/nodes.router.js +292 -0
- package/main/default/routes/registry.router.js +21 -0
- package/main/default/triggers/steedos_packages.trigger.js +7 -13
- package/package.json +6 -7
- package/package.service.js +3 -2
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,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,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,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
|
+
}
|