dy-hu
7 months ago
9 changed files with 2615 additions and 0 deletions
-
73src/api/comment.js
-
115src/api/customerMage.js
-
83src/api/member.js
-
313src/views/member/equity/index.vue
-
401src/views/member/levelList/index.vue
-
594src/views/member/memberList/details.vue
-
433src/views/member/memberList/index.vue
-
281src/views/member/tips/index.vue
-
322src/views/member/tips/tipsForm.vue
@ -0,0 +1,73 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
// 评论
|
||||
|
// 敏感词查询
|
||||
|
export function sensitiveGetAll(data) { |
||||
|
return request({ |
||||
|
url: '/sensitive/get', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 添加敏感词设置
|
||||
|
export function sensitiveAdd(data) { |
||||
|
return request({ |
||||
|
url: '/sensitive/save', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 添加敏感词设置
|
||||
|
export function sensitiveUpdate(data) { |
||||
|
return request({ |
||||
|
url: '/sensitive/update', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 评论管理
|
||||
|
// 评论管理查询
|
||||
|
export function commentSysGetall(data) { |
||||
|
return request({ |
||||
|
url: '/comment/getAll', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 评论详情查询
|
||||
|
export function commentSysGetById(data) { |
||||
|
return request({ |
||||
|
url: '/comment/getById', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 修改评论
|
||||
|
export function commentSysUpdate(data) { |
||||
|
return request({ |
||||
|
url: '/comment/update', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 删除评论
|
||||
|
export function commentSysDelete(data) { |
||||
|
return request({ |
||||
|
url: '/comment/delete', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 允许展示评论
|
||||
|
export function commentAllow(data) { |
||||
|
return request({ |
||||
|
url: '/comment/allow', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
@ -0,0 +1,115 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
// ******客户管理******
|
||||
|
// 客户管理查询
|
||||
|
export function customerMageGetAll (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/getAll', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 标签查询
|
||||
|
export function getLabels (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/getLabels', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 贴标签
|
||||
|
export function customerSaveUserLabel (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/saveUserLabel', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 加入或取消黑名单
|
||||
|
export function customerBlacklist (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/blacklist', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 更新积分
|
||||
|
export function updateBuyerCredit (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/updateCredit', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 更新积分
|
||||
|
export function exportBuyerUser (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/export', |
||||
|
method: 'post', |
||||
|
data, |
||||
|
responseType: 'blob' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 客户详情查询
|
||||
|
export function customerMageGetById (data) { |
||||
|
return request({ |
||||
|
url: '/businessBuyer/getById', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 导出标签
|
||||
|
export const excel_platform_label = (data = {}) => { |
||||
|
return request({ |
||||
|
url: 'label/excel_platform_label', |
||||
|
method: 'post', |
||||
|
data, |
||||
|
responseType: 'blob' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// ******标签管理******
|
||||
|
// 标签管理查询
|
||||
|
export function tipsGetAll (data) { |
||||
|
return request({ |
||||
|
url: '/label/getAll', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 添加标签
|
||||
|
export function tipsAdd (data) { |
||||
|
return request({ |
||||
|
url: '/label/save', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 修改标签
|
||||
|
export function tipsUpdate (data) { |
||||
|
return request({ |
||||
|
url: '/label/update', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
// 删除标签
|
||||
|
export function tipsDelete (data) { |
||||
|
return request({ |
||||
|
url: '/label/delete', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 标签编辑查询
|
||||
|
export function tipsGetById (data) { |
||||
|
return request({ |
||||
|
url: '/label/getById', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
@ -0,0 +1,83 @@ |
|||||
|
import request from '@/utils/request' |
||||
|
|
||||
|
// ******会员权益******
|
||||
|
// 添加会员权益
|
||||
|
export function addMembership(data) { |
||||
|
return request({ |
||||
|
url: '/membership/save', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 会员权益列表
|
||||
|
export function getMembership(data) { |
||||
|
return request({ |
||||
|
url: '/membership/getAll', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 编辑会员权益
|
||||
|
export function changeMembership(data) { |
||||
|
return request({ |
||||
|
url: '/membership/update', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 会员权益详情查询
|
||||
|
export function getMembershipInfo(data) { |
||||
|
return request({ |
||||
|
url: '/membership/getById', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 删除会员权益
|
||||
|
export function delMembership(data) { |
||||
|
return request({ |
||||
|
url: '/membership/delete', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 会员等级列表查询
|
||||
|
export function getMemberlevel(data) { |
||||
|
return request({ |
||||
|
url: '/memberlevel/getAll', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 编辑会员等级
|
||||
|
export function updateLevel(data) { |
||||
|
return request({ |
||||
|
url: '/memberlevel/update', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 会员等级详情查询
|
||||
|
export function getLevelInfo(data) { |
||||
|
return request({ |
||||
|
url: '/memberlevel/getById', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 会员等级详情查询
|
||||
|
export function addLevel(data) { |
||||
|
return request({ |
||||
|
url: '/memberlevel/save', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
||||
|
// 删除会员等级
|
||||
|
export function deleteLevel(data) { |
||||
|
return request({ |
||||
|
url: '/memberlevel/delete', |
||||
|
method: 'post', |
||||
|
data |
||||
|
}) |
||||
|
} |
@ -0,0 +1,313 @@ |
|||||
|
<!-- --> |
||||
|
<template> |
||||
|
<div class="userStyle"> |
||||
|
<!-- 搜索 --> |
||||
|
<div class="formSearch"> |
||||
|
<el-form :inline="true" :model="formInline"> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="add">新增权益</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<!-- 表格 --> |
||||
|
<div class="tableBox"> |
||||
|
<el-table |
||||
|
ref="multipleTable" |
||||
|
:data="tableData" |
||||
|
border |
||||
|
:header-cell-style="{ background: '#EEF3FF', color: '#333333' }" |
||||
|
tooltip-effect="dark" |
||||
|
style="width: 100%" |
||||
|
> |
||||
|
<el-table-column prop="memberName" label="权益名称" /> |
||||
|
<el-table-column label="权益图标" width="180" align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-image |
||||
|
style="width: 80px; height: 80px" |
||||
|
:src="scope.row.memberIcon" |
||||
|
fit="contain" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="memberReason" label="权益说明" /> |
||||
|
<el-table-column label="操作" show-overflow-tooltip> |
||||
|
<template slot-scope="scope"> |
||||
|
<div class="btnList"> |
||||
|
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
||||
|
<el-button type="text" @click="del(scope.row)">删除</el-button> |
||||
|
</div> |
||||
|
</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> |
||||
|
|
||||
|
<!-- *************对话框开始************* --> |
||||
|
<!-- 新增权益 --> |
||||
|
<el-dialog |
||||
|
:title="userState ? '新增权益' : '修改权益'" |
||||
|
:visible.sync="addFormDialog" |
||||
|
width="30%" |
||||
|
center |
||||
|
:close-on-click-modal="false" |
||||
|
> |
||||
|
<!-- 新增权益 --> |
||||
|
<div> |
||||
|
<el-form ref="ruleForm" :model="addForm" label-width="80px" :rules="equityRules"> |
||||
|
<el-form-item label="权益名称" prop="memberName"> |
||||
|
<el-input v-model="addForm.memberName" maxlength="20" placeholder="请输入角色名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="权益图标"> |
||||
|
<el-upload |
||||
|
class="avatar-uploader" |
||||
|
:action="action" |
||||
|
:show-file-list="false" |
||||
|
:on-success="handleAvatarSuccess" |
||||
|
> |
||||
|
<img v-if="addForm.memberIcon" :src="addForm.memberIcon" class="avatar"> |
||||
|
<i v-else class="el-icon-plus avatar-uploader-icon" /> |
||||
|
</el-upload> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="权益说明" prop="memberReason"> |
||||
|
<el-input v-model="addForm.memberReason" maxlength="200" type="textarea" placeholder="请输入角色描述" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
<el-button @click="addFormDialog = false">取 消</el-button> |
||||
|
<el-button type="primary" @click="addForm_enter('ruleForm')">确 定</el-button> |
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等) |
||||
|
// 例如:import 《组件名称》 from '《组件路径》'; |
||||
|
import { |
||||
|
addMembership, |
||||
|
getMembership, |
||||
|
getMembershipInfo, |
||||
|
delMembership, changeMembership |
||||
|
} from '@/api/member' |
||||
|
import { uploadUrl } from '@/utils/request' |
||||
|
export default { |
||||
|
// import引入的组件需要注入到对象中才能使用 |
||||
|
components: {}, |
||||
|
data() { |
||||
|
// 这里存放数据 |
||||
|
return { |
||||
|
formInline: { |
||||
|
page: '1', // 当前页 |
||||
|
pageSize: '10' // 每页记录数 |
||||
|
}, |
||||
|
total: 1, |
||||
|
tableData: [], |
||||
|
multipleSelection: [], |
||||
|
currentPage: 1, |
||||
|
userState: 1, |
||||
|
isChange: false, |
||||
|
checkStrictly: true, |
||||
|
action: uploadUrl, |
||||
|
addForm: { |
||||
|
memberId: null, |
||||
|
memberIcon: '', // 权益图标 |
||||
|
memberName: '', // 权益名称 |
||||
|
memberReason: '' // 权益描述 |
||||
|
}, |
||||
|
addFormDialog: false, |
||||
|
equityRules: { |
||||
|
memberName: [ |
||||
|
{ required: true, message: '请输入权益名称', trigger: 'blur' } |
||||
|
], |
||||
|
memberReason: [ |
||||
|
{ required: true, message: '请输权益描述', trigger: 'blur' } |
||||
|
] |
||||
|
}, |
||||
|
roleId: null, |
||||
|
imageUrl: '' |
||||
|
} |
||||
|
}, |
||||
|
// 监听属性 类似于data概念 |
||||
|
computed: {}, |
||||
|
// 监控data中的数据变化 |
||||
|
watch: {}, |
||||
|
// 生命周期 - 创建完成(可以访问当前this实例) |
||||
|
created() {}, |
||||
|
// 生命周期 - 挂载完成(可以访问DOM元素) |
||||
|
mounted() { |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 方法集合 |
||||
|
methods: { |
||||
|
handleAvatarSuccess(response) { |
||||
|
const { url } = response.data |
||||
|
this.addForm.memberIcon = url |
||||
|
console.log(this.addForm.memberIcon, 'urls') |
||||
|
this.$forceUpdate() |
||||
|
}, |
||||
|
handleSizeChange(val) { |
||||
|
this.formInline.pageSize = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
handleCurrentChange(val) { |
||||
|
this.formInline.page = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
removeTag(index) { |
||||
|
console.log(index) |
||||
|
}, |
||||
|
tagChange(index) { |
||||
|
this.$forceUpdate() |
||||
|
console.log(index) |
||||
|
}, |
||||
|
// 查询 |
||||
|
search() { |
||||
|
this.total = 1 |
||||
|
this.formInline.page = 1 |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 清除 |
||||
|
clear() { |
||||
|
this.formInline = { |
||||
|
search: '', // 搜索字段 |
||||
|
state: '', // 是否启用 1-是 0-否 |
||||
|
page: '1', // 当前页 |
||||
|
pageSize: '10' // 每页记录数 |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 新增角色 |
||||
|
add() { |
||||
|
this.userState = 1 |
||||
|
this.addFormDialog = true |
||||
|
this.isChange = true |
||||
|
this.addForm = { |
||||
|
memberId: null, |
||||
|
memberIcon: '', // 权益图标 |
||||
|
memberName: '', // 权益名称 |
||||
|
memberReason: '' // 权益描述 |
||||
|
} |
||||
|
}, |
||||
|
// 确认新增角色 |
||||
|
addForm_enter(ruleForm) { |
||||
|
this.$refs[ruleForm].validate(valid => { |
||||
|
if (valid) { |
||||
|
// 修改 |
||||
|
if (!this.isChange) { |
||||
|
changeMembership(this.addForm).then(res => { |
||||
|
console.log(res) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '修改成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
this.addFormDialog = false |
||||
|
}) |
||||
|
} else { |
||||
|
// 新增 |
||||
|
addMembership(this.addForm).then(res => { |
||||
|
console.log(res) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '新增成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
this.addFormDialog = false |
||||
|
}) |
||||
|
} |
||||
|
} else { |
||||
|
console.log('error submit!!') |
||||
|
return false |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 编辑角色 |
||||
|
edit(row) { |
||||
|
this.addFormDialog = true |
||||
|
this.isChange = false |
||||
|
console.log(row) |
||||
|
getMembershipInfo({ memberId: row.memberId }).then(res => { |
||||
|
this.addForm = res.data |
||||
|
console.log(this.addForm, '详情') |
||||
|
}) |
||||
|
}, |
||||
|
// 删除权益 |
||||
|
async del(row) { |
||||
|
this.$confirm('是否继续删除此权益?', '提示', { |
||||
|
confirmButtonText: '确定', |
||||
|
cancelButtonText: '取消', |
||||
|
type: 'warning' |
||||
|
}) |
||||
|
.then(() => { |
||||
|
delMembership({ memberId: row.memberId }).then(res => { |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
type: 'success', |
||||
|
message: '删除成功!' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
}) |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
return false |
||||
|
}) |
||||
|
}, |
||||
|
// 初始化查询所有数据 |
||||
|
async getAll(formInline) { |
||||
|
const res = await getMembership(formInline) |
||||
|
this.tableData = res.data.list |
||||
|
this.total = res.data.total |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style lang='scss' scoped> |
||||
|
//@import url(); 引入公共css类 |
||||
|
@import url("../../../styles/elDialog.scss"); |
||||
|
.userStyle { |
||||
|
background: #FFFFFF; |
||||
|
border-radius: 10px; |
||||
|
padding: 20px; |
||||
|
} |
||||
|
</style> |
||||
|
<style> |
||||
|
.avatar-uploader .el-upload { |
||||
|
border: 1px dashed #d9d9d9; |
||||
|
border-radius: 6px; |
||||
|
cursor: pointer; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
.avatar-uploader .el-upload:hover { |
||||
|
border-color: #409EFF; |
||||
|
} |
||||
|
.avatar-uploader-icon { |
||||
|
font-size: 28px; |
||||
|
color: #8c939d; |
||||
|
width: 120px; |
||||
|
height: 120px; |
||||
|
line-height: 120px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.avatar { |
||||
|
width: 120px; |
||||
|
height: 120px; |
||||
|
display: block; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,401 @@ |
|||||
|
<!-- --> |
||||
|
<template> |
||||
|
<div class="userStyle"> |
||||
|
<!-- 搜索 --> |
||||
|
<div class="formSearch"> |
||||
|
<el-form :inline="true" :model="formInline"> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="add">新增会员等级</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<!-- 表格 --> |
||||
|
<div class="tableBox"> |
||||
|
<el-table |
||||
|
ref="multipleTable" |
||||
|
:data="tableData" |
||||
|
border |
||||
|
:header-cell-style="{ background: '#EEF3FF', color: '#333333' }" |
||||
|
tooltip-effect="dark" |
||||
|
style="width: 100%" |
||||
|
> |
||||
|
<el-table-column prop="memberLevelName" label="会员等级" /> |
||||
|
<el-table-column prop="growth" label="成长值" /> |
||||
|
<el-table-column label="等级图标" width="140" align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-image |
||||
|
style="width: 80px; height: 80px" |
||||
|
:src="scope.row.memberLevelIcon" |
||||
|
fit="contain" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="等级背景" width="140" align="center"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-image |
||||
|
style="width: 80px; height: 80px" |
||||
|
:src="scope.row.memberLevelBackground" |
||||
|
fit="contain" |
||||
|
/> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="memberLevelReason" label="等级说明" /> |
||||
|
<el-table-column prop="memberIds" label="等级权益" /> |
||||
|
<el-table-column label="操作" show-overflow-tooltip> |
||||
|
<template slot-scope="scope"> |
||||
|
<div class="btnList"> |
||||
|
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
||||
|
<el-button type="text" @click="del(scope.row)">删除</el-button> |
||||
|
</div> |
||||
|
</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> |
||||
|
|
||||
|
<!-- *************对话框开始************* --> |
||||
|
<!-- 新增权益 --> |
||||
|
<el-dialog |
||||
|
:title="userState ? '新增会员等级' : '修改会员等级'" |
||||
|
:visible.sync="addFormDialog" |
||||
|
width="30%" |
||||
|
center |
||||
|
:close-on-click-modal="false" |
||||
|
> |
||||
|
<!-- 新增权益 --> |
||||
|
<div> |
||||
|
<el-form ref="ruleForm" :model="addForm" label-width="80px" :rules="levelRules"> |
||||
|
<el-form-item label="等级名称" prop="memberLevelName"> |
||||
|
<el-input v-model="addForm.memberLevelName" maxlength="20" placeholder="请输入会员等级名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="成长值" prop="growth"> |
||||
|
<el-input v-model="addForm.growth" maxlength="9" placeholder="请输入会员成长值" oninput="value=value.replace(/[^\d]/g,'')" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="等级图标" prop="memberLevelIcon"> |
||||
|
<el-upload |
||||
|
class="avatar-uploader" |
||||
|
:action="action" |
||||
|
:show-file-list="false" |
||||
|
:on-success="handleIconSuccess" |
||||
|
> |
||||
|
<img v-if="addForm.memberLevelIcon" :src="addForm.memberLevelIcon" class="avatar"> |
||||
|
<i v-else class="el-icon-plus avatar-uploader-icon" /> |
||||
|
</el-upload> |
||||
|
<p class="formInfo">建议尺寸:100*100像素,jpg、png图片类型</p> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="等级背景" prop="memberLevelBackground"> |
||||
|
<el-upload |
||||
|
class="avatar-uploader" |
||||
|
:action="action" |
||||
|
:show-file-list="false" |
||||
|
:on-success="handleBgSuccess" |
||||
|
> |
||||
|
<img v-if="addForm.memberLevelBackground" :src="addForm.memberLevelBackground" class="avatar"> |
||||
|
<i v-else class="el-icon-plus avatar-uploader-icon" /> |
||||
|
</el-upload> |
||||
|
<p class="formInfo">建议尺寸:100*100像素,jpg、png图片类型</p> |
||||
|
</el-form-item> |
||||
|
<el-form-item class="inputWide" label="等级权益" prop="ids"> |
||||
|
<el-select |
||||
|
v-model="addForm.ids" |
||||
|
multiple |
||||
|
collapse-tags |
||||
|
placeholder="请选择" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="item in tagList" |
||||
|
:key="item.memberId" |
||||
|
:label="item.memberName" |
||||
|
:value="item.memberId" |
||||
|
/> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="等级说明" prop="memberLevelReason"> |
||||
|
<el-input v-model="addForm.memberLevelReason" maxlength="200" type="textarea" placeholder="请输入等级说明" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
<el-button @click="addFormDialog = false">取 消</el-button> |
||||
|
<el-button type="primary" @click="addForm_enter('ruleForm')">确 定</el-button> |
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等) |
||||
|
// 例如:import 《组件名称》 from '《组件路径》'; |
||||
|
import { |
||||
|
getMembership, |
||||
|
getMemberlevel, |
||||
|
getLevelInfo, |
||||
|
updateLevel, |
||||
|
addLevel, |
||||
|
deleteLevel |
||||
|
} from '@/api/member' |
||||
|
import { uploadUrl } from '@/utils/request' |
||||
|
export default { |
||||
|
// import引入的组件需要注入到对象中才能使用 |
||||
|
components: {}, |
||||
|
data() { |
||||
|
// 这里存放数据 |
||||
|
return { |
||||
|
formInline: { |
||||
|
page: '1', // 当前页 |
||||
|
pageSize: '10' // 每页记录数 |
||||
|
}, |
||||
|
total: 1, |
||||
|
tableData: [], |
||||
|
multipleSelection: [], |
||||
|
currentPage: 1, |
||||
|
userState: 1, |
||||
|
checkStrictly: true, |
||||
|
action: uploadUrl, |
||||
|
addForm: { |
||||
|
growth: null, |
||||
|
ids: [], |
||||
|
memberLevelBackground: '', |
||||
|
memberLevelIcon: '', |
||||
|
memberLevelName: '', |
||||
|
memberLevelReason: '' |
||||
|
}, |
||||
|
equity: { |
||||
|
page: '1', // 当前页 |
||||
|
pageSize: '1000' // 每页记录数 |
||||
|
}, |
||||
|
tagList: [], |
||||
|
addFormDialog: false, |
||||
|
levelRules: { |
||||
|
memberLevelName: [ |
||||
|
{ required: true, message: '请输入权益名称', trigger: 'blur' } |
||||
|
], |
||||
|
memberLevelReason: [ |
||||
|
{ required: true, message: '请输等级说明', trigger: 'blur' } |
||||
|
], |
||||
|
growth: [ |
||||
|
{ required: true, message: '请输入会员成长值', trigger: 'blur' } |
||||
|
], |
||||
|
memberLevelIcon: [ |
||||
|
{ required: true } |
||||
|
], |
||||
|
memberLevelBackground: [ |
||||
|
{ required: true } |
||||
|
], |
||||
|
ids: [ |
||||
|
{ required: true } |
||||
|
] |
||||
|
}, |
||||
|
roleId: null, |
||||
|
imageUrl: '' |
||||
|
} |
||||
|
}, |
||||
|
// 监听属性 类似于data概念 |
||||
|
computed: {}, |
||||
|
// 监控data中的数据变化 |
||||
|
watch: {}, |
||||
|
// 生命周期 - 创建完成(可以访问当前this实例) |
||||
|
created() {}, |
||||
|
// 生命周期 - 挂载完成(可以访问DOM元素) |
||||
|
mounted() { |
||||
|
this.getAll(this.formInline) |
||||
|
this.getTagList(this.equity) |
||||
|
}, |
||||
|
// 方法集合 |
||||
|
methods: { |
||||
|
// 获取权益 |
||||
|
async getTagList(equity) { |
||||
|
const res = await getMembership(equity) |
||||
|
if (res.code === '') { |
||||
|
this.tagList = res.data.list |
||||
|
console.log(this.tagList, 'taglist') |
||||
|
} else { |
||||
|
this.$message({ |
||||
|
message: res.message, |
||||
|
type: 'error' |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
handleIconSuccess(response) { |
||||
|
const { url } = response.data |
||||
|
this.addForm.memberLevelIcon = url |
||||
|
this.$forceUpdate() |
||||
|
}, |
||||
|
handleBgSuccess(response) { |
||||
|
const { url } = response.data |
||||
|
this.addForm.memberLevelBackground = url |
||||
|
this.$forceUpdate() |
||||
|
}, |
||||
|
handleSizeChange(val) { |
||||
|
this.formInline.pageSize = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
handleCurrentChange(val) { |
||||
|
this.formInline.page = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
removeTag(index) { |
||||
|
console.log(index) |
||||
|
}, |
||||
|
tagChange(index) { |
||||
|
this.$forceUpdate() |
||||
|
console.log(index) |
||||
|
}, |
||||
|
// 查询 |
||||
|
search() { |
||||
|
this.total = 1 |
||||
|
this.formInline.page = 1 |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 清除 |
||||
|
clear() { |
||||
|
this.formInline = { |
||||
|
search: '', // 搜索字段 |
||||
|
state: '', // 是否启用 1-是 0-否 |
||||
|
page: '1', // 当前页 |
||||
|
pageSize: '10' // 每页记录数 |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 新增会员等级 |
||||
|
add() { |
||||
|
this.userState = 1 |
||||
|
this.addFormDialog = true |
||||
|
this.addForm = { |
||||
|
growth: null, |
||||
|
ids: [], |
||||
|
memberLevelBackground: '', |
||||
|
memberLevelIcon: '', |
||||
|
memberLevelName: '', |
||||
|
memberLevelReason: '' |
||||
|
} |
||||
|
}, |
||||
|
// 确认新增会员 |
||||
|
addForm_enter(ruleForm) { |
||||
|
this.$refs[ruleForm].validate(valid => { |
||||
|
if (valid) { |
||||
|
// 修改 |
||||
|
if (this.userState === 2) { |
||||
|
updateLevel(this.addForm).then(res => { |
||||
|
console.log(res) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '修改成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
this.addFormDialog = false |
||||
|
}) |
||||
|
} else { |
||||
|
// 新增 |
||||
|
this.addForm.growth = parseInt(this.addForm.growth) |
||||
|
addLevel(this.addForm).then(res => { |
||||
|
console.log(res) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '新增成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
this.addFormDialog = false |
||||
|
}) |
||||
|
} |
||||
|
} else { |
||||
|
console.log('error submit!!') |
||||
|
return false |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 编辑等级信息 |
||||
|
edit(row) { |
||||
|
this.addFormDialog = true |
||||
|
this.userState = 2 |
||||
|
console.log(row) |
||||
|
getLevelInfo({ memberLevelId: row.memberLevelId }).then(res => { |
||||
|
this.addForm = res.data |
||||
|
delete this.addForm.memberIds |
||||
|
this.addForm.ids = this.addForm.ids.map(v => parseInt(v)) |
||||
|
console.log(res.data, '详情') |
||||
|
}) |
||||
|
}, |
||||
|
// 删除该等级 |
||||
|
async del(row) { |
||||
|
this.$confirm('是否继续删除此等级?', '提示', { |
||||
|
confirmButtonText: '确定', |
||||
|
cancelButtonText: '取消', |
||||
|
type: 'warning' |
||||
|
}) |
||||
|
.then(() => { |
||||
|
deleteLevel({ memberLevelId: row.memberLevelId }).then(res => { |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
type: 'success', |
||||
|
message: '删除成功!' |
||||
|
}) |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
}) |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
return false |
||||
|
}) |
||||
|
}, |
||||
|
// 初始化查询所有数据 |
||||
|
async getAll(formInline) { |
||||
|
const res = await getMemberlevel(formInline) |
||||
|
this.tableData = res.data.list |
||||
|
this.total = res.data.total |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style lang='scss' scoped> |
||||
|
//@import url(); 引入公共css类 |
||||
|
@import url("../../../styles/elDialog.scss"); |
||||
|
.userStyle { |
||||
|
background: #FFFFFF; |
||||
|
border-radius: 10px; |
||||
|
padding: 20px; |
||||
|
} |
||||
|
.formInfo { |
||||
|
line-height: 0px; |
||||
|
color: #999999; |
||||
|
} |
||||
|
</style> |
||||
|
<style> |
||||
|
.avatar-uploader .el-upload { |
||||
|
border: 1px dashed #d9d9d9; |
||||
|
border-radius: 6px; |
||||
|
cursor: pointer; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
.avatar-uploader .el-upload:hover { |
||||
|
border-color: #409EFF; |
||||
|
} |
||||
|
.avatar-uploader-icon { |
||||
|
font-size: 28px; |
||||
|
color: #8c939d; |
||||
|
width: 100px; |
||||
|
height: 100px; |
||||
|
line-height: 100px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.avatar { |
||||
|
width: 100px; |
||||
|
height: 100px; |
||||
|
display: block; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,594 @@ |
|||||
|
<template> |
||||
|
<el-dialog title="详情" width="80%" :visible.sync="visible" :close-on-click-modal="false" @close="closeModalDetail"> |
||||
|
<div class="custom_info_page"> |
||||
|
<div class="base_info"> |
||||
|
<div class="custom_info"> |
||||
|
<div class="custom_title">客户信息</div> |
||||
|
<div class="custom_info_content"> |
||||
|
|
||||
|
<div class="info_img"> |
||||
|
<img :src="userObj.headImage" alt> |
||||
|
</div> |
||||
|
<div class="info_item"> |
||||
|
<ul> |
||||
|
<li v-for="(item, index) in infoList" :key="index"> |
||||
|
<p> |
||||
|
<span>{{ item.name }}: </span> |
||||
|
<span>{{ item.value }}</span> |
||||
|
</p> |
||||
|
</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="custom_info"> |
||||
|
<div class="custom_title">消费数据</div> |
||||
|
<div class="custom_info_content"> |
||||
|
<div class="info_item"> |
||||
|
<ul> |
||||
|
<li> |
||||
|
<p> |
||||
|
<span>下 单 数: </span> |
||||
|
<span>{{ userObj.orders }}</span> |
||||
|
</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p> |
||||
|
<span>支付成功数: </span> |
||||
|
<span>{{ userObj.pays }}</span> |
||||
|
</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p> |
||||
|
<span>售后次数: </span> |
||||
|
<span>{{ userObj.afters }}</span> |
||||
|
</p> |
||||
|
</li> |
||||
|
<li> |
||||
|
<p> |
||||
|
<span>售后单数: </span> |
||||
|
<span>{{ userObj.afterOrders }}</span> |
||||
|
</p> |
||||
|
</li> |
||||
|
|
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="custom_info"> |
||||
|
<div class="custom_title">客户标签</div> |
||||
|
<div class="custom_info_content"> |
||||
|
<div class="custom_info_content"> |
||||
|
<div class="info_item"> |
||||
|
<p v-for="(item, index) in tagList" :key="index">{{ item.tagName }}</p> |
||||
|
<p @click="addTag" style="color:#183ECD">贴标签</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="tab_list"> |
||||
|
<p v-for="(item, index) in tabList" :key="index" :class="[{ active: componentName === item.componentName }]" |
||||
|
@click="changeTab(item)">{{ item.tabName }}</p> |
||||
|
</div> |
||||
|
|
||||
|
<div v-if="componentName === 'order'"> |
||||
|
<el-form :inline="true" :model="userForm" class="demo-form-inline"> |
||||
|
<el-form-item label="订单编号"> |
||||
|
<el-input v-model="userForm.orderFormid" maxlength="20" placeholder="请输入订单编号" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" plain @click="searchOrders">查询</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-table :data="userObj.orderList" border :header-cell-style="{ background: '#F6F8FB', color: '#404F64' }" |
||||
|
style="width: 100%"> |
||||
|
<el-table-column prop="orderFormid" label="订单编号" /> |
||||
|
<el-table-column prop="shopName" label="店铺名称" /> |
||||
|
<el-table-column prop="products" label="商品数量"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span>{{ scope.row.products }}</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="price" label="订单金额(元)" /> |
||||
|
<el-table-column label="状态"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span v-if="scope.row.state === 1">待付款</span> |
||||
|
<span v-if="scope.row.state === 2">待发货</span> |
||||
|
<span v-if="scope.row.state === 3">待收货</span> |
||||
|
<span v-if="scope.row.state === 4">已完成</span> |
||||
|
<span v-if="scope.row.state === 5">已关闭</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<div v-if="componentName === 'comment'"> |
||||
|
<el-table :data="userObj.comments" border :header-cell-style="{ background: '#F6F8FB', color: '#404F64' }" |
||||
|
style="width: 100%"> |
||||
|
<el-table-column prop="shopName" label="店铺名称" /> |
||||
|
<el-table-column prop="productName" label="商品名称" /> |
||||
|
<el-table-column prop="comments" label="评论"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button type="text" @click="seeComment(scope.row.commentId)">查看</el-button> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<div v-if="componentName === 'addressInfo'"> |
||||
|
<el-table :data="userObj.receives" border :header-cell-style="{ background: '#F6F8FB', color: '#404F64' }" |
||||
|
style="width: 100%"> |
||||
|
<el-table-column prop="receiveName" label="姓名" /> |
||||
|
<el-table-column prop="receivePhone" label="电话" /> |
||||
|
<el-table-column prop="receiveAdress" label="地址"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span>{{ scope.row.receiveAdress }}{{ scope.row.address }}</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
<!-- *************对话框开始************* --> |
||||
|
<!-- 打标签 --> |
||||
|
<el-dialog title="选择标签" :visible.sync="addFormDialog" width="30%" append-to-body 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="comDialogVisible" :close-on-click-modal="false" :before-close="handleClose" |
||||
|
width="60%" center :append-to-body="true"> |
||||
|
<div class="pinStyle"> |
||||
|
<div class="comment"> |
||||
|
<div class="com_left">评论:</div> |
||||
|
<div class="com_right">{{ commentDetails.comment }}</div> |
||||
|
</div> |
||||
|
<div v-if="commentDetails.images.length != 0" class="comment_imgList"> |
||||
|
<div class="img_left">图片:</div> |
||||
|
<div class="imgList"> |
||||
|
<el-image v-for="(item, index) in commentDetails.images" :key="index" :src="item" |
||||
|
:preview-src-list="commentDetails.images" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="comment"> |
||||
|
<div v-if="commentDetails.addComment != ''" class="com_left">追评:</div> |
||||
|
<div class="com_right">{{ commentDetails.addComment }}</div> |
||||
|
</div> |
||||
|
<div v-if="commentDetails.addImages.length != 0" class="comment_imgList"> |
||||
|
<div class="img_left">图片</div> |
||||
|
<div class="imgList"> |
||||
|
<el-image v-for="(item, index) in commentDetails.addImages" :key="index" :src="item" |
||||
|
:preview-src-list="commentDetails.addImages" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
<el-button v-if="comState" @click="toShow">允许展示</el-button> |
||||
|
<el-button v-else @click="noneShow">隐藏</el-button> |
||||
|
<el-button type="primary" @click="delCom">删除</el-button> |
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
|
||||
|
</div> |
||||
|
<div slot="footer" class="dialog-footer"> |
||||
|
<el-button type="text" @click="doCancel">取消</el-button> |
||||
|
<el-button type="primary" @click="doSubmit">确认</el-button> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { customerMageGetById, getLabels, customerSaveUserLabel } from '@/api/customerMage' |
||||
|
import { commentSysGetById, commentSysUpdate, commentSysDelete, commentAllow } from '@/api/comment' |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
visible: false, |
||||
|
infoList: [ |
||||
|
{ name: '用户昵称', value: '', fields: 'name' }, |
||||
|
{ name: '手 机 号', value: '', fields: 'phone' }, |
||||
|
{ name: '性 别', value: '', fields: 'sex' }, |
||||
|
{ name: '注册时间', value: '', fields: 'createTime' }, |
||||
|
{ name: '生 日', value: '', fields: 'birthday' } |
||||
|
], |
||||
|
tagList: [], |
||||
|
tabList: [ |
||||
|
{ tabName: 'TA的订单', componentName: 'order' }, |
||||
|
{ tabName: 'TA的评论', componentName: 'comment' }, |
||||
|
{ tabName: 'TA的收货地址', componentName: 'addressInfo' } |
||||
|
], |
||||
|
componentName: 'order', |
||||
|
customData: {}, |
||||
|
dialog: {}, |
||||
|
user: '', |
||||
|
userObj: {}, |
||||
|
addFormDialog: false, |
||||
|
tipsForm: { |
||||
|
labelName: '' |
||||
|
}, |
||||
|
userForm: { |
||||
|
orderFormid: '' |
||||
|
}, |
||||
|
checkList: [], |
||||
|
tipsList: [], |
||||
|
comDialogVisible: false, |
||||
|
commentDetails: { images: [], addImages: [] }, |
||||
|
commentId: '', |
||||
|
comState: 1 // 是否隐藏 1-是 0-否 |
||||
|
} |
||||
|
}, |
||||
|
// created () { |
||||
|
// this.user = this.$route.params |
||||
|
// console.log(this.user) |
||||
|
// this.getUser(this.user) |
||||
|
// }, |
||||
|
methods: { |
||||
|
// 允许展示 |
||||
|
async toShow() { |
||||
|
const res = await commentAllow({ |
||||
|
commentId: this.commentId, |
||||
|
state: 1 |
||||
|
}) |
||||
|
if (res.code === '') { |
||||
|
this.$message.success('成功') |
||||
|
this.comDialogVisible = false |
||||
|
this.comState = 0 |
||||
|
this.getUser(this.user) |
||||
|
} |
||||
|
}, |
||||
|
// 隐藏 |
||||
|
async noneShow() { |
||||
|
const res = await commentSysUpdate({ |
||||
|
commentId: this.commentId, |
||||
|
state: 0 |
||||
|
}) |
||||
|
if (res.code === '') { |
||||
|
this.comState = 1 |
||||
|
this.$message.success('隐藏成功') |
||||
|
this.comDialogVisible = false |
||||
|
this.getUser(this.user) |
||||
|
} |
||||
|
}, |
||||
|
// 删除 |
||||
|
async delCom() { |
||||
|
const res = await commentSysDelete({ |
||||
|
commentId: this.commentId |
||||
|
}) |
||||
|
if (res.code === '') { |
||||
|
this.$message.success('删除成功') |
||||
|
this.comDialogVisible = false |
||||
|
this.getUser(this.user) |
||||
|
} |
||||
|
}, |
||||
|
// 评论详情 |
||||
|
async seeComment(commentId) { |
||||
|
this.comDialogVisible = true |
||||
|
const res = await commentSysGetById({ commentId: commentId }) |
||||
|
this.commentId = commentId |
||||
|
this.commentDetails = res.data |
||||
|
}, |
||||
|
handleClose() { |
||||
|
this.comDialogVisible = false |
||||
|
}, |
||||
|
closeModalDetail() { |
||||
|
this.comState = 1 |
||||
|
this.componentName = 'order' |
||||
|
}, |
||||
|
// 贴标签 |
||||
|
addTag() { |
||||
|
this.addFormDialog = true |
||||
|
this.getSelect({ labelName: this.tipsForm.labelName }) |
||||
|
}, |
||||
|
// 查询订单 |
||||
|
searchOrders() { |
||||
|
this.user.orderFormid = this.userForm.orderFormid |
||||
|
this.getUser(this.user) |
||||
|
}, |
||||
|
// 查询标签 |
||||
|
searchTips() { |
||||
|
console.log(this.tipsForm) |
||||
|
this.getSelect({ labelName: this.tipsForm.labelName }) |
||||
|
}, |
||||
|
// 跳转标签页面 |
||||
|
runTips() { |
||||
|
this.$router.push({ |
||||
|
path: '/member/tips' |
||||
|
}) |
||||
|
}, |
||||
|
// 打标签 |
||||
|
async saveTips(row) { |
||||
|
console.log(this.checkList) |
||||
|
const res = await customerSaveUserLabel({ |
||||
|
buyerUserId: this.user.buyerUserId, |
||||
|
buyerLabelIds: this.checkList |
||||
|
}) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
this.checkList = [] |
||||
|
this.addFormDialog = false |
||||
|
} |
||||
|
}, |
||||
|
changeTab(item) { |
||||
|
this.componentName = item.componentName |
||||
|
}, |
||||
|
// 客户详情 |
||||
|
async getUser(obj) { |
||||
|
this.user = obj |
||||
|
const res = await customerMageGetById({ |
||||
|
buyerUserId: obj.buyerUserId, |
||||
|
orderFormid: obj.orderFormid |
||||
|
}) |
||||
|
this.userObj = res.data |
||||
|
this.visible = true |
||||
|
this.getInfoList(this.userObj) |
||||
|
}, |
||||
|
// 获取客户信息 |
||||
|
getInfoList(ob) { |
||||
|
this.infoList.map(item => { |
||||
|
console.log(item) |
||||
|
item.value = ob[item.fields] || '' |
||||
|
if (item.fields === 'sex') { |
||||
|
item.value = item.value === '1' ? '男' : '女' |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 初始化查询所有标签 |
||||
|
async getSelect(name) { |
||||
|
const res = await getLabels(name) |
||||
|
this.tipsList = res.data |
||||
|
}, |
||||
|
doCancel() { |
||||
|
this.visible = false |
||||
|
}, |
||||
|
doSubmit() { |
||||
|
this.visible = false |
||||
|
this.$emit('reset') |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang='scss' scoped> |
||||
|
.pinStyle { |
||||
|
.comment { |
||||
|
margin-bottom: 20px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
|
||||
|
.com_left { |
||||
|
font-size: 20px; |
||||
|
color: #333333; |
||||
|
margin-right: 20px; |
||||
|
} |
||||
|
|
||||
|
.com_right { |
||||
|
font-size: 18px; |
||||
|
color: #333333; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.comment_imgList { |
||||
|
display: flex; |
||||
|
margin-bottom: 20px; |
||||
|
align-items: flex-start; |
||||
|
|
||||
|
.img_left { |
||||
|
font-size: 20px; |
||||
|
color: #333333; |
||||
|
margin-right: 20px; |
||||
|
width: 60px; |
||||
|
} |
||||
|
|
||||
|
.imgList { |
||||
|
display: flex; |
||||
|
justify-content: flex-start; |
||||
|
align-items: center; |
||||
|
flex-wrap: wrap; |
||||
|
|
||||
|
.el-image { |
||||
|
width: 200px; |
||||
|
height: 134px; |
||||
|
border-radius: 4px; |
||||
|
margin-right: 20px; |
||||
|
margin-bottom: 20px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// .line { |
||||
|
// width: 890px; |
||||
|
// height: 1px; |
||||
|
// background: #e0e5eb; |
||||
|
// margin: 0 auto; |
||||
|
// margin-bottom: 33px; |
||||
|
// } |
||||
|
// .addComment { |
||||
|
// font-size: 20px; |
||||
|
// color: #ff7911; |
||||
|
// margin-bottom: 20px; |
||||
|
// } |
||||
|
} |
||||
|
|
||||
|
label { |
||||
|
font-weight: 400; |
||||
|
} |
||||
|
|
||||
|
// |
||||
|
|
||||
|
.custom_info_page { |
||||
|
background-color: #fff; |
||||
|
min-height: 500px; |
||||
|
|
||||
|
.base_info { |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
align-content: flex-start; |
||||
|
justify-content: space-between; |
||||
|
align-items: flex-start; |
||||
|
margin-bottom: 30px; |
||||
|
|
||||
|
.custom_info { |
||||
|
flex: 1; |
||||
|
display: flex; |
||||
|
-webkit-box-align: center; |
||||
|
-ms-flex-align: center; |
||||
|
align-items: flex-start; |
||||
|
flex-direction: column; |
||||
|
justify-content: flex-start; |
||||
|
flex-wrap: nowrap; |
||||
|
|
||||
|
.custom_title { |
||||
|
font-size: 16px; |
||||
|
font-weight: 500; |
||||
|
padding-left: 10px; |
||||
|
line-height: 16px; |
||||
|
margin-bottom: 30px; |
||||
|
position: relative; |
||||
|
|
||||
|
&::before { |
||||
|
content: ""; |
||||
|
height: 16px; |
||||
|
width: 4px; |
||||
|
background-color: #183ECD; |
||||
|
position: absolute; |
||||
|
left: 0px; |
||||
|
display: block; |
||||
|
font-weight: 500; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.custom_info_content { |
||||
|
display: flex; |
||||
|
flex-direction: row; |
||||
|
justify-content: flex-start; |
||||
|
align-items: flex-start; |
||||
|
|
||||
|
.info_img { |
||||
|
height: 105px; |
||||
|
width: 74px; |
||||
|
margin-right: 15px; |
||||
|
|
||||
|
img { |
||||
|
width: 74px; |
||||
|
height: 74px; |
||||
|
border-radius: 37px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.info_item { |
||||
|
ul { |
||||
|
overflow: hidden; |
||||
|
list-style: none; |
||||
|
|
||||
|
li { |
||||
|
float: left; |
||||
|
width: 100%; |
||||
|
|
||||
|
p { |
||||
|
font-size: 14px; |
||||
|
font-family: PingFang SC; |
||||
|
font-weight: 400; |
||||
|
color: #404F64; |
||||
|
line-height: 24px; |
||||
|
margin-bottom: 7px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.custom_tag { |
||||
|
width: 33%; |
||||
|
|
||||
|
.Tag { |
||||
|
padding-top: 20px; |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
display: inline-block; |
||||
|
background-color: #d8e1fc; |
||||
|
font-size: 16px; |
||||
|
color: #333; |
||||
|
text-align: center; |
||||
|
// margin-right: 20px; |
||||
|
border-radius: 4px; |
||||
|
padding: 8px 15px; |
||||
|
|
||||
|
&:last-child { |
||||
|
background-color: #fff; |
||||
|
color: #3a68f2; |
||||
|
|
||||
|
&:hover { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.tab_list { |
||||
|
overflow: hidden; |
||||
|
margin-bottom: 20px; |
||||
|
|
||||
|
p { |
||||
|
float: left; |
||||
|
padding: 0 45px; |
||||
|
font-size: 14px; |
||||
|
border: 1px #e0e5eb solid; |
||||
|
box-sizing: border-box; |
||||
|
color: #999999; |
||||
|
height: 36px; |
||||
|
line-height: 36px; |
||||
|
|
||||
|
&:nth-child(-n + 2) { |
||||
|
border-right: 0; |
||||
|
} |
||||
|
|
||||
|
&:nth-child(1) { |
||||
|
border-radius: 4px 0 0 4px; |
||||
|
} |
||||
|
|
||||
|
&:nth-child(3) { |
||||
|
border-radius: 0 4px 4px 0; |
||||
|
} |
||||
|
|
||||
|
&:hover { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.active { |
||||
|
background-color: #183ECD; |
||||
|
color: #fff; |
||||
|
border: 0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,433 @@ |
|||||
|
<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="注册时间" /> |
||||
|
<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> |
||||
|
|
@ -0,0 +1,281 @@ |
|||||
|
<template> |
||||
|
<div class="tipStyle"> |
||||
|
<!-- 搜索 --> |
||||
|
<div class="topSearch"> |
||||
|
<div class="formSearch"> |
||||
|
<el-form :inline="true" :model="formInline"> |
||||
|
<el-form-item label="标签名称"> |
||||
|
<el-input v-model="formInline.labelName" maxlength="20" placeholder="请输入标签名称" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="标签类型"> |
||||
|
<el-select v-model="formInline.labelType" placeholder="请选择标签类型"> |
||||
|
<el-option label="手动标签" value="1" /> |
||||
|
<el-option label="自动标签" value="2" /> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" plain @click="search">查询</el-button> |
||||
|
<el-button type="info" plain @click="clear">重置</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<div class="rightBTn"> |
||||
|
<el-button type="primary" @click="addTips">新建标签</el-button> |
||||
|
<el-button @click="exportTips">导出标签</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- 表格 --> |
||||
|
<div class="tableBox"> |
||||
|
<el-table |
||||
|
:data="tableData" |
||||
|
border |
||||
|
:header-cell-style="{ background: '#EEF3FF', color: '#333333' }" |
||||
|
tooltip-effect="dark" |
||||
|
style="width: 100%" |
||||
|
@selection-change="handleSelectionChange" |
||||
|
> |
||||
|
<el-table-column type="selection" /> |
||||
|
<el-table-column label="标签名" width="220"> |
||||
|
<template slot-scope="scope">{{ scope.row.labelName }}</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="users" label="客户" /> |
||||
|
<el-table-column prop="labelType" label="标签类型"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span v-if="scope.row.labelType == 1">手动标签</span> |
||||
|
<span v-else>自动标签</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="conditions" label="达标条件"> |
||||
|
<template slot-scope="scope"> |
||||
|
<div v-if="scope.row.labelType===1">暂无标签</div> |
||||
|
<div v-else @click="modelTouch(scope.row)">{{ scope.row.conditions.toString() }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="操作"> |
||||
|
<template slot-scope="scope"> |
||||
|
<div class="btnList"> |
||||
|
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
||||
|
<el-button type="text" @click="deleteTips(scope.row)">删除</el-button> |
||||
|
</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<!-- 批量删除 --> |
||||
|
<div class="batch_btn"> |
||||
|
<el-button type="info" plain :disabled="!multipleSelection.length" @click="deleteTips">批量删除</el-button> |
||||
|
</div> |
||||
|
<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> |
||||
|
<!-- ******************************************************弹框开始***************************************************************** --> |
||||
|
<!-- 达标详情弹框 --> |
||||
|
<el-dialog |
||||
|
title="达标详情" |
||||
|
:visible.sync="dialogVisible" |
||||
|
width="30%" |
||||
|
center |
||||
|
:close-on-click-modal="false" |
||||
|
> |
||||
|
<div class="diaddStyle"> |
||||
|
<h1>满足以下任意条件即可</h1> |
||||
|
<div class="jiaoyi"> |
||||
|
<div class="leftJ">交易条件:</div> |
||||
|
<div class="rightJ"> |
||||
|
<p v-for="(item,index) in text" :key="index">{{ item }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<span slot="footer" class="dialog-footer"> |
||||
|
<el-button type="primary" @click="dialogVisible = false">我知道了</el-button> |
||||
|
</span> |
||||
|
</el-dialog> |
||||
|
<tips-form ref="tipsForm" @reset="reset" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { |
||||
|
tipsGetAll, |
||||
|
tipsDelete, |
||||
|
excel_platform_label |
||||
|
} from '@/api/customerMage' |
||||
|
import TipsForm from './tipsForm'; |
||||
|
|
||||
|
export default { |
||||
|
name: '', |
||||
|
components: { TipsForm }, |
||||
|
data () { |
||||
|
return { |
||||
|
formInline: { |
||||
|
labelName: '', // 标签名称 |
||||
|
labelType: '', // 标签类型 1-手动标签 2-自动标签 |
||||
|
page: 1, |
||||
|
pageSize: 10 |
||||
|
}, |
||||
|
total: 1, |
||||
|
tableData: [], |
||||
|
currentPage: 1, |
||||
|
dialogVisible: false, |
||||
|
text: '', |
||||
|
multipleSelection: [] |
||||
|
} |
||||
|
}, |
||||
|
mounted () { |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
methods: { |
||||
|
handleSizeChange (val) { |
||||
|
this.formInline.pageSize = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
handleCurrentChange (val) { |
||||
|
this.formInline.page = val |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
handleSelectionChange (val) { |
||||
|
this.multipleSelection = val |
||||
|
}, |
||||
|
// 查询 |
||||
|
search () { |
||||
|
this.total = 1 |
||||
|
this.formInline.page = 1 |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 清楚 |
||||
|
clear () { |
||||
|
this.formInline = { |
||||
|
labelName: '', // 标签名称 |
||||
|
labelType: '', // 标签类型 1-手动标签 2-自动标签 |
||||
|
page: 1, |
||||
|
pageSize: 10 |
||||
|
} |
||||
|
this.getAll(this.formInline) |
||||
|
}, |
||||
|
// 编辑 |
||||
|
edit (row) { |
||||
|
this.$refs.tipsForm.show({ buyerLabelId: row.buyerLabelId }) |
||||
|
}, |
||||
|
// 初始化查询所有数据 |
||||
|
async getAll (formParams) { |
||||
|
const res = await tipsGetAll(formParams) |
||||
|
console.log(res) |
||||
|
this.tableData = res.data.list |
||||
|
this.total = res.data.total |
||||
|
}, |
||||
|
// 新建标签 |
||||
|
addTips () { |
||||
|
this.$refs.tipsForm.show() |
||||
|
}, |
||||
|
// 详情弹框 |
||||
|
modelTouch (row) { |
||||
|
console.log(row.conditions) |
||||
|
this.text = row.conditions |
||||
|
this.dialogVisible = true |
||||
|
}, |
||||
|
// 删除 |
||||
|
async deleteTips (row) { |
||||
|
let ids = [] |
||||
|
if (this.multipleSelection.length === 0) { |
||||
|
ids = [row.buyerLabelId] |
||||
|
} else { |
||||
|
this.multipleSelection.forEach(item => { |
||||
|
ids.push(item.buyerLabelId) |
||||
|
}) |
||||
|
} |
||||
|
const res = await tipsDelete({ ids }) |
||||
|
if (res.code === '') { |
||||
|
this.$message({ |
||||
|
message: '删除成功', |
||||
|
type: 'success' |
||||
|
}) |
||||
|
this.getAll(this.formInline) |
||||
|
} |
||||
|
}, |
||||
|
// 导出标签 |
||||
|
exportTips () { |
||||
|
if (this.multipleSelection.length === 0) { |
||||
|
this.$message.error('请选择导出行') |
||||
|
return |
||||
|
} |
||||
|
const ids = [] |
||||
|
this.multipleSelection.forEach(item => { |
||||
|
ids.push(item.buyerLabelId) |
||||
|
}) |
||||
|
excel_platform_label({ ids }).then(res => { |
||||
|
console.log(res) |
||||
|
const blob = new Blob([res]) |
||||
|
const fileName = '标签表.xlsx' |
||||
|
if ('download' in document.createElement('a')) { |
||||
|
// 非IE下载 |
||||
|
const elink = document.createElement('a') |
||||
|
elink.download = fileName |
||||
|
elink.style.display = 'none' |
||||
|
elink.href = URL.createObjectURL(blob) |
||||
|
document.body.appendChild(elink) |
||||
|
elink.click() |
||||
|
URL.revokeObjectURL(elink.href) // 释放URL 对象 |
||||
|
document.body.removeChild(elink) |
||||
|
} else { |
||||
|
// IE10+下载 |
||||
|
navigator.msSaveBlob(blob, fileName) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
reset () { |
||||
|
this.getAll(this.formInline) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped lang='scss'> |
||||
|
@import url("../../../styles/elDialog.scss"); |
||||
|
.tipStyle { |
||||
|
padding: 20px; |
||||
|
background: #FFFFFF; |
||||
|
border-radius: 10px; |
||||
|
.topSearch { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
.formSearch, |
||||
|
.rightBTn { |
||||
|
margin-left: 20px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
.diaddStyle { |
||||
|
h1 { |
||||
|
text-align: center; |
||||
|
font-size: 24px; |
||||
|
color: #333333; |
||||
|
} |
||||
|
.jiaoyi { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
.leftJ { |
||||
|
margin: 15px; |
||||
|
} |
||||
|
.leftJ, |
||||
|
.rightJ { |
||||
|
font-size: 16px; |
||||
|
color: #333333; |
||||
|
} |
||||
|
} |
||||
|
.batch_btn { |
||||
|
padding: 5px 10px; |
||||
|
border: 1px solid #dfe6ec; |
||||
|
background-color: #fff; |
||||
|
border-top: 0; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,322 @@ |
|||||
|
<template> |
||||
|
<el-dialog :close-on-click-modal="false" :title="tipState?'新增':'编辑'" width="600px" :visible.sync="visible"> |
||||
|
<div class="addtips"> |
||||
|
<template> |
||||
|
<div class="add_page"> |
||||
|
<div class="add_content"> |
||||
|
<el-form label-width="80px"> |
||||
|
<el-form-item label="标签名称"> |
||||
|
<el-input v-model="form.name" maxlength="32" placeholder="最多输入32个字符" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="标签类型"> |
||||
|
<el-radio-group v-model="form.type"> |
||||
|
<el-radio :label="1">手动标签</el-radio> |
||||
|
<el-radio :label="2">自动标签</el-radio> |
||||
|
</el-radio-group> |
||||
|
</el-form-item> |
||||
|
<div v-if="form.type === 2" class="auto_label"> |
||||
|
<el-form-item label="满足条件"> |
||||
|
<el-radio-group v-model="form.meetCondition"> |
||||
|
<el-radio :label="1">满足任意选中的条件即可</el-radio> |
||||
|
<el-radio :label="2">必须满足所有选被中的条件</el-radio> |
||||
|
</el-radio-group> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="交易条件"> |
||||
|
<el-checkbox-group v-model="checkBox"> |
||||
|
<el-row> |
||||
|
<el-checkbox :label="1" name="config">最后消费时间</el-checkbox> |
||||
|
<el-row> |
||||
|
<el-radio-group v-model="form.config.lastConsumTime.type"> |
||||
|
<el-row class="indent"> |
||||
|
<el-radio :label="1">最近</el-radio> |
||||
|
<el-select |
||||
|
v-model="form.config.lastConsumTime.value" |
||||
|
style="width: 70px" |
||||
|
:disabled=" |
||||
|
form.config.lastConsumTime.type === 2 || |
||||
|
!checkBox.includes(1) |
||||
|
" |
||||
|
> |
||||
|
<el-option |
||||
|
v-for="(item, index) in dayList" |
||||
|
:key="index" |
||||
|
:label="item.label" |
||||
|
:value="item.label" |
||||
|
/> |
||||
|
</el-select> |
||||
|
<span style="font-size: 16px; margin-left: 10px">天</span> |
||||
|
</el-row> |
||||
|
<el-row class="indent"> |
||||
|
<el-radio :label="2">自定义</el-radio> |
||||
|
<el-date-picker |
||||
|
v-model="date" |
||||
|
:disabled=" |
||||
|
form.config.lastConsumTime.type === 1 || |
||||
|
!checkBox.includes(1) |
||||
|
" |
||||
|
type="daterange" |
||||
|
range-separator="至" |
||||
|
start-placeholder="开始时间" |
||||
|
end-placeholder="结束时间" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
@change="handleChange" |
||||
|
/> |
||||
|
</el-row> |
||||
|
</el-radio-group> |
||||
|
</el-row> |
||||
|
</el-row> |
||||
|
<el-row> |
||||
|
<el-checkbox :label="2" name="config">累计消费次数</el-checkbox> |
||||
|
<el-row class="indent"> |
||||
|
<el-col :span="5" class="unit"> |
||||
|
<el-input |
||||
|
v-model="totalConsumTimes.start" |
||||
|
maxlength="9" |
||||
|
:disabled="!checkBox.includes(2)" |
||||
|
oninput="value=value.replace(/[^\d]/g,'')" |
||||
|
/> |
||||
|
<span>次</span> |
||||
|
</el-col> |
||||
|
<el-col :span="2" style="font-size: 16px; text-align: center">ㅡ</el-col> |
||||
|
<el-col :span="5" class="unit"> |
||||
|
<el-input |
||||
|
v-model="totalConsumTimes.end" |
||||
|
maxlength="9" |
||||
|
:disabled="!checkBox.includes(2)" |
||||
|
oninput="value=value.replace(/[^\d]/g,'')" |
||||
|
/> |
||||
|
<span>次</span> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-row> |
||||
|
<el-row> |
||||
|
<el-checkbox :label="3" name="config">累计消费金额</el-checkbox> |
||||
|
<el-row class="indent"> |
||||
|
<el-col :span="5" class="unit"> |
||||
|
<el-input |
||||
|
v-model="totalConsumAmount.start" |
||||
|
maxlength="9" |
||||
|
:disabled="!checkBox.includes(3)" |
||||
|
oninput="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" |
||||
|
/> |
||||
|
<span>元</span> |
||||
|
</el-col> |
||||
|
<el-col :span="2" style="font-size: 16px; text-align: center">ㅡ</el-col> |
||||
|
<el-col :span="5" class="unit"> |
||||
|
<el-input |
||||
|
v-model="totalConsumAmount.end" |
||||
|
maxlength="9" |
||||
|
:disabled="!checkBox.includes(3)" |
||||
|
oninput="value=value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')" |
||||
|
/> |
||||
|
<span>元</span> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-row> |
||||
|
</el-checkbox-group> |
||||
|
</el-form-item> |
||||
|
</div> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<div class="footer"> |
||||
|
<div class="btn_list"> |
||||
|
<el-button @click="back">取消</el-button> |
||||
|
<el-button type="primary" @click="save">保存</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { tipsAdd, tipsGetById, tipsUpdate } from '@/api/customerMage' |
||||
|
|
||||
|
function AddForm () { |
||||
|
this.labelType = '' // 标签类型 1-手动标签 2-自动标签 |
||||
|
this.meetConditions = '' // 满足条件 1-满足任意一个被选中条件即可 2-必须满足所有被选中条件 |
||||
|
this.lastConsumptionTime = '' // 是否选中最后消费时间 1-是 0-否 |
||||
|
this.consumptionFrequency = '' // 是否选中累计消费次数 1-是 0-否 |
||||
|
this.consumptionMoney = '' // 是否选中累计交易金额 1-是 0-否 |
||||
|
this.consumptionDay = '' // 最近几天(天) |
||||
|
this.consumptionStartTime = '' // 最后消费开始时间 |
||||
|
this.consumptionEndTime = '' // 最后消费结束时间 |
||||
|
this.frequencyStart = '' // 起始次数 |
||||
|
this.frequencyEnd = '' // 截止次数 |
||||
|
this.moneyStart = '' // 起始金额 |
||||
|
this.moneyEnd = '' // 截止金额 |
||||
|
} |
||||
|
function FormInfo () { |
||||
|
this.name = '' // 标签名称 |
||||
|
this.meetCondition = 1 // 满足条件 |
||||
|
this.type = 1 |
||||
|
this.config = { |
||||
|
totalConsumTimes: '', |
||||
|
// 最近 |
||||
|
lastConsumTime: { |
||||
|
type: 1, |
||||
|
value: 3 |
||||
|
}, |
||||
|
totalConsumAmount: '' |
||||
|
} |
||||
|
} |
||||
|
export default { |
||||
|
name: 'TipsForm', |
||||
|
data () { |
||||
|
return { |
||||
|
visible: false, |
||||
|
form: new FormInfo(), |
||||
|
addForm: new AddForm(), |
||||
|
checkBox: [], // 交易条件 |
||||
|
totalConsumTimes: { |
||||
|
start: '', |
||||
|
end: '' |
||||
|
}, |
||||
|
totalConsumAmount: { |
||||
|
start: '', |
||||
|
end: '' |
||||
|
}, |
||||
|
tipState: false, |
||||
|
date: [], // 自定义时间 |
||||
|
dayList: [ |
||||
|
{ label: 3 }, |
||||
|
{ label: 7 }, |
||||
|
{ label: 15 }, |
||||
|
{ label: 30 }, |
||||
|
{ label: 45 }, |
||||
|
{ label: 60 } |
||||
|
], |
||||
|
buyerLabelId: '' |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
show (params) { |
||||
|
this.tipState = !params |
||||
|
this.visible = true |
||||
|
|
||||
|
if (this.tipState) { |
||||
|
this.addForm = new AddForm() |
||||
|
this.form = new FormInfo() |
||||
|
} else { |
||||
|
this.buyerLabelId = params.buyerLabelId |
||||
|
this.getDetails(params.buyerLabelId) |
||||
|
} |
||||
|
}, |
||||
|
handleChange (value) { |
||||
|
console.log(value) |
||||
|
// this.form.config.lastConsumTime.value = `${(value && value[0]) || ''}${value && value[0] ? '至' : ''}${(value && value[1]) || ''}` |
||||
|
}, |
||||
|
// 返回 |
||||
|
back () { |
||||
|
this.visible = false |
||||
|
}, |
||||
|
// 编辑查询 |
||||
|
getDetails (buyerLabelId) { |
||||
|
tipsGetById({ buyerLabelId }).then(res => { |
||||
|
this.form = { |
||||
|
name: res.data.labelName, // 标签名称 |
||||
|
meetCondition: res.data.meetConditions, // 满足条件 |
||||
|
type: res.data.labelType, |
||||
|
config: { |
||||
|
totalConsumTimes: '', |
||||
|
// 最近 |
||||
|
lastConsumTime: { |
||||
|
type: 1, |
||||
|
value: 3 |
||||
|
}, |
||||
|
totalConsumAmount: '' |
||||
|
} |
||||
|
} |
||||
|
this.totalConsumTimes = { |
||||
|
start: res.data.frequencyStart, |
||||
|
end: res.data.frequencyEnd |
||||
|
} |
||||
|
this.totalConsumAmount = { |
||||
|
start: res.data.moneyStart, |
||||
|
end: res.data.moneyEnd |
||||
|
} |
||||
|
this.checkBox = res.data.consumptions |
||||
|
}) |
||||
|
}, |
||||
|
// 添加/编辑 |
||||
|
async save () { |
||||
|
if (this.form.type === 1) { |
||||
|
this.form.config.lastConsumTime.value = '' |
||||
|
this.form.meetConditions = '' |
||||
|
} |
||||
|
const obj = { |
||||
|
labelName: this.form.name, // 标签名称 |
||||
|
labelType: this.form.type, // 标签类型 1-手动标签 2-自动标签 |
||||
|
meetConditions: this.form.meetCondition, |
||||
|
conditions: this.checkBox, |
||||
|
consumptionDay: this.form.config.lastConsumTime.value, // 最近几天(天) |
||||
|
consumptionStartTime: this.date[0] || '', // 最后消费开始时间 |
||||
|
consumptionEndTime: this.date[1] || '', // 最后消费结束时间 |
||||
|
frequencyStart: this.totalConsumTimes.start, // 起始次数 |
||||
|
frequencyEnd: this.totalConsumTimes.end, // 截止次数 |
||||
|
moneyStart: this.totalConsumAmount.start, // 起始金额 |
||||
|
moneyEnd: this.totalConsumAmount.end // 截止金额 |
||||
|
} |
||||
|
if (this.tipState) { |
||||
|
const res = await tipsAdd(obj) |
||||
|
if (res.code === '') { |
||||
|
this.$message.success('新增成功') |
||||
|
this.form = new FormInfo() |
||||
|
this.visible = false |
||||
|
this.$emit('reset') |
||||
|
} |
||||
|
} else { |
||||
|
obj.buyerLabelId = this.buyerLabelId |
||||
|
const res = await tipsUpdate(obj) |
||||
|
if (res.code === '') { |
||||
|
this.$message.success('修改成功') |
||||
|
this.form = new FormInfo() |
||||
|
this.visible = false |
||||
|
this.$emit('reset') |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang='scss' scoped> |
||||
|
.add_page { |
||||
|
background-color: #fff; |
||||
|
.footer { |
||||
|
height: 80px; |
||||
|
line-height: 80px; |
||||
|
font-size: 24px; |
||||
|
border-top: 1px solid #e0e5eb; |
||||
|
.btn_list { |
||||
|
float: right; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.add_content { |
||||
|
margin: 20px auto; |
||||
|
.indent { |
||||
|
padding-left: 20px; |
||||
|
margin-bottom: 15px; |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
.auto_label { |
||||
|
background-color: #f7f7f7; |
||||
|
border-radius: 4px; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.unit { |
||||
|
position: relative; |
||||
|
span { |
||||
|
position: absolute; |
||||
|
right: 0; |
||||
|
font-size: 16px; |
||||
|
border-left: 1px solid #dcdfe6; |
||||
|
padding: 0 8px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue