diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index e154b68..fc965b0 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -49,8 +49,8 @@ const themeOverrides = { Select: { peers: { InternalSelectMenu: { - color: 'rgba(20, 20, 20, 0.9)', // Darker menu for contrast - optionTextColor: 'white', + color: 'rgba(255, 255, 255, 0.95)', // Darker menu for contrast + optionTextColor: 'black', optionTextColorActive: '#007AFF', borderRadius: '16px', padding: '8px', diff --git a/src/renderer/src/store/zimageStore.ts b/src/renderer/src/store/zimageStore.ts index d0f326c..f7f7eb2 100644 --- a/src/renderer/src/store/zimageStore.ts +++ b/src/renderer/src/store/zimageStore.ts @@ -42,12 +42,12 @@ export const useZImageStore = defineStore( // Future models can be added here ]) - const checkModel = async (modelName = 'z-image-turbo'): Promise => { - console.log(`[Store] Checking model status for: ${modelName}`) + const checkModel = async (modelName = 'z-image-turbo', fastCheck = true): Promise => { + console.log(`[Store] Checking model status for: ${modelName} (Fast: ${fastCheck})`) try { // Pass modelFolder if available - const result = await ipcRenderer.invoke(IpcChannelInvoke.CHECK_MODEL_STATUS, modelName, false, modelFolder.value) + const result = await ipcRenderer.invoke(IpcChannelInvoke.CHECK_MODEL_STATUS, modelName, fastCheck, modelFolder.value) console.log(`[Store] Check result:`, result) modelStatus.value[modelName] = result diff --git a/src/renderer/src/views/ZImageGenerate.vue b/src/renderer/src/views/ZImageGenerate.vue index 2674bd0..ce1054e 100644 --- a/src/renderer/src/views/ZImageGenerate.vue +++ b/src/renderer/src/views/ZImageGenerate.vue @@ -60,11 +60,33 @@ const galleryRef = ref(null) const containerWidth = ref(1200) // Default start width let resizeObserver: ResizeObserver | null = null +// Validation +const canGenerate = computed(() => { + if (isGenerating.value) + return true // Allow stopping + return !!modelFolder.value && !!outputFolder.value +}) + +const validationMessage = computed(() => { + if (!modelFolder.value) + return t('validation.modelFolderRequired') + if (!outputFolder.value) + return t('validation.outputFolderRequired') + return '' +}) + // Lifecycle onMounted(async () => { await fetchModels() checkAllModels() // Check all zoo models status + // Initial validation check to guide user + if (validationMessage.value) { + message.warning(validationMessage.value, { duration: 5000 }) + // Optional: Auto-open settings if critical config missing? + // showSettings.value = true + } + // If we have a selected model, check it specifically (in case it's local custom) if (selectedModel.value && !availableModels.value.includes(selectedModel.value)) { checkModel(selectedModel.value) @@ -117,20 +139,6 @@ watch(logs, () => { }) // Actions -// Validation -const canGenerate = computed(() => { - if (isGenerating.value) - return true // Allow stopping - return !!modelFolder.value && !!outputFolder.value -}) - -const validationMessage = computed(() => { - if (!modelFolder.value) - return t('validation.modelFolderRequired') - if (!outputFolder.value) - return t('validation.outputFolderRequired') - return '' -}) function handleGenerate(): void { if (!prompt.value) @@ -503,8 +511,8 @@ const gridStyle = computed(() => { transform-origin="center" > { align-items: center; margin-bottom: 8px; font-size: 13px; - color: rgba(255, 255, 255, 0.9); + color: #333; } .download-size { font-variant-numeric: tabular-nums; font-weight: 600; - color: white; + color: #000; } }