增加邮件编辑功能
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 = '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
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',
|
||||
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> {
|
||||
/**
|
||||
* 如果数组中没有要放入的对象,则将对象放入数组
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user