增加邮件编辑功能
This commit is contained in:
parent
1756515426
commit
c9b2f41705
@ -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
63
src/api/mail.ts
Normal 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
|
||||||
|
})
|
@ -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
|
||||||
|
})
|
||||||
|
@ -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
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user