mirror of
https://github.com/misskey-dev/misskey.git
synced 2024-12-27 21:10:20 +01:00
Improve client
This commit is contained in:
parent
d61a74fb88
commit
70a8dd30e0
7 changed files with 187 additions and 13 deletions
|
@ -138,7 +138,7 @@ flagAsBotDescription: "このアカウントがプログラムによって運用
|
||||||
flagAsCat: "Catとして設定"
|
flagAsCat: "Catとして設定"
|
||||||
flagAsCatDescription: "このアカウントが猫であることを示す場合は、このフラグをオンにします。"
|
flagAsCatDescription: "このアカウントが猫であることを示す場合は、このフラグをオンにします。"
|
||||||
autoAcceptFollowed: "フォロー中ユーザーからのフォロリクを自動承認"
|
autoAcceptFollowed: "フォロー中ユーザーからのフォロリクを自動承認"
|
||||||
addAcount: "アカウント追加"
|
addAccount: "アカウントを追加"
|
||||||
loginFailed: "ログインに失敗しました"
|
loginFailed: "ログインに失敗しました"
|
||||||
showOnRemote: "リモートで表示"
|
showOnRemote: "リモートで表示"
|
||||||
general: "全般"
|
general: "全般"
|
||||||
|
@ -452,7 +452,7 @@ category: "カテゴリ"
|
||||||
tags: "タグ"
|
tags: "タグ"
|
||||||
docSource: "このドキュメントのソース"
|
docSource: "このドキュメントのソース"
|
||||||
createAccount: "アカウントを作成"
|
createAccount: "アカウントを作成"
|
||||||
existingAcount: "既存のアカウント"
|
existingAccount: "既存のアカウント"
|
||||||
regenerate: "再生成"
|
regenerate: "再生成"
|
||||||
fontSize: "フォントサイズ"
|
fontSize: "フォントサイズ"
|
||||||
noFollowRequests: "フォロー申請はありません"
|
noFollowRequests: "フォロー申請はありません"
|
||||||
|
@ -735,6 +735,8 @@ enabled: "有効"
|
||||||
disabled: "無効"
|
disabled: "無効"
|
||||||
quickAction: "クイックアクション"
|
quickAction: "クイックアクション"
|
||||||
user: "ユーザー"
|
user: "ユーザー"
|
||||||
|
administration: "管理"
|
||||||
|
accounts: "アカウント"
|
||||||
|
|
||||||
_email:
|
_email:
|
||||||
_follow:
|
_follow:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
||||||
"version": "12.78.0-beta.4",
|
"version": "12.78.0-beta.5",
|
||||||
"codename": "indigo",
|
"codename": "indigo",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -16,13 +16,13 @@
|
||||||
<FormButton v-if="$instance.disableRegistration" @click="invite"><i class="fas fa-user"></i> {{ $ts.invite }}</FormButton>
|
<FormButton v-if="$instance.disableRegistration" @click="invite"><i class="fas fa-user"></i> {{ $ts.invite }}</FormButton>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
|
<template #label>{{ $ts.administration }}</template>
|
||||||
<FormLink :active="page === 'users'" replace to="/instance/users"><template #icon><i class="fas fa-users"></i></template>{{ $ts.users }}</FormLink>
|
<FormLink :active="page === 'users'" replace to="/instance/users"><template #icon><i class="fas fa-users"></i></template>{{ $ts.users }}</FormLink>
|
||||||
<FormLink :active="page === 'emojis'" replace to="/instance/emojis"><template #icon><i class="fas fa-laugh"></i></template>{{ $ts.customEmojis }}</FormLink>
|
<FormLink :active="page === 'emojis'" replace to="/instance/emojis"><template #icon><i class="fas fa-laugh"></i></template>{{ $ts.customEmojis }}</FormLink>
|
||||||
<FormLink :active="page === 'federation'" replace to="/instance/federation"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.federation }}</FormLink>
|
<FormLink :active="page === 'federation'" replace to="/instance/federation"><template #icon><i class="fas fa-globe"></i></template>{{ $ts.federation }}</FormLink>
|
||||||
<FormLink :active="page === 'queue'" replace to="/instance/queue"><template #icon><i class="fas fa-clipboard-list"></i></template>{{ $ts.jobQueue }}</FormLink>
|
<FormLink :active="page === 'queue'" replace to="/instance/queue"><template #icon><i class="fas fa-clipboard-list"></i></template>{{ $ts.jobQueue }}</FormLink>
|
||||||
<FormLink :active="page === 'files'" replace to="/instance/files"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</FormLink>
|
<FormLink :active="page === 'files'" replace to="/instance/files"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</FormLink>
|
||||||
<FormLink :active="page === 'announcements'" replace to="/instance/announcements"><template #icon><i class="fas fa-broadcast-tower"></i></template>{{ $ts.announcements }}</FormLink>
|
<FormLink :active="page === 'announcements'" replace to="/instance/announcements"><template #icon><i class="fas fa-broadcast-tower"></i></template>{{ $ts.announcements }}</FormLink>
|
||||||
<FormLink :active="page === 'database'" replace to="/instance/database"><template #icon><i class="fas fa-database"></i></template>{{ $ts.database }}</FormLink>
|
|
||||||
<FormLink :active="page === 'abuses'" replace to="/instance/abuses"><template #icon><i class="fas fa-exclamation-circle"></i></template>{{ $ts.abuseReports }}</FormLink>
|
<FormLink :active="page === 'abuses'" replace to="/instance/abuses"><template #icon><i class="fas fa-exclamation-circle"></i></template>{{ $ts.abuseReports }}</FormLink>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
|
@ -39,6 +39,10 @@
|
||||||
<FormLink :active="page === 'proxy-account'" replace to="/instance/proxy-account"><template #icon><i class="fas fa-ghost"></i></template>{{ $ts.proxyAccount }}</FormLink>
|
<FormLink :active="page === 'proxy-account'" replace to="/instance/proxy-account"><template #icon><i class="fas fa-ghost"></i></template>{{ $ts.proxyAccount }}</FormLink>
|
||||||
<FormLink :active="page === 'other-settings'" replace to="/instance/other-settings"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.other }}</FormLink>
|
<FormLink :active="page === 'other-settings'" replace to="/instance/other-settings"><template #icon><i class="fas fa-cogs"></i></template>{{ $ts.other }}</FormLink>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
<FormGroup>
|
||||||
|
<template #label>{{ $ts.info }}</template>
|
||||||
|
<FormLink :active="page === 'database'" replace to="/instance/database"><template #icon><i class="fas fa-database"></i></template>{{ $ts.database }}</FormLink>
|
||||||
|
</FormGroup>
|
||||||
</FormBase>
|
</FormBase>
|
||||||
</div>
|
</div>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
|
@ -229,7 +233,7 @@ export default defineComponent({
|
||||||
.lxpfedzu {
|
.lxpfedzu {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
|
||||||
> img {
|
> .icon {
|
||||||
display: block;
|
display: block;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
height: 42px;
|
height: 42px;
|
||||||
|
|
148
src/client/pages/settings/accounts.vue
Normal file
148
src/client/pages/settings/accounts.vue
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
<template>
|
||||||
|
<FormBase>
|
||||||
|
<FormSuspense :p="init">
|
||||||
|
<FormButton @click="addAccount" primary><i class="fas fa-plus"></i> {{ $ts.addAccount }}</FormButton>
|
||||||
|
|
||||||
|
<div class="_formItem _button" v-for="account in accounts" :key="account.id" @click="menu(account, $event)">
|
||||||
|
<div class="_formPanel lcjjdxlm">
|
||||||
|
<div class="avatar">
|
||||||
|
<MkAvatar :user="account" class="avatar"/>
|
||||||
|
</div>
|
||||||
|
<div class="body">
|
||||||
|
<div class="name">
|
||||||
|
<MkUserName :user="account"/>
|
||||||
|
</div>
|
||||||
|
<div class="acct">
|
||||||
|
<MkAcct :user="account"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</FormSuspense>
|
||||||
|
</FormBase>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import FormSuspense from '@client/components/form/suspense.vue';
|
||||||
|
import FormLink from '@client/components/form/link.vue';
|
||||||
|
import FormBase from '@client/components/form/base.vue';
|
||||||
|
import FormGroup from '@client/components/form/group.vue';
|
||||||
|
import FormButton from '@client/components/form/button.vue';
|
||||||
|
import * as os from '@client/os';
|
||||||
|
import * as symbols from '@client/symbols';
|
||||||
|
import { getAccounts, addAccount, login } from '@client/account';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
FormBase,
|
||||||
|
FormSuspense,
|
||||||
|
FormButton,
|
||||||
|
},
|
||||||
|
|
||||||
|
emits: ['info'],
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
[symbols.PAGE_INFO]: {
|
||||||
|
title: this.$ts.accounts,
|
||||||
|
icon: 'fas fa-users',
|
||||||
|
},
|
||||||
|
storedAccounts: getAccounts().filter(x => x.id !== this.$i.id),
|
||||||
|
accounts: null,
|
||||||
|
init: () => os.api('users/show', {
|
||||||
|
userIds: this.storedAccounts.map(x => x.id)
|
||||||
|
}).then(accounts => {
|
||||||
|
this.accounts = accounts;
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.$emit('info', this[symbols.PAGE_INFO]);
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
menu(account, ev) {
|
||||||
|
os.modalMenu([{
|
||||||
|
text: this.$ts.switch,
|
||||||
|
icon: 'fas fa-exchange-alt',
|
||||||
|
action: () => this.switchAccount(account),
|
||||||
|
}, {
|
||||||
|
text: this.$ts.remove,
|
||||||
|
icon: 'fas fa-trash-alt',
|
||||||
|
danger: true,
|
||||||
|
action: () => this.removeAccount(account),
|
||||||
|
}], ev.currentTarget || ev.target);
|
||||||
|
},
|
||||||
|
|
||||||
|
addAccount(ev) {
|
||||||
|
os.modalMenu([{
|
||||||
|
text: this.$ts.existingAccount,
|
||||||
|
action: () => { this.addExistingAccount(); },
|
||||||
|
}, {
|
||||||
|
text: this.$ts.createAccount,
|
||||||
|
action: () => { this.createAccount(); },
|
||||||
|
}], ev.currentTarget || ev.target);
|
||||||
|
},
|
||||||
|
|
||||||
|
addExistingAccount() {
|
||||||
|
os.popup(import('@client/components/signin-dialog.vue'), {}, {
|
||||||
|
done: res => {
|
||||||
|
addAccount(res.id, res.i);
|
||||||
|
os.success();
|
||||||
|
},
|
||||||
|
}, 'closed');
|
||||||
|
},
|
||||||
|
|
||||||
|
createAccount() {
|
||||||
|
os.popup(import('@client/components/signup-dialog.vue'), {}, {
|
||||||
|
done: res => {
|
||||||
|
addAccount(res.id, res.i);
|
||||||
|
this.switchAccountWithToken(res.i);
|
||||||
|
},
|
||||||
|
}, 'closed');
|
||||||
|
},
|
||||||
|
|
||||||
|
switchAccount(account: any) {
|
||||||
|
const storedAccounts = getAccounts();
|
||||||
|
const token = storedAccounts.find(x => x.id === account.id).token;
|
||||||
|
this.switchAccountWithToken(token);
|
||||||
|
},
|
||||||
|
|
||||||
|
switchAccountWithToken(token: string) {
|
||||||
|
login(token);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.lcjjdxlm {
|
||||||
|
display: flex;
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
> .avatar {
|
||||||
|
display: block;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin: 0 12px 0 0;
|
||||||
|
|
||||||
|
> .avatar {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .body {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
width: calc(100% - 62px);
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
> .name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -2,6 +2,14 @@
|
||||||
<div class="vvcocwet" :class="{ wide: !narrow }" ref="el">
|
<div class="vvcocwet" :class="{ wide: !narrow }" ref="el">
|
||||||
<div class="nav" v-if="!narrow || page == null">
|
<div class="nav" v-if="!narrow || page == null">
|
||||||
<FormBase>
|
<FormBase>
|
||||||
|
<FormGroup>
|
||||||
|
<div class="_formItem">
|
||||||
|
<div class="_formPanel lwjxoukj">
|
||||||
|
<MkAvatar :user="$i" class="avatar"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<FormLink :active="page === 'accounts'" replace to="/settings/accounts"><template #icon><i class="fas fa-users"></i></template>{{ $ts.accounts }}</FormLink>
|
||||||
|
</FormGroup>
|
||||||
<FormGroup>
|
<FormGroup>
|
||||||
<template #label>{{ $ts.basicSettings }}</template>
|
<template #label>{{ $ts.basicSettings }}</template>
|
||||||
<FormLink :active="page === 'profile'" replace to="/settings/profile"><template #icon><i class="fas fa-user"></i></template>{{ $ts.profile }}</FormLink>
|
<FormLink :active="page === 'profile'" replace to="/settings/profile"><template #icon><i class="fas fa-user"></i></template>{{ $ts.profile }}</FormLink>
|
||||||
|
@ -87,6 +95,7 @@ export default defineComponent({
|
||||||
const component = computed(() => {
|
const component = computed(() => {
|
||||||
if (page.value == null) return null;
|
if (page.value == null) return null;
|
||||||
switch (page.value) {
|
switch (page.value) {
|
||||||
|
case 'accounts': return defineAsyncComponent(() => import('./accounts.vue'));
|
||||||
case 'profile': return defineAsyncComponent(() => import('./profile.vue'));
|
case 'profile': return defineAsyncComponent(() => import('./profile.vue'));
|
||||||
case 'privacy': return defineAsyncComponent(() => import('./privacy.vue'));
|
case 'privacy': return defineAsyncComponent(() => import('./privacy.vue'));
|
||||||
case 'reaction': return defineAsyncComponent(() => import('./reaction.vue'));
|
case 'reaction': return defineAsyncComponent(() => import('./reaction.vue'));
|
||||||
|
@ -209,4 +218,15 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.lwjxoukj {
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
> .avatar {
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
width: 42px;
|
||||||
|
height: 42px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -157,11 +157,11 @@ export default defineComponent({
|
||||||
avatar: this.$i,
|
avatar: this.$i,
|
||||||
}, null, ...accountItemPromises, {
|
}, null, ...accountItemPromises, {
|
||||||
icon: 'fas fa-plus',
|
icon: 'fas fa-plus',
|
||||||
text: this.$ts.addAcount,
|
text: this.$ts.addAccount,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.modalMenu([{
|
os.modalMenu([{
|
||||||
text: this.$ts.existingAcount,
|
text: this.$ts.existingAccount,
|
||||||
action: () => { this.addAcount(); },
|
action: () => { this.addAccount(); },
|
||||||
}, {
|
}, {
|
||||||
text: this.$ts.createAccount,
|
text: this.$ts.createAccount,
|
||||||
action: () => { this.createAccount(); },
|
action: () => { this.createAccount(); },
|
||||||
|
@ -177,7 +177,7 @@ export default defineComponent({
|
||||||
}, 'closed');
|
}, 'closed');
|
||||||
},
|
},
|
||||||
|
|
||||||
addAcount() {
|
addAccount() {
|
||||||
os.popup(import('@client/components/signin-dialog.vue'), {}, {
|
os.popup(import('@client/components/signin-dialog.vue'), {}, {
|
||||||
done: res => {
|
done: res => {
|
||||||
addAccount(res.id, res.i);
|
addAccount(res.id, res.i);
|
||||||
|
|
|
@ -141,11 +141,11 @@ export default defineComponent({
|
||||||
avatar: this.$i,
|
avatar: this.$i,
|
||||||
}, null, ...accountItemPromises, {
|
}, null, ...accountItemPromises, {
|
||||||
icon: 'fas fa-plus',
|
icon: 'fas fa-plus',
|
||||||
text: this.$ts.addAcount,
|
text: this.$ts.addAccount,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.modalMenu([{
|
os.modalMenu([{
|
||||||
text: this.$ts.existingAcount,
|
text: this.$ts.existingAccount,
|
||||||
action: () => { this.addAcount(); },
|
action: () => { this.addAccount(); },
|
||||||
}, {
|
}, {
|
||||||
text: this.$ts.createAccount,
|
text: this.$ts.createAccount,
|
||||||
action: () => { this.createAccount(); },
|
action: () => { this.createAccount(); },
|
||||||
|
@ -161,7 +161,7 @@ export default defineComponent({
|
||||||
}, 'closed');
|
}, 'closed');
|
||||||
},
|
},
|
||||||
|
|
||||||
addAcount() {
|
addAccount() {
|
||||||
os.popup(import('@client/components/signin-dialog.vue'), {}, {
|
os.popup(import('@client/components/signin-dialog.vue'), {}, {
|
||||||
done: res => {
|
done: res => {
|
||||||
addAccount(res.id, res.i);
|
addAccount(res.id, res.i);
|
||||||
|
|
Loading…
Reference in a new issue