Add mail template, mail HTML generation and a few UI fixes

This commit is contained in:
2024-11-25 17:37:43 +01:00
parent d71e8b7910
commit 4df9297d47
12 changed files with 171 additions and 20 deletions

View File

@@ -1,8 +1,8 @@
<script lang="ts">
const mailSchema = z.object({
to: z.string().email(),
message: z.string(),
subject: z.string(),
template: z.string(),
data: z.string(),
});
const schemaList: Record<string, z.ZodObject<any> | null> = {
@@ -21,7 +21,10 @@ definePageMeta({
const job = ref<string>('');
const toaster = useToast();
const payload = reactive<Record<string, any>>({});
const payload = reactive<Record<string, any>>({
data: JSON.stringify({ username: "Peaceultime", id: 1, timestamp: Date.now() }),
to: 'clem31470@gmail.com',
});
const data = ref(), status = ref<'idle' | 'pending' | 'success' | 'error'>('idle'), success = ref(false), error = ref<Error | null>();
async function fetch()
{
@@ -36,6 +39,7 @@ async function fetch()
if(schema)
{
console.log(payload);
const parsedPayload = schema.parse(payload);
}
@@ -66,15 +70,20 @@ async function fetch()
</Head>
<div class="flex flex-col justify-start items-center">
<ProseH2>Administration</ProseH2>
<Select label="Job" v-model="job" @update:model-value="payload = {}">
<SelectItem label="Récupérer les données d'Obsidian" value="pull" />
<SelectItem label="Envoyer les données dans Obsidian" value="push" disabled />
<SelectItem label="Envoyer un mail de test" value="mail" />
</Select>
<div class="flex flex-row w-full gap-8">
<Select label="Job" v-model="job">
<SelectItem label="Récupérer les données d'Obsidian" value="pull" />
<SelectItem label="Envoyer les données dans Obsidian" value="push" disabled />
<SelectItem label="Envoyer un mail de test" value="mail" />
</Select>
<Select v-if="job === 'mail'" v-model="payload.template" label="Modèle" class="w-full" ><SelectItem label="Inscription" value="registration" /></Select>
</div>
<div v-if="job === 'mail'" class="flex justify-center items-center flex-col">
<TextInput label="Destinataire" class="w-full" v-model="payload.to" />
<TextInput label="Objet" class="w-full" v-model="payload.subject" />
<TextInput label="Message" class="w-full" v-model="payload.message" />
<textarea v-model="payload.data" class="w-[640px] bg-light-20 dark:bg-dark-20 border border-light-35 dark:border-dark-35 outline-none m-2 px-2"></textarea>
<div class="bg-[#fff] text-[#000]"><MailBase>
<MailRegistration v-bind="JSON.parse(payload.data)" />
</MailBase></div>
</div>
<Button class="self-center" @click="() => !!job && fetch()" :loading="status === 'pending'">
<span>Executer</span>