move mail templates into core
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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({
|
||||
|
||||
@@ -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,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
|
||||
};
|
||||
@@ -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));
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user