This commit is contained in:
hujiabin 2024-05-11 18:05:57 +08:00
parent b09c08a76a
commit bd19dd8ae3
3 changed files with 420 additions and 398 deletions

View File

@ -15,10 +15,10 @@ export function getMailList() {
}) })
} }
export function updatmail(data) { export function updateEmail(data) {
return request({ return request({
url: '/mail/update', url: '/mail/edit',
method: 'put', method: 'post',
data data
}) })
} }

View File

@ -1,256 +1,279 @@
<template> <template>
<div class="createPost-container"> <div class="createPost-container">
<el-form ref="postForm" :model="postForm" :rules="rules" class="form-container"> <el-form ref="postForm" :model="postForm" :rules="rules" class="form-container">
<sticky :z-index="10" class-name="sub-navbar draft"> <sticky :z-index="10" class-name="sub-navbar draft">
<CommentDropdown v-show="mailTypeVisible" v-model="postForm.mailtype" /> <CommentDropdown v-show="mailTypeVisible" v-model="postForm.mailtype" />
<el-button style="margin-left: 10px;" type="success" @click="dialogStatus==='create'?submitForm():updateFrom()"> <el-button style="margin-left: 10px;" type="success" @click="dialogStatus==='create'?submitForm():updateFrom()">
发布 发布
</el-button> </el-button>
</sticky> </sticky>
<div class="createPost-main-container"> <div class="createPost-main-container">
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label-width="120px" label="发送时间:" class="postInfo-container-item" prop="sendtime"> <el-form-item label-width="120px" label="发送时间:" class="postInfo-container-item" prop="sendtime">
<el-date-picker v-model.number="postForm.sendtime" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="postForm.sendtime" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-form-item label-width="120px" label="过期时间:" class="postInfo-container-item" prop="expiretime"> <el-form-item label-width="120px" label="过期时间:" class="postInfo-container-item" prop="expiretime">
<el-date-picker v-model.number="postForm.expiretime" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="postForm.expiretime" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-show="userRegVisible" :span="10"> <el-col v-show="userRegVisible" :span="10">
<el-form-item label-width="120px" label="注册时间>=:" class="postInfo-container-item" prop="user_reg_start_time"> <el-form-item label-width="120px" label="注册时间>=:" class="postInfo-container-item" prop="user_reg_start_time">
<el-date-picker v-model.number="postForm.user_reg_start_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="postForm.user_reg_start_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col v-show="userRegVisible" :span="10"> <el-col v-show="userRegVisible" :span="10">
<el-form-item label-width="120px" label="注册时间<=:" class="postInfo-container-item" prop="user_reg_end_time"> <el-form-item label-width="120px" label="注册时间<=:" class="postInfo-container-item" prop="user_reg_end_time">
<el-date-picker v-model.number="postForm.user_reg_end_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="postForm.user_reg_end_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item style="margin-bottom: 40px;" prop="subject"> <el-form-item style="margin-bottom: 40px;" prop="subject">
<MDinput v-model="postForm.subject" :maxlength="100" name="subject" required> <MDinput v-model="postForm.subject" :maxlength="100" name="subject" required>
邮件标题 邮件标题
</MDinput> </MDinput>
</el-form-item> </el-form-item>
<el-form-item prop="content" style="margin-bottom: 30px;" label="邮件正文:"> <el-form-item prop="content" style="margin-bottom: 30px;" label="邮件正文:">
<el-input v-model="postForm.content" type="textarea" :rows="6" /> <el-input v-model="postForm.content" type="textarea" :rows="6" />
</el-form-item> </el-form-item>
<el-form-item style="margin-bottom: 30px;" label="附件:"> <el-form-item style="margin-bottom: 30px;" label="附件:">
<el-input v-model="postForm.attachments" type="textarea" :rows="6" /> <el-input v-model="postForm.attachments" type="textarea" :rows="6" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item v-show="groupMailVisible" style="margin-bottom: 40px;" prop="to" label="收件人列表:"> <el-form-item v-show="groupMailVisible" style="margin-bottom: 40px;" prop="to" label="收件人列表:">
<el-input v-model="postForm.recipients" type="textarea" :rows="6" required /> <el-input v-model="postForm.recipients" type="textarea" :rows="6" required />
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
</el-form> </el-form>
</div> </div>
</template> </template>
<script> <script>
import { CommentDropdown } from '@/views/example/components/Dropdown' import { CommentDropdown } from '@/views/example/components/Dropdown'
import Sticky from '@/components/Sticky/index.vue' import Sticky from '@/components/Sticky/index.vue'
import MDinput from '@/components/MDinput/index.vue' import MDinput from '@/components/MDinput/index.vue'
import { addMail, updateEmail } from '@/api/mail' import { addMail, updateEmail } from '@/api/mail'
import { parseTime } from '@/utils' import { parseTime } from '@/utils'
import { MAIL_TYPE_GROUP, MAIL_TYPE_ALL } from '@/constant/constant' import { MAIL_TYPE_GROUP, MAIL_TYPE_ALL } from '@/constant/constant'
export default { export default {
name: 'Email', name: 'Email',
components: { MDinput, CommentDropdown, Sticky }, components: { MDinput, CommentDropdown, Sticky },
data() { data() {
return { return {
postForm: { postForm: {
mailtype: MAIL_TYPE_GROUP, mailtype: MAIL_TYPE_GROUP,
sendtime: '', sendtime: '',
expiretime: '', expiretime: '',
user_reg_start_time: '', user_reg_start_time: '',
user_reg_end_time: '', user_reg_end_time: '',
subject: '', subject: '',
content: '', content: '',
attachments: '', attachments: '',
recipients: '' recipients: ''
}, },
rules: { rules: {
sendtime: [{ required: true, message: '请选择发送时间', trigger: 'blur' }], sendtime: [{ required: true, message: '请选择发送时间', trigger: 'blur' }],
expiretime: [{ required: true, message: '请选择过期时间', trigger: 'blur' }], expiretime: [{ required: true, message: '请选择过期时间', trigger: 'blur' }],
subject: [{ required: true, message: 'subject is required', trigger: 'blur' }], subject: [{ required: true, message: 'subject is required', trigger: 'blur' }],
content: [{ required: true, message: 'content is required', trigger: 'blur' }], content: [{ required: true, message: 'content is required', trigger: 'blur' }],
user_reg_start_time: [ user_reg_start_time: [
{ required: true, message: '用户注册开始时间', trigger: 'blur' }, { required: true, message: '用户注册开始时间', trigger: 'blur' },
{ {
validator: (rule, value, cb, source, options) => { validator: (rule, value, cb, source, options) => {
const errors = [] const errors = []
console.log(this.postForm.mailtype) console.log(this.postForm.mailtype)
cb() cb()
return errors return errors
}, },
trigger: 'blur' trigger: 'blur'
} }
], ],
user_reg_end_time: [ user_reg_end_time: [
{ required: true, message: '用户注册结束时间', trigger: 'blur' }, { required: true, message: '用户注册结束时间', trigger: 'blur' },
{ {
validator: (rule, value, cb, source, options) => { validator: (rule, value, cb, source, options) => {
const errors = [] const errors = []
console.log(this.postForm.mailtype) console.log(this.postForm.mailtype)
cb() cb()
return errors return errors
} }
} }
] ]
}, },
userRegVisible: true, userRegVisible: true,
groupMailVisible: true, groupMailVisible: true,
mailTypeVisible: true, mailTypeVisible: true,
dialogStatus: 'create' dialogStatus: 'create'
} }
}, },
watch: { watch: {
'postForm.mailtype'(val) { 'postForm.mailtype'(val) {
switch (val) { switch (val) {
case MAIL_TYPE_GROUP: case MAIL_TYPE_GROUP:
{ this.userRegVisible = true
this.userRegVisible = true this.groupMailVisible = true
this.groupMailVisible = true break
} case MAIL_TYPE_ALL:
break this.userRegVisible = true
case MAIL_TYPE_ALL: this.groupMailVisible = false
{ break
this.userRegVisible = true }
this.groupMailVisible = false /*
} if (this.dialogStatus === 'create' && val === 2) {
break }*/
} }
/* },
if (this.dialogStatus === 'create' && val === 2) { created() {
}*/ const mailid = this.$route.params.mailid
} if (mailid) {
}, this.mailTypeVisible = false
created() { this.dialogStatus = 'update'
const mailid = this.$route.params.mailid const editEmail = JSON.parse(sessionStorage.getItem('editEmail' + mailid))
if (mailid) { this.postForm = editEmail
this.mailTypeVisible = false
this.dialogStatus = 'update' let str = ''
const editEmail = JSON.parse(sessionStorage.getItem('editEmail' + mailid)) editEmail.attachments.forEach((item) => {
this.postForm = editEmail str += item['itemid'] + ':' + item['itemnum'] + '\n'
let str = '' })
editEmail.attachments.forEach((item) => { this.postForm.attachments = str.slice(0, -1)
str += item['itemid'] + ':' + item['itemnum'] + '|' this.postForm.sendtime = editEmail.sendtime * 1000
}) this.postForm.expiretime = editEmail.expiretime * 1000
this.postForm.attachments = str.slice(0, -1) this.postForm.user_reg_start_time = editEmail.user_reg_start_time * 1000
this.postForm.sendtime = editEmail.sendtime * 1000 this.postForm.user_reg_end_time = editEmail.user_reg_end_time * 1000
this.postForm.expiretime = editEmail.expiretime * 1000 this.postForm.recipients = editEmail.recipients.join('\n')
} else { } else {
this.dialogStatus = 'create' this.dialogStatus = 'create'
sessionStorage.removeItem('editEmail' + mailid) sessionStorage.removeItem('editEmail' + mailid)
} }
}, },
methods: { methods: {
parseTime, parseTime,
submitForm() { submitForm() {
const data = JSON.parse(JSON.stringify(this.postForm)) const data = JSON.parse(JSON.stringify(this.postForm))
data.sendtime = data.sendtime / 1000 data.sendtime = data.sendtime / 1000
data.expiretime = data.expiretime / 1000 data.expiretime = data.expiretime / 1000
data.user_reg_start_time = data.user_reg_start_time / 1000 data.user_reg_start_time = data.user_reg_start_time / 1000
data.user_reg_end_time = data.user_reg_end_time / 1000 data.user_reg_end_time = data.user_reg_end_time / 1000
console.log('valid begin') console.log('valid begin')
try { data.recipients = data.recipients.split('\n')
this.$refs['postForm'].validate((valid) => { var arr = data.attachments.split('\n')
console.log('valid end', valid) arr.forEach((item, index) => {
if (valid) { var recipientsArr = {}
addMail(data).then(response => { var itemArr = item.split(':')
if (response.code === 0) { recipientsArr['itemid'] = parseInt(itemArr[0])
this.$message({ recipientsArr['itemnum'] = parseInt(itemArr[1])
message: '发布成功', arr[index] = recipientsArr
type: 'success', })
duration: 1200, data.attachments = arr
onClose: () => { try {
this.$router.push('index') this.$refs['postForm'].validate((valid) => {
} console.log('valid end', valid)
}) if (valid) {
} addMail(data).then(response => {
}) if (response.code === 0) {
} this.$message({
}) message: '发布成功',
} catch (e) { type: 'success',
console.log(e) duration: 1200,
} onClose: () => {
}, this.$router.push('index')
updateFrom() { }
const data = JSON.parse(JSON.stringify(this.postForm)) })
data.sendtime = data.sendtime / 1000 }
data.expiretime = data.expiretime / 1000 })
this.$refs['postForm'].validate((valid) => { }
if (valid) { })
updateEmail(data).then(response => { } catch (e) {
if (response.code === 0) { console.log(e)
this.$message({ }
message: '操作成功', },
type: 'success', updateFrom() {
duration: 1200, const data = JSON.parse(JSON.stringify(this.postForm))
onClose: () => { data.sendtime = data.sendtime / 1000
sessionStorage.removeItem('editEmail' + data.mailid) data.expiretime = data.expiretime / 1000
this.$router.replace('/mail/index') data.user_reg_start_time = data.user_reg_start_time / 1000
} data.user_reg_end_time = data.user_reg_end_time / 1000
}) console.log('valid begin')
} data.recipients = data.recipients.split('\n')
}) var arr = data.attachments.split('\n')
} arr.forEach((item, index, arr) => {
}) var recipientsArr = {}
} var itemArr = item.split(':')
} recipientsArr['itemid'] = parseInt(itemArr[0])
} recipientsArr['itemnum'] = parseInt(itemArr[1])
</script> arr[index] = recipientsArr
<style lang="scss" scoped> })
@import "~@/styles/mixin.scss"; data.attachments = arr
this.$refs['postForm'].validate((valid) => {
.createPost-container { if (valid) {
position: relative; updateEmail(data).then(response => {
if (response.code === 0) {
.createPost-main-container { this.$message({
padding: 40px 45px 20px 50px; message: '操作成功',
type: 'success',
.postInfo-container { duration: 1200,
position: relative; onClose: () => {
@include clearfix; sessionStorage.removeItem('editEmail' + data.mailid)
margin-bottom: 10px; this.$router.replace('/email/index')
}
.postInfo-container-item { })
float: left; }
} })
} }
} })
}
.word-counter { }
width: 40px; }
position: absolute; </script>
right: 10px; <style lang="scss" scoped>
top: 0px; @import "~@/styles/mixin.scss";
}
} .createPost-container {
position: relative;
.article-textarea ::v-deep {
textarea { .createPost-main-container {
padding-right: 40px; padding: 40px 45px 20px 50px;
resize: none;
border: none; .postInfo-container {
border-radius: 0px; position: relative;
border-bottom: 1px solid #bfcbd9; @include clearfix;
} margin-bottom: 10px;
}
.postInfo-container-item {
</style> float: left;
}
}
}
.word-counter {
width: 40px;
position: absolute;
right: 10px;
top: 0px;
}
}
.article-textarea ::v-deep {
textarea {
padding-right: 40px;
resize: none;
border: none;
border-radius: 0px;
border-bottom: 1px solid #bfcbd9;
}
}
</style>

View File

@ -1,139 +1,138 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-table <el-table
:data="mailList" :data="mailList"
border border
fit fit
highlight-current-row highlight-current-row
style="width: 100%;" style="width: 100%;"
> >
<el-table-column <el-table-column
prop="mail_id" prop="mail_id"
label="邮件id" label="邮件id"
/> />
<el-table-column <el-table-column
prop="mail_type" prop="mail_type"
label="邮件类型" label="邮件类型"
/> />
<el-table-column <el-table-column
prop="sendtime" prop="sendtime"
label="发送时间" label="发送时间"
> >
<template slot-scope="{row}"> <template slot-scope="{row}">
<span> <span>
{{ parseTime(row.sendtime) }} {{ parseTime(row.sendtime) }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="expiretime" prop="expiretime"
label="过期时间" label="过期时间"
> >
<template slot-scope="{row}"> <template slot-scope="{row}">
<span> <span>
{{ parseTime(row.expiretime) }} {{ parseTime(row.expiretime) }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="to" prop="to"
label="收件人" label="收件人"
/> />
</el-table-column> <el-table-column
<el-table-column prop="subject"
prop="subject" label="邮件标题"
label="邮件标题" />
/> <el-table-column
<el-table-column prop="content"
prop="content" label="邮件内容"
label="邮件内容" />
/> <!-- <el-table-column label="附件" align="center" width="95"> -->
<!-- <el-table-column label="附件" align="center" width="95"> --> <!-- <template slot-scope="{row}"> -->
<!-- <template slot-scope="{row}"> --> <!-- <span v-if="row.attachments.length > 0" class="link-type" @click="handleFetchAtta(row.attachments)">查看</span> -->
<!-- <span v-if="row.attachments.length > 0" class="link-type" @click="handleFetchAtta(row.attachments)">查看</span> --> <!-- <el-tag v-else type="info"></el-tag> -->
<!-- <el-tag v-else type="info"></el-tag> --> <!-- </template> -->
<!-- </template> --> <!-- </el-table-column> -->
<!-- </el-table-column> --> <el-table-column
<el-table-column fixed="right"
fixed="right" label="操作"
label="操作" width="100"
width="100" >
> <template slot-scope="scope">
<template slot-scope="scope"> <el-button type="text" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button type="text" size="small" @click="handleUpdate(scope.row)">编辑</el-button> <el-button type="text" size="small" @click="handleDelete(scope.row)">删除</el-button>
<el-button type="text" size="small" @click="handleDelete(scope.row)">删除</el-button> </template>
</template> </el-table-column>
</el-table-column> </el-table>
</el-table> <el-dialog :visible.sync="dialogAttaVisible" title="附件">
<el-dialog :visible.sync="dialogAttaVisible" title="附件"> <el-table :data="attaData" border fit highlight-current-row style="width: 100%">
<el-table :data="attaData" border fit highlight-current-row style="width: 100%"> <el-table-column prop="itemid" label="ItemId" />
<el-table-column prop="itemid" label="ItemId" /> <el-table-column prop="itemnum" label="ItemNum" />
<el-table-column prop="itemnum" label="ItemNum" /> </el-table>
</el-table> </el-dialog>
</el-dialog> </div>
</div> </template>
</template> <script>
<script> // import Pagination from '@/components/Pagination/index.vue'
// import Pagination from '@/components/Pagination/index.vue' import { delMail, getMailList } from '@/api/mail'
import { delMail, getMailList } from '@/api/mail' import { parseTime } from '@/utils'
import { parseTime } from '@/utils'
export default {
export default { components: {
components: {
},
}, data() {
data() { return {
return { dialogAttaVisible: false,
dialogAttaVisible: false, mailList: [],
mailList: [], attaData: []
attaData: [] }
} },
}, created() {
created() { this.getList()
this.getList() },
}, methods: {
methods: { parseTime,
parseTime, getList() {
getList() { getMailList().then(response => {
getMailList().then(response => { if (response.code === 0) {
if (response.code === 0) { this.mailList = response.data
this.mailList = response.data }
} })
}) },
}, handleFetchAtta(row) {
handleFetchAtta(row) { this.attaData = row
this.attaData = row this.dialogAttaVisible = true
this.dialogAttaVisible = true },
}, handleUpdate(row) {
handleUpdate(row) { // this.$store.dispatch('emailView/addEmail', row)
// this.$store.dispatch('emailView/addEmail', row) sessionStorage.setItem('editEmail' + row.mail_id, JSON.stringify(row))
sessionStorage.setItem('editEmail' + row.mailid, JSON.stringify(row)) this.$router.push('update/' + row.mail_id)
this.$router.replace('update/' + row.mailid) },
}, handleDelete(row) {
handleDelete(row) { delMail(row.mailid).then((response) => {
delMail(row.mailid).then((response) => { if (response.code === 0) {
if (response.code === 0) { this.$message({
this.$message({ message: '操作成功',
message: '操作成功', type: 'success',
type: 'success', duration: 1200,
duration: 1200, onClose: () => {
onClose: () => { this.getList()
this.getList() }
} })
}) } else {
} else { this.$message({
this.$message({ message: response.message,
message: response.message, type: 'error',
type: 'error', duration: 1200
duration: 1200 })
}) }
} })
}) }
} }
} }
} </script>
</script>
<style scoped lang="scss">
<style scoped lang="scss">
</style>
</style>