diff --git a/src/components/DialogManager.vue b/src/components/DialogManager.vue index e54b5a8..3d3777a 100644 --- a/src/components/DialogManager.vue +++ b/src/components/DialogManager.vue @@ -8,7 +8,7 @@ :style="$content_lg(contentStyle)" >
-
+
+
@@ -72,7 +76,7 @@ import { genModelKey } from 'utils/model' import { computed, ref } from 'vue' import { useI18n } from 'vue-i18n' -const { isMobile, cardWidth, gutter, aspect } = useConfig() +const { isMobile, gutter, cardSize } = useConfig() const { data, folders } = useModels() const { t } = useI18n() @@ -126,14 +130,14 @@ const sortOrderOptions = ref( ) const itemSize = computed(() => { - let itemWidth = cardWidth + let itemHeight = cardSize.value.height let itemGutter = gutter if (isMobile.value) { const baseSize = 16 - itemWidth = window.innerWidth - baseSize * 2 * 2 + itemHeight = window.innerWidth - baseSize * 2 * 2 itemGutter = baseSize * 2 } - return itemWidth / aspect + itemGutter + return itemHeight + itemGutter }) const { width } = useElementSize(contentContainer) @@ -142,9 +146,9 @@ const cols = computed(() => { if (isMobile.value) { return 1 } - const containerWidth = width.value - return Math.floor((containerWidth - gutter) / (cardWidth + gutter)) + const itemWidth = cardSize.value.width + return Math.floor((containerWidth - gutter) / (itemWidth + gutter)) }) const list = computed(() => { @@ -187,13 +191,56 @@ const list = computed(() => { }) const contentStyle = computed(() => ({ - gridTemplateColumns: `repeat(auto-fit, ${cardWidth}px)`, + gridTemplateColumns: `repeat(auto-fit, ${cardSize.value.width}px)`, gap: `${gutter}px`, paddingLeft: `1rem`, paddingRight: `1rem`, })) -const toolbarStyle = computed(() => ({ - flexDirection: 'row', -})) +const currentCardSize = computed({ + get: () => { + const options = cardSizeOptions.value.map((item) => item.value) + const current = [cardSize.value.width, cardSize.value.height].join('x') + if (options.includes(current)) { + return current + } + return 'custom' + }, + set: (val) => { + if (val === 'custom') { + app.ui?.settings.show(t('size.customTip')) + return + } + + const [width, height] = val.split('x') + app.ui?.settings.setSettingValue( + 'ModelManager.UI.CardWidth', + parseInt(width), + ) + app.ui?.settings.setSettingValue( + 'ModelManager.UI.CardHeight', + parseInt(height), + ) + }, +}) + +const cardSizeOptions = computed(() => { + const defineOptions = { + extraLarge: '240x320', + large: '180x240', + medium: '120x160', + small: '80x120', + custom: 'custom', + } + + return Object.entries(defineOptions).map(([key, value]) => { + return { + label: t(`size.${key}`), + value, + command() { + currentCardSize.value = value + }, + } + }) +}) diff --git a/src/components/ModelCard.vue b/src/components/ModelCard.vue index a68e331..f459a72 100644 --- a/src/components/ModelCard.vue +++ b/src/components/ModelCard.vue @@ -1,6 +1,8 @@