diff --git a/src/modules/interface/themes/ThemeDetail.vue b/src/modules/interface/themes/ThemeDetail.vue
index 1cffcb83..6cc91681 100644
--- a/src/modules/interface/themes/ThemeDetail.vue
+++ b/src/modules/interface/themes/ThemeDetail.vue
@@ -1,6 +1,6 @@
@@ -86,6 +94,14 @@ const handleReloadThemeSetting = async () => {
v-close-popper
block
type="secondary"
+ @click="upgradeModal = true"
+ >
+ 更新
+
+
刷新设置表单
@@ -206,4 +222,9 @@ const handleReloadThemeSetting = async () => {
+
diff --git a/src/modules/interface/themes/components/ThemeListModal.vue b/src/modules/interface/themes/components/ThemeListModal.vue
index 2dfb74db..e9452c37 100644
--- a/src/modules/interface/themes/components/ThemeListModal.vue
+++ b/src/modules/interface/themes/components/ThemeListModal.vue
@@ -15,7 +15,7 @@ import {
VTabs,
} from "@halo-dev/components";
import LazyImage from "@/components/image/LazyImage.vue";
-import ThemeInstallModal from "./ThemeInstallModal.vue";
+import ThemeUploadModal from "./ThemeUploadModal.vue";
import { computed, ref, watch } from "vue";
import type { Theme } from "@halo-dev/api-client";
import { apiClient } from "@/utils/api-client";
@@ -437,7 +437,8 @@ defineExpose({
-
diff --git a/src/modules/interface/themes/components/ThemeInstallModal.vue b/src/modules/interface/themes/components/ThemeUploadModal.vue
similarity index 63%
rename from src/modules/interface/themes/components/ThemeInstallModal.vue
rename to src/modules/interface/themes/components/ThemeUploadModal.vue
index 18b9dbd7..2b1dd48c 100644
--- a/src/modules/interface/themes/components/ThemeInstallModal.vue
+++ b/src/modules/interface/themes/components/ThemeUploadModal.vue
@@ -2,14 +2,17 @@
import { VModal } from "@halo-dev/components";
import FilePondUpload from "@/components/upload/FilePondUpload.vue";
import { apiClient } from "@/utils/api-client";
-import { computed, ref } from "vue";
+import { computed, mergeProps, ref } from "vue";
+import type { Theme } from "@halo-dev/api-client";
-withDefaults(
+const props = withDefaults(
defineProps<{
visible: boolean;
+ upgradeTheme?: Theme;
}>(),
{
visible: false,
+ upgradeTheme: undefined,
}
);
@@ -20,6 +23,12 @@ const emit = defineEmits<{
const FilePondUploadRef = ref();
+const modalTitle = computed(() => {
+ return props.upgradeTheme
+ ? `升级主题(${props.upgradeTheme.spec.displayName})`
+ : "安装主题";
+});
+
const handleVisibleChange = (visible: boolean) => {
emit("update:visible", visible);
if (!visible) {
@@ -29,6 +38,16 @@ const handleVisibleChange = (visible: boolean) => {
};
const uploadHandler = computed(() => {
+ if (props.upgradeTheme) {
+ return (file, config) =>
+ apiClient.theme.upgradeTheme(
+ {
+ name: props.upgradeTheme.metadata.name as string,
+ file: file,
+ },
+ config
+ );
+ }
return (file, config) =>
apiClient.theme.installTheme(
{
@@ -42,10 +61,11 @@ const uploadHandler = computed(() => {