- {header}
+
+ {header}
+
+ {button}
- )}
- {!header && (
-
-
-
- )}
+
diff --git a/web/src/components/main-config-card.tsx b/web/src/components/main-config-card.tsx
index c5f6d245..166a2129 100644
--- a/web/src/components/main-config-card.tsx
+++ b/web/src/components/main-config-card.tsx
@@ -19,7 +19,7 @@ import {
WaypointsIcon,
ZapIcon,
} from "lucide-react";
-import { JSX, useState } from "react";
+import { JSX, useEffect, useState } from "react";
import { FormProvider, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next";
import { AntSwordTabContent } from "./tools/antsword-tab";
@@ -65,20 +65,45 @@ export function MainConfigCard({
const shellTool = form.watch("shellTool");
const { t } = useTranslation();
+ // 处理一下默认值 server 不刷新 shellType 的问题
+ useEffect(() => {
+ if (mainConfig) {
+ const initialServer = form.getValues("server");
+ if (initialServer && mainConfig[initialServer]) {
+ handleServerChange(initialServer);
+ }
+ }
+ }, [mainConfig, form]);
+
+ // 处理一下 shellTypes 由于 server 或 shellTool 变更时无法正常为 form.shellType 赋值的问题
+ useEffect(() => {
+ if (shellTypes.length > 0) {
+ form.setValue("shellType", shellTypes[0]);
+ }
+ }, [shellTypes, form]);
+
const handleServerChange = (value: string) => {
if (mainConfig) {
const newShellToolMap = mainConfig[value];
setShellToolMap(newShellToolMap);
+
const newShellTools = Object.keys(newShellToolMap);
setShellTools([...newShellTools.map((tool) => tool as ShellToolType), ShellToolType.Custom]);
- if (newShellTools.length > 0) {
- const firstTool = newShellTools[0];
- setShellTypes(newShellToolMap[firstTool]);
+
+ const currentShellTool = form.getValues("shellTool");
+
+ const firstTool = newShellTools[0];
+ let currentShellTypes = null;
+
+ if (!newShellToolMap[currentShellTool]) {
form.setValue("shellTool", firstTool);
+ currentShellTypes = newShellToolMap[firstTool];
} else {
- setShellTypes([]);
+ currentShellTypes = newShellToolMap[currentShellTool];
}
+ setShellTypes(currentShellTypes);
+ // 特殊环境的 JDK 版本
if (
(value === "SpringWebFlux" || value === "XXLJOB") &&
Number.parseInt(form.getValues("targetJdkVersion") as string) < 52
@@ -88,8 +113,6 @@ export function MainConfigCard({
form.resetField("targetJdkVersion");
}
form.resetField("bypassJavaModule");
- form.resetField("shellTool");
- form.resetField("shellType");
form.resetField("urlPattern");
}
};
@@ -133,14 +156,15 @@ export function MainConfigCard({
};
if (shellToolMap) {
+ let currentShellTypes = null;
if (value === ShellToolType.Custom) {
- setShellTypes(servers?.[form.getValues("server")] as string[]);
+ currentShellTypes = servers?.[form.getValues("server")] as string[];
} else {
- setShellTypes(shellToolMap[value]);
+ currentShellTypes = shellToolMap[value];
}
+ setShellTypes(currentShellTypes);
form.resetField("urlPattern");
- form.resetField("shellType");
form.resetField("shellClassName");
form.resetField("injectorClassName");
if (value === ShellToolType.Godzilla) {
@@ -177,7 +201,7 @@ export function MainConfigCard({
control={form.control}
name="server"
render={({ field }) => (
-
+
{t("mainConfig.server")}
diff --git a/web/src/components/package-config-card.tsx b/web/src/components/package-config-card.tsx
index 7c4c9c81..d6916fd2 100644
--- a/web/src/components/package-config-card.tsx
+++ b/web/src/components/package-config-card.tsx
@@ -16,10 +16,10 @@ type Option = {
export function PackageConfigCard({
packerConfig,
form,
-}: {
+}: Readonly<{
packerConfig: PackerConfig | undefined;
form: UseFormReturn
;
-}) {
+}>) {
const [options, setOptions] = useState>([]);
const shellType = form.watch("shellType");
@@ -39,15 +39,17 @@ export function PackageConfigCard({
}
return !name.startsWith("Agent") && !name.toLowerCase().startsWith("xxl");
});
- setOptions(
- filteredOptions.map((name) => {
- return {
- name: t(`packageConfig.packer.${name}`),
- value: name,
- };
- }),
- );
- if (filteredOptions.length > 0) {
+
+ const mappedOptions = filteredOptions.map((name) => {
+ return {
+ name: t(`packageConfig.packer.${name}`),
+ value: name,
+ };
+ });
+
+ setOptions(mappedOptions);
+ const currentValue = form.getValues("packingMethod");
+ if (filteredOptions.length > 0 && (!currentValue || !filteredOptions.includes(currentValue))) {
form.setValue("packingMethod", filteredOptions[0]);
}
}, [form, packerConfig, server, shellType, t]);
diff --git a/web/src/components/shell-result.tsx b/web/src/components/shell-result.tsx
index 0eeed927..e42e2de9 100644
--- a/web/src/components/shell-result.tsx
+++ b/web/src/components/shell-result.tsx
@@ -1,11 +1,10 @@
import { CodeViewer } from "@/components/code-viewer.tsx";
import { QuickUsage } from "@/components/quick-usage.tsx";
-import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert.tsx";
import { Button } from "@/components/ui/button.tsx";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs.tsx";
import { downloadBytes } from "@/lib/utils.ts";
import { GenerateResult } from "@/types/shell.ts";
-import { TriangleAlertIcon } from "lucide-react";
+import { DownloadIcon } from "lucide-react";
import { useTranslation } from "react-i18next";
import { toast } from "sonner";
import { BasicInfo } from "./results/basic-info";
@@ -44,31 +43,26 @@ export function ShellResult({
/>
-
-
- Warning
- {t("tips.decompileTip")}
-
-
-
-
{generateResult?.shellClassName}
+ }
wrapLongLines={true}
height={600}
code={generateResult?.shellBytesBase64Str ?? ""}
@@ -76,32 +70,27 @@ export function ShellResult({
/>