63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| <MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
 | |
| 	<FormSuspense :p="init">
 | |
| 		<FormTextarea v-model="blockedHosts" class="_formBlock">
 | |
| 			<span>{{ $ts.blockedInstances }}</span>
 | |
| 			<template #caption>{{ $ts.blockedInstancesDescription }}</template>
 | |
| 		</FormTextarea>
 | |
| 
 | |
| 		<FormButton primary class="_formBlock" @click="save"><i class="fas fa-save"></i> {{ $ts.save }}</FormButton>
 | |
| 	</FormSuspense>
 | |
| </MkSpacer>
 | |
| </template>
 | |
| 
 | |
| <script lang="ts">
 | |
| import { defineComponent } from 'vue';
 | |
| import FormButton from '@/components/ui/button.vue';
 | |
| import FormTextarea from '@/components/form/textarea.vue';
 | |
| import FormSuspense from '@/components/form/suspense.vue';
 | |
| import * as os from '@/os';
 | |
| import * as symbols from '@/symbols';
 | |
| import { fetchInstance } from '@/instance';
 | |
| 
 | |
| export default defineComponent({
 | |
| 	components: {
 | |
| 		FormButton,
 | |
| 		FormTextarea,
 | |
| 		FormSuspense,
 | |
| 	},
 | |
| 
 | |
| 	emits: ['info'],
 | |
| 
 | |
| 	data() {
 | |
| 		return {
 | |
| 			[symbols.PAGE_INFO]: {
 | |
| 				title: this.$ts.instanceBlocking,
 | |
| 				icon: 'fas fa-ban',
 | |
| 				bg: 'var(--bg)',
 | |
| 			},
 | |
| 			blockedHosts: '',
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	async mounted() {
 | |
| 		this.$emit('info', this[symbols.PAGE_INFO]);
 | |
| 	},
 | |
| 
 | |
| 	methods: {
 | |
| 		async init() {
 | |
| 			const meta = await os.api('meta', { detail: true });
 | |
| 			this.blockedHosts = meta.blockedHosts.join('\n');
 | |
| 		},
 | |
| 
 | |
| 		save() {
 | |
| 			os.apiWithDialog('admin/update-meta', {
 | |
| 				blockedHosts: this.blockedHosts.split('\n') || [],
 | |
| 			}).then(() => {
 | |
| 				fetchInstance();
 | |
| 			});
 | |
| 		}
 | |
| 	}
 | |
| });
 | |
| </script>
 | 
