move mail templates into core

This commit is contained in:
2020-11-13 12:24:07 +01:00
parent 07b87cec66
commit 019aa96a0e
23 changed files with 542 additions and 3 deletions
@@ -0,0 +1,62 @@
<template>
<div class="ui-mailtemplatespicker" :class="{'is-disabled': disabled }">
<ui-pick :config="pickerConfig" :value="value" @input="onChange" :disabled="disabled" />
</div>
</template>
<script>
import MailTemplatesApi from 'zero/resources/mailTemplates.js'
import { extend as _extend } from 'underscore'
export default {
name: 'uiMailtemplatespicker',
props: {
value: {
type: [String, Array],
default: null
},
limit: {
type: Number,
default: 1
},
disabled: {
type: Boolean,
default: false
},
options: {
type: Object,
default: () => {}
}
},
data: () => ({
previews: [],
pickerConfig: {}
}),
created()
{
this.pickerConfig = _extend({
scope: 'mailtemplate',
items: MailTemplatesApi.getForPicker,
previews: MailTemplatesApi.getPreviews,
limit: this.limit,
multiple: this.limit > 1
//onChange: function (id, item)
//{
// vm.manufacturer = item ? { Id: item.id, Name: item.name } : null;
//}
}, this.options);
},
methods: {
onChange(value)
{
this.$emit('input', value);
}
}
}
</script>
@@ -0,0 +1,17 @@
<template>
<ui-mailtemplatepicker :value="value" @input="$emit('input', $event)" :limit="limit" :disabled="disabled" />
</template>
<script>
export default {
props: {
value: [String, Array],
disabled: Boolean,
limit: {
type: Number,
default: 1
}
}
}
</script>
+51
View File
@@ -0,0 +1,51 @@
<template>
<ui-form ref="form" class="mails" v-slot="form" @submit="onSubmit" @load="onLoad" :route="route">
<ui-form-header v-model="model" title="@mailTemplate.name" :disabled="disabled" :is-create="!id" :state="form.state" :can-delete="meta.canDelete" @delete="onDelete" />
<ui-editor config="mailTemplate" v-model="model" :meta="meta" :active-toggle="false" :disabled="disabled" />
</ui-form>
</template>
<script>
import MailTemplatesApi from 'zero/resources/mailTemplates.js';
import UiEditor from 'zero/editor/editor.vue';
export default {
props: ['id'],
components: { UiEditor },
data: () => ({
meta: {},
model: { name: null },
route: 'settings-mails-edit',
disabled: false
}),
methods: {
onLoad(form)
{
form.load(!this.id ? MailTemplatesApi.getEmpty() : MailTemplatesApi.getById(this.id)).then(response =>
{
this.disabled = !response.meta.canEdit;
this.meta = response.meta;
this.model = response.entity;
});
},
onSubmit(form)
{
form.handle(MailTemplatesApi.save(this.model));
},
onDelete(item, opts)
{
opts.hide();
this.$refs.form.onDelete(MailTemplatesApi.delete.bind(this, this.id));
}
}
}
</script>
+21
View File
@@ -0,0 +1,21 @@
<template>
<div class="languages">
<ui-header-bar title="@mailTemplate.list" :count="count" :back-button="true">
<ui-table-filter :attach="$refs.table" />
<ui-add-button :route="createRoute" />
</ui-header-bar>
<div class="ui-blank-box">
<ui-table ref="table" config="mailTemplates" @count="count = $event" />
</div>
</div>
</template>
<script>
export default {
data: () => ({
count: 0,
createRoute: zero.alias.settings.mails + '-create'
})
}
</script>
+4
View File
@@ -9,6 +9,8 @@ import Language from './language.vue';
import Users from './users.vue';
import User from './user.vue';
import UserRole from './role.vue';
import MailTemplates from './mails.vue';
import MailTemplate from './mail.vue';
import Translations from './translations.vue';
const alias = __zero.alias.sections.settings;
@@ -96,6 +98,8 @@ if (section)
addArea(__zero.alias.settings.translations, Translations, Translations, true);
addArea(__zero.alias.settings.mails, MailTemplates, MailTemplate, true);
addArea(__zero.alias.settings.users, Users, User, true, area =>
{
routes.push({
+3 -1
View File
@@ -6,6 +6,7 @@ import media from './media.js';
//import translation from './translation.js';
import user from './user.js';
import userRole from './userRole.js';
import mailTemplate from './mailTemplate.js';
export default {
application,
@@ -14,5 +15,6 @@ export default {
media,
//translation,
user,
userRole
userRole,
mailTemplate
};
@@ -0,0 +1,20 @@
import Editor from 'zero/core/editor.ts';
const editor = new Editor('mailTemplate', '@mailTemplate.fields.');
const general = editor.tab('general', '@ui.tab_general');
const sender = editor.tab('sender', '@mailTemplate.tabs.sender');
const recipient = editor.tab('recipient', '@mailTemplate.tabs.recipient');
general.field('name', { label: '@ui.name' }).text(60).required();
general.field('key').text(60).required();
general.field('subject').text(80).required();
general.field('body').rte();
sender.field('senderEmail').text();
sender.field('senderName').text();
recipient.field('recipientEmail').text();
recipient.field('cc').text();
recipient.field('bcc').text();
export default editor;
+3 -1
View File
@@ -3,10 +3,12 @@ import countries from './countries.js';
import languages from './languages.js';
import translations from './translations.js';
import users from './users.js';
import mails from './mails.js';
export default {
countries,
languages,
translations,
users
users,
mails
};
+16
View File
@@ -0,0 +1,16 @@
import List from 'zero/core/list.ts';
import MailTemplatesApi from 'zero/resources/mailTemplates.js';
const list = new List('mailTemplates');
list.templateLabel = x => '@mailTemplate.fields.' + x;
list.link = zero.alias.settings.mails + '-edit';
list.onFetch(filter => MailTemplatesApi.getAll(filter));
list.column('name').name();
list.column('subject').text();
list.column('key').text();
export default list;
@@ -0,0 +1,41 @@
import Axios from 'axios';
const base = 'mailTemplates/';
export default {
getById(id)
{
return Axios.get(base + 'getById', { params: { id } }).then(res => Promise.resolve(res.data));
},
getEmpty(id)
{
return Axios.get(base + 'getEmpty').then(res => Promise.resolve(res.data));
},
getAll(query)
{
return Axios.get(base + 'getAll', query ? { params: { query } } : undefined).then(res => Promise.resolve(res.data));
},
getPreviews(ids)
{
return Axios.get(base + 'getPreviews', { params: { ids } }).then(res => Promise.resolve(res.data));
},
getForPicker()
{
return Axios.get(base + 'getForPicker').then(res => Promise.resolve(res.data));
},
save(model)
{
return Axios.post(base + 'save', model).then(res => Promise.resolve(res.data));
},
delete(id)
{
return Axios.delete(base + 'delete', { params: { id } }).then(res => Promise.resolve(res.data));
}
};
+2
View File
@@ -36,6 +36,7 @@ import uiIconpicker from './pickers/iconPicker/iconpicker.vue';
import uiMediapicker from './pickers/mediaPicker/mediapicker.vue';
import uiPagepicker from './pickers/pagePicker/pagepicker.vue';
import uiUserpicker from './pickers/userPicker/userpicker.vue';
import uiMailtemplatepicker from './pickers/mailPicker/mailpicker.vue';
import uiPick from './pickers/pick.vue';
import uiTable from './tables/table.vue';
@@ -96,6 +97,7 @@ export default {
uiMediapicker,
uiPagepicker,
uiUserpicker,
uiMailtemplatepicker,
uiPick,
uiTable,
+13 -1
View File
@@ -11,6 +11,7 @@ import Output from '../editor/fields/output.vue';
import Checklist from '../editor/fields/checklist.vue';
import ColorPicker from '../editor/fields/colorpicker.vue';
import CountryPicker from '../editor/fields/countrypicker.vue';
import MailTemplatePicker from '../editor/fields/mailtemplatepicker.vue';
import CulturePicker from '../editor/fields/culturepicker.vue';
import DatePicker from '../editor/fields/datepicker.vue';
import DateRangePicker from '../editor/fields/daterangepicker.vue';
@@ -99,7 +100,7 @@ class EditorField
/**
*
*/
_setComponent(component, options)
_setComponent(component, options?)
{
this.#component = component;
this.#componentOptions = options || {};
@@ -306,6 +307,17 @@ class EditorField
}
/**
* Renders a mail template picker
* @param {number} [limit=1] - Maximum items to be selected
* @returns {EditorField}
*/
mailTemplatePicker(limit)
{
return this._setComponent(MailTemplatePicker, { limit });
}
/**
* Renders a date picker
* @param {object} [options] - Custom options