diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-08-13 20:12:29 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-13 20:12:29 +0900 |
| commit | 948785649540e08c1610b1dcce6b37e99b5e8039 (patch) | |
| tree | f5e57a0ecca79c8fb244b4c6af53be8e4b7a53fd /packages/frontend/src/pages/user-info.vue | |
| parent | fix(frontend/MkUrlPreview): allow fullscreen from tweets (#11712) (diff) | |
| download | misskey-948785649540e08c1610b1dcce6b37e99b5e8039.tar.gz misskey-948785649540e08c1610b1dcce6b37e99b5e8039.tar.bz2 misskey-948785649540e08c1610b1dcce6b37e99b5e8039.zip | |
feat: refine announcement (#11497)
* wip
* Update read-announcement.ts
* wip
* wip
* wip
* Update index.d.ts
* wip
* Create 1691649257651-refine-announcement.js
* wip
* wip
* wip
* wip
* wip
* wip
* Update announcements.vue
* wip
* wip
* Update announcements.vue
* wip
* Update announcements.vue
* wip
* Update misskey-js.api.md
* Update users.ts
* Create MkAnnouncementDialog.stories.impl.ts
* wip
* wip
* Create AnnouncementService.ts
Diffstat (limited to 'packages/frontend/src/pages/user-info.vue')
| -rw-r--r-- | packages/frontend/src/pages/user-info.vue | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/packages/frontend/src/pages/user-info.vue b/packages/frontend/src/pages/user-info.vue index 42b561cfe2..35cd116fad 100644 --- a/packages/frontend/src/pages/user-info.vue +++ b/packages/frontend/src/pages/user-info.vue @@ -132,6 +132,31 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </MkFolder> + <MkFolder v-if="user.host == null && iAmModerator"> + <template #icon><i class="ti ti-speakerphone"></i></template> + <template #label>{{ i18n.ts.announcements }}</template> + <div class="_gaps"> + <MkButton primary rounded @click="createAnnouncement"><i class="ti ti-plus"></i> {{ i18n.ts.new }}</MkButton> + + <MkPagination :pagination="announcementsPagination"> + <template #default="{ items }"> + <div class="_gaps_s"> + <div v-for="announcement in items" :key="announcement.id" v-panel :class="$style.announcementItem" @click="editAnnouncement(announcement)"> + <span style="margin-right: 0.5em;"> + <i v-if="announcement.icon === 'info'" class="ti ti-info-circle"></i> + <i v-else-if="announcement.icon === 'warning'" class="ti ti-alert-triangle" style="color: var(--warn);"></i> + <i v-else-if="announcement.icon === 'error'" class="ti ti-circle-x" style="color: var(--error);"></i> + <i v-else-if="announcement.icon === 'success'" class="ti ti-check" style="color: var(--success);"></i> + </span> + <span>{{ announcement.title }}</span> + <span v-if="announcement.reads > 0" style="margin-left: auto; opacity: 0.7;">{{ i18n.ts.messageRead }}</span> + </div> + </div> + </template> + </MkPagination> + </div> + </MkFolder> + <MkFolder> <template #icon><i class="ti ti-password"></i></template> <template #label>IP</template> @@ -185,7 +210,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { computed, watch } from 'vue'; +import { computed, defineAsyncComponent, watch } from 'vue'; import * as misskey from 'misskey-js'; import MkChart from '@/components/MkChart.vue'; import MkObjectView from '@/components/MkObjectView.vue'; @@ -207,6 +232,7 @@ import { definePageMetadata } from '@/scripts/page-metadata'; import { i18n } from '@/i18n'; import { iAmAdmin, iAmModerator, $i } from '@/account'; import MkRolePreview from '@/components/MkRolePreview.vue'; +import MkPagination, { Paging } from '@/components/MkPagination.vue'; const props = withDefaults(defineProps<{ userId: string; @@ -233,6 +259,13 @@ const filesPagination = { userId: props.userId, })), }; +const announcementsPagination = { + endpoint: 'admin/announcements/list' as const, + limit: 10, + params: computed(() => ({ + userId: props.userId, + })), +}; let expandedRoles = $ref([]); function createFetcher() { @@ -406,6 +439,19 @@ function toggleRoleItem(role) { } } +function createAnnouncement() { + os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), { + user, + }, {}, 'closed'); +} + +function editAnnouncement(announcement) { + os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), { + user, + announcement, + }, {}, 'closed'); +} + watch(() => props.userId, () => { init = createFetcher(); }, { @@ -569,4 +615,11 @@ definePageMetadata(computed(() => ({ margin-left: 8px; align-self: center; } + +.announcementItem { + display: flex; + padding: 8px 12px; + border-radius: 6px; + cursor: pointer; +} </style> |