block when checking

This commit is contained in:
Julian Freeman
2026-03-31 13:30:46 -04:00
parent 145dad23a5
commit d775e049d6
4 changed files with 15 additions and 4 deletions

View File

@@ -4,7 +4,8 @@
:class="{ :class="{
'installed-mode': software.status === 'installed', 'installed-mode': software.status === 'installed',
'is-selected': isSelected && software.status !== 'installed', 'is-selected': isSelected && software.status !== 'installed',
'is-busy': software.status === 'pending' || software.status === 'installing' 'is-busy': software.status === 'pending' || software.status === 'installing',
'is-disabled': disabled && software.status === 'idle'
}" }"
@click="handleCardClick" @click="handleCardClick"
> >
@@ -14,7 +15,7 @@
class="checkbox" class="checkbox"
:class="{ :class="{
'checked': isSelected, 'checked': isSelected,
'disabled': software.status === 'installed' || software.status === 'pending' || software.status === 'installing' 'disabled': disabled || software.status === 'installed' || software.status === 'pending' || software.status === 'installing'
}" }"
> >
<span v-if="isSelected"></span> <span v-if="isSelected"></span>
@@ -64,6 +65,7 @@
v-if="software.status === 'idle'" v-if="software.status === 'idle'"
@click.stop="$emit('install', software.id, (software as any).targetVersion)" @click.stop="$emit('install', software.id, (software as any).targetVersion)"
class="action-btn install-btn" class="action-btn install-btn"
:disabled="disabled"
> >
{{ actionLabel }} {{ actionLabel }}
</button> </button>
@@ -103,6 +105,7 @@
v-else-if="software.status === 'error'" v-else-if="software.status === 'error'"
@click.stop="$emit('install', software.id, (software as any).targetVersion)" @click.stop="$emit('install', software.id, (software as any).targetVersion)"
class="action-btn retry-btn" class="action-btn retry-btn"
:disabled="disabled"
> >
重试 重试
</button> </button>
@@ -130,7 +133,8 @@ const props = defineProps<{
}, },
actionLabel?: string, actionLabel?: string,
selectable?: boolean, selectable?: boolean,
isSelected?: boolean isSelected?: boolean,
disabled?: boolean
}>(); }>();
const emit = defineEmits(['install', 'toggleSelect']); const emit = defineEmits(['install', 'toggleSelect']);
@@ -186,6 +190,11 @@ const handleCardClick = () => {
opacity: 0.9; opacity: 0.9;
} }
.software-card.is-disabled {
opacity: 0.6;
pointer-events: none;
}
.selection-area { .selection-area {
margin-right: 16px; margin-right: 16px;
flex-shrink: 0; flex-shrink: 0;

View File

@@ -105,7 +105,7 @@ export const useSoftwareStore = defineStore('software', {
}).sort(sortByName); }).sort(sortByName);
}, },
isBusy: (state) => { isBusy: (state) => {
return Object.values(state.activeTasks).some(task => return state.loading || Object.values(state.activeTasks).some(task =>
task.status === 'pending' || task.status === 'installing' task.status === 'pending' || task.status === 'installing'
); );
} }

View File

@@ -58,6 +58,7 @@
:action-label="item.actionLabel" :action-label="item.actionLabel"
:selectable="true" :selectable="true"
:is-selected="store.selectedEssentialIds.includes(item.id)" :is-selected="store.selectedEssentialIds.includes(item.id)"
:disabled="store.isBusy"
@install="store.install" @install="store.install"
@toggle-select="id => store.toggleSelection(id, 'essential')" @toggle-select="id => store.toggleSelection(id, 'essential')"
/> />

View File

@@ -62,6 +62,7 @@
action-label="更新" action-label="更新"
:selectable="true" :selectable="true"
:is-selected="store.selectedUpdateIds.includes(item.id)" :is-selected="store.selectedUpdateIds.includes(item.id)"
:disabled="store.isBusy"
@install="store.install" @install="store.install"
@toggle-select="id => store.toggleSelection(id, 'update')" @toggle-select="id => store.toggleSelection(id, 'update')"
/> />