summaryrefslogtreecommitdiff
path: root/packages/frontend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-01-13 14:22:53 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-01-13 14:22:53 +0900
commit7b7faf1e84c4f2c53a9adbfd918d91590c890a0a (patch)
treebccf78dc19a86413c7785e4f579110300562b690 /packages/frontend/src
parentfix `navButtonIcon` not being aligned to center (#9543) (diff)
downloadmisskey-7b7faf1e84c4f2c53a9adbfd918d91590c890a0a.tar.gz
misskey-7b7faf1e84c4f2c53a9adbfd918d91590c890a0a.tar.bz2
misskey-7b7faf1e84c4f2c53a9adbfd918d91590c890a0a.zip
招待コード発行を権限を持つユーザーが行えるように
Resolve #9541
Diffstat (limited to 'packages/frontend/src')
-rw-r--r--packages/frontend/src/pages/admin/index.vue4
-rw-r--r--packages/frontend/src/pages/admin/roles.editor.vue16
-rw-r--r--packages/frontend/src/pages/admin/roles.vue10
-rw-r--r--packages/frontend/src/ui/_common_/common.ts19
4 files changed, 46 insertions, 3 deletions
diff --git a/packages/frontend/src/pages/admin/index.vue b/packages/frontend/src/pages/admin/index.vue
index 83f3c10d1d..0166960ff6 100644
--- a/packages/frontend/src/pages/admin/index.vue
+++ b/packages/frontend/src/pages/admin/index.vue
@@ -80,7 +80,7 @@ const menuDef = $computed(() => [{
action: lookup,
}, ...(instance.disableRegistration ? [{
type: 'button',
- icon: 'ti ti-user',
+ icon: 'ti ti-user-plus',
text: i18n.ts.invite,
action: invite,
}] : [])],
@@ -223,7 +223,7 @@ provideMetadataReceiver((info) => {
});
const invite = () => {
- os.api('admin/invite').then(x => {
+ os.api('invite').then(x => {
os.alert({
type: 'info',
text: x.code,
diff --git a/packages/frontend/src/pages/admin/roles.editor.vue b/packages/frontend/src/pages/admin/roles.editor.vue
index e1efb8dcec..1d83ae3244 100644
--- a/packages/frontend/src/pages/admin/roles.editor.vue
+++ b/packages/frontend/src/pages/admin/roles.editor.vue
@@ -78,6 +78,19 @@
</MkFolder>
<MkFolder>
+ <template #label>{{ i18n.ts._role._options.canInvite }}</template>
+ <template #suffix>{{ options_canInvite_useDefault ? i18n.ts._role.useBaseValue : (options_canInvite_value ? i18n.ts.yes : i18n.ts.no) }}</template>
+ <div class="_gaps">
+ <MkSwitch v-model="options_canInvite_useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts._role.useBaseValue }}</template>
+ </MkSwitch>
+ <MkSwitch v-model="options_canInvite_value" :disabled="options_canInvite_useDefault" :readonly="readonly">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ </div>
+ </MkFolder>
+
+ <MkFolder>
<template #label>{{ i18n.ts._role._options.driveCapacity }}</template>
<template #suffix>{{ options_driveCapacityMb_useDefault ? i18n.ts._role.useBaseValue : (options_driveCapacityMb_value + 'MB') }}</template>
<div class="_gaps">
@@ -160,6 +173,8 @@ let options_ltlAvailable_useDefault = $ref(role?.options?.ltlAvailable?.useDefau
let options_ltlAvailable_value = $ref(role?.options?.ltlAvailable?.value ?? false);
let options_canPublicNote_useDefault = $ref(role?.options?.canPublicNote?.useDefault ?? true);
let options_canPublicNote_value = $ref(role?.options?.canPublicNote?.value ?? false);
+let options_canInvite_useDefault = $ref(role?.options?.canInvite?.useDefault ?? true);
+let options_canInvite_value = $ref(role?.options?.canInvite?.value ?? false);
let options_driveCapacityMb_useDefault = $ref(role?.options?.driveCapacityMb?.useDefault ?? true);
let options_driveCapacityMb_value = $ref(role?.options?.driveCapacityMb?.value ?? 0);
let options_antennaLimit_useDefault = $ref(role?.options?.antennaLimit?.useDefault ?? true);
@@ -176,6 +191,7 @@ function getOptions() {
gtlAvailable: { useDefault: options_gtlAvailable_useDefault, value: options_gtlAvailable_value },
ltlAvailable: { useDefault: options_ltlAvailable_useDefault, value: options_ltlAvailable_value },
canPublicNote: { useDefault: options_canPublicNote_useDefault, value: options_canPublicNote_value },
+ canInvite: { useDefault: options_canInvite_useDefault, value: options_canInvite_value },
driveCapacityMb: { useDefault: options_driveCapacityMb_useDefault, value: options_driveCapacityMb_value },
antennaLimit: { useDefault: options_antennaLimit_useDefault, value: options_antennaLimit_value },
};
diff --git a/packages/frontend/src/pages/admin/roles.vue b/packages/frontend/src/pages/admin/roles.vue
index f74a3dcf5a..6495074bb7 100644
--- a/packages/frontend/src/pages/admin/roles.vue
+++ b/packages/frontend/src/pages/admin/roles.vue
@@ -33,6 +33,14 @@
</MkFolder>
<MkFolder>
+ <template #label>{{ i18n.ts._role._options.canInvite }}</template>
+ <template #suffix>{{ options_canInvite ? i18n.ts.yes : i18n.ts.no }}</template>
+ <MkSwitch v-model="options_canInvite">
+ <template #label>{{ i18n.ts.enable }}</template>
+ </MkSwitch>
+ </MkFolder>
+
+ <MkFolder>
<template #label>{{ i18n.ts._role._options.driveCapacity }}</template>
<template #suffix>{{ options_driveCapacityMb }}MB</template>
<MkInput v-model="options_driveCapacityMb" type="number">
@@ -81,6 +89,7 @@ const roles = await os.api('admin/roles/list');
let options_gtlAvailable = $ref(instance.baseRole.gtlAvailable);
let options_ltlAvailable = $ref(instance.baseRole.ltlAvailable);
let options_canPublicNote = $ref(instance.baseRole.canPublicNote);
+let options_canInvite = $ref(instance.baseRole.canInvite);
let options_driveCapacityMb = $ref(instance.baseRole.driveCapacityMb);
let options_antennaLimit = $ref(instance.baseRole.antennaLimit);
@@ -90,6 +99,7 @@ async function updateBaseRole() {
gtlAvailable: options_gtlAvailable,
ltlAvailable: options_ltlAvailable,
canPublicNote: options_canPublicNote,
+ canInvite: options_canInvite,
driveCapacityMb: options_driveCapacityMb,
antennaLimit: options_antennaLimit,
},
diff --git a/packages/frontend/src/ui/_common_/common.ts b/packages/frontend/src/ui/_common_/common.ts
index c63e962a8d..079b31489e 100644
--- a/packages/frontend/src/ui/_common_/common.ts
+++ b/packages/frontend/src/ui/_common_/common.ts
@@ -2,6 +2,7 @@ import * as os from '@/os';
import { instance } from '@/instance';
import { host } from '@/config';
import { i18n } from '@/i18n';
+import { $i } from '@/account';
export function openInstanceMenu(ev: MouseEvent) {
os.popupMenu([{
@@ -46,7 +47,23 @@ export function openInstanceMenu(ev: MouseEvent) {
to: '/clicker',
text: '🍪👈',
icon: 'ti ti-cookie',
- }],
+ }, ($i && ($i.isRoot || $i.role.canInvite) && instance.disableRegistration) ? {
+ text: i18n.ts.invite,
+ icon: 'ti ti-user-plus',
+ action: () => {
+ os.api('invite').then(x => {
+ os.alert({
+ type: 'info',
+ text: x.code,
+ });
+ }).catch(err => {
+ os.alert({
+ type: 'error',
+ text: err,
+ });
+ });
+ },
+ } : undefined],
}, null, {
text: i18n.ts.help,
icon: 'ti ti-question-circle',