summaryrefslogtreecommitdiff
path: root/src/client/app/admin
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-11-15 04:15:42 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-11-15 04:15:42 +0900
commit56d571c0f0f525263ea6257a5d5a2e7a9085e203 (patch)
tree69c40b1012f8c632e6601c50be9c7e2fb1a12e5c /src/client/app/admin
parent[Client] Add missing icon (diff)
downloadmisskey-56d571c0f0f525263ea6257a5d5a2e7a9085e203.tar.gz
misskey-56d571c0f0f525263ea6257a5d5a2e7a9085e203.tar.bz2
misskey-56d571c0f0f525263ea6257a5d5a2e7a9085e203.zip
Moderator system
Closes #2357
Diffstat (limited to 'src/client/app/admin')
-rw-r--r--src/client/app/admin/views/index.vue9
-rw-r--r--src/client/app/admin/views/moderators.vue61
2 files changed, 68 insertions, 2 deletions
diff --git a/src/client/app/admin/views/index.vue b/src/client/app/admin/views/index.vue
index a5ffb2098e..116d794b91 100644
--- a/src/client/app/admin/views/index.vue
+++ b/src/client/app/admin/views/index.vue
@@ -20,6 +20,7 @@
<ul>
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }"><fa icon="home" fixed-width/>{{ $t('dashboard') }}</li>
<li @click="nav('instance')" :class="{ active: page == 'instance' }"><fa icon="cog" fixed-width/>{{ $t('instance') }}</li>
+ <li @click="nav('moderators')" :class="{ active: page == 'moderators' }"><fa :icon="faHeadset" fixed-width/>{{ $t('moderators') }}</li>
<li @click="nav('users')" :class="{ active: page == 'users' }"><fa icon="users" fixed-width/>{{ $t('users') }}</li>
<li @click="nav('emoji')" :class="{ active: page == 'emoji' }"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</li>
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</li>
@@ -38,6 +39,7 @@
<main>
<div v-if="page == 'dashboard'"><x-dashboard/></div>
<div v-if="page == 'instance'"><x-instance/></div>
+ <div v-if="page == 'moderators'"><x-moderators/></div>
<div v-if="page == 'users'"><x-users/></div>
<div v-if="page == 'emoji'"><x-emoji/></div>
<div v-if="page == 'announcements'"><x-announcements/></div>
@@ -54,11 +56,12 @@ import i18n from '../../i18n';
import { version } from '../../config';
import XDashboard from "./dashboard.vue";
import XInstance from "./instance.vue";
+import XModerators from "./moderators.vue";
import XEmoji from "./emoji.vue";
import XAnnouncements from "./announcements.vue";
import XHashtags from "./hashtags.vue";
import XUsers from "./users.vue";
-import { faArrowLeft } from '@fortawesome/free-solid-svg-icons';
+import { faHeadset, faArrowLeft } from '@fortawesome/free-solid-svg-icons';
import { faGrin } from '@fortawesome/free-regular-svg-icons';
// Detect the user agent
@@ -70,6 +73,7 @@ export default Vue.extend({
components: {
XDashboard,
XInstance,
+ XModerators,
XEmoji,
XAnnouncements,
XHashtags,
@@ -85,7 +89,8 @@ export default Vue.extend({
isMobile,
navOpend: !isMobile,
faGrin,
- faArrowLeft
+ faArrowLeft,
+ faHeadset
};
},
methods: {
diff --git a/src/client/app/admin/views/moderators.vue b/src/client/app/admin/views/moderators.vue
new file mode 100644
index 0000000000..ebf20c12fd
--- /dev/null
+++ b/src/client/app/admin/views/moderators.vue
@@ -0,0 +1,61 @@
+<template>
+<div class="jnhmugbb">
+ <ui-card>
+ <div slot="title"><fa icon="plus"/> {{ $t('add-moderator.title') }}</div>
+ <section class="fit-top">
+ <ui-input v-model="username" type="text">
+ <span slot="prefix">@</span>
+ </ui-input>
+ <ui-button @click="add" :disabled="adding">{{ $t('add-moderator.add') }}</ui-button>
+ </section>
+ </ui-card>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import i18n from '../../i18n';
+import parseAcct from "../../../../misc/acct/parse";
+
+export default Vue.extend({
+ i18n: i18n('admin/views/moderators.vue'),
+
+ data() {
+ return {
+ username: '',
+ adding: false
+ };
+ },
+
+ methods: {
+ async add() {
+ this.adding = true;
+
+ const process = async () => {
+ const user = await this.$root.api('users/show', parseAcct(this.username));
+ await this.$root.api('admin/moderators/add', { userId: user.id });
+ this.$root.alert({
+ type: 'success',
+ text: this.$t('add-moderator.added')
+ });
+ };
+
+ await process().catch(e => {
+ this.$root.alert({
+ type: 'error',
+ text: e
+ });
+ });
+
+ this.adding = false;
+ },
+ }
+});
+</script>
+
+<style lang="stylus" scoped>
+.jnhmugbb
+ @media (min-width 500px)
+ padding 16px
+
+</style>