完成拼团管理

This commit is contained in:
gooking 2018-05-23 09:46:05 +08:00
parent 08f56a2777
commit d5d64ed5e1
5 changed files with 468 additions and 0 deletions

13
src/api/pingtuanHelp.js Normal file
View File

@ -0,0 +1,13 @@
import request from '@/utils/request'
export function fetchDataList(page, pageSize, data) {
return request({
url: '/user/pingtuanHelp/list',
method: 'post',
data: {
page,
pageSize,
...data
}
})
}

21
src/api/pingtuanOpener.js Normal file
View File

@ -0,0 +1,21 @@
import request from '@/utils/request'
export function fetchDataList(page, pageSize, data) {
return request({
url: '/user/pingtuanOpener/list',
method: 'post',
data: {
page,
pageSize,
...data
}
})
}
export function saveStatus(id, status) {
return request({
url: '/user/pingtuanOpener/status',
method: 'post',
data: { id, status }
})
}

View File

@ -155,6 +155,18 @@ export const constantRouterMap = [
path: 'pingtuanSet/list',
component: () => import('@/views/pingtuanSet/list'),
meta: { title: '拼团设置', icon: 'pingtuan' }
},
{
name: '开团记录',
path: 'pingtuanOpener/list',
component: () => import('@/views/pingtuanOpener/list'),
meta: { title: '开团记录', icon: 'pingtuan' }
},
{
name: '拼团记录',
path: 'pingtuanHelp/list',
component: () => import('@/views/pingtuanHelp/list'),
meta: { title: '拼团记录', icon: 'pingtuan' }
}]
},

View File

