1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-03-14 01:34:47 +08:00

fix: Modify the license promp (#8134)

This commit is contained in:
ssongliu 2025-03-12 17:43:50 +08:00 committed by GitHub
parent fa8f90c493
commit 6ba44a239d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 36 additions and 36 deletions

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "Request timeout, network connection might be unstable, please
ErrUnbindMaster: "Detected nodes in node management, unable to unbind the current license, please remove nodes first and retry!"
ErrFreeNodeLimit: "Community version node limit reached, please go to www.lxware.cn/1panel to purchase and retry!"
ErrNodeBound: "This license is bound to another node, please check and retry!"
ErrNodeBoundDelete: "This license is bound and does not support delete operations. Please check and try again!"
ErrNodeBoundLimit: "The current free node has reached its limit, please check and try again!"
ErrNoSuchNode: "Node information not found, please check and retry!"
ErrNodeUnbind: "This node is not within the license binding range, please check and retry!"

View File

@ -58,6 +58,7 @@ ErrXpackTimeout: "リクエストタイムアウト、ネットワーク接続
ErrUnbindMaster: "ノード管理にノードが存在するため、現在のライセンスを解除できません。ノードを削除してから再試行してください!"
ErrFreeNodeLimit: "コミュニティ版のード数が無料上限に達しました、www.lxware.cn/1panel で購入して再試行してください!"
ErrNodeBound: "このライセンスは他のノードにバインドされています、確認して再試行してください!"
ErrNodeBoundDelete: "このライセンスはバインドされており、削除操作はサポートされていません。確認して再試行してください!"
ErrNodeBoundLimit: "現在の無料ノードは上限に達しました。確認して再試行してください!"
ErrNoSuchNode: "そのノード情報が見つかりませんでした、確認して再試行してください!"
ErrNodeUnbind: "そのノードはライセンスのバインド範囲内ではありません、確認して再試行してください!"

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "요청 시간 초과, 네트워크 연결이 불안정할 수
ErrUnbindMaster: "노드 관리 내에 노드가 존재함을 감지하였습니다. 현재 라이선스를 해제할 수 없습니다. 먼저 제거 후 다시 시도해 주세요!"
ErrFreeNodeLimit: "커뮤니티 에디션 노드 수가 무료 한도에 도달하였습니다. www.lxware.cn/1panel 에서 구매 후 다시 시도해 주세요!"
ErrNodeBound: "이 라이선스는 다른 노드에 바인딩되어 있습니다. 다시 확인하고 시도해 주세요!"
ErrNodeBoundDelete: "이 라이센스는 바인딩되어 있으며 삭제 작업을 지원하지 않습니다. 확인 후 다시 시도해 주세요!"
ErrNodeBoundLimit: "현재 무료 노드가 한도에 도달했습니다. 확인 후 다시 시도해 주세요!"
ErrNoSuchNode: "노드 정보를 찾을 수 없습니다. 다시 확인하고 시도해 주세요!"
ErrNodeUnbind: "이 노드가 라이선스 바인딩 범위에 있지 않음을 감지하였습니다. 다시 확인하고 시도해 주세요!"

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "Permintaan tamat masa, sambungan rangkaian mungkin tidak stabi
ErrUnbindMaster: "Terdapat nod dalam pengurusan nod, sila keluarkan dahulu dan cuba lagi!"
ErrFreeNodeLimit: "Jumlah nod versi komuniti telah mencapai had percuma, sila lawati www.lxware.cn/1panel untuk pembelian!"
ErrNodeBound: "Lesen ini telah diikat dengan nod lain, sila semak dan cuba lagi!"
ErrNodeBoundDelete: "Lisensi ini telah diikat dan tidak menyokong operasi penghapusan. Sila semak dan cuba lagi!"
ErrNodeBoundLimit: "Nod percuma semasa telah mencapai had, sila semak dan cuba lagi!"
ErrNoSuchNode: "Maklumat nod tidak ditemui, sila semak dan cuba lagi!"
ErrNodeUnbind: "Nod di luar skop lesen dikesan, sila semak dan cuba lagi!"

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "Requisição expirou, a conexão de rede pode estar instável,
ErrUnbindMaster: "Foram encontrados nós na gestão de nós, remova-os primeiro e tente novamente!"
ErrFreeNodeLimit: "O número de nós da versão comunitária atingiu o limite gratuito, por favor acesse www.lxware.cn/1panel para comprar!"
ErrNodeBound: "Esta licença já está vinculada a outro nó, por favor verifique e tente novamente!"
ErrNodeBoundDelete: "Esta licença está vinculada e não suporta operações de exclusão. Por favor, verifique e tente novamente!"
ErrNodeBoundLimit: "O nó gratuito atual atingiu seu limite, por favor verifique e tente novamente!"
ErrNoSuchNode: "As informações deste nó não foram encontradas, por favor verifique e tente novamente!"
ErrNodeUnbind: "Nó fora do escopo da licença detectado, por favor verifique e tente novamente!"

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "Время ожидания запроса истекло, в
ErrUnbindMaster: "В управлении узлами обнаружены узлы, сначала удалите их и повторите попытку!"
ErrFreeNodeLimit: "Количество узлов в версии сообщества достигло бесплатного лимита, посетите www.lxware.cn/1panel для покупки!"
ErrNodeBound: "Эта лицензия уже связана с другим узлом, проверьте и повторите попытку!"
ErrNodeBoundDelete: "Эта лицензия привязана и не поддерживает операции удаления. Пожалуйста, проверьте и попробуйте снова!"
ErrNodeBoundLimit: "Текущий бесплатный узел достиг предела, пожалуйста, проверьте и попробуйте снова!"
ErrNoSuchNode: "Информация об узле не найдена, проверьте и повторите попытку!"
ErrNodeUnbind: "Обнаружен узел вне области действия лицензии, проверьте и повторите попытку!"

View File

@ -57,6 +57,7 @@ ErrXpackTimeout: "請求超時,網絡連接可能不穩定,請稍後再試
ErrUnbindMaster: "檢測到節點管理內存在節點,無法解綁當前許可證,請先移除後重試!"
ErrFreeNodeLimit: "社區版節點數量已達免費上限,請前往 www.lxware.cn/1panel 購買後重試!"
ErrNodeBound: "該許可證已綁定到其他節點,請檢查後重試!"
ErrNodeBoundDelete: "該許可證已被綁定,不支持刪除操作,請檢查後重試!"
ErrNodeBoundLimit: "當前免費節點已達上限,請檢查後重試!"
ErrNoSuchNode: "未能找到該節點信息,請檢查後重試!"
ErrNodeUnbind: "檢測到該節點未在許可證綁定範圍內,請檢查後重試!"

View File

@ -54,9 +54,10 @@ ErrXpackOutOfDate: "当前许可证已过期,请重新在 面板设置-许可
ErrXpackLost: "许可证已达到最大重试次数,请进入【面板设置】【许可证】页面手动点击同步按钮,以确保专业版功能正常使用"
ErrDeviceLost: "许可证校验必要文件丢失,请检查后重试!"
ErrXpackTimeout: "请求超时,网络连接可能不稳定,请稍后再试!"
ErrUnbindMaster: "检测到节点管理内存在节点,无法解绑当前许可证,请先移除后重试!"
ErrUnbindMaster: "检测到节点管理内存在专业版节点,无法解绑当前许可证,请先移除或解绑后重试!"
ErrFreeNodeLimit: "社区版节点数量已达到免费上限,请前往 www.lxware.cn/1panel 购买后重试!"
ErrNodeBound: "该许可证已绑定到其他节点,请检查后重试!"
ErrNodeBoundDelete: "该许可证已被绑定,不支持删除操作,请检查后重试!"
ErrNodeBoundLimit: "当前免费节点已经达到上限,请检查后重试!"
ErrNoSuchNode: "未能找到该节点信息,请检查后重试!"
ErrNodeUnbind: "检测到该节点未在许可证绑定范围内,请检查后重试!"

View File

@ -3,6 +3,7 @@ import { deepCopy } from '@/utils/util';
import { Base64 } from 'js-base64';
import { ResPage, SearchWithPage, DescriptionUpdate, ReqPage } from '../interface';
import { Setting } from '../interface/setting';
import { TimeoutEnum } from '@/enums/http-enum';
// license
export const uploadLicense = (oldLicense: string, params: FormData) => {
@ -14,8 +15,8 @@ export const uploadLicense = (oldLicense: string, params: FormData) => {
export const searchLicense = (params: ReqPage) => {
return http.post<ResPage<Setting.License>>('/core/licenses/search', params);
};
export const deleteLicense = (id: number, force: boolean) => {
return http.post('/core/licenses/del', { id: id, force: force });
export const deleteLicense = (params: { ids: number }) => {
return http.post('/core/licenses/del', params);
};
export const getLicenseStatus = () => {
return http.get<Setting.LicenseStatus>(`/core/licenses/status`);
@ -27,10 +28,10 @@ export const syncLicense = (id: number) => {
return http.post(`/core/licenses/sync`, { id: id });
};
export const bindLicense = (id: number, nodeID: number) => {
return http.post(`/core/licenses/bind`, { nodeID: nodeID, licenseID: id });
return http.post(`/core/licenses/bind`, { nodeID: nodeID, licenseID: id }, TimeoutEnum.T_60S);
};
export const unbindLicense = (id: number) => {
return http.post(`/core/licenses/unbind`, { id: id });
return http.post(`/core/licenses/unbind`, { id: id }, TimeoutEnum.T_60S);
};
export const loadLicenseOptions = () => {
return http.get(`/core/licenses/options`);

View File

@ -1872,8 +1872,6 @@ const message = {
quickUpdate: 'Quick Update',
power: 'Authorization',
unbindHelper: 'Unbinding will clear all professional edition settings for this node. Do you wish to continue?',
unbindMasterHelper:
'There are currently other nodes besides the master node. The {0} operation is not supported. Please delete the nodes in the node management and try again.',
importLicense: 'Import License',
importHelper: 'Please click or drag the license file here',
levelUpPro: 'Upgrade to Professional Edition',
@ -3215,7 +3213,7 @@ const message = {
checkStatus: 'Check Node Service Availability',
fixStatus: 'Investigate Node Logs',
checkAPI: 'Check Node API Availability',
fixAPI: 'Check if the request address in the information is correct; if incorrect, modify the main node information',
fixAPI: 'Check the node logs and verify if the firewall ports are properly opened.',
forceDelete: 'Force Delete',
operateHelper: 'The following nodes will undergo {0} operation, do you want to continue?',
forceDeleteHelper: 'Force delete will ignore node deletion errors and delete database metadata',

View File

@ -3025,7 +3025,7 @@ const message = {
checkStatus: 'ノードサービスの可用性を確認',
fixStatus: 'ノードログを調査',
checkAPI: 'ードAPIの可用性を確認',
fixAPI: '情報内のリクエストアドレスが正しいか確認し誤っている場合は主ノード情報を修正',
fixAPI: 'ノードのログを確認しファイアウォールのポートが正常に開放されているか確認します',
forceDelete: '強制削除',
operateHelper: '以下のノードに{0}操作を行います続行しますか',
forceDeleteHelper: '強制削除はノード削除エラーを無視しデータベースメタデータを削除します',

View File

@ -2975,7 +2975,7 @@ const message = {
checkStatus: '노드 서비스 가용성 확인',
fixStatus: '노드 로그 조사',
checkAPI: '노드 API 가용성 확인',
fixAPI: '정보 요청 주소가 올바른지 확인하고, 잘못된 경우 노드 정보를 수정해야 합니다',
fixAPI: '노드 로그를 확인하고 방화벽 포트가 정상적으로 열려 있는지 확인합니다.',
forceDelete: '강제 삭제',
operateHelper: '다음 노드에 대해 {0} 작업을 수행합니다. 계속하시겠습니까?',
forceDeleteHelper: '강제 삭제는 노드 삭제 오류를 무시하고 데이터베이스 메타데이터를 삭제합니다',

View File

@ -3094,7 +3094,7 @@ const message = {
checkStatus: 'Periksa Ketersediaan Perkhidmatan Nod',
fixStatus: 'Siasat Log Nod',
checkAPI: 'Periksa Ketersediaan API Nod',
fixAPI: 'Periksa jika alamat permintaan dalam maklumat adalah betul; jika tidak betul, perlu mengubah maklumat nod utama',
fixAPI: 'Semak log nod dan periksa sama ada port firewall dibuka dengan betul.',
forceDelete: 'Hapus Secara Paksa',
operateHelper: 'Operasi {0} akan dilakukan pada nod berikut, adakah anda ingin meneruskan?',
forceDeleteHelper:

View File

@ -3098,7 +3098,7 @@ const message = {
checkStatus: 'Verificar Disponibilidade do Serviço do ',
fixStatus: 'Investigar Logs do ',
checkAPI: 'Verificar Disponibilidade da API do ',
fixAPI: 'Verifique se o endereço de solicitação nas informações está correto; se estiver incorreto, será necessário modificar as informações do principal',
fixAPI: 'Verifique os logs do e confirme se as portas do firewall estão devidamente abertas.',
forceDelete: 'Excluir Forçadamente',
operateHelper: 'A operação {0} será realizada nos seguintes nós, deseja continuar?',
forceDeleteHelper:

View File

@ -3088,7 +3088,7 @@ const message = {
checkStatus: 'Проверка доступности службы узла',
fixStatus: 'Проверка журналов узла',
checkAPI: 'Проверка доступности API узла',
fixAPI: 'Проверьте, правильный ли адрес запроса в информации; если он неправильный, необходимо изменить информацию о главном узле',
fixAPI: 'Проверьте журналы узла и убедитесь, что порты брандмауэра правильно открыты.',
forceDelete: 'Принудительное удаление',
operateHelper: 'Будет выполнена операция {0} для следующих узлов, вы хотите продолжить?',
forceDeleteHelper:

View File

@ -1737,7 +1737,6 @@ const message = {
quickUpdate: '快速更新',
power: '授權',
unbindHelper: '解除綁定後將清除該節點所有專業版相關設置是否繼續',
unbindMasterHelper: '當前已存在除主節點外其他節點不支持 {0} 操作請在節點管理中刪除節點後重試',
importLicense: '導入許可證',
importHelper: '請點擊或拖動許可文件到此處',
levelUpPro: '升級專業版',
@ -2978,7 +2977,7 @@ const message = {
checkStatus: '檢查節點服務可用性',
fixStatus: '排查節點日誌',
checkAPI: '檢查節點 API 可用性',
fixAPI: '檢查資訊中請求地址是否正確如不正確則需要修改主節點資訊',
fixAPI: '檢查節點日誌確認防火牆端口是否正常放行',
forceDelete: '強制刪除',
operateHelper: '將對以下節點執行 {0} 操作是否繼續',
forceDeleteHelper: '強制刪除將忽略節點刪除錯誤並刪除資料庫元資料',

View File

@ -1729,7 +1729,6 @@ const message = {
quickUpdate: '快速更新',
power: ' ',
unbindHelper: '解除绑定后将清除该节点所有专业版相关设置是否继续',
unbindMasterHelper: '当前已存在除主节点外其他节点不支持 {0} 操作请在节点管理中删除节点后重试',
importLicense: '导入许可证',
importHelper: '请点击或拖动许可文件到此处',
levelUpPro: '升级专业版',
@ -2959,7 +2958,7 @@ const message = {
checkStatus: '检查节点服务可用性',
fixStatus: '排查节点日志',
checkAPI: '检查节点 API 可用性',
fixAPI: '检查信息中请求地址是否正确不正确则需要修改主节点信息',
fixAPI: '排查节点日志检查防火墙端口是否正常放行',
forceDelete: '强制删除',
operateHelper: '将对以下节点进行 {0} 操作是否继续',
forceDeleteHelper: '强制删除将会忽略节点删除错误删除数据库元数据',

View File

@ -84,18 +84,19 @@
<LicenseImport ref="licenseRef" />
<LicenseBind ref="bindRef" />
<LicenseDelete ref="delRef" @search="search" />
<OpDialog ref="opRef" @search="search" />
</div>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue';
import { searchLicense, syncLicense, unbindLicense } from '@/api/modules/setting';
import { deleteLicense, searchLicense, syncLicense, unbindLicense } from '@/api/modules/setting';
import LicenseImport from '@/components/license-import/index.vue';
import LicenseDelete from '@/views/setting/license/delete/index.vue';
import LicenseBind from '@/views/setting/license/bind/index.vue';
import { dateFormat } from '@/utils/util';
import i18n from '@/lang';
import { MsgError, MsgSuccess } from '@/utils/message';
import { MsgSuccess } from '@/utils/message';
import { GlobalStore } from '@/store';
import { initFavicon } from '@/utils/xpack';
@ -104,6 +105,7 @@ const loading = ref();
const licenseRef = ref();
const delRef = ref();
const bindRef = ref();
const opRef = ref();
const data = ref();
const paginationConfig = reactive({
@ -233,18 +235,6 @@ const buttons = [
return row.status === 'Free';
},
click: (row: any) => {
if (row.freeCount != 0) {
if (row.freeNodes) {
MsgError(i18n.global.t('license.unbindMasterHelper', [i18n.global.t('commons.button.unbind')]));
return;
}
for (const item of data.value) {
if (item.bindNode && item.freeCount == 0) {
MsgError(i18n.global.t('license.unbindMasterHelper', [i18n.global.t('commons.button.unbind')]));
return;
}
}
}
onUnbind(row);
},
},
@ -266,11 +256,16 @@ const buttons = [
{
label: i18n.global.t('commons.button.delete'),
click: (row: any) => {
if (row.freeNodes && row.freeCount != 0) {
MsgError(i18n.global.t('license.unbindMasterHelper', [i18n.global.t('commons.button.delete')]));
return;
}
delRef.value.acceptParams({ id: row.id, name: row.licenseName });
opRef.value.acceptParams({
title: i18n.global.t('commons.button.delete'),
names: [row.licenseName],
msg: i18n.global.t('commons.msg.operatorHelper', [
i18n.global.t('setting.license'),
i18n.global.t('commons.button.delete'),
]),
api: deleteLicense,
params: { id: row.id },
});
},
},
];