Sharkey/packages/client/src/pages/admin/abuses.vue

101 lines
3 KiB
Vue
Raw Normal View History

2020-10-19 13:29:04 +03:00
<template>
<div class="lcixvhis">
2020-10-19 13:29:04 +03:00
<div class="_section reports">
<div class="_content">
<div class="inputs" style="display: flex;">
2021-08-06 16:29:19 +03:00
<MkSelect v-model="state" style="margin: 0; flex: 1;">
2020-12-26 03:47:36 +02:00
<template #label>{{ $ts.state }}</template>
<option value="all">{{ $ts.all }}</option>
<option value="unresolved">{{ $ts.unresolved }}</option>
<option value="resolved">{{ $ts.resolved }}</option>
2020-10-19 13:29:04 +03:00
</MkSelect>
2021-08-06 16:29:19 +03:00
<MkSelect v-model="targetUserOrigin" style="margin: 0; flex: 1;">
2021-11-05 05:32:35 +02:00
<template #label>{{ $ts.reporteeOrigin }}</template>
2020-12-26 03:47:36 +02:00
<option value="combined">{{ $ts.all }}</option>
<option value="local">{{ $ts.local }}</option>
<option value="remote">{{ $ts.remote }}</option>
2020-10-19 13:29:04 +03:00
</MkSelect>
2021-08-06 16:29:19 +03:00
<MkSelect v-model="reporterOrigin" style="margin: 0; flex: 1;">
2020-12-26 03:47:36 +02:00
<template #label>{{ $ts.reporterOrigin }}</template>
<option value="combined">{{ $ts.all }}</option>
<option value="local">{{ $ts.local }}</option>
<option value="remote">{{ $ts.remote }}</option>
2020-10-19 13:29:04 +03:00
</MkSelect>
</div>
<!-- TODO
<div class="inputs" style="display: flex; padding-top: 1.2em;">
2021-09-29 18:50:45 +03:00
<MkInput v-model="searchUsername" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.reports.reload()">
2020-12-26 03:47:36 +02:00
<span>{{ $ts.username }}</span>
2020-10-19 13:29:04 +03:00
</MkInput>
2021-09-29 18:50:45 +03:00
<MkInput v-model="searchHost" style="margin: 0; flex: 1;" type="text" spellcheck="false" @update:modelValue="$refs.reports.reload()" :disabled="pagination.params().origin === 'local'">
2020-12-26 03:47:36 +02:00
<span>{{ $ts.host }}</span>
2020-10-19 13:29:04 +03:00
</MkInput>
</div>
-->
2021-12-02 13:09:12 +02:00
<MkPagination v-slot="{items}" ref="reports" :pagination="pagination" style="margin-top: var(--margin);">
<XAbuseReport v-for="report in items" :key="report.id" :report="report" @resolved="resolved"/>
2020-10-19 13:29:04 +03:00
</MkPagination>
</div>
</div>
</div>
</template>
<script lang="ts">
import { computed, defineComponent } from 'vue';
2021-11-11 19:02:25 +02:00
import MkInput from '@/components/form/input.vue';
import MkSelect from '@/components/form/select.vue';
import MkPagination from '@/components/ui/pagination.vue';
import XAbuseReport from '@/components/abuse-report.vue';
2021-11-11 19:02:25 +02:00
import * as os from '@/os';
import * as symbols from '@/symbols';
2020-10-19 13:29:04 +03:00
export default defineComponent({
components: {
MkInput,
MkSelect,
MkPagination,
XAbuseReport,
2020-10-19 13:29:04 +03:00
},
emits: ['info'],
2020-10-19 13:29:04 +03:00
data() {
return {
2021-04-10 06:54:12 +03:00
[symbols.PAGE_INFO]: {
2020-12-26 03:47:36 +02:00
title: this.$ts.abuseReports,
2021-10-02 17:11:21 +03:00
icon: 'fas fa-exclamation-circle',
bg: 'var(--bg)',
2020-10-19 13:29:04 +03:00
},
searchUsername: '',
searchHost: '',
state: 'unresolved',
reporterOrigin: 'combined',
targetUserOrigin: 'combined',
pagination: {
2022-01-12 19:26:10 +02:00
endpoint: 'admin/abuse-user-reports' as const,
2020-10-19 13:29:04 +03:00
limit: 10,
params: computed(() => ({
2020-10-19 13:29:04 +03:00
state: this.state,
reporterOrigin: this.reporterOrigin,
targetUserOrigin: this.targetUserOrigin,
})),
2020-10-19 13:29:04 +03:00
},
}
},
methods: {
resolved(reportId) {
this.$refs.reports.removeItem(item => item.id === reportId);
2020-10-19 13:29:04 +03:00
},
}
});
</script>
<style lang="scss" scoped>
.lcixvhis {
margin: var(--margin);
}
2020-10-19 13:29:04 +03:00
</style>