summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/user-info.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-08-13 20:12:29 +0900
committerGitHub <noreply@github.com>2023-08-13 20:12:29 +0900
commit948785649540e08c1610b1dcce6b37e99b5e8039 (patch)
treef5e57a0ecca79c8fb244b4c6af53be8e4b7a53fd /packages/frontend/src/pages/user-info.vue
parentfix(frontend/MkUrlPreview): allow fullscreen from tweets (#11712) (diff)
downloadmisskey-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.vue55
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>