@ -0,0 +1,201 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="拼团ID" v-model="searchData.pingtuanId">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="团号" v-model="searchData.pingtuanJoiner">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="订单ID" v-model="searchData.orderId">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="商品ID" v-model="searchData.goodsId">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="手机号码" v-model="searchData.mobileUser">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="用户昵称" v-model="searchData.nick">
</el-input>
<el-date-picker type="date" placeholder="购买时间起" v-model="searchData.dateAddBegin" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="购买时间止" v-model="searchData.dateAddEnd" style="width: 200px;" class="filter-item"></el-date-picker>
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="fetchData">搜索</el-button>
</div>
<el-table :data="list" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row empty-text="暂无数据" @selection-change="handleSelectionChange">
<el-table-column label="序号">
<template slot-scope="scope">
{{scope.row.id}}
</template>
</el-table-column>
<el-table-column prop="pingtuanId" label="拼团ID"></el-table-column>
<el-table-column prop="pingtuanJoiner" label="团号"></el-table-column>
<el-table-column prop="orderId" label="订单ID"></el-table-column>
<el-table-column prop="goodsId" label="商品ID"></el-table-column>
<el-table-column label="团长手机号码">
<template slot-scope="scope">
{{userMapJoin[scope.row.uid].mobile}}
</template>
</el-table-column>
<el-table-column label="团长昵称">
<template slot-scope="scope">
{{userMapJoin[scope.row.uid].nick}}
</template>
</el-table-column>
<el-table-column label="用户手机号码">
<template slot-scope="scope">
{{userMapHelp[scope.row.uidHelp].mobile}}
</template>
</el-table-column>
<el-table-column label="用户昵称">
<template slot-scope="scope">
{{userMapHelp[scope.row.uidHelp].nick}}
</template>
</el-table-column>
<el-table-column prop="dateAdd" label="购买时间"></el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRow" style="margin-top:20px;">
</el-pagination>
</div>
</template>
<script>
import { fetchDataList } from '@/api/pingtuanHelp'
import { Message, MessageBox } from 'element-ui'
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'centerUserBase'
])
},
data() {
return {
page:1,
pageSize:10,
totalRow:0,
rules: {
goodsId: [
{ required: true, message: '不能为空'},
{ type:'integer', message: '必须为数字'}
],
number: [
{ required: true, message: '不能为空'},
{ type:'integer', message: '必须为数字'}
],
originalPrice: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
minPrice: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
helpPriceMin: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
helpPriceMax: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
status: [
{ required: true, message: '不能为空'}
],
dateAddStr: [
{ required: true, message: '不能为空'}
],
dateEndStr: [
{ required: true, message: '不能为空'}
],
},
searchData:{
pingtuanId:undefined,
pingtuanJoiner:undefined,
orderId:undefined,
goodsId:undefined,
mobileUser:undefined,
nick:undefined,
status:undefined,
dateAddBegin:undefined,
dateAddEnd:undefined,
dateUpdateBegin:undefined,
dateUpdateEnd:undefined,
},
pushData: {
dialogTitle : undefined,
dialogFormVisible:false,
id:undefined,
goodsId:undefined,
number:undefined,
originalPrice:undefined,
minPrice:undefined,
helpPriceMin:undefined,
helpPriceMax:undefined,
status:undefined,
dateAddStr:undefined,
dateEndStr:undefined
},
multipleSelection: [],
list: null,
listLoading: true,
statisticsData:{}
}
},
created() {
this.pushDataTmp = Object.assign({}, this.pushData)
this.fetchData()
},
mounted() {
},
methods: {
handleSizeChange(val) {
this.pageSize = val;
this.fetchData();
},
handleCurrentChange(val) {
this.page = val
this.fetchData()
},
handleSelectionChange(val) {
this.multipleSelection = val
},
fetchData() {
this.list = null
this.listLoading = true
fetchDataList(this.page, this.pageSize, this.searchData).then(response => {
if (response.code == 0) {
this.userMapJoin = response.data.userMapJoin
this.userMapHelp = response.data.userMapHelp
this.list = response.data.result
this.totalRow = response.data.totalRow
}
this.listLoading = false
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss">
.filter-container {
padding-bottom: 10px;
.filter-item {
display: inline-block;
vertical-align: middle;
margin-bottom: 10px;
}
}
</style>

View File

@ -0,0 +1,221 @@
<template>
<div class="app-container">
<div class="filter-container">
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="团号" v-model="searchData.id">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="拼团ID" v-model="searchData.pingtuanId">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="商品ID" v-model="searchData.goodsId">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="手机号码" v-model="searchData.mobileUser">
</el-input>
<el-input clearable @keyup.enter.native="fetchData" style="width: 200px;" class="filter-item" placeholder="用户昵称" v-model="searchData.nick">
</el-input>
<el-select clearable style="width: 200px" class="filter-item" v-model="searchData.status" placeholder="状态">
<el-option label="进行中" value="0"></el-option>
<el-option label="无效" value="1"></el-option>
<el-option label="完成" value="2"></el-option>
</el-select>
<el-date-picker type="date" placeholder="开团时间起" v-model="searchData.dateAddBegin" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="开团时间止" v-model="searchData.dateAddEnd" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="更新时间起" v-model="searchData.dateUpdateBegin" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="更新时间止" v-model="searchData.dateUpdateEnd" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="到期时间起" v-model="searchData.dateEndBegin" style="width: 200px;" class="filter-item"></el-date-picker>
<el-date-picker type="date" placeholder="到期时间止" v-model="searchData.dateEndEnd" style="width: 200px;" class="filter-item"></el-date-picker>
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="fetchData">搜索</el-button>
</div>
<el-table :data="list" v-loading.body="listLoading" element-loading-text="Loading" border fit highlight-current-row empty-text="暂无数据" @selection-change="handleSelectionChange">
<el-table-column prop="id" label="团号"></el-table-column>
<el-table-column prop="pingtuanId" label="拼团ID"></el-table-column>
<el-table-column prop="goodsId" label="商品ID"></el-table-column>
<el-table-column label="手机号码">
<template slot-scope="scope">
{{userMap[scope.row.uid].mobile}}
</template>
</el-table-column>
<el-table-column label="昵称">
<template slot-scope="scope">
{{userMap[scope.row.uid].nick}}
</template>
</el-table-column>
<el-table-column prop="helpNumber" label="参与人数"></el-table-column>
<el-table-column prop="statusStr" label="状态"></el-table-column>
<el-table-column prop="dateAdd" label="开团时间"></el-table-column>
<el-table-column prop="dateUpdate" label="更新时间"></el-table-column>
<el-table-column prop="dateEnd" label="到期时间"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 0" type="text" @click="saveStatus(scope.row.id, 2)" style="color:green">完成</el-button>
<el-button v-if="scope.row.status == 0" type="text" @click="saveStatus(scope.row.id, 1)" style="color:red">无效</el-button>
<span v-if="scope.row.status != 0" type="text">-</span>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRow" style="margin-top:20px;">
</el-pagination>
</div>
</template>
<script>
import { fetchDataList, saveStatus } from '@/api/pingtuanOpener'
import { Message, MessageBox } from 'element-ui'
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters([
'centerUserBase'
])
},
data() {
return {
page:1,
pageSize:10,
totalRow:0,
rules: {
goodsId: [
{ required: true, message: '不能为空'},
{ type:'integer', message: '必须为数字'}
],
number: [
{ required: true, message: '不能为空'},
{ type:'integer', message: '必须为数字'}
],
originalPrice: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
minPrice: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
helpPriceMin: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
helpPriceMax: [
{ required: true, message: '不能为空'},
{ type:'number', message: '必须为数字'}
],
status: [
{ required: true, message: '不能为空'}
],
dateAddStr: [
{ required: true, message: '不能为空'}
],
dateEndStr: [
{ required: true, message: '不能为空'}
],
},
searchData:{
id:undefined,
pingtuanId:undefined,
goodsId:undefined,
mobileUser:undefined,
nick:undefined,
status:undefined,
dateAddBegin:undefined,
dateAddEnd:undefined,
dateUpdateBegin:undefined,
dateUpdateEnd:undefined,
dateEndBegin:undefined,
dateEndEnd:undefined,
},
pushData: {
dialogTitle : undefined,
dialogFormVisible:false,
id:undefined,
goodsId:undefined,
number:undefined,
originalPrice:undefined,
minPrice:undefined,
helpPriceMin:undefined,
helpPriceMax:undefined,
status:undefined,
dateAddStr:undefined,
dateEndStr:undefined
},
multipleSelection: [],
list: null,
listLoading: true,
statisticsData:{}
}
},
created() {
this.pushDataTmp = Object.assign({}, this.pushData)
this.fetchData()
},
mounted() {
},
methods: {
handleSizeChange(val) {
this.pageSize = val;
this.fetchData();
},
handleCurrentChange(val) {
this.page = val
this.fetchData()
},
handleSelectionChange(val) {
this.multipleSelection = val
},
fetchData() {
this.list = null
this.listLoading = true
fetchDataList(this.page, this.pageSize, this.searchData).then(response => {
if (response.code == 0) {
this.userMap = response.data.userMap
this.list = response.data.result
this.totalRow = response.data.totalRow
}
this.listLoading = false
})
},
saveStatus(id, status){
this.$confirm('确认本次操作?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
saveStatus(id, status).then(res => {
Message({
message: '操作成功',
type: 'success',
duration: 1 * 1000,
onClose: () => {
this.fetchData()
}
})
})
}).catch(() => {});
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss">
.filter-container {
padding-bottom: 10px;
.filter-item {
display: inline-block;
vertical-align: middle;
margin-bottom: 10px;
}
}
</style>