diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-05-04 21:15:57 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-04 21:15:57 +0900 |
| commit | 18e1efc7ecd3f5a6d774c16f17526d12ae46b2f5 (patch) | |
| tree | 8f2cb50644bb3679eafd29fb9e7448ed5069321c /src/client/pages/instance | |
| parent | メールアドレスの設定を促すように (diff) | |
| download | sharkey-18e1efc7ecd3f5a6d774c16f17526d12ae46b2f5.tar.gz sharkey-18e1efc7ecd3f5a6d774c16f17526d12ae46b2f5.tar.bz2 sharkey-18e1efc7ecd3f5a6d774c16f17526d12ae46b2f5.zip | |
Ad (#7495)
* wip
* Update ad.vue
* Update default.widgets.vue
* wip
* Create 1620019354680-ad.ts
* wip
* Update ads.vue
* wip
* Update ad.vue
Diffstat (limited to 'src/client/pages/instance')
| -rw-r--r-- | src/client/pages/instance/ads.vue | 125 | ||||
| -rw-r--r-- | src/client/pages/instance/index.vue | 2 |
2 files changed, 127 insertions, 0 deletions
diff --git a/src/client/pages/instance/ads.vue b/src/client/pages/instance/ads.vue new file mode 100644 index 0000000000..4297e56c37 --- /dev/null +++ b/src/client/pages/instance/ads.vue @@ -0,0 +1,125 @@ +<template> +<div class="uqshojas"> + <MkButton @click="add()" primary style="margin: 0 auto 16px auto;"><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton> + <section class="_card _gap ads" v-for="ad in ads"> + <div class="_content ad"> + <MkAd v-if="ad.url" :ad="ad"/> + <MkInput v-model:value="ad.url" type="url"> + <span>URL</span> + </MkInput> + <MkInput v-model:value="ad.imageUrl"> + <span>{{ $ts.imageUrl }}</span> + </MkInput> + <div style="margin: 32px 0;"> + <MkRadio v-model="ad.place" value="square">square</MkRadio> + <MkRadio v-model="ad.place" value="horizontal">horizontal</MkRadio> + </div> + <div style="margin: 32px 0;"> + {{ $ts.priority }} + <MkRadio v-model="ad.priority" value="high">{{ $ts.high }}</MkRadio> + <MkRadio v-model="ad.priority" value="middle">{{ $ts.middle }}</MkRadio> + <MkRadio v-model="ad.priority" value="low">{{ $ts.low }}</MkRadio> + </div> + <MkInput v-model:value="ad.expiresAt" type="date"> + <span>{{ $ts.expiration }}</span> + </MkInput> + <MkTextarea v-model:value="ad.memo"> + <span>{{ $ts.memo }}</span> + </MkTextarea> + <div class="buttons"> + <MkButton class="button" inline @click="save(ad)" primary><i class="fas fa-save"></i> {{ $ts.save }}</MkButton> + <MkButton class="button" inline @click="remove(ad)" danger><i class="fas fa-trash-alt"></i> {{ $ts.remove }}</MkButton> + </div> + </div> + </section> +</div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import MkButton from '@client/components/ui/button.vue'; +import MkInput from '@client/components/ui/input.vue'; +import MkTextarea from '@client/components/ui/textarea.vue'; +import MkRadio from '@client/components/ui/radio.vue'; +import * as os from '@client/os'; +import * as symbols from '@client/symbols'; + +export default defineComponent({ + components: { + MkButton, + MkInput, + MkTextarea, + MkRadio, + }, + + emits: ['info'], + + data() { + return { + [symbols.PAGE_INFO]: { + title: this.$ts.ads, + icon: 'fas fa-audio-description' + }, + ads: [], + } + }, + + created() { + os.api('admin/ad/list').then(ads => { + this.ads = ads; + }); + }, + + mounted() { + this.$emit('info', this[symbols.PAGE_INFO]); + }, + + methods: { + add() { + this.ads.unshift({ + id: null, + memo: '', + place: 'square', + priority: 'middle', + url: '', + imageUrl: null, + expiresAt: null, + }); + }, + + remove(ad) { + os.dialog({ + type: 'warning', + text: this.$t('removeAreYouSure', { x: ad.url }), + showCancelButton: true + }).then(({ canceled }) => { + if (canceled) return; + this.ads = this.ads.filter(x => x != ad); + os.apiWithDialog('admin/ad/delete', { + id: ad.id + }); + }); + }, + + save(ad) { + if (ad.id == null) { + os.apiWithDialog('admin/ad/create', { + ...ad, + expiresAt: new Date(ad.expiresAt).getTime() + }); + } else { + os.apiWithDialog('admin/ad/update', { + ...ad, + expiresAt: new Date(ad.expiresAt).getTime() + }); + } + } + } +}); +</script> + +<style lang="scss" scoped> +.uqshojas { + margin: var(--margin); +} +</style> diff --git a/src/client/pages/instance/index.vue b/src/client/pages/instance/index.vue index 5972a02de0..974c4345bb 100644 --- a/src/client/pages/instance/index.vue +++ b/src/client/pages/instance/index.vue @@ -23,6 +23,7 @@ <FormLink :active="page === 'queue'" replace to="/instance/queue"><template #icon><i class="fas fa-clipboard-list"></i></template>{{ $ts.jobQueue }}</FormLink> <FormLink :active="page === 'files'" replace to="/instance/files"><template #icon><i class="fas fa-cloud"></i></template>{{ $ts.files }}</FormLink> <FormLink :active="page === 'announcements'" replace to="/instance/announcements"><template #icon><i class="fas fa-broadcast-tower"></i></template>{{ $ts.announcements }}</FormLink> + <FormLink :active="page === 'ads'" replace to="/instance/ads"><template #icon><i class="fas fa-audio-description"></i></template>{{ $ts.ads }}</FormLink> <FormLink :active="page === 'abuses'" replace to="/instance/abuses"><template #icon><i class="fas fa-exclamation-circle"></i></template>{{ $ts.abuseReports }}</FormLink> </FormGroup> <FormGroup> @@ -102,6 +103,7 @@ export default defineComponent({ case 'queue': return defineAsyncComponent(() => import('./queue.vue')); case 'files': return defineAsyncComponent(() => import('./files.vue')); case 'announcements': return defineAsyncComponent(() => import('./announcements.vue')); + case 'ads': return defineAsyncComponent(() => import('./ads.vue')); case 'database': return defineAsyncComponent(() => import('./database.vue')); case 'abuses': return defineAsyncComponent(() => import('./abuses.vue')); case 'settings': return defineAsyncComponent(() => import('./settings.vue')); |