diff --git a/open-isle-cli/src/components/CommentEditor.vue b/open-isle-cli/src/components/CommentEditor.vue index f47d3b67a..f9bbe8145 100644 --- a/open-isle-cli/src/components/CommentEditor.vue +++ b/open-isle-cli/src/components/CommentEditor.vue @@ -19,7 +19,7 @@ + + diff --git a/open-isle-cli/src/components/PostEditor.vue b/open-isle-cli/src/components/PostEditor.vue index e35970ecc..555fcdfb4 100644 --- a/open-isle-cli/src/components/PostEditor.vue +++ b/open-isle-cli/src/components/PostEditor.vue @@ -32,6 +32,10 @@ export default { loading: { type: Boolean, default: false + }, + disabled: { + type: Boolean, + default: false } }, setup(props, { emit }) { @@ -48,6 +52,18 @@ export default { } ) + watch( + () => props.disabled, + val => { + if (!vditorInstance.value) return + if (val) { + vditorInstance.value.disabled() + } else if (!props.loading) { + vditorInstance.value.enable() + } + } + ) + watch( () => props.modelValue, val => { @@ -118,6 +134,9 @@ export default { }, after() { vditorInstance.value.setValue(props.modelValue) + if (props.loading || props.disabled) { + vditorInstance.value.disabled() + } } }) }) diff --git a/open-isle-cli/src/router/index.js b/open-isle-cli/src/router/index.js index 2833537c0..8a5a6cc8f 100644 --- a/open-isle-cli/src/router/index.js +++ b/open-isle-cli/src/router/index.js @@ -8,6 +8,7 @@ import SignupPageView from '../views/SignupPageView.vue' import NewPostPageView from '../views/NewPostPageView.vue' import SettingsPageView from '../views/SettingsPageView.vue' import ProfileView from '../views/ProfileView.vue' +import NotFoundPageView from '../views/NotFoundPageView.vue' const routes = [ { @@ -55,6 +56,15 @@ const routes = [ name: 'users', component: ProfileView }, + { + path: '/404', + name: 'not-found', + component: NotFoundPageView + }, + { + path: '/:pathMatch(.*)*', + redirect: '/404' + } ] const router = createRouter({ diff --git a/open-isle-cli/src/views/NewPostPageView.vue b/open-isle-cli/src/views/NewPostPageView.vue index f2c68745b..fd97d3c69 100644 --- a/open-isle-cli/src/views/NewPostPageView.vue +++ b/open-isle-cli/src/views/NewPostPageView.vue @@ -3,7 +3,8 @@
- + +
@@ -22,7 +23,12 @@ 存草稿
-
发布
+
发布
发布中...
@@ -31,16 +37,17 @@ @@ -296,6 +304,10 @@ export default { opacity: 0.7; } +.post-editor-container { + position: relative; +} + .post-submit { background-color: var(--primary-color); color: #fff; @@ -305,9 +317,17 @@ export default { cursor: pointer; } +.post-submit.disabled { + background-color: var(--primary-color-disabled); + cursor: not-allowed; +} + .post-submit:hover { background-color: var(--primary-color-hover); } +.post-submit.disabled:hover { + background-color: var(--primary-color-disabled); +} .post-submit-loading { color: white; diff --git a/open-isle-cli/src/views/NotFoundPageView.vue b/open-isle-cli/src/views/NotFoundPageView.vue new file mode 100644 index 000000000..77a85310a --- /dev/null +++ b/open-isle-cli/src/views/NotFoundPageView.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/open-isle-cli/src/views/PostPageView.vue b/open-isle-cli/src/views/PostPageView.vue index 4e575914b..9c4a12d39 100644 --- a/open-isle-cli/src/views/PostPageView.vue +++ b/open-isle-cli/src/views/PostPageView.vue @@ -59,7 +59,14 @@ - +
+ + +
@@ -104,6 +111,7 @@ import ArticleTags from '../components/ArticleTags.vue' import ArticleCategory from '../components/ArticleCategory.vue' import ReactionsGroup from '../components/ReactionsGroup.vue' import DropdownMenu from '../components/DropdownMenu.vue' +import LoginOverlay from '../components/LoginOverlay.vue' import { renderMarkdown } from '../utils/markdown' import { API_BASE_URL, toast } from '../main' import { getToken, authState } from '../utils/auth' @@ -114,7 +122,7 @@ hatch.register() export default { name: 'PostPageView', - components: { CommentItem, CommentEditor, BaseTimeline, ArticleTags, ArticleCategory, ReactionsGroup, DropdownMenu }, + components: { CommentItem, CommentEditor, BaseTimeline, ArticleTags, ArticleCategory, ReactionsGroup, DropdownMenu, LoginOverlay }, setup() { const route = useRoute() const postId = route.params.id @@ -235,7 +243,12 @@ export default { headers: { Authorization: token ? `Bearer ${token}` : '' } }) isWaitingFetchingPost.value = false; - if (!res.ok) return + if (!res.ok) { + if (res.status === 404) { + router.replace('/404') + } + return + } const data = await res.json() postContent.value = data.content author.value = data.author @@ -779,4 +792,8 @@ export default { .copy-link:hover { background-color: #e2e2e2; } + +.comment-editor-wrapper { + position: relative; +} diff --git a/open-isle-cli/src/views/ProfileView.vue b/open-isle-cli/src/views/ProfileView.vue index 03ab772cf..b5c842a34 100644 --- a/open-isle-cli/src/views/ProfileView.vue +++ b/open-isle-cli/src/views/ProfileView.vue @@ -281,6 +281,8 @@ export default { const data = await res.json() user.value = data subscribed.value = !!data.subscribed + } else if (res.status === 404) { + router.replace('/404') } }