hwms-shop-admin/src/views/user/list/index.vue

1005 lines
43 KiB
Vue

<template>
<div class="divBox">
<div class="selCard">
<el-form :model="userFrom" ref="searchForm" inline size="small" label-width="85px">
<div v-if="collapse" class="acea-row search-form">
<div>
<el-form-item label="用户搜索:">
<el-input placeholder="请输入内容" v-model="keywords" class="input-with-select selWidth" clearable @keyup.enter.native="changeSearch(1)">
<el-select v-model="select" slot="prepend" clearable placeholder="请选择">
<el-option label="全部" value="">全部</el-option>
<el-option label="用户昵称" value="nickname">用户昵称</el-option>
<el-option label="手机号" value="phone">手机号</el-option>
<el-option label="用户ID" value="uid">用户ID</el-option>
</el-select>
</el-input>
</el-form-item>
<el-form-item label="用户分组:" prop="group_id">
<el-select v-model="userFrom.group_id" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option v-for="(item, index) in groupList" :key="index" :value="item.group_id" :label="item.group_name" />
</el-select>
</el-form-item>
<el-form-item label="用户标签:" prop="label_id">
<el-select v-model="userFrom.label_id" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option v-for="(item, index) in labelLists" :key="index" :value="item.label_id" :label="item.label_name" />
</el-select>
</el-form-item>
</div>
<el-form-item class="search-form-sub">
<el-button type="primary" size="small" @click="changeSearch(1)">搜索</el-button>
<el-button size="small" @click="searchReset()">重置</el-button>
<a class="ivu-ml-8 font12 ml10" @click="collapse = !collapse">
<template v-if="collapse"> 展开 <i class="el-icon-arrow-down" /> </template>
<template v-else> 收起 <i class="el-icon-arrow-up" /> </template>
</a>
</el-form-item>
</div>
<div v-else class="acea-row search-form">
<div class="search-form-box">
<el-form-item label="用户搜索:">
<el-input placeholder="请输入内容" v-model="keywords" class="input-with-select selWidth" clearable @keyup.enter.native="changeSearch(1)">
<el-select v-model="select" slot="prepend" clearable placeholder="请选择">
<el-option label="全部" value="">全部</el-option>
<el-option label="用户昵称" value="nickname">用户昵称</el-option>
<el-option label="手机号" value="phone">手机号</el-option>
<el-option label="用户ID" value="uid">用户ID</el-option>
</el-select>
</el-input>
</el-form-item>
<el-form-item label="用户分组:" prop="group_id">
<el-select v-model="userFrom.group_id" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option v-for="(item, index) in groupList" :key="index" :value="item.group_id" :label="item.group_name" />
</el-select>
</el-form-item>
<el-form-item label="用户标签:" prop="label_id">
<el-select v-model="userFrom.label_id" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option v-for="(item, index) in labelLists" :key="index" :value="item.label_id" :label="item.label_name" />
</el-select>
</el-form-item>
<el-form-item label="用户类型:" prop="is_svip">
<el-select v-model="userFrom.is_svip" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option value="0" label="普通用户">普通用户</el-option>
<el-option value="1" label="付费会员">付费会员</el-option>
</el-select>
</el-form-item>
<el-form-item label="用户等级:" prop="member_level">
<el-select
v-model="userFrom.member_level"
placeholder="请选择"
class="selWidth" clearable filterable @change="changeSearch(1)"
>
<el-option
v-for="item in memberList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="消费情况:" prop="pay_count">
<el-select v-model="userFrom.pay_count" placeholder="请选择" class="selWidth" clearable @change="changeSearch(1)">
<el-option value="-1" label="0次"></el-option>
<el-option value="0" label="1次及以上"></el-option>
<el-option value="1" label="2次及以上"></el-option>
<el-option value="2" label="3次及以上"></el-option>
<el-option value="3" label="4次及以上"></el-option>
<el-option value="4" label="5次及以上"></el-option>
</el-select>
</el-form-item>
<el-form-item label="访问时间:">
<el-date-picker v-model="timeVal" value-format="yyyy/MM/dd" align="right" unlink-panels format="yyyy/MM/dd" size="small" type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;" :picker-options="pickerOptions" @change="onchangeTime" />
</el-form-item>
<el-form-item label="访问情况:" prop="user_time_type">
<el-select v-model="userFrom.user_time_type" placeholder="请选择" class="selWidth" clearable @change="changeSearch(1)">
<el-option value="visit" label="最后访问" />
<el-option value="add_time" label="首次访问" />
</el-select>
</el-form-item>
<el-form-item label="性别:" prop="sex">
<el-select v-model="userFrom.sex" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option value="1" label="男">男</el-option>
<el-option value="2" label="女">女</el-option>
<el-option value="0" label="保密">保密</el-option>
</el-select>
</el-form-item>
<el-form-item label="身份:" prop="is_promoter">
<el-select v-model="userFrom.is_promoter" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option value="1" label="推广员">推广员</el-option>
<el-option value="0" label="普通会员">普通会员</el-option>
</el-select>
</el-form-item>
<el-form-item label="生日:">
<el-date-picker v-model="timeVal2" value-format="yyyy/MM/dd" align="right" unlink-panels format="yyyy/MM/dd" size="small" type="daterange" placement="bottom-end" placeholder="自定义时间" style="width: 250px;" :picker-options="pickerOptions" @change="onchangeTime2" />
</el-form-item>
<el-form-item label="信息补充:">
<el-input placeholder="请输入内容" v-model="userFrom.fields_value" class="input-with-select selWidth" clearable @keyup.enter.native="changeSearch(1)">
<el-select v-model="userFrom.fields_type" slot="prepend" clearable placeholder="请选择">
<el-option v-for="(item,index) in selectList" :label="item.label" :value="item.value" :key="index"></el-option>
</el-select>
</el-input>
</el-form-item>
</div>
<el-form-item class="search-form-sub">
<el-button type="primary" size="small" @click="changeSearch(1)">搜索</el-button>
<el-button size="small" @click="searchReset()">重置</el-button>
<a class="ivu-ml-8 font12 ml10" @click="collapse = !collapse">
<template v-if="collapse"> 展开 <i class="el-icon-arrow-down" /> </template>
<template v-else> 收起 <i class="el-icon-arrow-up" /> </template>
</a>
</el-form-item>
</div>
</el-form>
</div>
<el-card class="mt14">
<div>
<el-tabs v-model="user_type" @tab-click="changeSearch(1)" class="mb5">
<el-tab-pane label="全部用户" name="" />
<el-tab-pane label="微信用户" name="wechat" />
<el-tab-pane label="小程序用户" name="routine" />
<el-tab-pane label="H5用户" name="h5" />
<el-tab-pane label="APP" name="app" />
<el-tab-pane label="PC" name="pc" />
</el-tabs>
<div class="mb20">
<el-button type="primary" size="small" @click="createUser">创建用户</el-button>
<el-button v-show="user_type === 'wechat'" size="small" @click="sendNews">发送图文消息</el-button>
<el-button :disabled="checkedIds.length == 0" size="small" @click="batchGroup">批量设置分组</el-button>
<el-button :disabled="checkedIds.length == 0" size="small" @click="batchlabel">批量设置标签</el-button>
<el-button :disabled="checkedIds.length == 0" size="small" @click="setDistributor">批量设置分销员</el-button>
<el-button :disabled="checkedIds.length == 0" label="default" size="small" @click="sendCoupon">发送优惠券</el-button>
<el-button size="small" @click="exportList">导出列表</el-button>
</div>
<el-alert v-if="checkedIds.length>0 || allCheck" :title="allCheck ? `已选择 ${tableData.total} 项` : `已选择 ${checkedIds.length} 项`" type="info" show-icon class="mb10" />
</div>
<el-table v-loading="listLoading" :data="tableData.data" size="small" highlight-current-row @selection-change="handleSelectionChange">
<el-table-column type="expand">
<template slot-scope="props">
<el-form label-position="left" inline class="demo-table-expand">
<el-form-item label="首次访问:">
<span>{{ props.row.create_time }}</span>
</el-form-item>
<el-form-item label="近次访问:">
<span>{{ props.row.last_time }}</span>
</el-form-item>
<el-form-item label="身份证号:">
<span>{{ props.row.card_id }}</span>
</el-form-item>
<el-form-item label="手机号:">
<span>{{ props.row.phone }}</span>
</el-form-item>
<el-form-item label="真实姓名:">
<span>{{ props.row.real_name }}</span>
</el-form-item>
<el-form-item label="标签:">
<span v-for="(item, index) in props.row.label" :key="index" v-text="item" />
</el-form-item>
<el-form-item label="生日:">
<span>{{ props.row.birthday }}</span>
</el-form-item>
<el-form-item label="地址:">
<span class="minwidth">{{ props.row.addres }}</span>
</el-form-item>
<el-form-item label="备注:">
<span>{{ props.row.mark }}</span>
</el-form-item>
</el-form>
</template>
</el-table-column>
<el-table-column width="50">
<template slot="header" slot-scope="scope">
<el-popover placement="top-start" width="100" trigger="hover" class="tabPop">
<div>
<span class="spBlock onHand" :class="{'check': chkName === 'dan'}" @click="onHandle('dan',scope.$index)">选中本页</span>
<span class="spBlock onHand" :class="{'check': chkName === 'duo'}" @click="onHandle('duo')">选中全部</span>
</div>
<el-checkbox slot="reference" :value="(chkName === 'dan' && checkedPage.indexOf(userFrom.page) > -1) || chkName === 'duo'" @change="changeType" />
</el-popover>
</template>
<template slot-scope="scope">
<el-checkbox :disabled="scope.row.cancel_time" :value="!scope.row.cancel_time && (checkedIds.indexOf(scope.row.uid) > -1 || (chkName === 'duo' && noChecked.indexOf(scope.row.uid) === -1))" @change="(v)=>changeOne(v,scope.row)" />
</template>
</el-table-column>
<el-table-column prop="uid" label="ID" min-width="60" />
<el-table-column label="头像" min-width="50">
<template slot-scope="scope">
<div class="demo-image__preview">
<el-image style="width: 36px; height: 36px" :src="scope.row.avatar ? scope.row.avatar : moren" :preview-src-list="[scope.row.avatar || moren]" />
</div>
</template>
</el-table-column>
<el-table-column label="昵称" min-width="150">
<template slot-scope="{row}">
<div class="acea-row">
<i v-show="row.sex===1" class="el-icon-male mr5" style="font-size: 15px; margin-top: 3px; color:#2db7f5;" />
<i v-show="row.sex===2" class="el-icon-female mr5" style="font-size: 15px; margin-top: 3px; color:#ed4014;" />
<div v-text="row.nickname" />
</div>
</template>
</el-table-column>
<el-table-column prop="is_svip" label="付费会员" min-width="120">
<template slot-scope="{row}">
<span>{{row.is_svip > 0 ? "是" : "否"}}</span>
</template>
</el-table-column>
<el-table-column prop="phone" label="手机号" min-width="120" />
<el-table-column label="等级" min-width="100">
<template slot-scope="{row}">
<span>{{ row.member?row.member.brokerage_name:'-' }}</span>
</template>
</el-table-column>
<el-table-column label="分组" min-width="100">
<template slot-scope="{row}">
<span>{{ row.group?row.group.group_name:'无' }}</span>
</template>
</el-table-column>
<el-table-column label="推荐人" min-width="140">
<template slot-scope="{row}">
<span>{{ row.spread ? row.spread.nickname + ' / ' + row.spread.uid : '-' }}</span>
</template>
</el-table-column>
<el-table-column label="用户类型" min-width="100">
<template slot-scope="{row}">
<span>{{ row.user_type === 'routine' ? '小程序' : row.user_type === 'wechat' ? '公众号' : row.user_type === 'app' || row.user_type === 'App' ? 'App' : row.user_type === 'pc' ? 'PC' : 'H5' }}</span>
</template>
</el-table-column>
<el-table-column prop="now_money" label="余额" sortable min-width="100" :sort-method="(a,b)=>{return a.now_money - b.now_money}"/>
<el-table-column prop="integral" label="当前可用积分" min-width="100" />
<el-table-column label="操作" min-width="150" fixed="right">
<template slot-scope="scope">
<el-button v-if="!scope.row.cancel_time" type="text" size="small" @click="onDetails(scope.row.uid)">详情</el-button>
<el-button type="text" size="small" class="mr10" @click="onEdit(scope.row.uid)">编辑</el-button>
<!-- <el-button type="text" size="small" class="mr10" @click="extendInfo(scope.row)">信息补充</el-button> -->
<el-dropdown>
<span class="el-dropdown-link">
更多<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<!-- <el-dropdown-item @click.native="onEdit(scope.row.uid)">编辑信息</el-dropdown-item> -->
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setMoney(scope.row)">设置余额</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="changeIntegral(scope.row)">设置积分</el-dropdown-item>
<el-dropdown-item v-if="scope.row.vip_name && !scope.row.cancel_time">清除等级</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setGroup(scope.row)">设置分组</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setLabel(scope.row)">设置标签</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setModify(scope.row)">修改推荐人</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setPassword(scope.row)">修改密码</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="setMember(scope.row)">编辑会员等级</el-dropdown-item>
<el-dropdown-item v-if="!scope.row.cancel_time" @click.native="giveMember(scope.row)">付费会员设置</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination background :page-size="userFrom.limit" :current-page="userFrom.page" layout="total, prev, pager, next, jumper" :total="tableData.total" @size-change="handleSizeChange" @current-change="pageChange" />
</div>
</el-card>
<el-dialog title="提示" :visible.sync="visible" width="1000px" :before-close="handleClose" class="dia">
<news-category v-if="visible" :is-show-send="isShowSend" :wechat-ids="wechatIds" :user-ids="ids" :max-cols="maxCols" />
<!--<span slot="footer" class="dialog-footer" />-->
</el-dialog>
<!--创建用户-->
<user-create
@closeDrawer="closeDrawer"
@getList="changeSearch"
:createDrawer="createDrawer"
ref="userCreate"
/>
<!--用户详情-->
<user-detail
@closeDrawer="closeDrawer"
@changeDrawer="changeDrawer"
@onEdit="onEdit"
@setMoney="setMoney"
@changeIntegral="changeIntegral"
@setGroup="setGroup"
@setLabel="setLabel"
@setModify="setModify"
@setPassword="setPassword"
@setMember="setMember"
@giveMember="giveMember"
:drawer="drawer"
:isUser="true"
:labelLists="labelLists"
:groupList="groupList"
:memberList="memberList"
ref="userDetails"
:cancel-time="cancel_time" />
<!-- 选择优惠券 -->
<el-dialog v-if="visibleCoupon" title="优惠券列表" :visible.sync="visibleCoupon" width="1000px">
<coupon-List v-if="visibleCoupon" ref="couponList" :couponForm="couponForm" :checkedIds="checkedIds" :allCheck="allCheck" :userFrom="userFrom" @sendSuccess="sendSuccess" />
</el-dialog>
</div>
</template>
<script>
import {
userLstApi,
changeGroupApi,
changelabelApi,
changeNowMoneyApi,
changeNowIntegralApi,
batchChangeGroupApi,
batchChangelabelApi,
changePrommoterApi,
userUpdateApi,
groupLstApi,
labelLstApi,
modifyUserReferrer,
modifyUserPassword,
changeMemberApi,
createUserApi,
giveMemberApi,
extendInfo,
exportUserApi,
userInfoSelectApi,
userMemberListApi
} from '@/api/user'
import newsCategory from '@/components/newsCategory/index.vue'
import userDetail from './userDetails'
import userCreate from './userCreate'
import couponList from './couponList'
import createWorkBook from '@/utils/newToExcel.js'
export default {
name: 'UserList',
components: {
newsCategory,
userDetail,
userCreate,
couponList
},
data() {
return {
moren: require("@/assets/images/f.png"),
pickerOptions: {
shortcuts: [{
text: '今天',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()))
picker.$emit('pick', [start, end])
}
},
{
text: '昨天',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)))
end.setTime(end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate())))
picker.$emit('pick', [start, end])
}
},
{
text: '最近7天',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
},
{
text: '最近30天',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
},
{
text: '本月',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)))
picker.$emit('pick', [start, end])
}
},
{
text: '本年',
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)))
picker.$emit('pick', [start, end])
}
}
]
},
collapse: true, //收起
select: "",
keywords: "",
timeVal: [],
timeVal2: [],
selectList: [],
drawer: false,
maxCols: 3,
isShowSend: true,
visible: false,
user_type: '',
tableData: {
data: [],
total: 0
},
uid: "",
listLoading: true,
multipleSelection: [],
ids: '',
wechatIds: '',
uid: '',
labelPosition: 'right',
userProps: {
children: 'children',
label: 'name',
value: 'name'
},
userFrom: {
label_id: '',
user_type: '',
keyword: '',
member_level: '',
sex: '',
is_promoter: '',
country: '',
pay_count: '',
user_time_type: '',
user_time: '',
nickname: '',
phone: '',
province: '',
city: '',
is_svip: '',
page: 1,
limit: 20,
group_id: '',
fields_type: '',
fields_value: ''
},
address: [],
grid: {
xl: 8,
lg: 12,
md: 12,
sm: 24,
xs: 24
},
grid2: {
xl: 18,
lg: 16,
md: 12,
sm: 24,
xs: 24
},
grid3: {
xl: 8,
lg: 12,
md: 12,
sm: 24,
xs: 24
},
addresData: [],
groupList: [],
labelLists: [],
memberList: [],
chkName: '',
checkedIds: [], // 订单当前页选中的数据
noChecked: [], // 订单全选状态下当前页不选中的数据
checkedPage: [],
visibleCoupon: false,
visibleDistributor: false,
couponForm: {
用户标签: '',
用户类型: '',
性别: '',
身份: '',
消费情况: '',
访问情况: '',
访问时间: '',
昵称: ''
},
allCheck: false,
cancel_time: null,
createDrawer: false,
is_promoter: 0
}
},
mounted() {
this.groupLists()
this.getTagList()
this.getMemberList()
this.getSelectList()
this.getList('')
},
methods: {
/**重置 */
searchReset(){
this.timeVal = []
this.timeVa2 = []
this.userFrom.user_time = ""
this.userFrom.birthday = ""
this.select = ""
this.keywords = ""
this.$refs.searchForm.resetFields()
this.changeSearch(1)
},
changeSearch(num){
this.resetSearchVal()
switch(this.select){
case "uid":
this.userFrom.uid = this.keywords;
this.userSearchs(num);
break;
case "nickname":
this.userFrom.nickname = this.keywords;
this.userSearchs(num);
break;
case "phone":
this.userFrom.phone = this.keywords;
this.userSearchs(num);
break;
default:
this.userFrom.keyword = this.keywords;
this.userSearchs(num);
break;
}
},
resetSearchVal(){
this.userFrom.phone="";
this.userFrom.nickname="";
this.userFrom.uid="";
this.userFrom.keyword="";
},
// 用户
onHandle(name) {
this.chkName = this.chkName === name ? '' : name
this.changeType(!(this.chkName === ''))
},
changeType(v) {
if (v) {
if (!this.chkName) {
this.chkName = 'dan'
}
} else {
this.chkName = ''
this.allCheck = false;
}
const index = this.checkedPage.indexOf(this.userFrom.page)
if (this.chkName === 'dan') {
this.checkedPage.push(this.userFrom.page)
} else if (index > -1) {
this.checkedPage.splice(index, 1)
}
this.syncCheckedId()
},
syncCheckedId() {
const ids = this.tableData.data.map(v => {
if (!v.cancel_time) {
return v.uid
}
})
if (this.chkName === 'duo') {
this.checkedIds = []
this.allCheck = true;
} else if (this.chkName === 'dan') {
this.allCheck = false;
ids.forEach(id => {
const index = this.checkedIds.indexOf(id)
if (index === -1) {
this.checkedIds.push(id)
}
})
} else {
ids.forEach(id => {
const index = this.checkedIds.indexOf(id)
if (index > -1) {
this.checkedIds.splice(index, 1)
}
})
}
},
// 分开选择
changeOne(v, user) {
if (v) {
if (this.chkName === 'duo') {
const index = this.noChecked.indexOf(user.uid)
if (index > -1) this.noChecked.splice(index, 1)
} else {
const index = this.checkedIds.indexOf(user.uid)
if (index === -1) this.checkedIds.push(user.uid)
}
} else {
if (this.chkName === 'duo') {
const index = this.noChecked.indexOf(user.uid)
if (index === -1) this.noChecked.push(user.uid)
} else {
const index = this.checkedIds.indexOf(user.uid)
if (index > -1) this.checkedIds.splice(index, 1)
}
}
},
// 发送优惠券
sendCoupon(){
if(this.checkedIds.length == 0 && this.allCheck == false){
this.$message.warning('请选择用户')
}else{
this.visibleCoupon = true;
}
},
// 导出
async exportList() {
let excelData = JSON.parse(JSON.stringify(this.userFrom)), data = []
excelData.page = 1
excelData.limit = 100
let pageCount = 1
let lebData = {};
for (let i = 0; i < pageCount; i++) {
lebData = await this.downData(excelData)
pageCount = Math.ceil(lebData.count/excelData.limit)
if (lebData.export.length) {
data = data.concat(lebData.export)
excelData.page++
}
}
createWorkBook(lebData.header, lebData.title, data, lebData.foot,lebData.filename);
return
},
/**导出用户列表 */
downData(excelData) {
return new Promise((resolve, reject) => {
exportUserApi(excelData).then((res) => {
return resolve(res.data)
})
})
},
sendSuccess(){
this.visibleCoupon = false;
},
getCoupounParmas(){
let label_id = this.userFrom.label_id == '' ? '' : this.getLabelValue(),
user_type = this.findKey(this.userFrom.user_type,{'':'','微信用户':'wechat','小程序用户':'routine','H5用户':'h5'}),
sex = this.findKey(this.userFrom.sex,{'男':'1','女':'2','保密':'0','':''}),
pay_count = this.findKey(this.userFrom.sex,{'0次':'-1','1次以上':'0','2次以上':'1','3次以上':'2','4次以上':'3','5次以上':'4','': ''}),
is_promoter = this.findKey(this.userFrom.is_promoter,{'推广员':'1','普通用户':'0','':''}),
user_time_type = this.userFrom.user_time_type == 'visit' ? '最后访问' : this.userFrom.user_time_type == 'add_time' ? '首次访问' : ''
this.couponForm = {
用户标签: label_id,
用户类型: user_type,
性别: sex,
消费情况: pay_count,
身份: is_promoter,
访问情况: user_time_type,
访问时间: this.userFrom.user_time,
昵称: this.userFrom.nickname
}
},
findKey(value,data, compare = (a, b) => a === b) {
return Object.keys(data).find(k => compare(data[k], value))
},
getLabelValue(){
let labelName = ''
for(let i = 0; i < this.labelLists.length; i ++) {
if(this.labelLists[i]['label_id'] === this.userFrom.label_id) {
labelName = this.labelLists[i]['label_name']
return labelName
}
}
},
// 具体日期
onchangeTime(e) {
this.timeVal = e
this.userFrom.user_time = e ? this.timeVal.join('-') : ''
this.changeSearch(1)
},
// 具体日期
onchangeTime2(e) {
this.timeVal2 = e
this.userFrom.birthday = e ? this.timeVal2.join('-') : ''
this.changeSearch(1)
},
userSearchs(num) {
if(this.userFrom.user_time_type && (!this.userFrom.user_time)){
this.$message.error('请选择访问时间')
}else if(!this.userFrom.user_time_type && (this.userFrom.user_time)){
this.$message.error('请选择访问情况')
}else{
this.getList(num)
}
},
// 创建用户
createUser() {
// this.$modalForm(createUserApi()).then(() => this.getList(''))
this.createDrawer = true
},
// 分组列表
groupLists() {
groupLstApi({
page: 1,
limit: 9999
}).then(async res => {
this.groupList = res.data.list
}).catch(res => {
this.$message.error(res.message)
})
},
// 补充信息搜索
getSelectList(){
userInfoSelectApi().then(async res => {
this.selectList = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
// 标签列表
getTagList() {
labelLstApi({
page: 1,
limit: 9999
}).then(res => {
this.labelLists = res.data.list
}).catch(res => {
this.$message.error(res.message)
})
},
// 用户等级列表
getMemberList(){
userMemberListApi().then(res => {
this.memberList = res.data
}).catch(res => {
this.$message.error(res.message)
})
},
// 账户详情
onDetails(id) {
this.drawer = true
this.uid = id
this.cancel_time = this.tableData.data.find(item => item.uid === id).cancel_time
this.$refs.userDetails.getData(id,false,true);
},
closeDrawer() {
this.drawer = false
this.createDrawer = false;
},
changeDrawer(v) {
this.drawer = v;
},
sendNews() {
if (this.checkedIds.length === 0 && this.allCheck == false) return this.$message.warning('请先选择用户')
this.visible = true
this.wechatIds = this.getWechatUsers(this.tableData.data, this.checkedIds)
},
handleClose() {
this.visible = false
},
/**获取选中的微信用户Id */
getWechatUsers(arr1, arr2){
let newArr = [];
if(this.allCheck){
for (let i = 0; i < arr1.length; i++) {
if(arr1[i]['wechat_user_id']){
newArr.push(arr1[i]['wechat_user_id']);
}
}
}else{
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if(arr1[i]['uid'] === arr2[j] && arr1[i]['wechat_user_id']){
newArr.push(arr2[j]);
}
}
}
}
return newArr;
},
handleSelectionChange(val) {
this.multipleSelection = val
const data = []
const wechatData = []
this.multipleSelection.map((item) => {
data.push(item.uid)
wechatData.push(item.wechat_user_id)
})
this.ids = data.join(',')
this.wechatIds = wechatData.join(',')
},
// 修改分组
setGroup(row) {
this.$modalForm(changeGroupApi(row.uid)).then(() => this.changeSearch())
},
// 批量分组
batchGroup() {
if (this.checkedIds.length === 0) return this.$message.warning('请先选择用户')
this.$modalForm(batchChangeGroupApi({
ids: (this.checkedIds).join(",")
}))
},
// 批量标签
batchlabel() {
if (this.checkedIds.length === 0) return this.$message.warning('请先选择用户')
this.$modalForm(batchChangelabelApi({
ids: (this.checkedIds).join(",")
}))
},
// 修改标签
setLabel(row) {
this.$modalForm(changelabelApi(row.uid)).then(() => this.changeSearch())
},
// 批量设置分销员
setDistributor(){
if (this.checkedIds.length === 0) return this.$message.warning('请先选择用户')
this.$modalForm(changePrommoterApi({
ids: (this.checkedIds).join(",")
}))
},
// 编辑会员等级
setMember(row) {
this.$modalForm(changeMemberApi(row.uid)).then(() => this.changeSearch())
},
// 赠送付费会员
giveMember(row) {
this.$modalForm(giveMemberApi(row.uid)).then(() => this.changeSearch())
},
// 修改推荐人
setModify(row){
this.$modalForm(modifyUserReferrer(row.uid)).then(({ message }) => {
this.changeSearch();
});
},
// 修改密码
setPassword(row){
this.$modalForm(modifyUserPassword(row.uid)).then(() => this.changeSearch());
},
// 修改余额
setMoney(row) {
this.$modalForm(changeNowMoneyApi(row.uid)).then(() => this.changeSearch())
},
// 修改积分余额
changeIntegral(row){
this.$modalForm(changeNowIntegralApi(row.uid)).then(() => this.changeSearch())
},
// 列表
getList(num) {
this.listLoading = true
this.userFrom.page = num ? num : this.userFrom.page;
this.userFrom.user_type = this.user_type
this.userFrom.province = this.address[0]
this.userFrom.city = this.address[1]
if (this.userFrom.user_type === '0') this.userFrom.user_type = ''
userLstApi(this.userFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.listLoading = false
this.getCoupounParmas();
// this.checkedIds = [];
}).catch(res => {
this.listLoading = false
this.$message.error(res.message)
})
},
pageChange(page) {
this.userFrom.page = page
this.changeSearch()
},
handleSizeChange(val) {
this.userFrom.limit = val
this.changeSearch()
},
// 编辑
onEdit(id) {
// this.$modalForm(userUpdateApi(id)).then(() => this.getList(''))
this.drawer = true
this.uid = id
this.$refs.userDetails.getData(id,true,false);
},
// 重置
reset() {
this.userFrom = {
label_id: '',
user_type: '',
sex: '',
is_promoter: '',
country: '',
pay_count: '',
user_time_type: '',
user_time: '',
nickname: '',
province: '',
city: '',
page: 1,
limit: 20,
group_id: ''
}
this.timeVal=[]
this.changeSearch(1)
},
// 更新信息
extendInfo(row){
this.$modalForm(extendInfo(row.uid)).then(() => this.changeSearch());
}
}
}
</script>
<style lang="scss" scoped>
@import '@/styles/form.scss';
.check {
color: #00a2d4;
}
.dia ::v-deep .el-dialog__body {
height: 700px !important;
}
.text-right {
text-align: right;
}
.minwidth {
display: inline-block;
max-width: 200px;
line-height: 20px;
}
.search-form{
display: flex;
justify-content: space-between;
.search-form-box{
display: flex;
flex-wrap: wrap;
flex: 1;
}
a{
color: var(--prev-color-primary);
}
}
.selWidth{
width: 250px!important;
}
.search-form-sub{
display: flex;
}
.container {
min-width: 821px;
}
.container ::v-deep .el-form-item {
width: 100%;
}
.container ::v-deep .el-form-item__content {
width: 72%;
}
.vipName {
color: #dab176
}
.el-dropdown-link {
cursor: pointer;
color: var(--prev-color-primary);
font-size: 12px;
}
.el-icon-arrow-down {
font-size: 12px;
}
.demo-table-expand {
font-size: 0;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 33.33%;
}
::v-deep .el-date-editor.el-input{
width: 100%;
}
::v-deep [type=reset],
[type=submit],
button,
html [type=button] {
-webkit-appearance: none !important;
}
::v-deep .el-input-group__prepend .el-input{
width: 100px;
}
</style>