From 135ff280b9b555fb28ae4968979a9d6de2f99f77 Mon Sep 17 00:00:00 2001 From: okpierre <1679025+okpierre@users.noreply.github.com> Date: Sun, 18 Apr 2021 23:17:22 -0400 Subject: [PATCH 01/27] Update index.ts (#7463) --- src/server/web/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/web/index.ts b/src/server/web/index.ts index 953f2b47f..1caab14cc 100644 --- a/src/server/web/index.ts +++ b/src/server/web/index.ts @@ -99,7 +99,7 @@ router.get('/manifest.json', require('./manifest')); router.get('/robots.txt', async ctx => { await send(ctx as any, '/robots.txt', { - root: assets + root: staticAssets }); }); From 4d9e3b9012d0f97cc53df32a700772799f100f73 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 19 Apr 2021 20:06:23 +0900 Subject: [PATCH 02/27] Improve client --- src/client/pages/instance-info.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client/pages/instance-info.vue b/src/client/pages/instance-info.vue index a3cd40299..1a294b858 100644 --- a/src/client/pages/instance-info.vue +++ b/src/client/pages/instance-info.vue @@ -99,9 +99,12 @@ Raw + host-meta host-meta.json nodeinfo + robots.txt + manifest.json From 17f2e39084aab02d34f15487ea74733a2fd85064 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 20 Apr 2021 00:15:53 +0900 Subject: [PATCH 03/27] fix #7466 --- src/models/repositories/user.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/repositories/user.ts b/src/models/repositories/user.ts index 0d59ed254..1ebc16a56 100644 --- a/src/models/repositories/user.ts +++ b/src/models/repositories/user.ts @@ -147,7 +147,7 @@ export class UserRepository extends Repository { } public getOnlineStatus(user: User): string { - if (user.hideOnlineStatus == null) return 'unknown'; + if (user.hideOnlineStatus) return 'unknown'; if (user.lastActiveDate == null) return 'unknown'; const elapsed = Date.now() - user.lastActiveDate.getTime(); return ( From 1043020f2725b175921dc22fcbb213029e3b7d5c Mon Sep 17 00:00:00 2001 From: marihachi Date: Tue, 20 Apr 2021 10:29:08 +0900 Subject: [PATCH 04/27] update mfm.js (#7468) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f3a4930cc..a54ba0441 100644 --- a/package.json +++ b/package.json @@ -181,7 +181,7 @@ "markdown-it": "12.0.5", "markdown-it-anchor": "7.1.0", "matter-js": "0.17.1", - "mfm-js": "0.16.0", + "mfm-js": "0.16.2", "mocha": "8.3.2", "moji": "0.5.1", "ms": "2.1.3", From 8bb6ed625bbc5dc4b14a068f6220747a9af82bee Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 20 Apr 2021 16:58:05 +0900 Subject: [PATCH 05/27] Tweak style --- src/client/components/user-online-indicator.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/components/user-online-indicator.vue b/src/client/components/user-online-indicator.vue index bb98978bb..afaf0e873 100644 --- a/src/client/components/user-online-indicator.vue +++ b/src/client/components/user-online-indicator.vue @@ -29,7 +29,7 @@ export default defineComponent({ diff --git a/src/client/components/signup.vue b/src/client/components/signup.vue index 7b40561ad..671642b29 100644 --- a/src/client/components/signup.vue +++ b/src/client/components/signup.vue @@ -45,7 +45,7 @@ - + {{ $ts.start }} diff --git a/src/client/components/tab.vue b/src/client/components/tab.vue index aca4d32a2..96cbe50fb 100644 --- a/src/client/components/tab.vue +++ b/src/client/components/tab.vue @@ -29,6 +29,7 @@ export default defineComponent({ diff --git a/src/client/pages/instance/bot-protection.vue b/src/client/pages/instance/bot-protection.vue new file mode 100644 index 000000000..449b8a233 --- /dev/null +++ b/src/client/pages/instance/bot-protection.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/client/pages/instance/database.vue b/src/client/pages/instance/database.vue new file mode 100644 index 000000000..a41d61ce2 --- /dev/null +++ b/src/client/pages/instance/database.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/client/pages/instance/email-settings.vue b/src/client/pages/instance/email-settings.vue new file mode 100644 index 000000000..9965a1420 --- /dev/null +++ b/src/client/pages/instance/email-settings.vue @@ -0,0 +1,127 @@ + + + diff --git a/src/client/pages/instance/emojis.vue b/src/client/pages/instance/emojis.vue index 88bebb40e..fd641703c 100644 --- a/src/client/pages/instance/emojis.vue +++ b/src/client/pages/instance/emojis.vue @@ -1,50 +1,46 @@ @@ -67,6 +63,8 @@ export default defineComponent({ MkPagination, }, + emits: ['info'], + data() { return { [symbols.PAGE_INFO]: { @@ -99,6 +97,10 @@ export default defineComponent({ } }, + async mounted() { + this.$emit('info', this[symbols.PAGE_INFO]); + }, + methods: { async add(e) { const files = await selectFile(e.currentTarget || e.target, null, true); @@ -150,85 +152,86 @@ export default defineComponent({ diff --git a/src/client/pages/instance/instance-block.vue b/src/client/pages/instance/instance-block.vue new file mode 100644 index 000000000..ed5740f33 --- /dev/null +++ b/src/client/pages/instance/instance-block.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/client/pages/instance/integrations-discord.vue b/src/client/pages/instance/integrations-discord.vue new file mode 100644 index 000000000..c7508918f --- /dev/null +++ b/src/client/pages/instance/integrations-discord.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/client/pages/instance/integrations-github.vue b/src/client/pages/instance/integrations-github.vue new file mode 100644 index 000000000..16586b15b --- /dev/null +++ b/src/client/pages/instance/integrations-github.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/client/pages/instance/integrations-twitter.vue b/src/client/pages/instance/integrations-twitter.vue new file mode 100644 index 000000000..b08b7f40a --- /dev/null +++ b/src/client/pages/instance/integrations-twitter.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/client/pages/instance/integrations.vue b/src/client/pages/instance/integrations.vue new file mode 100644 index 000000000..7debedc36 --- /dev/null +++ b/src/client/pages/instance/integrations.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/client/pages/instance/index.metrics.vue b/src/client/pages/instance/metrics.vue similarity index 60% rename from src/client/pages/instance/index.metrics.vue rename to src/client/pages/instance/metrics.vue index 9dd115240..18cfe5eee 100644 --- a/src/client/pages/instance/index.metrics.vue +++ b/src/client/pages/instance/metrics.vue @@ -1,101 +1,52 @@ @@ -188,9 +139,11 @@ export default defineComponent({ }, beforeUnmount() { - this.connection.off('stats', this.onStats); - this.connection.off('statsLog', this.onStatsLog); - this.connection.dispose(); + if (this.connection) { + this.connection.off('stats', this.onStats); + this.connection.off('statsLog', this.onStatsLog); + this.connection.dispose(); + } this.queueConnection.dispose(); }, @@ -232,9 +185,9 @@ export default defineComponent({ aspectRatio: 3, layout: { padding: { - left: 0, - right: 0, - top: 8, + left: 16, + right: 16, + top: 16, bottom: 0 } }, @@ -304,9 +257,9 @@ export default defineComponent({ aspectRatio: 3, layout: { padding: { - left: 0, - right: 0, - top: 8, + left: 16, + right: 16, + top: 16, bottom: 0 } }, @@ -375,9 +328,9 @@ export default defineComponent({ aspectRatio: 3, layout: { padding: { - left: 0, - right: 0, - top: 8, + left: 16, + right: 16, + top: 16, bottom: 0 } }, @@ -494,81 +447,9 @@ export default defineComponent({ diff --git a/src/client/pages/instance/object-storage.vue b/src/client/pages/instance/object-storage.vue new file mode 100644 index 000000000..814aeb6e4 --- /dev/null +++ b/src/client/pages/instance/object-storage.vue @@ -0,0 +1,154 @@ + + + diff --git a/src/client/pages/instance/other-settings.vue b/src/client/pages/instance/other-settings.vue new file mode 100644 index 000000000..b3954149a --- /dev/null +++ b/src/client/pages/instance/other-settings.vue @@ -0,0 +1,68 @@ + + + diff --git a/src/client/pages/instance/overview.vue b/src/client/pages/instance/overview.vue new file mode 100644 index 000000000..651ace08f --- /dev/null +++ b/src/client/pages/instance/overview.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/client/pages/instance/proxy-account.vue b/src/client/pages/instance/proxy-account.vue new file mode 100644 index 000000000..3e2df8dcb --- /dev/null +++ b/src/client/pages/instance/proxy-account.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/client/pages/instance/queue.chart.vue b/src/client/pages/instance/queue.chart.vue index 0eb70debf..446c97920 100644 --- a/src/client/pages/instance/queue.chart.vue +++ b/src/client/pages/instance/queue.chart.vue @@ -1,27 +1,29 @@ + + diff --git a/src/client/pages/instance/queue.vue b/src/client/pages/instance/queue.vue index 0c1e0e51b..2dccf48d3 100644 --- a/src/client/pages/instance/queue.vue +++ b/src/client/pages/instance/queue.vue @@ -1,43 +1,47 @@ diff --git a/src/client/pages/instance/security.vue b/src/client/pages/instance/security.vue new file mode 100644 index 000000000..e3397a113 --- /dev/null +++ b/src/client/pages/instance/security.vue @@ -0,0 +1,77 @@ + + + diff --git a/src/client/pages/instance/service-worker.vue b/src/client/pages/instance/service-worker.vue new file mode 100644 index 000000000..a52932bb7 --- /dev/null +++ b/src/client/pages/instance/service-worker.vue @@ -0,0 +1,84 @@ + + + diff --git a/src/client/pages/instance/settings.vue b/src/client/pages/instance/settings.vue index b827a7764..66f01c42c 100644 --- a/src/client/pages/instance/settings.vue +++ b/src/client/pages/instance/settings.vue @@ -1,581 +1,132 @@ - - diff --git a/src/client/pages/instance/user.vue b/src/client/pages/instance/user.vue new file mode 100644 index 000000000..fbc10a367 --- /dev/null +++ b/src/client/pages/instance/user.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue index 4db965588..452886abd 100644 --- a/src/client/pages/instance/users.vue +++ b/src/client/pages/instance/users.vue @@ -1,86 +1,71 @@ diff --git a/src/client/pages/instance/file-dialog.vue b/src/client/pages/instance/file-dialog.vue index ae6755465..74a755fa1 100644 --- a/src/client/pages/instance/file-dialog.vue +++ b/src/client/pages/instance/file-dialog.vue @@ -82,7 +82,7 @@ export default defineComponent({ }, showUser() { - os.pageWindow(`/instance/user/${this.file.userId}`); + os.pageWindow(`/user-info/${this.file.userId}`); }, async del() { diff --git a/src/client/pages/instance/user.vue b/src/client/pages/instance/user.vue deleted file mode 100644 index fbc10a367..000000000 --- a/src/client/pages/instance/user.vue +++ /dev/null @@ -1,229 +0,0 @@ - - - - - diff --git a/src/client/pages/instance/users.vue b/src/client/pages/instance/users.vue index 452886abd..2808b70fb 100644 --- a/src/client/pages/instance/users.vue +++ b/src/client/pages/instance/users.vue @@ -162,7 +162,7 @@ export default defineComponent({ }, show(user) { - os.pageWindow(`/instance/user/${user.id}`); + os.pageWindow(`/user-info/${user.id}`); }, acct diff --git a/src/client/pages/user-info.vue b/src/client/pages/user-info.vue index 378fbb7b5..090e8cdda 100644 --- a/src/client/pages/user-info.vue +++ b/src/client/pages/user-info.vue @@ -1,35 +1,55 @@ @@ -38,6 +58,7 @@ import { computed, defineAsyncComponent, defineComponent } from 'vue'; import FormObjectView from '@client/components/form/object-view.vue'; import FormTextarea from '@client/components/form/textarea.vue'; +import FormSwitch from '@client/components/form/switch.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'; @@ -49,11 +70,13 @@ import number from '@client/filters/number'; import bytes from '@client/filters/bytes'; import * as symbols from '@client/symbols'; import { url } from '@client/config'; +import { userPage, acct } from '@client/filters/user'; export default defineComponent({ components: { FormBase, FormTextarea, + FormSwitch, FormObjectView, FormButton, FormLink, @@ -72,7 +95,7 @@ export default defineComponent({ data() { return { [symbols.PAGE_INFO]: computed(() => ({ - title: this.$ts.userInfo, + title: this.user ? acct(this.user) : this.$ts.userInfo, icon: 'fas fa-info-circle', actions: this.user ? [this.user.url ? { text: this.user.url, @@ -84,17 +107,23 @@ export default defineComponent({ })), init: null, user: null, + info: null, + moderator: false, + silenced: false, + suspended: false, + } + }, + + computed: { + iAmModerator(): boolean { + return this.$i && (this.$i.isAdmin || this.$i.isModerator); } }, watch: { userId: { handler() { - this.init = () => os.api('users/show', { - userId: this.userId - }).then(user => { - this.user = user; - }); + this.init = this.createFetcher(); }, immediate: true } @@ -103,6 +132,114 @@ export default defineComponent({ methods: { number, bytes, + userPage, + acct, + + createFetcher() { + if (this.iAmModerator) { + return () => Promise.all([os.api('users/show', { + userId: this.userId + }), os.api('admin/show-user', { + userId: this.userId + })]).then(([user, info]) => { + this.user = user; + this.info = info; + this.moderator = this.info.isModerator; + this.silenced = this.info.isSilenced; + this.suspended = this.info.isSuspended; + }); + } else { + return () => os.api('users/show', { + userId: this.userId + }).then((user) => { + this.user = user; + }); + } + }, + + refreshUser() { + this.init = this.createFetcher(); + }, + + async updateRemoteUser() { + await os.apiWithDialog('admin/update-remote-user', { userId: this.user.id }); + this.refreshUser(); + }, + + async resetPassword() { + os.apiWithDialog('admin/reset-password', { + userId: this.user.id, + }, undefined, ({ password }) => { + os.dialog({ + type: 'success', + text: this.$t('newPasswordIs', { password }) + }); + }); + }, + + async toggleSilence(v) { + const confirm = await os.dialog({ + type: 'warning', + showCancelButton: true, + text: v ? this.$ts.silenceConfirm : this.$ts.unsilenceConfirm, + }); + if (confirm.canceled) { + this.silenced = !v; + } else { + await os.api(v ? 'admin/silence-user' : 'admin/unsilence-user', { userId: this.user.id }); + await this.refreshUser(); + } + }, + + async toggleSuspend(v) { + const confirm = await os.dialog({ + type: 'warning', + showCancelButton: true, + text: v ? this.$ts.suspendConfirm : this.$ts.unsuspendConfirm, + }); + if (confirm.canceled) { + this.suspended = !v; + } else { + await os.api(v ? 'admin/suspend-user' : 'admin/unsuspend-user', { userId: this.user.id }); + await this.refreshUser(); + } + }, + + async toggleModerator(v) { + await os.api(v ? 'admin/moderators/add' : 'admin/moderators/remove', { userId: this.user.id }); + await this.refreshUser(); + }, + + async deleteAllFiles() { + const confirm = await os.dialog({ + type: 'warning', + showCancelButton: true, + text: this.$ts.deleteAllFilesConfirm, + }); + if (confirm.canceled) return; + const process = async () => { + await os.api('admin/delete-all-files-of-a-user', { userId: this.user.id }); + os.success(); + }; + await process().catch(e => { + os.dialog({ + type: 'error', + text: e.toString() + }); + }); + await this.refreshUser(); + }, } }); + + diff --git a/src/client/router.ts b/src/client/router.ts index 93de287ea..26a4dac49 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -59,7 +59,6 @@ export const router = createRouter({ { path: '/my/antennas', component: page('my-antennas/index') }, { path: '/my/clips', component: page('my-clips/index') }, { path: '/scratchpad', component: page('scratchpad') }, - { path: '/instance/user/:user', component: page('instance/user'), props: route => ({ userId: route.params.user }) }, { path: '/instance/:page(.*)?', component: page('instance/index'), props: route => ({ initialPage: route.params.page || null }) }, { path: '/instance', component: page('instance/index') }, { path: '/notes/:note', name: 'note', component: page('note'), props: route => ({ noteId: route.params.note }) }, diff --git a/src/client/scripts/get-user-menu.ts b/src/client/scripts/get-user-menu.ts index 9a003b5c3..ceb2bfe17 100644 --- a/src/client/scripts/get-user-menu.ts +++ b/src/client/scripts/get-user-menu.ts @@ -124,13 +124,7 @@ export function getUserMenu(user) { action: () => { copyToClipboard(`@${user.username}@${user.host || host}`); } - }, ($i && ($i.isAdmin || $i.isModerator)) ? { - icon: 'fas fa-info-circle', - text: i18n.locale.info, - action: () => { - os.pageWindow(`/instance/user/${user.id}`); - } - } : { + }, { icon: 'fas fa-info-circle', text: i18n.locale.info, action: () => { diff --git a/src/client/scripts/lookup-user.ts b/src/client/scripts/lookup-user.ts index 1bcfd8e9d..269777d87 100644 --- a/src/client/scripts/lookup-user.ts +++ b/src/client/scripts/lookup-user.ts @@ -10,7 +10,7 @@ export async function lookupUser() { if (canceled) return; const show = (user) => { - os.pageWindow(`/instance/user/${user.id}`); + os.pageWindow(`/user-info/${user.id}`); }; const usernamePromise = os.api('users/show', parseAcct(result)); From dfa341e1c07edbf8317f731ab87099eb702325bf Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 23 Apr 2021 12:05:15 +0900 Subject: [PATCH 17/27] Make admin/update-remote-user public --- src/client/pages/user-info.vue | 2 +- .../api/endpoints/{admin => federation}/update-remote-user.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) rename src/server/api/endpoints/{admin => federation}/update-remote-user.ts (94%) diff --git a/src/client/pages/user-info.vue b/src/client/pages/user-info.vue index 090e8cdda..51bd5016b 100644 --- a/src/client/pages/user-info.vue +++ b/src/client/pages/user-info.vue @@ -162,7 +162,7 @@ export default defineComponent({ }, async updateRemoteUser() { - await os.apiWithDialog('admin/update-remote-user', { userId: this.user.id }); + await os.apiWithDialog('federation/update-remote-user', { userId: this.user.id }); this.refreshUser(); }, diff --git a/src/server/api/endpoints/admin/update-remote-user.ts b/src/server/api/endpoints/federation/update-remote-user.ts similarity index 94% rename from src/server/api/endpoints/admin/update-remote-user.ts rename to src/server/api/endpoints/federation/update-remote-user.ts index 9577ac0a5..1b7a9c4d5 100644 --- a/src/server/api/endpoints/admin/update-remote-user.ts +++ b/src/server/api/endpoints/federation/update-remote-user.ts @@ -10,10 +10,9 @@ export const meta = { 'en-US': 'Update specified remote user information.' }, - tags: ['admin'], + tags: ['federation'], requireCredential: true as const, - requireModerator: true, params: { userId: { From d61a74fb88f5f35356c4f0bf3c7e3d9b9810667e Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 23 Apr 2021 12:17:04 +0900 Subject: [PATCH 18/27] fix style --- src/client/components/dialog.vue | 2 +- src/client/components/waiting-dialog.vue | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/client/components/dialog.vue b/src/client/components/dialog.vue index 83ea40922..a673e827d 100644 --- a/src/client/components/dialog.vue +++ b/src/client/components/dialog.vue @@ -8,7 +8,7 @@ - + diff --git a/src/client/components/waiting-dialog.vue b/src/client/components/waiting-dialog.vue index 97f18842e..ea9f6756b 100644 --- a/src/client/components/waiting-dialog.vue +++ b/src/client/components/waiting-dialog.vue @@ -68,10 +68,9 @@ export default defineComponent({ padding: 0; width: 96px; height: 96px; - - > .icon { - height: 100%; - } + display: flex; + align-items: center; + justify-content: center; } > .icon { From 70a8dd30e034eb713a15e04ffdb9c7970c1303fc Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 23 Apr 2021 13:01:52 +0900 Subject: [PATCH 19/27] Improve client --- locales/ja-JP.yml | 6 +- package.json | 2 +- src/client/pages/instance/index.vue | 8 +- src/client/pages/settings/accounts.vue | 148 +++++++++++++++++++++++++ src/client/pages/settings/index.vue | 20 ++++ src/client/ui/_common_/sidebar.vue | 8 +- src/client/ui/default.sidebar.vue | 8 +- 7 files changed, 187 insertions(+), 13 deletions(-) create mode 100644 src/client/pages/settings/accounts.vue diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b557f8643..d20d72094 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -138,7 +138,7 @@ flagAsBotDescription: "このアカウントがプログラムによって運用 flagAsCat: "Catとして設定" flagAsCatDescription: "このアカウントが猫であることを示す場合は、このフラグをオンにします。" autoAcceptFollowed: "フォロー中ユーザーからのフォロリクを自動承認" -addAcount: "アカウント追加" +addAccount: "アカウントを追加" loginFailed: "ログインに失敗しました" showOnRemote: "リモートで表示" general: "全般" @@ -452,7 +452,7 @@ category: "カテゴリ" tags: "タグ" docSource: "このドキュメントのソース" createAccount: "アカウントを作成" -existingAcount: "既存のアカウント" +existingAccount: "既存のアカウント" regenerate: "再生成" fontSize: "フォントサイズ" noFollowRequests: "フォロー申請はありません" @@ -735,6 +735,8 @@ enabled: "有効" disabled: "無効" quickAction: "クイックアクション" user: "ユーザー" +administration: "管理" +accounts: "アカウント" _email: _follow: diff --git a/package.json b/package.json index 281bb67f3..fc53fc4dc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "misskey", "author": "syuilo ", - "version": "12.78.0-beta.4", + "version": "12.78.0-beta.5", "codename": "indigo", "repository": { "type": "git", diff --git a/src/client/pages/instance/index.vue b/src/client/pages/instance/index.vue index 10406f339..5972a02de 100644 --- a/src/client/pages/instance/index.vue +++ b/src/client/pages/instance/index.vue @@ -16,13 +16,13 @@ {{ $ts.invite }} + {{ $ts.users }} {{ $ts.customEmojis }} {{ $ts.federation }} {{ $ts.jobQueue }} {{ $ts.files }} {{ $ts.announcements }} - {{ $ts.database }} {{ $ts.abuseReports }} @@ -39,6 +39,10 @@ {{ $ts.proxyAccount }} {{ $ts.other }} + + + {{ $ts.database }} +
@@ -229,7 +233,7 @@ export default defineComponent({ .lxpfedzu { padding: 16px; - > img { + > .icon { display: block; margin: auto; height: 42px; diff --git a/src/client/pages/settings/accounts.vue b/src/client/pages/settings/accounts.vue new file mode 100644 index 000000000..a3fa0d4eb --- /dev/null +++ b/src/client/pages/settings/accounts.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index ba4fc40ae..049e91289 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -2,6 +2,14 @@