feat: Upgrade Server command

This commit is contained in:
lejianwen
2025-01-02 21:48:02 +08:00
parent aab4ea4785
commit 7cf1a14950
8 changed files with 578 additions and 241 deletions
+3 -3
View File
@@ -191,9 +191,9 @@ export const asyncRoutes = [
component: () => import('@/views/share_record/index.vue'), component: () => import('@/views/share_record/index.vue'),
}, },
{ {
path: '/rustdesk', path: '/serverCmd',
name: 'RustDesk', name: 'ServerCmd',
meta: { title: 'RustDesk', icon: 'Setting' /*keepAlive: true*/ }, meta: { title: 'ServerCmd', icon: 'Tools' /*keepAlive: true*/ },
component: () => import('@/views/rustdesk/control.vue'), component: () => import('@/views/rustdesk/control.vue'),
}, },
], ],
+36
View File
@@ -468,5 +468,41 @@
}, },
"Captcha": { "Captcha": {
"One": "Captcha" "One": "Captcha"
},
"ServerCmd": {
"One": "Server Cmd"
},
"Simple": {
"One": "Simple"
},
"Advanced": {
"One": "Advanced"
},
"Available": {
"One": "Available"
},
"NotAvailable": {
"One": "Not Available"
},
"ServerCmdTips": {
"One": "This feature is experimental. Please ensure that the API and hbbs are on the same loopback address. For more information, please refer to the {wiki}"
},
"Refresh": {
"One": "Refresh"
},
"Save": {
"One": "Save"
},
"SendCustom": {
"One": "Send Custom"
},
"Send": {
"One": "Send"
},
"SendCmd": {
"One": "Send Cmd"
},
"Result": {
"One": "Result"
} }
} }
+36
View File
@@ -471,5 +471,41 @@
}, },
"Captcha": { "Captcha": {
"One": "Captcha" "One": "Captcha"
},
"ServerCmd": {
"One": "Comando del servidor"
},
"Simple": {
"One": "Simple"
},
"Advanced": {
"One": "Avanzado"
},
"Available": {
"One": "Disponible"
},
"NotAvailable": {
"One": "No disponible"
},
"ServerCmdTips": {
"One": "Esta función es experimental, asegúrese de que la API y hbbs estén en la misma dirección de bucle, para más detalles consulte el {wiki}"
},
"Refresh": {
"One": "Actualizar"
},
"Save": {
"One": "Guardar"
},
"SendCustom": {
"One": "Enviar personalizado"
},
"Send": {
"One": "Enviar"
},
"SendCmd": {
"One": "Enviar comando"
},
"Result": {
"One": "Resultado"
} }
} }
+214 -178
View File
@@ -1,192 +1,192 @@
{ {
"Login": { "Login": {
"One": "Connexion" "One": "Connexion"
}, },
"Logout": { "Logout": {
"One": "Déconnexion" "One": "Déconnexion"
}, },
"Register": { "Register": {
"One": "S'inscrire" "One": "S'inscrire"
}, },
"Confirm": { "Confirm": {
"One": "Confirmer" "One": "Confirmer"
}, },
"Username": { "Username": {
"One": "Nom d'utilisateur" "One": "Nom d'utilisateur"
}, },
"Password": { "Password": {
"One": "Mot de passe" "One": "Mot de passe"
}, },
"LoginSuccess": { "LoginSuccess": {
"One": "Connexion réussie" "One": "Connexion réussie"
}, },
"ForgotPassword": { "ForgotPassword": {
"One": "Mot de passe oublié" "One": "Mot de passe oublié"
}, },
"ResetPassword": { "ResetPassword": {
"One": "Réinitialiser le mot de passe" "One": "Réinitialiser le mot de passe"
}, },
"ChangePassword": { "ChangePassword": {
"One": "Modifier le mot de passe" "One": "Modifier le mot de passe"
}, },
"Userinfo": { "Userinfo": {
"One": "Informations utilisateur" "One": "Informations utilisateur"
}, },
"ParamRequired": { "ParamRequired": {
"One": "{param} est obligatoire" "One": "{param} est obligatoire"
}, },
"HasBind": { "HasBind": {
"One": "A une liaison" "One": "A une liaison"
}, },
"NoBind": { "NoBind": {
"One": "Aucune liaison" "One": "Aucune liaison"
}, },
"UnBind": { "UnBind": {
"One": "Délier" "One": "Délier"
}, },
"ToBind": { "ToBind": {
"One": "Lier" "One": "Lier"
}, },
"Confirm?": { "Confirm?": {
"One": "{param} Confirmer?" "One": "{param} Confirmer?"
}, },
"Cancel": { "Cancel": {
"One": "Annuler" "One": "Annuler"
}, },
"Platform": { "Platform": {
"One": "Plateforme" "One": "Plateforme"
}, },
"Status": { "Status": {
"One": "État" "One": "État"
}, },
"Actions": { "Actions": {
"One": "Actions" "One": "Actions"
}, },
"Filter": { "Filter": {
"One": "Filtre" "One": "Filtre"
}, },
"Add": { "Add": {
"One": "Ajouter" "One": "Ajouter"
}, },
"Hostname": { "Hostname": {
"One": "Nom d'hôte" "One": "Nom d'hôte"
}, },
"Alias": { "Alias": {
"One": "Alias" "One": "Alias"
}, },
"Hash": { "Hash": {
"One": "Hachage" "One": "Hachage"
}, },
"Tags": { "Tags": {
"One": "Etiquettes" "One": "Etiquettes"
}, },
"Edit": { "Edit": {
"One": "Modifier" "One": "Modifier"
}, },
"Delete": { "Delete": {
"One": "Supprimer" "One": "Supprimer"
}, },
"Create": { "Create": {
"One": "Créer" "One": "Créer"
}, },
"Update" : { "Update": {
"One" : "Mise à jour" "One": "Mise à jour"
}, },
"LoginName" : { "LoginName": {
"One" : "Nom de connexion" "One": "Nom de connexion"
}, },
"Submit" : { "Submit": {
"One" : "Envoyer" "One": "Envoyer"
}, },
"OperationSuccess" : { "OperationSuccess": {
"One" : "Opération réussie" "One": "Opération réussie"
}, },
"Owner" : { "Owner": {
"One" : "Propriétaire" "One": "Propriétaire"
}, },
"Name" : { "Name": {
"One" : "Nom" "One": "Nom"
}, },
"Color" : { "Color": {
"One" : "Couleur" "One": "Couleur"
}, },
"CreatedAt" : { "CreatedAt": {
"One" : "Créé le" "One": "Créé le"
}, },
"UpdatedAt" : { "UpdatedAt": {
"One" : "Mis à jour le" "One": "Mis à jour le"
}, },
"Memory" : { "Memory": {
"One" : "Mémoire" "One": "Mémoire"
}, },
"Os" : { "Os": {
"One" : "Os" "One": "Os"
}, },
"Uuid" : { "Uuid": {
"One" : "Uuid" "One": "Uuid"
}, },
"Version" : { "Version": {
"One": "Version" "One": "Version"
}, },
"Type": { "Type": {
"One": "Type" "One": "Type"
}, },
"Group": { "Group": {
"One": "Groupe" "One": "Groupe"
}, },
"CommonGroup": { "CommonGroup": {
"One": "Groupe commun" "One": "Groupe commun"
}, },
"CommonGroupNote": { "CommonGroupNote": {
"One": "Seuls les administrateurs peuvent voir les membres du groupe et leurs appareils" "One": "Seuls les administrateurs peuvent voir les membres du groupe et leurs appareils"
}, },
"SharedGroup": { "SharedGroup": {
"One": "Groupe partagé" "One": "Groupe partagé"
}, },
"SharedGroupNote": { "SharedGroupNote": {
"One": "Tous les utilisateurs peuvent voir les membres du groupe et leurs appareils" "One": "Tous les utilisateurs peuvent voir les membres du groupe et leurs appareils"
}, },
"Nickname": { "Nickname": {
"One": "Pseudonyme" "One": "Pseudonyme"
}, },
"UserTags": { "UserTags": {
"One": "Etiquettes utilisateur" "One": "Etiquettes utilisateur"
}, },
"UserAddressBook": { "UserAddressBook": {
"One": "Carnet d'adresses utilisateur" "One": "Carnet d'adresses utilisateur"
}, },
"IsAdmin": { "IsAdmin": {
"One": "Est administrateur" "One": "Est administrateur"
}, },
"PleaseInputNewPassword": { "PleaseInputNewPassword": {
"One": "Veuillez saisir nouveau mot de passe" "One": "Veuillez saisir nouveau mot de passe"
}, },
"AutoRegister": { "AutoRegister": {
"One": "Enregistrement automatique" "One": "Enregistrement automatique"
}, },
"AutoRegisterNote": { "AutoRegisterNote": {
"One": "Si activé, un compte sera automatiquement enregistré lorsqu'un utilisateur se connectera avec OAuth sans lier un compte existant" "One": "Si activé, un compte sera automatiquement enregistré lorsqu'un utilisateur se connectera avec OAuth sans lier un compte existant"
}, },
"ThirdName": { "ThirdName": {
"One": "Troisième nom" "One": "Troisième nom"
}, },
"Close": { "Close": {
"One": "Fermer" "One": "Fermer"
}, },
"OauthBinding": { "OauthBinding": {
"One": "Vous autorisez la liaison" "One": "Vous autorisez la liaison"
}, },
"OauthLogining": { "OauthLogining": {
"One": "Vous autorisez la connexion" "One": "Vous autorisez la connexion"
}, },
"OauthCloseNote": { "OauthCloseNote": {
"One": "Si vous ne l'autorisez pas, veuillez fermer la page directement" "One": "Si vous ne l'autorisez pas, veuillez fermer la page directement"
}, },
"OperationSuccessAndCloseAfter3Seconds": { "OperationSuccessAndCloseAfter3Seconds": {
"One": "Opération réussie, fermer après 3 secondes" "One": "Opération réussie, fermer après 3 secondes"
}, },
"ConfirmOauth": { "ConfirmOauth": {
"One": "Confirmer Oauth" "One": "Confirmer Oauth"
}, },
"View": { "View": {
"One": "Informations" "One": "Informations"
@@ -195,261 +195,261 @@
"One": "Appareil" "One": "Appareil"
}, },
"ChangeLang": { "ChangeLang": {
"One": "Changer la langue" "One": "Changer la langue"
}, },
"My": { "My": {
"One": "Moi" "One": "Moi"
}, },
"Info": { "Info": {
"One": "Info" "One": "Info"
}, },
"AddressBooks": { "AddressBooks": {
"One": "Carnets d'adresses" "One": "Carnets d'adresses"
}, },
"System": { "System": {
"One": "Système" "One": "Système"
}, },
"PeerManage": { "PeerManage": {
"One": "Appareils" "One": "Appareils"
}, },
"AddressBookManage": { "AddressBookManage": {
"One": "Carnets d'adresses" "One": "Carnets d'adresses"
}, },
"GroupManage": { "GroupManage": {
"One": "Groupes" "One": "Groupes"
}, },
"UserManage": { "UserManage": {
"One": "Utilisateurs" "One": "Utilisateurs"
}, },
"UserAdd": { "UserAdd": {
"One": "Ajout d'utilisateur" "One": "Ajout d'utilisateur"
}, },
"UserEdit": { "UserEdit": {
"One": "Utilisateur Modifier" "One": "Utilisateur Modifier"
}, },
"TagsManage": { "TagsManage": {
"One": "Etiquettes" "One": "Etiquettes"
}, },
"OauthManage": { "OauthManage": {
"One": "Oauth" "One": "Oauth"
}, },
"LoginLog": { "LoginLog": {
"One": "Journal de connexion" "One": "Journal de connexion"
}, },
"LastOnlineTime": { "LastOnlineTime": {
"One": "Dernière heure de connexion" "One": "Dernière heure de connexion"
}, },
"JustNow": { "JustNow": {
"One": "Juste maintenant" "One": "Juste maintenant"
}, },
"MinutesAgo": { "MinutesAgo": {
"One": "Il y a {param} minute", "One": "Il y a {param} minute",
"Other": "Il y a {param} minutes" "Other": "Il y a {param} minutes"
}, },
"HoursAgo": { "HoursAgo": {
"One": "Il y a {param} heure", "One": "Il y a {param} heure",
"Other": "Il y a {param} heures" "Other": "Il y a {param} heures"
}, },
"DaysAgo": { "DaysAgo": {
"One": "Il y a {param} jour", "One": "Il y a {param} jour",
"Other": "Il y a {param} jours" "Other": "Il y a {param} jours"
}, },
"MonthsAgo": { "MonthsAgo": {
"One": " Il y a {param} mois", "One": " Il y a {param} mois",
"Autre": "Il y a {param} mois" "Autre": "Il y a {param} mois"
}, },
"YearsAgo": { "YearsAgo": {
"One": "Il y a {param} an", "One": "Il y a {param} an",
"Autre": "Il y a {param} ans" "Autre": "Il y a {param} ans"
}, },
"MinutesLess": { "MinutesLess": {
"One": "Moins de {param} minute", "One": "Moins de {param} minute",
"Autre": "Moins de {param} minutes" "Autre": "Moins de {param} minutes"
}, },
"HoursLess": { "HoursLess": {
"One": "Moins de {param} heure", "One": "Moins de {param} heure",
"Autre": "Moins de {param} heures" "Autre": "Moins de {param} heures"
}, },
"DaysLess": { "DaysLess": {
"One": "Moins de {param} jour", "One": "Moins de {param} jour",
"Autre": "Moins de {param} jours" "Autre": "Moins de {param} jours"
}, },
"Export": { "Export": {
"One": "Exporter" "One": "Exporter"
}, },
"AddToAddressBook": { "AddToAddressBook": {
"One": "Ajouter au carnet d'adresses" "One": "Ajouter au carnet d'adresses"
}, },
"BatchDelete": { "BatchDelete": {
"One": "Suppression par lot" "One": "Suppression par lot"
}, },
"PleaseSelectData": { "PleaseSelectData": {
"One": "Veuillez sélectionner des données" "One": "Veuillez sélectionner des données"
}, },
"PasswordType": { "PasswordType": {
"One": "Type de mot de passe" "One": "Type de mot de passe"
}, },
"OncePassword": { "OncePassword": {
"One": "Mot de passe à usage unique" "One": "Mot de passe à usage unique"
}, },
"FixedPassword": { "FixedPassword": {
"One": "Mot de passe fixe" "One": "Mot de passe fixe"
}, },
"FixedPasswordWarning": { "FixedPasswordWarning": {
"One": "Les mots de passe fixes peuvent être divulgués, veuillez donc les utiliser avec prudence et l'utilisation de mots de passe à usage unique est recommandée" "One": "Les mots de passe fixes peuvent être divulgués, veuillez donc les utiliser avec prudence et l'utilisation de mots de passe à usage unique est recommandée"
}, },
"ExpireTime": { "ExpireTime": {
"One": "Heure d'expiration" "One": "Heure d'expiration"
}, },
"Minutes": { "Minutes": {
"One": "{param} Minute", "One": "{param} Minute",
"Other": "{param} Minutes" "Other": "{param} Minutes"
}, },
"Hours": { "Hours": {
"One": "{param} Heure", "One": "{param} Heure",
"Other": "{param} Heures" "Other": "{param} Heures"
}, },
"Days": { "Days": {
"One": "{param} Jour", "One": "{param} Jour",
"Other": "{param} Jours" "Other": "{param} Jours"
}, },
"Weeks": { "Weeks": {
"One": "{param} Semaine", "One": "{param} Semaine",
"Other": "{param} Semaines" "Other": "{param} Semaines"
}, },
"Months": { "Months": {
"One": "{param} Mois", "One": "{param} Mois",
"Other": "{param} Mois" "Other": "{param} Mois"
}, },
"Forever": { "Forever": {
"One": "Forever" "One": "Forever"
}, },
"Error": { "Error": {
"One": "Erreur" "One": "Erreur"
}, },
"IDNotExist": { "IDNotExist": {
"One": "L'ID n'existe pas" "One": "L'ID n'existe pas"
}, },
"RemoteDesktopOffline": { "RemoteDesktopOffline": {
"One": "Le bureau à distance est hors ligne" "One": "Le bureau à distance est hors ligne"
}, },
"KeyMismatch": { "KeyMismatch": {
"One": "Non-correspondance de clé" "One": "Non-correspondance de clé"
}, },
"KeyOveruse": { "KeyOveruse": {
"One": "Surutilisation de clé" "One": "Surutilisation de clé"
}, },
"Link": { "Link": {
"One": "Lien" "One": "Lien"
}, },
"CopySuccess": { "CopySuccess": {
"One": "Copie réussie" "One": "Copie réussie"
}, },
"CopyFailed": { "CopyFailed": {
"One": "Copie échouée" "One": "Copie échouée"
}, },
"Timeout": { "Timeout": {
"One": "Expiration du délai" "One": "Expiration du délai"
}, },
"AuditConnLog": { "AuditConnLog": {
"One": "Journal de connexion" "One": "Journal de connexion"
}, },
"Peer": { "Peer": {
"One": "Appareil", "One": "Appareil",
"Other": "Appareils distants" "Other": "Appareils distants"
}, },
"FromPeer": { "FromPeer": {
"One": "Par Appareil distant" "One": "Par Appareil distant"
}, },
"FromName": { "FromName": {
"One": "Par nom" "One": "Par nom"
}, },
"CloseTime": { "CloseTime": {
"One": "Heure de clôture" "One": "Heure de clôture"
}, },
"AuditFileLog": { "AuditFileLog": {
"One": "Fichier Journal" "One": "Fichier Journal"
}, },
"Common": { "Common": {
"One": "Commun" "One": "Commun"
}, },
"File": { "File": {
"One": "Fichier" "One": "Fichier"
}, },
"Num": { "Num": {
"One": "Num" "One": "Num"
}, },
"Ip": { "Ip": {
"One": "Ip" "One": "Ip"
}, },
"FileName": { "FileName": {
"One": "Nom du fichier" "One": "Nom du fichier"
}, },
"FileInfo": { "FileInfo": {
"One": "Informations sur le fichier" "One": "Informations sur le fichier"
}, },
"Path": { "Path": {
"One": "Chemin" "One": "Chemin"
}, },
"IndexNum": { "IndexNum": {
"One": "Num. index" "One": "Num. index"
}, },
"ToRemote": { "ToRemote": {
"One": "Vers distant" "One": "Vers distant"
}, },
"ToLocal": { "ToLocal": {
"One": "Vers local" "One": "Vers local"
}, },
"AddressBookName": { "AddressBookName": {
"One": "Nom du carnet d'adresses" "One": "Nom du carnet d'adresses"
}, },
"AddRule": { "AddRule": {
"One": "Ajouter une règle" "One": "Ajouter une règle"
}, },
"ShareRules": { "ShareRules": {
"One": "Partager des règles" "One": "Partager des règles"
}, },
"Rule": { "Rule": {
"One": "Règle" "One": "Règle"
}, },
"Read": { "Read": {
"One": "Lecture" "One": "Lecture"
}, },
"ReadWrite": { "ReadWrite": {
"One": "Lecture et écriture" "One": "Lecture et écriture"
}, },
"FullControl": { "FullControl": {
"One": "Contrôle total" "One": "Contrôle total"
}, },
"ShareTo": { "ShareTo": {
"One": "Partager avec" "One": "Partager avec"
}, },
"MyAddressBook": { "MyAddressBook": {
"One": "Mon carnet d'adresses" "One": "Mon carnet d'adresses"
}, },
"AddressBook": { "AddressBook": {
"One": "Carnet d'adresses" "One": "Carnet d'adresses"
}, },
"AddressBookNameManage": { "AddressBookNameManage": {
"One": "Noms du carnet d'adresses" "One": "Noms du carnet d'adresses"
}, },
"MyAddressBookTips": { "MyAddressBookTips": {
"One": "\"Mon carnet d'adresses\" est la valeur par défaut du système, ne peut pas être modifié ou supprimé" "One": "\"Mon carnet d'adresses\" est la valeur par défaut du système, ne peut pas être modifié ou supprimé"
}, },
"LastOnlineIp": { "LastOnlineIp": {
"One": "Dernière adresse IP en ligne" "One": "Dernière adresse IP en ligne"
}, },
"ConfirmPassword": { "ConfirmPassword": {
"One": "Confirmer le mot de passe" "One": "Confirmer le mot de passe"
}, },
"PasswordNotMatchConfirmPassword": { "PasswordNotMatchConfirmPassword": {
"One": "Les mots de passe ne correspondent pas" "One": "Les mots de passe ne correspondent pas"
}, },
"ToLogin": { "ToLogin": {
"One": "Pour se connecter" "One": "Pour se connecter"
}, },
"UserToken": { "UserToken": {
"One": "Jeton Utilisateur" "One": "Jeton Utilisateur"
}, },
"Token": { "Token": {
"One": "Jeton" "One": "Jeton"
@@ -458,21 +458,57 @@
"One": "Mon appareil" "One": "Mon appareil"
}, },
"BatchAddToAB": { "BatchAddToAB": {
"One": "Ajout par lots au carnet d'adresses" "One": "Ajout par lots au carnet d'adresses"
}, },
"BatchEditTags": { "BatchEditTags": {
"One": "Modification par lots des étiquettes" "One": "Modification par lots des étiquettes"
}, },
"User": { "User": {
"One": "Utilisateur" "One": "Utilisateur"
}, },
"ShareRecord": { "ShareRecord": {
"One": "Enregistrement des partages" "One": "Enregistrement des partages"
}, },
"Second": { "Second": {
"One": "Seconde" "One": "Seconde"
}, },
"Captcha": { "Captcha": {
"One": "Captcha" "One": "Captcha"
},
"ServerCmd": {
"One": "Commande serveur"
},
"Simple": {
"One": "Simple"
},
"Advanced": {
"One": "Avancé"
},
"Available": {
"One": "Disponible"
},
"NotAvailable": {
"One": "Non disponible"
},
"ServerCmdTips": {
"One": "Cette fonctionnalité est expérimentale, veuillez vous assurer que l'API et hbbs sont sur la même adresse de boucle, pour plus de détails veuillez consulter le {wiki}"
},
"Refresh": {
"One": "Actualiser"
},
"Save": {
"One": "Enregistrer"
},
"SendCustom": {
"One": "Envoyer personnalisé"
},
"Send": {
"One": "Envoyer"
},
"SendCmd": {
"One": "Envoyer Cmd"
},
"Result": {
"One": "Résultat"
} }
} }
+36
View File
@@ -457,5 +457,41 @@
}, },
"Captcha": { "Captcha": {
"One": "Captcha" "One": "Captcha"
},
"ServerCmd": {
"One": "서버 명령"
},
"Simple": {
"One": "간단"
},
"Advanced": {
"One": "고급"
},
"Available": {
"One": "사용 가능"
},
"NotAvailable": {
"One": "사용 불가"
},
"ServerCmdTips": {
"One": "이 기능은 실험적이므로, api와 hbbs가 동일한 루프백 주소에 있는지 확인하십시오. 자세한 내용은 {wiki}를 참조하십시오."
},
"Refresh": {
"One": "새로 고침"
},
"Save": {
"One": "저장"
},
"SendCustom": {
"One": "사용자 정의 전송"
},
"Send": {
"One": "보내기"
},
"SendCmd": {
"One": "명령 보내기"
},
"Result": {
"One": "결과"
} }
} }
+36
View File
@@ -471,6 +471,42 @@
}, },
"Captcha": { "Captcha": {
"One": "Captcha" "One": "Captcha"
},
"ServerCmd": {
"One": "Команда сервера"
},
"Simple": {
"One": "Простой"
},
"Advanced": {
"One": "Расширенный"
},
"Available": {
"One": "Доступно"
},
"NotAvailable": {
"One": "Недоступно"
},
"ServerCmdTips": {
"One": "Эта функция является экспериментальной, убедитесь, что api и hbbs находятся на одном и том же адресе обратной связи, для получения дополнительной информации см. {wiki}"
},
"Refresh": {
"One": "Обновить"
},
"Save": {
"One": "Сохранить"
},
"SendCustom": {
"One": "Отправить настраиваемое"
},
"Send": {
"One": "Отправить"
},
"SendCmd": {
"One": "Отправить команду"
},
"Result": {
"One": "Результат"
} }
} }
+36
View File
@@ -487,5 +487,41 @@
}, },
"Captcha": { "Captcha": {
"One": "验证码" "One": "验证码"
},
"ServerCmd": {
"One": "服务端命令"
},
"Simple": {
"One": "简单"
},
"Advanced": {
"One": "高级"
},
"Available": {
"One": "可用"
},
"NotAvailable": {
"One": "不可用"
},
"ServerCmdTips": {
"One": "此处功能为实验性质,请确保api和hbbs处于同一回环地址下,更多说明请参考 {wiki}"
},
"Refresh": {
"One": "刷新"
},
"Save": {
"One": "保存"
},
"SendCustom": {
"One": "发送自定义"
},
"Send": {
"One": "发送"
},
"SendCmd": {
"One": "发送命令"
},
"Result": {
"One": "结果"
} }
} }
+181 -60
View File
@@ -1,68 +1,124 @@
<template> <template>
<div> <div>
<h2>此处功能为实验性质更多说明请参考 <a target="_blank" href="https://github.com/lejianwen/rustdesk-api/wiki/Rustdesk-Command">WIKI</a></h2> <h4 v-html="T('ServerCmdTips', {wiki: '<a target=\'_blank\' href=\'https://github.com/lejianwen/rustdesk-api/wiki/Rustdesk-Command\'>WIKI</a>'})"></h4>
<el-card class="list-query" shadow="hover"> <h5>
<el-form inline label-width="80px"> <span>{{ T('Status') }}: </span>
<el-form-item> <el-tag v-if="canSendCmd" type="success">{{ T('Available') }}</el-tag>
<el-button type="primary" @click="handlerQuery">{{ T('Filter') }}</el-button> <el-tag v-else type="danger">{{ T('NotAvailable') }}</el-tag>
<el-button type="danger" @click="toAdd">{{ T('Add') }}</el-button> <el-button size="small" type="text" @click="refreshCanSendCmd">{{ T('Refresh') }}</el-button>
</el-form-item> </h5>
</el-form> <el-tabs
</el-card> v-model="activeName"
<el-card class="list-body" shadow="hover"> type="card"
>
<el-tab-pane :label="T('Simple')" name="Simple">
<el-space>
<el-card shadow="hover" style="width: 300px" v-loading="rsForm.loading">
<template #header>
<div class="card-header">
<span>RELAY_SERVERS</span>
</div>
</template>
<el-form :disabled="!canSendCmd">
<el-form-item>
<el-input v-model="rsForm.option"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getRS">{{ T('Refresh') }}</el-button>
<el-button @click="saveRS" type="primary">{{ T('Save') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card shadow="hover" style="width: 300px">
<template #header>
<div class="card-header">
<span>ALWAYS_USE_RELAY</span>
</div>
</template>
<el-form :disabled="!canSendCmd">
<el-form-item>
<el-switch v-model="aurForm.option" active-value="Y" inactive-value="N"></el-switch>
</el-form-item>
<el-form-item>
<el-button @click="getAUR">{{ T('Refresh') }}</el-button>
<el-button @click="saveAUR" type="primary">{{ T('Save') }}</el-button>
</el-form-item>
</el-form>
</el-card>
</el-space>
<el-table :data="listRes.list" v-loading="listRes.loading" border>
<el-table-column prop="cmd" label="cmd" align="center"></el-table-column>
<el-table-column prop="alias" label="alias" align="center"></el-table-column>
<el-table-column prop="option" label="option" align="center"></el-table-column>
<el-table-column prop="explain" label="explain" align="center"></el-table-column>
<el-table-column label="actions" align="center">
<template #default="{row}">
<el-button type="success" @click="showCmd(row)">执行</el-button>
<el-button v-if="row.id" type="primary" @click="toUpdate(row)">编辑</el-button>
<el-button v-if="row.id" type="danger" @click="del(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog v-model="formVisible"> </el-tab-pane>
<el-form label-width="150"> <el-tab-pane :label="T('Advanced')" name="Advanced">
<el-form-item label="cmd"> <el-card class="list-query" shadow="hover">
<el-input v-model="formData.cmd"></el-input> <el-form inline label-width="80px">
</el-form-item> <el-form-item>
<el-form-item label="alias"> <el-button type="primary" @click="handlerQuery">{{ T('Filter') }}</el-button>
<el-input v-model="formData.alias"></el-input> <el-button type="danger" @click="toAdd">{{ T('Add') }}</el-button>
</el-form-item> <el-button type="success" :disabled="!canSendCmd" @click="showCmd({cmd:'',option:''})">{{ T('Send') }}</el-button>
<el-form-item label="option"> </el-form-item>
<el-input v-model="formData.option"></el-input> </el-form>
</el-form-item> </el-card>
<el-form-item label="explain"> <el-card class="list-body" shadow="hover">
<el-input v-model="formData.explain"></el-input>
</el-form-item> <el-table :data="listRes.list" v-loading="listRes.loading" border>
<el-form-item> <el-table-column prop="cmd" label="cmd" align="center"></el-table-column>
<el-button type="primary" @click="submit">提交</el-button> <el-table-column prop="alias" label="alias" align="center"></el-table-column>
<el-button @click="cancel">取消</el-button> <el-table-column prop="option" label="option" align="center"></el-table-column>
</el-form-item> <el-table-column prop="explain" label="explain" align="center"></el-table-column>
</el-form> <el-table-column label="actions" align="center">
</el-dialog> <template #default="{row}">
<el-button type="success" :disabled="!canSendCmd" @click="showCmd(row)">{{ T('SendCustom') }}</el-button>
<el-button v-if="row.id" type="primary" @click="toUpdate(row)">{{ T('Edit') }}</el-button>
<el-button v-if="row.id" type="danger" @click="del(row)">{{ T('Delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog v-model="formVisible">
<el-form label-width="150">
<el-form-item label="cmd">
<el-input v-model="formData.cmd"></el-input>
</el-form-item>
<el-form-item label="alias">
<el-input v-model="formData.alias"></el-input>
</el-form-item>
<el-form-item label="option">
<el-input v-model="formData.option"></el-input>
</el-form-item>
<el-form-item label="explain">
<el-input v-model="formData.explain"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submit">{{ T('Submit') }}</el-button>
<el-button @click="cancel">{{ T('Cancel') }}</el-button>
</el-form-item>
</el-form>
</el-dialog>
<el-dialog :title="T('SendCmd')" v-model="showCmdForm">
<el-form label-width="150" :disabled="!canSendCmd">
<el-form-item label="cmd">
<el-input v-model="customCmd.cmd"></el-input>
</el-form-item>
<el-form-item label="option">
<el-input v-model="customCmd.option"></el-input>
<el-text v-if="customCmd.example.trim()" style="margin-top: 5px">Example:
<el-text type="primary">{{ customCmd.example }}</el-text>
</el-text>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitCmd">{{ T('Send') }}</el-button>
</el-form-item>
<el-form-item :label="T('Result')">
<el-input type="textarea" readonly disabled v-model="customCmd.res" rows="15"></el-input>
</el-form-item>
</el-form>
</el-dialog>
</el-card>
</el-tab-pane>
</el-tabs>
<el-dialog title="发送指令" v-model="showCmdForm">
<el-form label-width="300">
<el-form-item label="cmd">
<el-input v-model="customCmd.cmd"></el-input>
</el-form-item>
<el-form-item label="option">
<el-input type="textarea" v-model="customCmd.option"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitCmd">发送</el-button>
</el-form-item>
<el-form-item label="执行结果">
<el-input type="textarea" readonly disabled v-model="customCmd.res" rows="20"></el-input>
</el-form-item>
</el-form>
</el-dialog>
</el-card>
</div> </div>
</template> </template>
@@ -73,6 +129,69 @@
import { T } from '@/utils/i18n' import { T } from '@/utils/i18n'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
const activeName = ref('Simple')
const canSendCmd = ref(false)
const checkCanSendCmd = async () => {
const res = await sendCmd({ cmd: 'h' }).catch(_ => false)
canSendCmd.value = !!res.data
}
const refreshCanSendCmd = () => {
checkCanSendCmd().then(_ => {
if (canSendCmd.value) {
getAUR()
getRS()
}
})
}
onMounted(refreshCanSendCmd)
const rsForm = reactive({
cmd: 'rs',
option: '',
loading: false,
})
const getRS = async () => {
rsForm.loading = true
const res = await sendCmd({ cmd: 'rs' }).catch(_ => false)
rsForm.loading = false
if (res) {
const data = res.data.split('\n').filter(i => i)
rsForm.option = data.join(',')
}
}
const saveRS = async () => {
const res = await sendCmd(rsForm).catch(_ => false)
if (res) {
ElMessage.success(T('OperationSuccess'))
}
}
const aurForm = reactive({
cmd: 'aur',
option: '',
value: 0,
loading: false,
})
const getAUR = async () => {
aurForm.loading = true
const res = await sendCmd({ cmd: 'aur' }).catch(_ => false)
aurForm.loading = false
if (res) {
if (res.data === 'ALWAYS_USE_RELAY: true' || res.data === 'ALWAYS_USE_RELAY: true\n') {
aurForm.option = 'Y'
} else {
aurForm.option = 'N'
}
}
}
const saveAUR = async () => {
const res = await sendCmd(aurForm).catch(_ => false)
if (res) {
ElMessage.success(T('OperationSuccess'))
}
}
const listRes = reactive({ const listRes = reactive({
list: [], total: 0, loading: false, list: [], total: 0, loading: false,
}) })
@@ -157,12 +276,14 @@
cmd: '', cmd: '',
option: '', option: '',
res: '', res: '',
example: '',
}) })
const showCmd = (row) => { const showCmd = (row) => {
showCmdForm.value = true showCmdForm.value = true
customCmd.cmd = row.cmd customCmd.cmd = row.cmd
customCmd.option = '' customCmd.option = ''
customCmd.res = '' customCmd.res = ''
customCmd.example = `${row.cmd} ${row.option}`
} }
const submitCmd = async () => { const submitCmd = async () => {
sendCmd(customCmd).then(res => { sendCmd(customCmd).then(res => {