Skip to content

Commit 3b5cec8

Browse files
committed
feat: Email templates handling
1 parent c441ab1 commit 3b5cec8

File tree

13 files changed

+791
-2
lines changed

13 files changed

+791
-2
lines changed

coreui/src/router/index.js

+45-1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ const Resource = () => import('@/views/resources/Resource')
8484
const EditResource = () => import('@/views/resources/EditResource')
8585
const DeleteResource = () => import('@/views/resources/DeleteResource')
8686

87+
//Email
88+
const Emails = () => import('@/views/email/Emails')
89+
const CreateEmail = () => import('@/views/email/CreateEmail')
90+
const EditEmail = () => import('@/views/email/EditEmail')
91+
const ShowEmail = () => import('@/views/email/ShowEmail')
92+
const SendEmail = () => import('@/views/email/SendEmail')
93+
8794
const EditMenu = () => import('@/views/menu/EditMenu')
8895
const Media = () => import('@/views/media/Media')
8996

@@ -212,7 +219,7 @@ function configRoutes () {
212219
{
213220
path: 'create',
214221
meta: { label: 'Create Role' },
215-
name: 'Create Note',
222+
name: 'Create Role',
216223
component: CreateRole
217224
},
218225
{
@@ -266,6 +273,43 @@ function configRoutes () {
266273
},
267274
]
268275
},
276+
{
277+
path: 'email',
278+
meta: { label: 'Emails'},
279+
component: {
280+
render (c) { return c('router-view') }
281+
},
282+
children: [
283+
{
284+
path: '',
285+
component: Emails,
286+
},
287+
{
288+
path: 'create',
289+
meta: { label: 'Create Email Template' },
290+
name: 'Create Email Template',
291+
component: CreateEmail
292+
},
293+
{
294+
path: ':id',
295+
meta: { label: 'Show Email Template'},
296+
name: 'Show Email Tempalte',
297+
component: ShowEmail,
298+
},
299+
{
300+
path: ':id/edit',
301+
meta: { label: 'Edit Email Tempalate' },
302+
name: 'Edit Email Template',
303+
component: EditEmail
304+
},
305+
{
306+
path: ':id/sendEmail',
307+
meta: { label: 'Send Email' },
308+
name: 'Send Email',
309+
component: SendEmail
310+
},
311+
]
312+
},
269313
{
270314
path: 'resource',
271315
meta: { label: 'Resources'},
+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<template>
2+
<CRow>
3+
<CCol col="12" lg="6">
4+
<CCard no-header>
5+
<CCardBody>
6+
<h4>
7+
Create Email Template
8+
</h4>
9+
<CAlert
10+
:show.sync="dismissCountDown"
11+
color="primary"
12+
fade
13+
>
14+
({{dismissCountDown}}) {{ message }}
15+
</CAlert>
16+
17+
<CInput label="Name" type="text" placeholder="Name" v-model="template.name"></CInput>
18+
19+
<CInput label="Subject" type="text" placeholder="Subject" v-model="template.subject"></CInput>
20+
21+
<CTextarea textarea="true" label="Content" :rows="15" placeholder="Content.." v-model="template.content"></CTextarea>
22+
23+
<CButton color="primary" @click="store()">Create</CButton>
24+
<CButton color="primary" @click="goBack">Back</CButton>
25+
</CCardBody>
26+
</CCard>
27+
</CCol>
28+
</CRow>
29+
</template>
30+
31+
<script>
32+
import axios from 'axios'
33+
export default {
34+
name: 'CreateEmailTemplate',
35+
data: () => {
36+
return {
37+
template: {
38+
name: '',
39+
subject: '',
40+
content: '',
41+
},
42+
message: '',
43+
dismissSecs: 7,
44+
dismissCountDown: 0,
45+
showDismissibleAlert: false
46+
}
47+
},
48+
methods: {
49+
goBack() {
50+
this.$router.go(-1)
51+
// this.$router.replace({path: '/users'})
52+
},
53+
store() {
54+
let self = this;
55+
axios.post( '/api/mail?token=' + localStorage.getItem("api_token"),
56+
self.template
57+
)
58+
.then(function (response) {
59+
self.template = {
60+
name: '',
61+
subject: '',
62+
content: '',
63+
}
64+
self.message = 'Successfully created Email Template.';
65+
self.showAlert();
66+
}).catch(function (error) {
67+
if(error.response.data.message == 'The given data was invalid.'){
68+
self.message = '';
69+
for (let key in error.response.data.errors) {
70+
if (error.response.data.errors.hasOwnProperty(key)) {
71+
self.message += error.response.data.errors[key][0] + ' ';
72+
}
73+
}
74+
self.showAlert();
75+
}else{
76+
console.log(error);
77+
self.$router.push({ path: 'login' });
78+
}
79+
});
80+
},
81+
countDownChanged (dismissCountDown) {
82+
this.dismissCountDown = dismissCountDown
83+
},
84+
showAlert () {
85+
this.dismissCountDown = this.dismissSecs
86+
},
87+
},
88+
mounted: function(){
89+
90+
}
91+
}
92+
93+
</script>

coreui/src/views/email/EditEmail.vue

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<template>
2+
<CRow>
3+
<CCol col="12" lg="6">
4+
<CCard>
5+
<CCardBody>
6+
<h3>
7+
Edit Email Template
8+
</h3>
9+
<CAlert
10+
:show.sync="dismissCountDown"
11+
color="primary"
12+
fade
13+
>
14+
({{dismissCountDown}}) {{ message }}
15+
</CAlert>
16+
17+
<CInput label="Name" type="text" placeholder="Name" v-model="template.name"></CInput>
18+
<CInput label="Subject" type="text" placeholder="Subject" v-model="template.subject"></CInput>
19+
<CTextarea textarea="true" label="Content" :rows="15" placeholder="Content.." v-model="template.content"></CTextarea>
20+
21+
<CButton color="primary" @click="update()">Save</CButton>
22+
<CButton color="primary" @click="goBack">Back</CButton>
23+
</CCardBody>
24+
</CCard>
25+
</CCol>
26+
</CRow>
27+
</template>
28+
29+
<script>
30+
import axios from 'axios'
31+
export default {
32+
name: 'EditEmailTemplate',
33+
data: () => {
34+
return {
35+
template: {
36+
name: '',
37+
subject: '',
38+
content: '',
39+
},
40+
message: '',
41+
dismissSecs: 7,
42+
dismissCountDown: 0,
43+
}
44+
},
45+
methods: {
46+
goBack() {
47+
this.$router.go(-1)
48+
// this.$router.replace({path: '/users'})
49+
},
50+
update() {
51+
let self = this;
52+
axios.post( '/api/mail/' + self.$route.params.id + '?token=' + localStorage.getItem("api_token"),
53+
{
54+
_method: 'PUT',
55+
name: self.template.name,
56+
subject: self.template.subject,
57+
content: self.template.content,
58+
})
59+
.then(function (response) {
60+
self.message = 'Successfully updated note.';
61+
self.showAlert();
62+
}).catch(function (error) {
63+
if(error.response.data.message == 'The given data was invalid.'){
64+
self.message = '';
65+
for (let key in error.response.data.errors) {
66+
if (error.response.data.errors.hasOwnProperty(key)) {
67+
self.message += error.response.data.errors[key][0] + ' ';
68+
}
69+
}
70+
self.showAlert();
71+
}else{
72+
console.log(error);
73+
self.$router.push({ path: '/login' });
74+
}
75+
});
76+
},
77+
showAlert () {
78+
this.dismissCountDown = this.dismissSecs
79+
},
80+
},
81+
mounted: function(){
82+
let self = this;
83+
axios.get( '/api/mail/' + self.$route.params.id + '/edit?token=' + localStorage.getItem("api_token"))
84+
.then(function (response) {
85+
self.template = response.data.template;
86+
}).catch(function (error) {
87+
console.log(error);
88+
self.$router.push({ path: '/login' });
89+
});
90+
}
91+
}
92+
93+
94+
</script>

0 commit comments

Comments
 (0)