增加邮件编辑功能

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