增加邮件编辑功能

This commit is contained in:
zhl 2021-06-09 19:22:46 +08:00
parent 1756515426
commit c9b2f41705
6 changed files with 443 additions and 688 deletions

View File

@ -1,2 +1,2 @@
#VUE_APP_BASE_API = 'http://192.168.100.22:2900'
VUE_APP_BASE_API = 'https://puzzle-admin.kingsome.cn'
VUE_APP_BASE_API = 'http://192.168.100.22:2900'
#VUE_APP_BASE_API = 'https://puzzle-admin.kingsome.cn'

63
src/api/mail.ts Normal file
View File

@ -0,0 +1,63 @@
import request from '@/utils/request'
export interface IMailItem {
_id?: string
index?: number
itemId?: string
name?: string
count: number
}
export interface IMailData {
_id?: string
senderShop?: string
sender?: string
title?: string
content?: string
type: number
accounts: string[]
shops: string[]
items: IMailItem[]
sendTime?: number
endTime?: number
}
export const defaultMailItem: IMailItem = {
count: 1
}
export const defaultMailData: IMailData = {
items: [],
shops: [],
type: 0,
accounts: []
}
export const getMails = (params: any) =>
request({
url: '/api/mails',
method: 'post',
params
})
export const getMail = (id: string, params: any) =>
request({
url: `/api/mail/${id}`,
method: 'get',
params
})
export const saveMail = (data: any) =>
request({
url: '/api/mail/save',
method: 'post',
data
})
export const deleteMail = (data: any) =>
request({
url: '/api/mail/delete',
method: 'post',
data
})

View File

@ -139,3 +139,14 @@ export const updateShopShareCfg = (data: any) =>
method: 'post',
data
})
/**
*
* @param data
*/
export const getShopUsers = (data: any) =>
request({
url: '/api/shop/game_users',
method: 'post',
data
})

View File

