Improve group admin options

This commit is contained in:
Phillip Thelen
2025-08-20 19:45:34 +02:00
parent faa1db4687
commit 0677c4ab9c
7 changed files with 119 additions and 11 deletions

View File

@@ -67,6 +67,13 @@
</span>
</strong>
</div>
<div
v-if="!userIsPartyLeader"
class="btn btn-warning mr-2"
@click="makePartyLeader()"
>
Make Party Leader
</div>
<div
class="btn btn-danger"
@click="removeFromParty()"
@@ -288,8 +295,6 @@ function resetData (self) {
if (self.partyNotExistError) {
self.errorsOrWarningsExist = true;
} else {
self.userIsPartyLeader = self.groupPartyData.leader === self.userId;
}
// check for quest errors even if party doesn't exist (user can have old quest data)
@@ -333,7 +338,6 @@ export default {
},
data () {
return {
userIsPartyLeader: false,
questStatus: '',
questErrors: '',
errorsOrWarningsExist: false,
@@ -345,6 +349,11 @@ export default {
resetData(this);
},
},
computed: {
userIsPartyLeader () {
return this.groupPartyData.leader === this.userId;
}
},
mounted () {
resetData(this);
},
@@ -356,6 +365,12 @@ export default {
reloadData: true,
});
},
async makePartyLeader () {
await this.$store.dispatch('guilds:update', { group: {
id: this.groupPartyData._id,
leader: this.userId,
} });
}
},
};
</script>

View File

@@ -1,6 +1,6 @@
<template>
<div class="form-group row">
<label class="col-sm-3 col-form-label"><slot name="label">{{ label }}</slot></label>
<label class="col-sm-3 col-form-label"><slot name="label">{{ label }}:</slot></label>
<div class="col-sm-9">
<slot>
<textarea

View File

@@ -9,6 +9,11 @@
:label="$t('guildSummary')"
input-type="textarea"
/>
<form-row
v-model="group.chatLimitCount"
label="Chat limit"
input-type="number"
/>
<form-row
v-model="group.description"
:label="$t('groupDescription')"

View File

@@ -0,0 +1,35 @@
<template>
<div v-if="group.purchased.plan">
<form-row
label="Payment Method"
v-model="group.purchased.plan.paymentMethod" />
<form-row
label="Plan ID"
v-model="group.purchased.plan.planId" />
<form-row
label="Customer ID"
v-model="group.purchased.plan.customerId" />
<form-row
label="Creation Date"
v-model="group.purchased.plan.dateCreated" />
<form-row
label="Termination Date"
v-model="group.purchased.plan.dateTerminated" />
</div>
</template>
<script>
import formRow from '@/components/admin/formRow.vue';
export default {
components: {
formRow,
},
props: {
group: {
type: Object,
required: true,
},
},
};
</script>

View File

@@ -3,18 +3,25 @@
<h2>{{ group.name }}</h2>
<supportContainer
:title="$t('groupData')"
:onSave="updateGroup"
>
<groupData
:group="group"
/>
</supportContainer>
<supportContainer
:title="$t('groupPlanSubscription')"
/>
:title="$t('groupPlanSubscription')">
<groupPlan
:group="group"
/>
</supportContainer>
<supportContainer
v-if="group.type === 'party'"
:title="$t('questDetails')"
/>
:title="$t('questDetails')">
<quest
:group="group"
/>
</supportContainer>
<supportContainer
:title="$t('members')"
>
@@ -30,12 +37,16 @@ import { userStateMixin } from '../../../../mixins/userState';
import supportContainer from '../../supportContainer.vue';
import groupData from './groupData.vue';
import members from './members.vue';
import groupPlan from './groupPlan.vue';
import quest from './quest.vue';
export default {
components: {
supportContainer,
groupData,
members,
groupPlan,
quest,
},
mixins: [userStateMixin],
data () {
@@ -59,10 +70,19 @@ export default {
async loadGroup (groupId) {
this.$emit('changeGroupId', groupId);
this.group = await this.$store.dispatch('admin:getGroup', { groupId });
},
async updateGroup () {
await this.$store.dispatch('admin:updateGroup', { group: this.group });
this.$emit('groupSaved', this.group);
if (this.group && !this.group.id) {
this.group.id = this.group._id || this.groupId; // Ensure group has an id property
}
await this.$store.dispatch('guilds:update', { group: this.group });
this.group = await this.$store.dispatch('admin:getGroup', { groupId: this.group.id })
await this.$store.dispatch('snackbars:add', {
title: '',
text: `Group updated`,
type: 'info',
});
},
},
};

View File

@@ -0,0 +1,33 @@
<template>
<div>
<form-row
label="Quest Identifier"
v-model="group.quest.key"
/>
<form-row
label="Quest Leader"
v-model="group.quest.leader"
/>
<form-row
label="Is Quest Active"
v-model="group.quest.active"
input-type="checkbox"
/>
</div>
</template>
<script>
import formRow from '@/components/admin/formRow.vue';
export default {
components: {
formRow,
},
props: {
group: {
type: Object,
required: true,
},
},
};
</script>

View File

@@ -1330,7 +1330,7 @@ export default {
},
openAdminPanel () {
this.$router.push(`/admin-panel/${this.hero._id}`);
this.$router.push(`/admin/panel/${this.hero._id}`);
},
},
};