|
|
|
@ -12,19 +12,25 @@
|
|
|
|
|
<el-radio :label="true">{{ $t('container.imagePruneAll') }}</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<span>
|
|
|
|
|
{{ withTagAll ? $t('container.imagePruneAllHelper') : $t('container.imagePruneSomeHelper') }}
|
|
|
|
|
<span v-if="withTagAll">
|
|
|
|
|
{{ unUsedList.length !== 0 ? $t('container.imagePruneAllHelper') : $t('container.imagePruneAllEmpty') }}
|
|
|
|
|
</span>
|
|
|
|
|
<span v-else>
|
|
|
|
|
{{
|
|
|
|
|
unTagList.length !== 0 ? $t('container.imagePruneSomeHelper') : $t('container.imagePruneSomeEmpty')
|
|
|
|
|
}}
|
|
|
|
|
</span>
|
|
|
|
|
<div v-if="!withTagAll">
|
|
|
|
|
<ul v-for="(item, index) in imageList" :key="index">
|
|
|
|
|
<li v-if="item.tags && item.tags.length === 1 && item.tags[0].indexOf('<none>') !== -1">
|
|
|
|
|
<ul v-for="(item, index) in unTagList" :key="index">
|
|
|
|
|
<li>
|
|
|
|
|
{{ item.tags[0] }}
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else>
|
|
|
|
|
<ul v-for="(item, index) in imageList" :key="index">
|
|
|
|
|
<li v-if="item.tags && !item.isUsed">{{ item.tags.join(', ') }}</li>
|
|
|
|
|
<ul v-for="(item, index) in unUsedList" :key="index">
|
|
|
|
|
<li v-if="item.tags">{{ item.tags.join(', ') }}</li>
|
|
|
|
|
<li v-else>{{ item.id.replaceAll('sha256:', '').substring(0, 12) }}</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form>
|
|
|
|
@ -33,7 +39,7 @@
|
|
|
|
|
<el-button @click="dialogVisible = false">
|
|
|
|
|
{{ $t('commons.button.cancel') }}
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="primary" @click="onClean" :disabled="loading">
|
|
|
|
|
<el-button type="primary" :disabled="buttonDisable() || loading" @click="onClean">
|
|
|
|
|
{{ $t('commons.button.confirm') }}
|
|
|
|
|
</el-button>
|
|
|
|
|
</span>
|
|
|
|
@ -52,19 +58,34 @@ import { ref } from 'vue';
|
|
|
|
|
const dialogVisible = ref(false);
|
|
|
|
|
const withTagAll = ref(false);
|
|
|
|
|
const loading = ref();
|
|
|
|
|
const imageList = ref();
|
|
|
|
|
const unTagList = ref();
|
|
|
|
|
const unUsedList = ref();
|
|
|
|
|
|
|
|
|
|
interface DialogProps {
|
|
|
|
|
list: Array<Container.ImageInfo>;
|
|
|
|
|
}
|
|
|
|
|
const acceptParams = (params: DialogProps): void => {
|
|
|
|
|
imageList.value = params.list;
|
|
|
|
|
let list = params.list || [];
|
|
|
|
|
unTagList.value = [];
|
|
|
|
|
unUsedList.value = [];
|
|
|
|
|
for (const item of list) {
|
|
|
|
|
if (item.tags && item.tags.length === 1 && item.tags[0].indexOf('<none>') !== -1 && !item.isUsed) {
|
|
|
|
|
unTagList.value.push(item);
|
|
|
|
|
}
|
|
|
|
|
if (!item.isUsed) {
|
|
|
|
|
unUsedList.value.push(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
dialogVisible.value = true;
|
|
|
|
|
withTagAll.value = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const emit = defineEmits<{ (e: 'search'): void }>();
|
|
|
|
|
|
|
|
|
|
const buttonDisable = () => {
|
|
|
|
|
return withTagAll.value ? unUsedList.value.length === 0 : unTagList.value.length === 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const onClean = async () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
let params = {
|
|
|
|
|