@ -1,4 +1,20 @@
interface Date {
/**
* n天
* @param {number} days
* @return {Date}
*/
addDays(days: number): Date
}
// eslint-disable-next-line no-extend-native
Object.defineProperties(Date.prototype, {
addDays: {
value: function(days: number) {
return new Date(this.getTime() + days * 3600 * 24 * 1000)
},
writable: true
}
})
interface Array<T> {
/**
*

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,9 @@
</el-form-item>
<el-form-item :label="$t('main.shop')" prop="key" v-if="userLevel === 1">
<el-select
v-model="filterForm.shop"
v-model="filterForm.sender"
:placeholder="'选择'+$t('main.shop')"
name="shop"
name="sender"
required
class="w100"
>
@ -26,11 +26,11 @@
<el-button @click="resetFilterForm">重置</el-button>
</el-form-item>
</el-form>
<router-link to="/shop/activity_new">
<router-link to="/shop/mail_new">
<el-button
type="primary"
icon="el-icon-edit"
v-permission="['activity:edit']"
v-permission="['shopmail:edit']"
>
添加
</el-button>
@ -54,33 +54,53 @@
</template>
</el-table-column>
<el-table-column
:label="$t('main.shop')"
prop="shop"
label="发送时间"
>
<template slot-scope="{row}">
<span>{{ formatSendTime(row) }}</span>
</template>
</el-table-column>
<el-table-column
label="类型"
>
<template slot-scope="{row}">
<span>{{ row.type === 0 ? '普通': '群发' }}</span>
</template>
</el-table-column>
<el-table-column
label="发件人"
prop="sender"
v-if="userLevel === 1"
:formatter = "formatDept"
>
</el-table-column>
<el-table-column
label="收件人"
>
<template slot-scope="{row}">
<span>{{ formatReceive(row) }}</span>
</template>
</el-table-column>
<el-table-column
min-width="200px"
label="名称"
label="邮件标题"
>
<template slot-scope="{row}">
<router-link
:to="'/shop/activity_edit/'+row._id"
:to="'/shop/mail_edit/'+row._id"
class="link-type"
>
<span>{{ row.name }}</span>
<span>{{ row.title }}</span>
</router-link>
</template>
</el-table-column>
<el-table-column
label="是否启用"
prop="active"
:formatter="formatBool"
label="附件"
>
<template slot-scope="{row}">
<span>{{ formatItems(row) }}</span>
</template>
</el-table-column>
<el-table-column
align="center"
width="320"
@ -88,21 +108,12 @@
fixed="right"
>
<template slot-scope="scope">
<el-button
:type="scope.row.active? 'warning': 'success'"
size="small"
style="margin-right: 10px"
v-permission="['activity:edit']"
@click="updateActivityStata(scope)"
>
{{ scope.row.active? '冻结': '激活' }}
</el-button>
<router-link :to="'/shop/activity_edit/'+scope.row._id">
<router-link :to="'/shop/mail_edit/'+scope.row._id">
<el-button
type="primary"
size="small"
icon="el-icon-edit"
v-permission="['activity:edit']"
v-permission="['shopmail:edit']"
>
编辑
</el-button>
@ -111,7 +122,7 @@
type="danger"
size="small"
style="margin-left: 10px"
v-permission="['activity:delete']"
v-permission="['shopmail:delete']"
@click="handleDelete(scope)"
>
{{ $t('permission.delete') }}
@ -137,9 +148,9 @@ import Pagination from '@/components/Pagination/index.vue'
import { getShops } from '@/api/shop'
import { parseTime } from '@/utils'
import { getAllCategory, getAllTags } from '@/api/question'
import { deleteActivity, getActivitys, IActivityData, publishActivity } from '@/api/activity'
import { UserModule } from '@/store/modules/user'
import { EVENT_ACTIVITY_UPDATE, EVENT_SHOP_UPDATE, EventBus } from '@/utils/event-bus'
import { deleteMail, getMails, IMailData } from '@/api/mail'
@Component({
name: 'MailList',
@ -167,14 +178,14 @@ import { EVENT_ACTIVITY_UPDATE, EVENT_SHOP_UPDATE, EventBus } from '@/utils/even
export default class extends Vue {
private total = 0
private list: IActivityData[] = []
private list: IMailData[] = []
private listLoading = true
private allDepts: IShopData[] = []
private listQuery = {
page: 1,
limit: 20,
key: '',
shop: ''
sender: ''
}
private typeOptions: any[] = []
@ -182,7 +193,7 @@ export default class extends Vue {
private tagOptions: string[] = []
private filterForm = {
key: '',
shop: ''
sender: ''
}
$refs!: {
@ -200,8 +211,8 @@ export default class extends Vue {
this.getRemoteDeptList()
})
} else {
this.filterForm.shop = UserModule.department
this.listQuery.shop = UserModule.department
this.filterForm.sender = UserModule.department
this.listQuery.sender = UserModule.department
}
await this.getRemoteCategory()
await this.getList()
@ -219,7 +230,7 @@ export default class extends Vue {
private async getList() {
this.listLoading = true
const { data } = await getActivitys(this.listQuery)
const { data } = await getMails(this.listQuery)
this.listLoading = false
this.list = data.records
this.total = data.total
@ -232,7 +243,7 @@ export default class extends Vue {
cancelButtonText: '取消',
type: 'warning'
})
await deleteActivity(row._id)
await deleteMail({ ids: [row._id] })
this.list.splice($index, 1)
this.$message({
type: 'success',
@ -246,7 +257,7 @@ export default class extends Vue {
private filterData() {
this.listQuery.key = this.filterForm.key
this.listQuery.shop = this.filterForm.shop
this.listQuery.sender = this.filterForm.sender
this.listQuery.page = 1
this.getList()
}
@ -301,25 +312,26 @@ export default class extends Vue {
return cellValue ? '是' : '否'
}
private async updateActivityStata(scope: any) {
const { row } = scope
const str = row.active ? '确认取消冻结该活动?' : '确定激活该活动?'
try {
await this.$confirm(str, 'Warning', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
await publishActivity({ id: row._id, active: !row.active })
row.active = !row.active
if (row.active) {
for (const _d of this.list) {
_d.active = _d._id === row._id
}
}
} catch (err) {
console.log(err)
private formatReceive(data: any) {
if (data.type === 0) {
return `${data.accounts.length}`
} else if (data.type === 1) {
return data.senderShop
} else {
return ''
}
}
private formatItems(data: any) {
return data.items.length + '件物品'
}
private formatSendTime(data: any) {
let str = `${parseTime(data.sendTime, '{y}/{m}/{d}')}`
if (data.endTime) {
str += `-${parseTime(data.endTime, '{y}/{m}/{d}')}`
}
return str
}
}
</script>