This commit is contained in:
Baobhan Sith
2025-05-15 00:37:47 +08:00
parent 0e396a92fa
commit 398545dbef
4 changed files with 111 additions and 77 deletions
@@ -32,6 +32,3 @@ const {
} = useAppearanceSettings(); } = useAppearanceSettings();
</script> </script>
<style scoped>
/* Component-specific styles if needed */
</style>
@@ -35,7 +35,7 @@ import { storeToRefs } from 'pinia';
import { useExportConnections } from '../../composables/settings/useExportConnections'; import { useExportConnections } from '../../composables/settings/useExportConnections';
const settingsStore = useSettingsStore(); const settingsStore = useSettingsStore();
const { settings } = storeToRefs(settingsStore); // To ensure v-if="settings" works const { settings } = storeToRefs(settingsStore);
const { t } = useI18n(); const { t } = useI18n();
const { const {
@@ -46,6 +46,3 @@ const {
} = useExportConnections(); } = useExportConnections();
</script> </script>
<style scoped>
/* Component-specific styles if needed */
</style>
@@ -50,51 +50,6 @@
</div> </div>
</form> </form>
</div> </div>
<hr class="border-border/50"> <!-- Separator -->
<!-- Status Monitor -->
<div class="settings-section-content">
<h3 class="text-base font-semibold text-foreground mb-3">{{ t('settings.statusMonitor.title') }}</h3>
<form @submit.prevent="handleUpdateStatusMonitorInterval" class="space-y-4">
<div>
<label for="statusMonitorInterval" class="block text-sm font-medium text-text-secondary mb-1">{{ t('settings.statusMonitor.refreshIntervalLabel') }}</label>
<input type="number" id="statusMonitorInterval" v-model.number="statusMonitorIntervalLocal" min="1" step="1" required
class="w-full px-3 py-2 border border-border rounded-md shadow-sm bg-background text-foreground focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary">
<small class="block mt-1 text-xs text-text-secondary">{{ t('settings.statusMonitor.refreshIntervalHint') }}</small>
</div>
<div class="flex items-center justify-between">
<button type="submit"
class="px-4 py-2 bg-button text-button-text rounded-md shadow-sm hover:bg-button-hover focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition duration-150 ease-in-out text-sm font-medium">
{{ t('settings.statusMonitor.saveButton') }}
</button>
<p v-if="statusMonitorMessage" :class="['text-sm', statusMonitorSuccess ? 'text-success' : 'text-error']">{{ statusMonitorMessage }}</p>
</div>
</form>
</div>
<hr class="border-border/50"> <!-- Separator -->
<!-- Docker -->
<div class="settings-section-content">
<h3 class="text-base font-semibold text-foreground mb-3">{{ t('settings.docker.title') }}</h3>
<form @submit.prevent="handleUpdateDockerSettings" class="space-y-4">
<div>
<label for="dockerInterval" class="block text-sm font-medium text-text-secondary mb-1">{{ t('settings.docker.refreshIntervalLabel') }}</label>
<input type="number" id="dockerInterval" v-model.number="dockerInterval" min="1" step="1" required
class="w-full px-3 py-2 border border-border rounded-md shadow-sm bg-background text-foreground focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary">
<small class="block mt-1 text-xs text-text-secondary">{{ t('settings.docker.refreshIntervalHint') }}</small>
</div>
<div class="flex items-center">
<input type="checkbox" id="dockerExpandDefault" v-model="dockerExpandDefault"
class="h-4 w-4 rounded border-border text-primary focus:ring-primary mr-2 cursor-pointer">
<label for="dockerExpandDefault" class="text-sm text-foreground cursor-pointer select-none">{{ t('settings.docker.defaultExpandLabel') }}</label>
</div>
<div class="flex items-center justify-between">
<button type="submit"
class="px-4 py-2 bg-button text-button-text rounded-md shadow-sm hover:bg-button-hover focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition duration-150 ease-in-out text-sm font-medium">
{{ t('settings.docker.saveButton') }}
</button>
<p v-if="dockerSettingsMessage" :class="['text-sm', dockerSettingsSuccess ? 'text-success' : 'text-error']">{{ dockerSettingsMessage }}</p>
</div>
</form>
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -106,37 +61,22 @@ import { storeToRefs } from 'pinia';
import { useSystemSettings } from '../../composables/settings/useSystemSettings'; import { useSystemSettings } from '../../composables/settings/useSystemSettings';
const settingsStore = useSettingsStore(); const settingsStore = useSettingsStore();
const { settings } = storeToRefs(settingsStore); // To ensure v-if="settings" works const { settings } = storeToRefs(settingsStore);
const { t } = useI18n(); const { t } = useI18n();
const { const {
selectedLanguage, selectedLanguage,
// languageLoading, // Not directly used by template
languageMessage, languageMessage,
languageSuccess, languageSuccess,
languageNames, languageNames,
availableLocales, availableLocales,
handleUpdateLanguage, handleUpdateLanguage,
selectedTimezone, selectedTimezone,
// timezoneLoading,
timezoneMessage, timezoneMessage,
timezoneSuccess, timezoneSuccess,
commonTimezones, commonTimezones,
handleUpdateTimezone, handleUpdateTimezone,
statusMonitorIntervalLocal,
// statusMonitorLoading,
statusMonitorMessage,
statusMonitorSuccess,
handleUpdateStatusMonitorInterval,
dockerInterval,
dockerExpandDefault,
// dockerSettingsLoading,
dockerSettingsMessage,
dockerSettingsSuccess,
handleUpdateDockerSettings,
} = useSystemSettings(); } = useSystemSettings();
</script> </script>
<style scoped>
/* Component-specific styles if needed */
</style>
@@ -243,6 +243,93 @@
</div> </div>
</form> </form>
</div> </div>
<hr class="border-border/50">
<div class="settings-section-content">
<h3 class="text-base font-semibold text-foreground mb-3">
{{ t('settings.statusMonitor.title') }}
</h3>
<form @submit.prevent="handleUpdateStatusMonitorInterval" class="space-y-4">
<div>
<label for="statusMonitorInterval" class="block text-sm font-medium text-text-secondary mb-1">
{{ t('settings.statusMonitor.refreshIntervalLabel') }}
</label>
<input
type="number"
id="statusMonitorInterval"
v-model.number="statusMonitorIntervalLocal"
min="1"
step="1"
required
class="w-full px-3 py-2 border border-border rounded-md shadow-sm bg-background text-foreground focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary"
>
<small class="block mt-1 text-xs text-text-secondary">
{{ t('settings.statusMonitor.refreshIntervalHint') }}
</small>
</div>
<div class="flex items-center justify-between">
<button
type="submit"
class="px-4 py-2 bg-button text-button-text rounded-md shadow-sm hover:bg-button-hover focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition duration-150 ease-in-out text-sm font-medium"
>
{{ t('settings.statusMonitor.saveButton') }}
</button>
<p v-if="statusMonitorMessage" :class="['text-sm', statusMonitorSuccess ? 'text-success' : 'text-error']">
{{ statusMonitorMessage }}
</p>
</div>
</form>
</div>
<hr class="border-border/50">
<div class="settings-section-content">
<h3 class="text-base font-semibold text-foreground mb-3">
{{ t('settings.docker.title') }}
</h3>
<form @submit.prevent="handleUpdateDockerSettings" class="space-y-4">
<div>
<label for="dockerInterval" class="block text-sm font-medium text-text-secondary mb-1">
{{ t('settings.docker.refreshIntervalLabel') }}
</label>
<input
type="number"
id="dockerInterval"
v-model.number="dockerInterval"
min="1"
step="1"
required
class="w-full px-3 py-2 border border-border rounded-md shadow-sm bg-background text-foreground focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary"
>
<small class="block mt-1 text-xs text-text-secondary">
{{ t('settings.docker.refreshIntervalHint') }}
</small>
</div>
<div class="flex items-center">
<input
type="checkbox"
id="dockerExpandDefault"
v-model="dockerExpandDefault"
class="h-4 w-4 rounded border-border text-primary focus:ring-primary mr-2 cursor-pointer"
>
<label for="dockerExpandDefault" class="text-sm text-foreground cursor-pointer select-none">
{{ t('settings.docker.defaultExpandLabel') }}
</label>
</div>
<div class="flex items-center justify-between">
<button
type="submit"
class="px-4 py-2 bg-button text-button-text rounded-md shadow-sm hover:bg-button-hover focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition duration-150 ease-in-out text-sm font-medium"
>
{{ t('settings.docker.saveButton') }}
</button>
<p v-if="dockerSettingsMessage" :class="['text-sm', dockerSettingsSuccess ? 'text-success' : 'text-error']">
{{ dockerSettingsMessage }}
</p>
</div>
</form>
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -252,11 +339,15 @@ import { useSettingsStore } from '../../stores/settings.store';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useWorkspaceSettings } from '../../composables/settings/useWorkspaceSettings'; import { useWorkspaceSettings } from '../../composables/settings/useWorkspaceSettings';
import { useSystemSettings } from '../../composables/settings/useSystemSettings';
const settingsStore = useSettingsStore(); const settingsStore = useSettingsStore();
const { settings } = storeToRefs(settingsStore); // To ensure v-if="settings" works const { settings } = storeToRefs(settingsStore); // To ensure v-if="settings" works
const { t } = useI18n(); const { t } = useI18n();
const workspaceSettings = useWorkspaceSettings();
const systemSettings = useSystemSettings();
const { const {
popupEditorEnabled, popupEditorEnabled,
popupEditorMessage, popupEditorMessage,
@@ -294,11 +385,11 @@ const {
fileManagerShowDeleteConfirmationMessage, fileManagerShowDeleteConfirmationMessage,
fileManagerShowDeleteConfirmationSuccess, fileManagerShowDeleteConfirmationSuccess,
handleUpdateFileManagerDeleteConfirmation, handleUpdateFileManagerDeleteConfirmation,
terminalEnableRightClickPasteLocal, terminalEnableRightClickPasteLocal,
terminalEnableRightClickPasteLoading, terminalEnableRightClickPasteLoading,
terminalEnableRightClickPasteMessage, terminalEnableRightClickPasteMessage,
terminalEnableRightClickPasteSuccess, terminalEnableRightClickPasteSuccess,
handleUpdateTerminalRightClickPasteSetting, handleUpdateTerminalRightClickPasteSetting,
showPopupFileManagerLocal, showPopupFileManagerLocal,
showPopupFileManagerMessage, showPopupFileManagerMessage,
showPopupFileManagerSuccess, showPopupFileManagerSuccess,
@@ -308,9 +399,18 @@ const {
statusMonitorShowIpMessage, statusMonitorShowIpMessage,
statusMonitorShowIpSuccess, statusMonitorShowIpSuccess,
handleUpdateStatusMonitorShowIpSetting, handleUpdateStatusMonitorShowIpSetting,
} = useWorkspaceSettings(); } = workspaceSettings;
const {
statusMonitorIntervalLocal,
statusMonitorMessage,
statusMonitorSuccess,
handleUpdateStatusMonitorInterval,
dockerInterval,
dockerExpandDefault,
dockerSettingsMessage,
dockerSettingsSuccess,
handleUpdateDockerSettings,
} = systemSettings;
</script> </script>
<style scoped>
/* Component-specific styles if needed */
</style>