mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-10-07 16:00:26 +00:00
feat: Support remote synchronization of script library scripts (#8371)
This commit is contained in:
@@ -63,6 +63,9 @@ export const searchScript = (params: SearchWithPage) => {
|
||||
export const addScript = (params: Cronjob.ScriptOperate) => {
|
||||
return http.post(`/core/script`, params);
|
||||
};
|
||||
export const syncScript = () => {
|
||||
return http.post(`/core/script/sync`, {}, TimeoutEnum.T_60S);
|
||||
};
|
||||
export const editScript = (params: Cronjob.ScriptOperate) => {
|
||||
return http.post(`/core/script/update`, params);
|
||||
};
|
||||
|
||||
@@ -36,6 +36,7 @@ const message = {
|
||||
view: 'View',
|
||||
watch: 'Watch',
|
||||
handle: 'Handle',
|
||||
clone: 'Clone',
|
||||
expand: 'Expand',
|
||||
collapse: 'Collapse',
|
||||
log: 'Log',
|
||||
@@ -1047,6 +1048,7 @@ const message = {
|
||||
'Set different groups based on script characteristics, which allows for faster script filtering operations.',
|
||||
handleHelper: 'Execute script {1} on {0}, continue?',
|
||||
noSuchApp: 'The {0} service was not detected. Please install it quickly using the script library first!',
|
||||
syncHelper: 'About to sync system script library. This operation only affects system scripts. Continue?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -34,6 +34,7 @@ const message = {
|
||||
view: 'ビュー',
|
||||
watch: '時計',
|
||||
handle: 'トリガー',
|
||||
clone: 'クローン',
|
||||
expand: '拡大する',
|
||||
collapse: '崩壊',
|
||||
log: 'ログ',
|
||||
@@ -1007,6 +1008,8 @@ const message = {
|
||||
handleHelper: '{0} で {1} スクリプトを実行します。続行しますか?',
|
||||
noSuchApp:
|
||||
'{0} サービスが検出されませんでした。スクリプトライブラリを使って素早くインストールしてください!',
|
||||
syncHelper:
|
||||
'システムスクリプトライブラリを同期します。この操作はシステムスクリプトのみ影響します。続行しますか?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -34,6 +34,7 @@ const message = {
|
||||
view: '보기',
|
||||
watch: '감시',
|
||||
handle: '트리거',
|
||||
clone: '복제',
|
||||
expand: '확장',
|
||||
collapse: '축소',
|
||||
log: '로그',
|
||||
@@ -1000,6 +1001,8 @@ const message = {
|
||||
'스크립트 특성에 따라 다양한 그룹을 설정하여 스크립트 필터링 작업을 더 빠르게 수행할 수 있습니다.',
|
||||
handleHelper: '{0} 에서 {1} 스크립트를 실행합니다. 계속하시겠습니까?',
|
||||
noSuchApp: '{0} 서비스가 감지되지 않았습니다. 스크립트 라이브러리를 사용하여 먼저 빠르게 설치하세요!',
|
||||
syncHelper:
|
||||
'시스템 스크립트 라이브러리를 동기화합니다. 이 작업은 시스템 스크립트에만 적용됩니다. 계속하시겠습니까?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -34,6 +34,7 @@ const message = {
|
||||
view: 'Lihat',
|
||||
watch: 'Pantau',
|
||||
handle: 'Picu',
|
||||
clone: 'Klon',
|
||||
expand: 'Kembang',
|
||||
collapse: 'Runtuh',
|
||||
log: 'Log',
|
||||
@@ -1037,6 +1038,7 @@ const message = {
|
||||
handleHelper: 'Akan melaksanakan skrip {1} pada {0}, teruskan?',
|
||||
noSuchApp:
|
||||
'Perkhidmatan {0} tidak dikesan. Sila pasang dengan cepat menggunakan pustaka skrip terlebih dahulu!',
|
||||
syncHelper: 'Akan menyelaraskan pustaka skrip sistem. Operasi ini hanya melibatkan skrip sistem. Teruskan?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -34,6 +34,7 @@ const message = {
|
||||
view: 'Visualizar',
|
||||
watch: 'Monitorar',
|
||||
handle: 'Disparar',
|
||||
clone: 'Clonar',
|
||||
expand: 'Expandir',
|
||||
collapse: 'Recolher',
|
||||
log: 'Logs',
|
||||
@@ -1026,6 +1027,8 @@ const message = {
|
||||
handleHelper: 'Executar o script {1} em {0}, continuar?',
|
||||
noSuchApp:
|
||||
'O serviço {0} não foi detectado. Por favor, instale-o rapidamente usando a biblioteca de scripts primeiro!',
|
||||
syncHelper:
|
||||
'Preparando para sincronizar a biblioteca de scripts do sistema. Esta operação afeta apenas scripts do sistema. Continuar?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -35,6 +35,7 @@ const message = {
|
||||
watch: 'Наблюдать',
|
||||
handle: 'Запустить',
|
||||
expand: 'Развернуть',
|
||||
clone: 'Клонировать',
|
||||
collapse: 'Свернуть',
|
||||
log: 'Логи',
|
||||
back: 'Назад',
|
||||
@@ -1032,6 +1033,8 @@ const message = {
|
||||
handleHelper: 'Выполнить сценарий {1} на {0}, продолжить?',
|
||||
noSuchApp:
|
||||
'Служба {0} не обнаружена. Пожалуйста, сначала быстро установите её, используя библиотеку скриптов!',
|
||||
syncHelper:
|
||||
'Выполнить синхронизацию библиотеки системных скриптов? Это действие затрагивает только системные скрипты. Продолжить?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -36,6 +36,7 @@ const message = {
|
||||
view: '詳情',
|
||||
watch: '追蹤',
|
||||
handle: '執行',
|
||||
clone: '克隆',
|
||||
expand: '展開',
|
||||
collapse: '收起',
|
||||
log: '日誌',
|
||||
@@ -994,6 +995,7 @@ const message = {
|
||||
groupHelper: '根據腳本特徵設置不同的分組,可以更快地對腳本進行篩選操作。',
|
||||
handleHelper: '將在 {0} 上執行 {1} 腳本,是否繼續?',
|
||||
noSuchApp: '未檢測到 {0} 服務,請先使用腳本庫快速安裝!',
|
||||
syncHelper: '即將同步系統腳本庫,該操作僅針對系統腳本,是否繼續?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -36,6 +36,7 @@ const message = {
|
||||
view: '详情',
|
||||
watch: '追踪',
|
||||
handle: '执行',
|
||||
clone: '克隆',
|
||||
expand: '展开',
|
||||
collapse: '收起',
|
||||
log: '日志',
|
||||
@@ -992,6 +993,7 @@ const message = {
|
||||
groupHelper: '针对脚本特征设置不同的分组,可以更加快速的对脚本进行筛选操作。',
|
||||
handleHelper: '将在 {0} 上执行 {1} 脚本,是否继续?',
|
||||
noSuchApp: '未检测到 {0} 服务,请先使用脚本库安装脚本快速安装!',
|
||||
syncHelper: '即将同步系统脚本库,该操作仅针对系统脚本,是否继续?',
|
||||
},
|
||||
},
|
||||
monitor: {
|
||||
|
||||
@@ -84,6 +84,19 @@ export function loadUpTime(uptime: number) {
|
||||
return seconds + i18n.global.t('commons.units.second');
|
||||
}
|
||||
|
||||
// 20250310
|
||||
export function getCurrentDateFormatted() {
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(now.getDate()).padStart(2, '0');
|
||||
const hours = String(now.getHours()).padStart(2, '0');
|
||||
const minutes = String(now.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(now.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}${month}${day}${hours}${minutes}${seconds}`;
|
||||
}
|
||||
|
||||
export function dateFormat(row: any, col: any, dataStr: any) {
|
||||
const date = new Date(dataStr);
|
||||
const y = date.getFullYear();
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
<el-button type="primary" @click="onOpenDialog('create')">
|
||||
{{ $t('commons.button.add') }}
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="onSync()">
|
||||
{{ $t('commons.button.sync') }}
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="onOpenGroupDialog()">
|
||||
{{ $t('commons.table.group') }}
|
||||
</el-button>
|
||||
@@ -83,11 +86,11 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormat } from '@/utils/util';
|
||||
import { dateFormat, deepCopy, getCurrentDateFormatted } from '@/utils/util';
|
||||
import GroupDialog from '@/components/group/index.vue';
|
||||
import OperateDialog from '@/views/cronjob/library/operate/index.vue';
|
||||
import TerminalDialog from '@/views/cronjob/library/run/index.vue';
|
||||
import { deleteScript, searchScript } from '@/api/modules/cronjob';
|
||||
import { deleteScript, searchScript, syncScript } from '@/api/modules/cronjob';
|
||||
import { onMounted, reactive, ref } from '@vue/runtime-core';
|
||||
import { Cronjob } from '@/api/interface/cronjob';
|
||||
import i18n from '@/lang';
|
||||
@@ -170,6 +173,24 @@ const onDelete = async (row: Cronjob.ScriptInfo | null) => {
|
||||
});
|
||||
};
|
||||
|
||||
const onSync = async () => {
|
||||
ElMessageBox.confirm(i18n.global.t('cronjob.library.syncHelper', i18n.global.t('commons.button.sync')), {
|
||||
confirmButtonText: i18n.global.t('commons.button.confirm'),
|
||||
cancelButtonText: i18n.global.t('commons.button.cancel'),
|
||||
type: 'info',
|
||||
}).then(async () => {
|
||||
loading.value = true;
|
||||
await syncScript()
|
||||
.then(() => {
|
||||
loading.value = false;
|
||||
search();
|
||||
})
|
||||
.catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const search = async () => {
|
||||
let params = {
|
||||
info: searchInfo.value,
|
||||
@@ -214,6 +235,18 @@ const buttons = [
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
label: i18n.global.t('commons.button.clone'),
|
||||
disabled: (row: any) => {
|
||||
return !row.isSystem;
|
||||
},
|
||||
click: (row: Cronjob.ScriptInfo) => {
|
||||
let item = deepCopy(row) as Cronjob.ScriptInfo;
|
||||
item.id = 0;
|
||||
item.name += '-' + getCurrentDateFormatted();
|
||||
onOpenDialog('create', item);
|
||||
},
|
||||
},
|
||||
{
|
||||
label: i18n.global.t('commons.button.edit'),
|
||||
disabled: (row: any) => {
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="$t('setting.apiInterface')" prop="apiInterface">
|
||||
<el-form-item :label="$t('setting.apiInterface')" prop="apiInterface" v-if="isMaster">
|
||||
<el-switch
|
||||
@change="onChangeApiInterfaceStatus"
|
||||
v-model="form.apiInterfaceStatus"
|
||||
|
||||
Reference in New Issue
Block a user