diff --git a/CHANGELOG.MD b/CHANGELOG.MD
index 6808f0093..96f6d7ed8 100644
--- a/CHANGELOG.MD
+++ b/CHANGELOG.MD
@@ -2,6 +2,15 @@
更新日志文档,版本顺序从新到旧,最新版本在最前(上)面。
+# 0.4.5
+
+## 优化
+
+- 服务端初始化系统配置添加远端开启开关
+- 服务端内置搜索引擎不构建文件索引
+- 控制台根据是否开启远端配置控制是否展示文件推送和拉取操作按钮
+- 控制台全局搜索组件去掉文件搜索
+
# 0.4.4
## 问题修复
diff --git a/console/src/components/global-search/GlobalSearchDialog.vue b/console/src/components/global-search/GlobalSearchDialog.vue
index aba1e0008..643936438 100644
--- a/console/src/components/global-search/GlobalSearchDialog.vue
+++ b/console/src/components/global-search/GlobalSearchDialog.vue
@@ -1,17 +1,9 @@
@@ -115,70 +85,34 @@ const onselectionchange = (val: string) => {
v-model="search.keyword"
style="width: 100%"
size="large"
- placeholder="请输入关键词,回车搜索。"
+ placeholder="请输入条目关键词,回车搜索。"
@keydown.enter="searchByKeyword"
>
-
-
-
-
-
-
-
-
-
- -
-
- {{ subjectHit.name }}
- {{ subjectHit.nameCn }}
-
-
-
-
- 暂无数据
-
-
-
- -
-
- {{ fileHit.name }}
- {{ fileHit.originalName }}
-
-
-
-
- 暂无数据
-
-
+
+ -
+
+ {{ subjectHit.name }}
+ {{ subjectHit.nameCn }}
+
+
+
+
+ 暂无数据
[Tab]-下一个 [Shift+Tab]-上一个 [Enter]-确认
diff --git a/console/src/components/global-search/GlobalSearchDialog.vue.bak b/console/src/components/global-search/GlobalSearchDialog.vue.bak
new file mode 100644
index 000000000..aba1e0008
--- /dev/null
+++ b/console/src/components/global-search/GlobalSearchDialog.vue.bak
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+ {{ subjectHit.name }}
+ {{ subjectHit.nameCn }}
+
+
+
+
+ 暂无数据
+
+
+
+ -
+
+ {{ fileHit.name }}
+ {{ fileHit.originalName }}
+
+
+
+
+ 暂无数据
+
+
+
+
+ [Tab]-下一个 [Shift+Tab]-上一个 [Enter]-确认
+
+
+
+
+
diff --git a/console/src/main.ts b/console/src/main.ts
index f8fc78740..41523c52f 100644
--- a/console/src/main.ts
+++ b/console/src/main.ts
@@ -11,6 +11,7 @@ import { coreModules } from './modules';
import { usePluginModuleStore } from '@/stores/plugin';
import { apiClient } from '@/utils/api-client';
import { useUserStore } from '@/stores/user';
+import { useSettingStore } from '@/stores/setting';
import { ElMessage } from 'element-plus';
import { useScriptTag } from '@vueuse/core';
import { defaultConfig, plugin } from '@formkit/vue';
@@ -198,6 +199,8 @@ async function initApp() {
loadCoreModules();
const userStore = useUserStore();
await userStore.fetchCurrentUser();
+ const settingStore = useSettingStore();
+ await settingStore.fetchSystemSetting();
if (userStore.isAnonymous) {
return;
diff --git a/console/src/modules/content/file/Files.vue b/console/src/modules/content/file/Files.vue
index af3b06a3b..3f4ff1d68 100644
--- a/console/src/modules/content/file/Files.vue
+++ b/console/src/modules/content/file/Files.vue
@@ -26,6 +26,10 @@ import { useRoute } from 'vue-router';
import { onMounted, ref, watch } from 'vue';
import router from '@/router';
import moment from 'moment';
+import { useSettingStore } from '@/stores/setting';
+
+// eslint-disable-next-line no-unused-vars
+const settingStore = useSettingStore();
const fileUploadDrawerVisible = ref(false);
@@ -255,7 +259,11 @@ onMounted(fetchFiles);
详情
-
+
推送
拉取
diff --git a/console/src/modules/content/file/Folders.vue b/console/src/modules/content/file/Folders.vue
index ea0aecd41..35cf864d8 100644
--- a/console/src/modules/content/file/Folders.vue
+++ b/console/src/modules/content/file/Folders.vue
@@ -36,6 +36,9 @@ import {
import { computed } from 'vue';
// import { useRouter } from 'vue-router';
import moment from 'moment';
+import { useSettingStore } from '@/stores/setting';
+
+const settingStore = useSettingStore();
const findFolder = ref({
name: 'root',
@@ -349,10 +352,18 @@ onMounted(fetchFolders);
删除
-
+
推送
-
+
拉取
diff --git a/console/src/modules/content/subject/SubjectDetails.vue b/console/src/modules/content/subject/SubjectDetails.vue
index df298aae1..cbacf5e3e 100644
--- a/console/src/modules/content/subject/SubjectDetails.vue
+++ b/console/src/modules/content/subject/SubjectDetails.vue
@@ -30,8 +30,10 @@ import {
import FileRemoteActionDialog from '@/modules/content/file/FileRemoteActionDialog.vue';
import { base64Encode } from '@/utils/string-util';
import SubjectRemoteActionDialog from './SubjectRemoteActionDialog.vue';
+import { useSettingStore } from '@/stores/setting';
const route = useRoute();
+const settingStore = useSettingStore();
watch(route, () => {
if (!route.params?.id && route.params?.id === undefined) {
@@ -302,10 +304,18 @@ onMounted(() => {
信息拉取
-
+
全部推送
-
+
全部拉取
@@ -406,7 +416,11 @@ onMounted(() => {
绑定
({
@@ -44,6 +47,7 @@ const getSettingFromServer = async () => {
setting.value = data;
};
+const settingStore = useSettingStore();
// eslint-disable-next-line no-unused-vars
const updateSetting = async () => {
await apiClient.configmap
@@ -52,11 +56,20 @@ const updateSetting = async () => {
metaName: 'data',
body: JSON.stringify(setting.value),
})
- .then(() => {
+ .then(async () => {
ElMessage.success('更新成功');
+ await settingStore.fetchSystemSetting();
});
};
+const onDisableClick = () => {
+ ElMessage({
+ showClose: true,
+ message: '此功能尚未实现',
+ type: 'warning',
+ });
+};
+
onMounted(getSettingFromServer);
@@ -89,9 +102,14 @@ onMounted(getSettingFromServer);
-
+
-
+
@@ -103,9 +121,10 @@ onMounted(getSettingFromServer);
v-model="setting.FAVICON"
style="max-width: 600px"
clearable
+ disabled
>
-
+
@@ -116,6 +135,25 @@ onMounted(getSettingFromServer);
保存
+
+
+
+
+
+
+ 保存
+
+
@@ -140,6 +180,7 @@ onMounted(getSettingFromServer);
rows="10"
show-word-limit
type="textarea"
+ disabled
/>
@@ -151,6 +192,7 @@ onMounted(getSettingFromServer);
rows="10"
show-word-limit
type="textarea"
+ disabled
/>
diff --git a/console/src/stores/setting.ts b/console/src/stores/setting.ts
new file mode 100644
index 000000000..758e91aa2
--- /dev/null
+++ b/console/src/stores/setting.ts
@@ -0,0 +1,53 @@
+// @ts-nocheck
+import { defineStore } from 'pinia';
+import { apiClient } from '@/utils/api-client';
+
+interface SettingStoreState {
+ siteTitle: string;
+ siteSubhead: string;
+ logo: string;
+ favicon: string;
+ allowRegister: boolean;
+ defaultRole: string;
+ globalHeader: string;
+ globalFooter: string;
+ remoteEnable: boolean;
+}
+
+const settingConfigMapName = 'setting.server.ikaros.run';
+
+export const useSettingStore = defineStore('setting', {
+ state: (): SettingStoreState => ({
+ siteTitle: '',
+ siteSubhead: '',
+ logo: '',
+ favicon: '',
+ allowRegister: false,
+ defaultRole: '',
+ globalHeader: '',
+ globalFooter: '',
+ remoteEnable: false,
+ }),
+ actions: {
+ async fetchSystemSetting() {
+ try {
+ const { data } = await apiClient.configmap.getConfigmapMeta({
+ name: settingConfigMapName,
+ metaName: 'data',
+ });
+ // console.log(data)
+ this.siteTitle = data.SITE_TITLE;
+ this.siteSubhead = data.SITE_SUBHEAD;
+ this.logo = data.LOGO;
+ this.favicon = data.FAVICON;
+ this.allowRegister = data.ALLOW_REGISTER === true;
+ this.defaultRole = data.DEFAULT_ROLE;
+ this.globalHeader = data.GLOBAL_HEADER;
+ this.globalFooter = data.GLOBAL_FOOTER;
+ this.remoteEnable = data.REMOTE_ENABLE === true;
+ } catch (e) {
+ console.error('Failed to fetch system setting', e);
+ }
+ },
+ },
+});
diff --git a/gradle.properties b/gradle.properties
index 0c40adbd1..742fc25a9 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1 +1 @@
-version=0.4.4
+version=0.4.5
diff --git a/server/src/main/java/run/ikaros/server/core/setting/SystemSettingInitListener.java b/server/src/main/java/run/ikaros/server/core/setting/SystemSettingInitListener.java
index 625a3e5b5..098cdaecd 100644
--- a/server/src/main/java/run/ikaros/server/core/setting/SystemSettingInitListener.java
+++ b/server/src/main/java/run/ikaros/server/core/setting/SystemSettingInitListener.java
@@ -42,6 +42,9 @@ public Mono handle(SchemeInitializedEvent event) {
settingConfigMap.putDataItem("GLOBAL_HEADER", "");
settingConfigMap.putDataItem("GLOBAL_FOOTER", "");
+ // System remote settings
+ settingConfigMap.putDataItem("REMOTE_ENABLE", "false");
+
return reactiveCustomClient.findOne(ConfigMap.class, configMapName)
.onErrorResume(NotFoundException.class, e ->
reactiveCustomClient.create(settingConfigMap)
diff --git a/server/src/main/java/run/ikaros/server/search/IndicesInitializer.java b/server/src/main/java/run/ikaros/server/search/IndicesInitializer.java
index 0604b113d..1d1424df6 100644
--- a/server/src/main/java/run/ikaros/server/search/IndicesInitializer.java
+++ b/server/src/main/java/run/ikaros/server/search/IndicesInitializer.java
@@ -21,7 +21,7 @@ public IndicesInitializer(IndicesService indicesService) {
@Async
@EventListener(SchemeInitializedEvent.class)
public void whenSchemeInitialized(SchemeInitializedEvent event) throws InterruptedException {
- initFileIndices();
+ // initFileIndices();
initSubjectIndices();
}
diff --git a/server/src/main/resources/application-dev.yaml b/server/src/main/resources/application-dev.yaml
index d3088786e..a6c8da32b 100644
--- a/server/src/main/resources/application-dev.yaml
+++ b/server/src/main/resources/application-dev.yaml
@@ -2,11 +2,11 @@ ikaros:
plugin:
runtime-mode: development
fixed-plugin-path:
- - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-baidupan
- # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-bgmtv
- # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-jellyfin
- - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-local-files-import
- # auto-start-plugin: false
+ # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-baidupan
+ # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-bgmtv
+ # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-jellyfin
+ # - C:\Develop\GitRepos\ikaros-dev\plugins\plugin-local-files-import
+ # auto-start-plugin: false
security:
initializer:
master-username: tomoki