mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
fix: revert hide ask ai button (#1539)
This commit is contained in:
@ -24,6 +24,4 @@ type SystemStatus struct {
|
|||||||
StorageServiceID int `json:"storageServiceId"`
|
StorageServiceID int `json:"storageServiceId"`
|
||||||
// Local storage path
|
// Local storage path
|
||||||
LocalStoragePath string `json:"localStoragePath"`
|
LocalStoragePath string `json:"localStoragePath"`
|
||||||
// Local storage path
|
|
||||||
OpenAIConfig OpenAIConfig `json:"openAIConfig"`
|
|
||||||
}
|
}
|
||||||
|
@ -56,10 +56,6 @@ func (s *Server) registerSystemRoutes(g *echo.Group) {
|
|||||||
},
|
},
|
||||||
StorageServiceID: api.DatabaseStorage,
|
StorageServiceID: api.DatabaseStorage,
|
||||||
LocalStoragePath: "",
|
LocalStoragePath: "",
|
||||||
OpenAIConfig: api.OpenAIConfig{
|
|
||||||
Key: "",
|
|
||||||
Host: "",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
systemSettingList, err := s.Store.FindSystemSettingList(ctx, &api.SystemSettingFind{})
|
systemSettingList, err := s.Store.FindSystemSettingList(ctx, &api.SystemSettingFind{})
|
||||||
@ -99,13 +95,6 @@ func (s *Server) registerSystemRoutes(g *echo.Group) {
|
|||||||
systemStatus.StorageServiceID = int(baseValue.(float64))
|
systemStatus.StorageServiceID = int(baseValue.(float64))
|
||||||
} else if systemSetting.Name == api.SystemSettingLocalStoragePathName {
|
} else if systemSetting.Name == api.SystemSettingLocalStoragePathName {
|
||||||
systemStatus.LocalStoragePath = baseValue.(string)
|
systemStatus.LocalStoragePath = baseValue.(string)
|
||||||
} else if systemSetting.Name == api.SystemSettingOpenAIConfigName {
|
|
||||||
openAIConfig := api.OpenAIConfig{}
|
|
||||||
err := json.Unmarshal([]byte(systemSetting.Value), &openAIConfig)
|
|
||||||
if err != nil {
|
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to unmarshal system setting open ai config value").SetInternal(err)
|
|
||||||
}
|
|
||||||
systemStatus.OpenAIConfig = openAIConfig
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ const AskAIDialog: React.FC<Props> = (props: Props) => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="dialog-content-container !w-112 max-w-full">
|
<div className="dialog-content-container !w-112 max-w-full">
|
||||||
{messageList.map((message, index) => (
|
{messageList.map((message, index) => (
|
||||||
<div key={index} className="w-full flex flex-col justify-start items-start mt-4 space-y-2">
|
<div key={index} className="w-full flex flex-col justify-start items-start space-y-2">
|
||||||
{message.role === "user" ? (
|
{message.role === "user" ? (
|
||||||
<div className="w-full flex flex-row justify-end items-start pl-6">
|
<div className="w-full flex flex-row justify-end items-start pl-6">
|
||||||
<span className="word-break shadow rounded-lg rounded-tr-none px-3 py-2 opacity-80 bg-gray-100 dark:bg-zinc-700">
|
<span className="word-break shadow rounded-lg rounded-tr-none px-3 py-2 opacity-80 bg-gray-100 dark:bg-zinc-700">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { NavLink, useLocation } from "react-router-dom";
|
import { NavLink, useLocation } from "react-router-dom";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useGlobalStore, useLayoutStore, useUserStore } from "@/store/module";
|
import { useLayoutStore, useUserStore } from "@/store/module";
|
||||||
import { resolution } from "@/utils/layout";
|
import { resolution } from "@/utils/layout";
|
||||||
import Icon from "./Icon";
|
import Icon from "./Icon";
|
||||||
import showSettingDialog from "./SettingDialog";
|
import showSettingDialog from "./SettingDialog";
|
||||||
@ -14,10 +14,8 @@ const Header = () => {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const globalStore = useGlobalStore();
|
|
||||||
const layoutStore = useLayoutStore();
|
const layoutStore = useLayoutStore();
|
||||||
const showHeader = layoutStore.state.showHeader;
|
const showHeader = layoutStore.state.showHeader;
|
||||||
const showAskAI = globalStore.showAskAI();
|
|
||||||
const isVisitorMode = userStore.isVisitorMode() && !userStore.state.user;
|
const isVisitorMode = userStore.isVisitorMode() && !userStore.state.user;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -109,15 +107,13 @@ const Header = () => {
|
|||||||
</NavLink>
|
</NavLink>
|
||||||
{!isVisitorMode && (
|
{!isVisitorMode && (
|
||||||
<>
|
<>
|
||||||
{showAskAI && (
|
<button
|
||||||
<button
|
id="header-ask-ai"
|
||||||
id="header-ask-ai"
|
className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:shadow dark:hover:bg-zinc-700"
|
||||||
className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:shadow dark:hover:bg-zinc-700"
|
onClick={() => showAskAIDialog()}
|
||||||
onClick={() => showAskAIDialog()}
|
>
|
||||||
>
|
<Icon.Bot className="mr-3 w-6 h-auto opacity-70" /> {t("ask-ai.title")}
|
||||||
<Icon.Bot className="mr-3 w-6 h-auto opacity-70" /> {t("ask-ai.title")}
|
</button>
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
<button
|
<button
|
||||||
id="header-archived-memo"
|
id="header-archived-memo"
|
||||||
className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:shadow dark:hover:bg-zinc-700"
|
className="px-4 pr-5 py-2 rounded-lg flex flex-row items-center text-lg text-gray-800 dark:text-gray-300 hover:bg-white hover:shadow dark:hover:bg-zinc-700"
|
||||||
|
@ -16,7 +16,6 @@ interface State {
|
|||||||
disablePublicMemos: boolean;
|
disablePublicMemos: boolean;
|
||||||
additionalStyle: string;
|
additionalStyle: string;
|
||||||
additionalScript: string;
|
additionalScript: string;
|
||||||
openAIConfig: OpenAIConfig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const SystemSection = () => {
|
const SystemSection = () => {
|
||||||
@ -30,13 +29,25 @@ const SystemSection = () => {
|
|||||||
additionalStyle: systemStatus.additionalStyle,
|
additionalStyle: systemStatus.additionalStyle,
|
||||||
additionalScript: systemStatus.additionalScript,
|
additionalScript: systemStatus.additionalScript,
|
||||||
disablePublicMemos: systemStatus.disablePublicMemos,
|
disablePublicMemos: systemStatus.disablePublicMemos,
|
||||||
openAIConfig: systemStatus.openAIConfig,
|
});
|
||||||
|
const [openAIConfig, setOpenAIConfig] = useState<OpenAIConfig>({
|
||||||
|
key: "",
|
||||||
|
host: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
globalStore.fetchSystemStatus();
|
globalStore.fetchSystemStatus();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
api.getSystemSetting().then(({ data: { data: systemSettings } }) => {
|
||||||
|
const openAIConfigSetting = systemSettings.find((setting) => setting.name === "openai-config");
|
||||||
|
if (openAIConfigSetting) {
|
||||||
|
setOpenAIConfig(JSON.parse(openAIConfigSetting.value));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setState({
|
setState({
|
||||||
...state,
|
...state,
|
||||||
@ -45,7 +56,6 @@ const SystemSection = () => {
|
|||||||
additionalStyle: systemStatus.additionalStyle,
|
additionalStyle: systemStatus.additionalStyle,
|
||||||
additionalScript: systemStatus.additionalScript,
|
additionalScript: systemStatus.additionalScript,
|
||||||
disablePublicMemos: systemStatus.disablePublicMemos,
|
disablePublicMemos: systemStatus.disablePublicMemos,
|
||||||
openAIConfig: systemStatus.openAIConfig,
|
|
||||||
});
|
});
|
||||||
}, [systemStatus]);
|
}, [systemStatus]);
|
||||||
|
|
||||||
@ -87,12 +97,16 @@ const SystemSection = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleOpenAIConfigKeyChanged = (value: string) => {
|
const handleOpenAIConfigKeyChanged = (value: string) => {
|
||||||
setState({
|
setOpenAIConfig({
|
||||||
...state,
|
...openAIConfig,
|
||||||
openAIConfig: {
|
key: value,
|
||||||
...state.openAIConfig,
|
});
|
||||||
key: value,
|
};
|
||||||
},
|
|
||||||
|
const handleOpenAIConfigHostChanged = (value: string) => {
|
||||||
|
setOpenAIConfig({
|
||||||
|
...openAIConfig,
|
||||||
|
host: value,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -100,9 +114,8 @@ const SystemSection = () => {
|
|||||||
try {
|
try {
|
||||||
await api.upsertSystemSetting({
|
await api.upsertSystemSetting({
|
||||||
name: "openai-config",
|
name: "openai-config",
|
||||||
value: JSON.stringify(state.openAIConfig),
|
value: JSON.stringify(openAIConfig),
|
||||||
});
|
});
|
||||||
globalStore.setSystemStatus({ openAIConfig: state.openAIConfig });
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return;
|
return;
|
||||||
@ -110,16 +123,6 @@ const SystemSection = () => {
|
|||||||
toast.success("OpenAI Config updated");
|
toast.success("OpenAI Config updated");
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleOpenAIConfigHostChanged = (value: string) => {
|
|
||||||
setState({
|
|
||||||
...state,
|
|
||||||
openAIConfig: {
|
|
||||||
...state.openAIConfig,
|
|
||||||
host: value,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleAdditionalStyleChanged = (value: string) => {
|
const handleAdditionalStyleChanged = (value: string) => {
|
||||||
setState({
|
setState({
|
||||||
...state,
|
...state,
|
||||||
@ -222,7 +225,7 @@ const SystemSection = () => {
|
|||||||
fontSize: "14px",
|
fontSize: "14px",
|
||||||
}}
|
}}
|
||||||
placeholder={t("setting.system-section.openai-api-key-placeholder")}
|
placeholder={t("setting.system-section.openai-api-key-placeholder")}
|
||||||
value={state.openAIConfig.key}
|
value={openAIConfig.key}
|
||||||
onChange={(event) => handleOpenAIConfigKeyChanged(event.target.value)}
|
onChange={(event) => handleOpenAIConfigKeyChanged(event.target.value)}
|
||||||
/>
|
/>
|
||||||
<div className="form-label mt-2">
|
<div className="form-label mt-2">
|
||||||
@ -235,7 +238,7 @@ const SystemSection = () => {
|
|||||||
fontSize: "14px",
|
fontSize: "14px",
|
||||||
}}
|
}}
|
||||||
placeholder={t("setting.system-section.openai-api-host-placeholder")}
|
placeholder={t("setting.system-section.openai-api-host-placeholder")}
|
||||||
value={state.openAIConfig.host}
|
value={openAIConfig.host}
|
||||||
onChange={(event) => handleOpenAIConfigHostChanged(event.target.value)}
|
onChange={(event) => handleOpenAIConfigHostChanged(event.target.value)}
|
||||||
/>
|
/>
|
||||||
<Divider className="!mt-3 !my-4" />
|
<Divider className="!mt-3 !my-4" />
|
||||||
|
@ -315,7 +315,7 @@
|
|||||||
},
|
},
|
||||||
"ask-ai": {
|
"ask-ai": {
|
||||||
"placeholder": "随便问",
|
"placeholder": "随便问",
|
||||||
"title": "问AI",
|
"title": "Ask AI",
|
||||||
"not-enabled": "您尚未设置 OpenAI API 密钥。",
|
"not-enabled": "您尚未设置 OpenAI API 密钥。",
|
||||||
"go-to-settings": "前往设置"
|
"go-to-settings": "前往设置"
|
||||||
},
|
},
|
||||||
|
@ -23,10 +23,6 @@ export const initialGlobalState = async () => {
|
|||||||
appearance: "system",
|
appearance: "system",
|
||||||
externalUrl: "",
|
externalUrl: "",
|
||||||
},
|
},
|
||||||
openAIConfig: {
|
|
||||||
key: "",
|
|
||||||
host: "",
|
|
||||||
},
|
|
||||||
} as SystemStatus,
|
} as SystemStatus,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -69,10 +65,6 @@ export const useGlobalStore = () => {
|
|||||||
isDev: () => {
|
isDev: () => {
|
||||||
return state.systemStatus.profile.mode !== "prod";
|
return state.systemStatus.profile.mode !== "prod";
|
||||||
},
|
},
|
||||||
showAskAI: () => {
|
|
||||||
const openAIConfig = state.systemStatus.openAIConfig;
|
|
||||||
return Boolean(openAIConfig.key && openAIConfig.host);
|
|
||||||
},
|
|
||||||
fetchSystemStatus: async () => {
|
fetchSystemStatus: async () => {
|
||||||
const { data: systemStatus } = (await api.getSystemStatus()).data;
|
const { data: systemStatus } = (await api.getSystemStatus()).data;
|
||||||
store.dispatch(setGlobalState({ systemStatus: systemStatus }));
|
store.dispatch(setGlobalState({ systemStatus: systemStatus }));
|
||||||
|
@ -31,10 +31,6 @@ const globalSlice = createSlice({
|
|||||||
appearance: "system",
|
appearance: "system",
|
||||||
externalUrl: "",
|
externalUrl: "",
|
||||||
},
|
},
|
||||||
openAIConfig: {
|
|
||||||
key: "",
|
|
||||||
host: "",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
} as State,
|
} as State,
|
||||||
reducers: {
|
reducers: {
|
||||||
|
1
web/src/types/modules/system.d.ts
vendored
1
web/src/types/modules/system.d.ts
vendored
@ -30,7 +30,6 @@ interface SystemStatus {
|
|||||||
customizedProfile: CustomizedProfile;
|
customizedProfile: CustomizedProfile;
|
||||||
storageServiceId: number;
|
storageServiceId: number;
|
||||||
localStoragePath: string;
|
localStoragePath: string;
|
||||||
openAIConfig: OpenAIConfig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SystemSetting {
|
interface SystemSetting {
|
||||||
|
Reference in New Issue
Block a user