From 9e76b58caca4dfca4de78f550bd7dab561c20027 Mon Sep 17 00:00:00 2001 From: tim Date: Sun, 6 Jul 2025 01:38:48 +0800 Subject: [PATCH] feat: poster --- open-isle-cli/src/components/Dropdown.vue | 41 ++++++++++++++++----- open-isle-cli/src/components/PostEditor.vue | 2 +- open-isle-cli/src/views/NewPostPageView.vue | 39 ++++++++++++++++---- 3 files changed, 64 insertions(+), 18 deletions(-) diff --git a/open-isle-cli/src/components/Dropdown.vue b/open-isle-cli/src/components/Dropdown.vue index ab87cd0b1..95cde8d00 100644 --- a/open-isle-cli/src/components/Dropdown.vue +++ b/open-isle-cli/src/components/Dropdown.vue @@ -2,11 +2,20 @@ @@ -101,13 +109,17 @@ export default { const selectedLabels = computed(() => { if (props.multiple) { - return options.value.filter(o => (props.modelValue || []).includes(o.id)).map(o => o.name) + return options.value.filter(o => (props.modelValue || []).includes(o.id)) } const match = options.value.find(o => o.id === props.modelValue) - return match ? [match.name] : [] + return match ? [match] : [] }) - return { open, toggle, select, search, filteredOptions, wrapper, selectedLabels } + const isSelected = (id) => { + return selectedLabels.value.some(label => label.id === id) + } + + return { open, toggle, select, search, filteredOptions, wrapper, selectedLabels, isSelected } } } @@ -117,6 +129,7 @@ export default { position: relative; width: 200px; } + .dropdown-display { border: 1px solid #ccc; border-radius: 5px; @@ -126,9 +139,11 @@ export default { justify-content: space-between; align-items: center; } + .placeholder { color: gray; } + .dropdown-menu { position: absolute; top: 100%; @@ -140,31 +155,39 @@ export default { max-height: 200px; overflow-y: auto; } + .dropdown-search { display: flex; align-items: center; padding: 5px; border-bottom: 1px solid #eee; } + .dropdown-search input { flex: 1; border: none; outline: none; margin-left: 5px; } + .dropdown-option { display: flex; align-items: center; - padding: 5px 10px; + padding: 10px 20px; gap: 5px; cursor: pointer; } + +.dropdown-option.selected { + background-color: #f5f5f5; +} + .dropdown-option:hover { background-color: #f5f5f5; } + .option-icon { width: 16px; height: 16px; } - diff --git a/open-isle-cli/src/components/PostEditor.vue b/open-isle-cli/src/components/PostEditor.vue index 863f82a3f..931992850 100644 --- a/open-isle-cli/src/components/PostEditor.vue +++ b/open-isle-cli/src/components/PostEditor.vue @@ -28,7 +28,7 @@ export default { onMounted(() => { vditorInstance.value = new Vditor(props.editorId, { placeholder: '请输入正文...', - height: 500, + height: 450, theme: 'classic', preview: { theme: { current: 'light' }, diff --git a/open-isle-cli/src/views/NewPostPageView.vue b/open-isle-cli/src/views/NewPostPageView.vue index 97979c4ff..787457e4f 100644 --- a/open-isle-cli/src/views/NewPostPageView.vue +++ b/open-isle-cli/src/views/NewPostPageView.vue @@ -6,10 +6,15 @@
- - +
+ + +
+
+
存草稿
+
发布
+
-
发布
@@ -61,9 +66,16 @@ export default { font-weight: bold; } -.post-submit { +.post-draft { margin-left: 20px; - margin-top: 20px; + color: var(--primary-color); + padding: 10px 20px; + border-radius: 10px; + cursor: pointer; + text-decoration: underline; +} + +.post-submit { background-color: var(--primary-color); color: #fff; padding: 10px 20px; @@ -76,12 +88,23 @@ export default { background-color: var(--primary-color-hover); } -.post-options { - margin-top: 20px; +.post-options-left { display: flex; - flex-direction: column; gap: 10px; } +.post-options-right { + display: flex; + gap: 10px; +} + +.post-options { + display: flex; + justify-content: space-between; + align-items: center; + margin-left: 20px; + margin-top: 20px; +} +