多租户商城-商户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

433 lines
14 KiB

<template>
<div class="custom_page">
<div class="content">
<!-- 顶部搜索 -->
<div class="toolbar">
<!-- 顶部搜索 -->
<el-form :inline="true" :model="formParams">
<el-form-item label="客户昵称">
<el-input v-model="formParams.name" maxlength="20" placeholder="请输入客户昵称" />
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="formParams.phone" maxlength="11" placeholder="请输入手机号" />
</el-form-item>
<el-form-item label="标签">
<el-select v-model="formParams.labelId" placeholder="请选择">
<el-option
v-for="(item, index) in tipsList"
:key="index"
:label="item.labelName"
:value="item.buyerLabelId"
/>
</el-select>
</el-form-item>
<el-form-item label="最近消费时间">
<el-date-picker
v-model="formParams.dates"
type="daterange"
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
value-format="yyyy-MM-dd"
/>
</el-form-item>
<el-form-item>
<el-form-item label="累计消费金额">
<el-input v-model="formParams.minMoney" maxlength="9" placeholder="请输入最小值" />
</el-form-item>
<el-form-item label="-">
<el-input v-model="formParams.maxMoney" maxlength="9" placeholder="请输入最大值" />
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item label="购买次数">
<el-input v-model="formParams.minBuyers" maxlength="9" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入最小值" />
</el-form-item>
<el-form-item label="-">
<el-input v-model="formParams.maxBuyers" maxlength="9" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入最大值" />
</el-form-item>
</el-form-item>
<el-form-item label-width="0">
<el-button type="primary" plain @click="search">查询</el-button>
<el-button type="info" plain @click="clear">重置</el-button>
<el-button type="primary" plain @click="handleExport">导出</el-button>
</el-form-item>
</el-form>
</div>
<!-- 表格 -->
<div class="content_table">
<div class="table">
<el-table
:data="tableData"
border
:header-cell-style="{ background: '#EEF3FF', color: '#333333' }"
style="width: 100%"
>
<el-table-column prop="name" label="客户昵称" />
<el-table-column prop="phone" label="手机号" />
<el-table-column prop="memberLevelName" label="会员等级" />
<el-table-column prop="total" label="消费总额" />
<el-table-column prop="buyers" label="购买次数" />
<el-table-column prop="credit" label="剩余积分" />
<el-table-column prop="time" label="最近消费时间" />
<el-table-column prop="createTime" label="注册时间" show-overflow-tooltip/>
<el-table-column :formatter="row=>row.registerIp?row.registerIp:'-'" label="注册IP" show-overflow-tooltip />
<el-table-column :formatter="row=>row.lastLoginIp?row.lastLoginIp:'-'" prop="time" label="最后登录IP" show-overflow-tooltip />
<el-table-column label="操作" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click.native.prevent="details(scope.row)">详情</el-button>
<el-button type="text" @click.native.prevent="setIntegral(scope.row)">设置积分</el-button>
<el-button type="text" @click.native.prevent="makeTag(scope.row.buyerUserId)">打标签</el-button>
<el-button type="text" size="small" @click.native.prevent="addBlackList(scope.row)">
{{ scope.row.ifBlack ? "取消黑名单" : "加入黑名单" }}
</el-button>
</template>
</el-table-column>
</el-table>
<div class="fenye">
<el-pagination
:current-page="currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="10"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
</div>
</div>
<!-- *************对话框开始************* -->
<!-- 打标签 -->
<el-dialog
title="选择标签"
:visible.sync="addFormDialog"
width="30%"
center
:close-on-click-modal="false"
>
<div>
<!-- 表单搜索 -->
<el-form :inline="true" :model="tipsForm" class="demo-form-inline">
<el-form-item label="标签名称">
<el-input v-model="tipsForm.labelName" maxlength="20" placeholder="请输入标签名称" />
</el-form-item>
<el-form-item>
<el-button @click="searchTips">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="text" @click="runTips">管理标签</el-button>
</el-form-item>
</el-form>
<!-- 多选 -->
<el-checkbox-group v-model="checkList">
<el-checkbox
v-for="(item,index) in tipsList"
:key="index"
class="checkBoxStyle"
:label="item.buyerLabelId"
>{{ item.labelName }}</el-checkbox>
</el-checkbox-group>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="addFormDialog = false">取 消</el-button>
<el-button type="primary" @click="saveTips">确定</el-button>
</span>
</el-dialog>
<el-dialog
title="修改会员积分"
:visible.sync="editIntegral"
width="30%"
center
:close-on-click-modal="false"
@close="credit = 0"
>
<el-form label-width="100px">
<el-form-item label="修改积分">
<el-radio-group v-model="updateWay" @change="changeWayRadio">
<el-radio :label="true">增加</el-radio>
<el-radio :label="false">减少</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="积分">
<el-input-number v-if="updateWay" v-model="credit" :min="0" :max="9999999" />
<el-input-number v-if="!updateWay" v-model="credit" :max="0" />
</el-form-item>
<el-form-item style="margin-top:-18px;color:#999999">
<span>提示 : 在原有积分上增加或减少</span>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editIntegral = false">取 消</el-button>
<el-button type="primary" @click="saveIntegral">确定</el-button>
</span>
</el-dialog>
<member-details ref="memberDetails" @reset="reset" />
</div>
</template>
<script>
import {
customerMageGetAll,
getLabels,
customerSaveUserLabel,
customerBlacklist,
updateBuyerCredit,
exportBuyerUser
} from '@/api/customerMage'
// import { getSelect } from '../../../api/renovation'
import memberDetails from './details'
// import { constants } from 'fs';
export default {
components: { memberDetails },
data () {
return {
showMore: false,
formParams: {
name: '', // 用户昵称
phone: '', // 手机号
labelId: '', // 标签id
dates: [], // 最近消费时间日期数组
minMoney: '', // 累计消费金额最小值
maxMoney: '', // 累计消费金额最大值
minBuyers: '', // 购买次数最小值
maxBuyers: '', // 购买次数最大值
startTime: '', // 申请开始时间
endTime: '', // 申请结束时间
page: 1,
pageSize: 10
},
tipsForm: {
labelName: ''
},
date: [],
total: 1,
tableData: [],
currentPage: 1,
dialog: {},
tipsList: [],
checkList: [],
addFormDialog: false,
editIntegral: false,
buyerUserId: '', // 用户id
credit: '', // 积分值 扣减积分则传负数
updateWay: true, // 修改积分单选绑定
}
},
created () {
this.getAll(this.formParams)
this.getSelect({ labelName: '' })
},
methods: {
/**
* 导出
*/
async handleExport () {
this.$message({
message: '数据导出中,请勿重复操作!',
type: 'success'
})
console.log(this.formParams, 'this.formParams')
const res = await exportBuyerUser(this.formParams)
if (!res) {
return
}
const blob = new Blob([res], { type: 'application/vnd.ms-excel' })
const fileName = '用户列表.xls'
if ('download' in document.createElement('a')) {
// 非IE下载
const elink = document.createElement('a')
elink.download = fileName
elink.href = URL.createObjectURL(blob)
elink.style.display = 'none'
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName)
}
},
handleSizeChange (val) {
this.formParams.pageSize = val
this.getAll(this.formParams)
},
handleCurrentChange (val) {
this.formParams.page = val
this.getAll(this.formParams)
},
// 查询
search () {
this.total = 1
this.formParams.page = 1
this.getAll(this.formParams)
},
// 查询标签
searchTips () {
console.log(this.tipsForm)
this.getSelect({ labelName: this.tipsForm.labelName })
},
changeWayRadio (val) {
this.updateWay = val
},
// 设置积分(更新积分)
setIntegral (row) {
this.editIntegral = true
this.buyerUserId = row.buyerUserId
},
async saveIntegral () {
if (this.credit === '' || this.credit === undefined) {
return this.$message('积分不能为空!')
} else if (this.credit === 0) {
this.editIntegral = false
} else {
const res = await updateBuyerCredit({
buyerUserId: this.buyerUserId,
credit: this.credit
})
if (res.code === '') {
this.getAll(this.formParams)
this.editIntegral = false
this.$message.success('修改积分成功')
}
}
},
// 打标签
async saveTips (row) {
console.log(this.checkList)
const res = await customerSaveUserLabel({
buyerUserId: this.buyerUserId,
buyerLabelIds: this.checkList
})
if (res.code === '') {
this.$message({
message: '成功',
type: 'success'
})
this.checkList = []
this.tipsForm.labelName = ''
this.addFormDialog = false
}
},
// 加入黑名单
addBlackList (row) {
// "ifBlack": "是否加入黑名单 1-是 0-否"
console.log(row.ifBlack)
this.$confirm(
`${
row.ifBlack
? '确认是否取消黑名单'
: '加入黑名单后,对方将无法登录商城'
}`,
`${row.ifBlack ? '取消黑名单' : '加入黑名单'}`,
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}
)
.then(() => {
if (!row.ifBlack) {
customerBlacklist({
buyerUserId: row.buyerUserId,
ifBlack: 1
}).then(res => {
if (res.code === '') {
this.$message({
type: 'success',
message: '成功!'
})
this.getAll(this.formParams)
}
})
} else {
customerBlacklist({
buyerUserId: row.buyerUserId,
ifBlack: 0
}).then(res => {
if (res.code === '') {
this.$message({
type: 'success',
message: '成功!'
})
this.getAll(this.formParams)
}
})
}
})
.catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
})
},
// 跳转标签页面
runTips () {
this.$router.push({
path: '/member/tips'
})
},
// 清除
clear () {
this.formParams = {
name: '', // 用户昵称
phone: '', // 手机号
labelId: '', // 标签id
dates: [], // 最近消费时间日期数组
minMoney: '', // 累计消费金额最小值
maxMoney: '', // 累计消费金额最大值
minBuyers: '', // 购买次数最小值
maxBuyers: '', // 购买次数最大值
page: 1,
pageSize: 10
}
this.getAll(this.formParams)
},
// 打标签
makeTag (buyerUserId) {
this.checkList = []
this.tipsForm.labelName = ''
this.addFormDialog = true
this.buyerUserId = buyerUserId
},
details (row) {
// this.$router.push({
// name: 'customerDetails',
// params: { buyerUserId: row.buyerUserId, orderFormid: row.orderFormid }
// })
this.$refs.memberDetails.getUser({ buyerUserId: row.buyerUserId, orderFormid: row.orderFormid })
},
// 初始化查询所有数据
async getAll (formParams) {
const res = await customerMageGetAll(formParams)
this.tableData = res.data.list
this.total = res.data.total
},
// 初始化查询所有标签
async getSelect (name) {
const res = await getLabels(name)
this.tipsList = res.data
},
reset () {
this.getAll(this.formParams)
}
}
}
</script>
<style lang='scss' scoped>
@import url("../../../styles/elDialog.scss");
.custom_page {
padding: 20px;
background: #FFFFFF;
border-radius: 10px;
}
.checkBoxStyle {
margin-bottom: 20px;
}
</style>