diff options
Diffstat (limited to 'packages/client/src/pages/admin/announcements.vue')
| -rw-r--r-- | packages/client/src/pages/admin/announcements.vue | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/packages/client/src/pages/admin/announcements.vue b/packages/client/src/pages/admin/announcements.vue deleted file mode 100644 index 607ad8aa02..0000000000 --- a/packages/client/src/pages/admin/announcements.vue +++ /dev/null @@ -1,112 +0,0 @@ -<template> -<MkStickyContainer> - <template #header><XHeader :actions="headerActions" :tabs="headerTabs"/></template> - <MkSpacer :content-max="900"> - <div class="ztgjmzrw"> - <section v-for="announcement in announcements" class="_card _gap announcements"> - <div class="_content announcement"> - <MkInput v-model="announcement.title"> - <template #label>{{ i18n.ts.title }}</template> - </MkInput> - <MkTextarea v-model="announcement.text"> - <template #label>{{ i18n.ts.text }}</template> - </MkTextarea> - <MkInput v-model="announcement.imageUrl"> - <template #label>{{ i18n.ts.imageUrl }}</template> - </MkInput> - <p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p> - <div class="buttons"> - <MkButton class="button" inline primary @click="save(announcement)"><i class="ti ti-device-floppy"></i> {{ i18n.ts.save }}</MkButton> - <MkButton class="button" inline @click="remove(announcement)"><i class="ti ti-trash"></i> {{ i18n.ts.remove }}</MkButton> - </div> - </div> - </section> - </div> - </MkSpacer> -</MkStickyContainer> -</template> - -<script lang="ts" setup> -import { } from 'vue'; -import XHeader from './_header_.vue'; -import MkButton from '@/components/MkButton.vue'; -import MkInput from '@/components/form/input.vue'; -import MkTextarea from '@/components/form/textarea.vue'; -import * as os from '@/os'; -import { i18n } from '@/i18n'; -import { definePageMetadata } from '@/scripts/page-metadata'; - -let announcements: any[] = $ref([]); - -os.api('admin/announcements/list').then(announcementResponse => { - announcements = announcementResponse; -}); - -function add() { - announcements.unshift({ - id: null, - title: '', - text: '', - imageUrl: null, - }); -} - -function remove(announcement) { - os.confirm({ - type: 'warning', - text: i18n.t('removeAreYouSure', { x: announcement.title }), - }).then(({ canceled }) => { - if (canceled) return; - announcements = announcements.filter(x => x !== announcement); - os.api('admin/announcements/delete', announcement); - }); -} - -function save(announcement) { - if (announcement.id == null) { - os.api('admin/announcements/create', announcement).then(() => { - os.alert({ - type: 'success', - text: i18n.ts.saved, - }); - }).catch(err => { - os.alert({ - type: 'error', - text: err, - }); - }); - } else { - os.api('admin/announcements/update', announcement).then(() => { - os.alert({ - type: 'success', - text: i18n.ts.saved, - }); - }).catch(err => { - os.alert({ - type: 'error', - text: err, - }); - }); - } -} - -const headerActions = $computed(() => [{ - asFullButton: true, - icon: 'ti ti-plus', - text: i18n.ts.add, - handler: add, -}]); - -const headerTabs = $computed(() => []); - -definePageMetadata({ - title: i18n.ts.announcements, - icon: 'ti ti-speakerphone', -}); -</script> - -<style lang="scss" scoped> -.ztgjmzrw { - margin: var(--margin); -} -</style> |