用户列表

main
home.fengxinyhyl 11 months ago
parent ab1c729032
commit fc5d0a9b12
  1. 2
      app/common/dao/user/UserDao.php
  2. 7
      app/common/repositories/user/UserRepository.php
  3. 3
      app/controller/admin/user/User.php
  4. 186
      view/admin/src/views/user/list/index.vue
  5. 786
      view/admin/src/views/user/list/userDetails.vue

@ -87,6 +87,8 @@ class UserDao extends BaseDao
return $query->where('User.uid|User.real_name|User.nickname|User.phone', 'like', '%' . $where['keyword'] . '%');
})->when(isset($where['user_type']) && $where['user_type'] !== '', function (BaseQuery $query) use ($where) {
return $query->where('User.user_type', $where['user_type']);
})->when(isset($where['is_lottery']) && $where['is_lottery'] !== '', function (BaseQuery $query) use ($where) {
return $query->where('User.is_lottery', $where['is_lottery']);
})->when(isset($where['uid']) && $where['uid'] !== '', function (BaseQuery $query) use ($where) {
return $query->where('User.uid', $where['uid']);
})->when(isset($where['status']) && $where['status'] !== '', function (BaseQuery $query) use ($where) {

@ -307,14 +307,14 @@ class UserRepository extends BaseRepository
$data = app()->make(UserGroupRepository::class)->allOptions();
return Elm::createForm(Route::buildUrl($isArray ? 'systemUserBatchChangeGroup' : 'systemUserChangeGroup', $isArray ? [] : compact('id'))->build(), [
Elm::hidden('ids', $isArray ? $id : [$id]),
Elm::select('group_id', '用户分组:', $isArray ? '' : $user->group_id)->options(function () use ($data) {
Elm::select('group_id', '用户等级:', $isArray ? '' : $user->group_id)->options(function () use ($data) {
$options = [['label' => '请选择', 'value' => 0]];
foreach ($data as $value => $label) {
$options[] = compact('value', 'label');
}
return $options;
})->placeholder('请选择用户分组')
])->setTitle('修改用户分组');
})->placeholder('请选择用户等级')
])->setTitle('修改用户等级');
}
/**
@ -1616,6 +1616,7 @@ class UserRepository extends BaseRepository
$info = $this->dao->userOrderDetail($uid);
// 添加用户扩展信息
$info['extend_info'] = app()->make(UserFieldsRepository::class)->info((int)$uid, false)['extend_info'];
$info['assets'] = app()->make(UserAssetsRepository::class)->assets($uid);
return $info;
}

@ -99,7 +99,8 @@ class User extends BaseController
'fields_value',
'member_level',
'keyword',
'birthday'
'birthday',
'is_lottery'
]);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getList($where, $page, $limit));

@ -12,26 +12,25 @@
<el-option label="手机号" value="phone">手机号</el-option>
<el-option label="用户ID" value="uid">用户ID</el-option>
</el-select>
</el-input>
</el-input>
</el-form-item>
<el-form-item label="用户分组:" prop="group_id">
<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 label="预存用户:" prop="is_lottery">
<el-select v-model="userFrom.is_lottery" placeholder="请选择" class="selWidth" clearable filterable @change="changeSearch(1)">
<el-option value="1" label="是" />
<el-option value="0" label="否" />
</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>
<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>
</a>
</el-form-item>
</div>
<div v-else class="acea-row search-form">
@ -44,7 +43,7 @@
<el-option label="手机号" value="phone">手机号</el-option>
<el-option label="用户ID" value="uid">用户ID</el-option>
</el-select>
</el-input>
</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)">
@ -89,7 +88,7 @@
<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="最后访问" />
@ -117,42 +116,42 @@
<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-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>
<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>
</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>
<!-- <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">
@ -187,20 +186,20 @@
</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 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">
@ -218,18 +217,18 @@
</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="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">
<!-- <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>
@ -239,13 +238,18 @@
<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 label="预存用户" min-width="140">
<template slot-scope="{row}">
<span>{{ row.is_lottery ? '是' : '否' }}</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="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>
@ -257,15 +261,15 @@
</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="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-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>
@ -283,8 +287,8 @@
<user-create
@closeDrawer="closeDrawer"
@getList="changeSearch"
:createDrawer="createDrawer"
ref="userCreate"
:createDrawer="createDrawer"
ref="userCreate"
/>
<!--用户详情-->
<user-detail
@ -299,16 +303,16 @@
@setPassword="setPassword"
@setMember="setMember"
@giveMember="giveMember"
:drawer="drawer"
:drawer="drawer"
:isUser="true"
:labelLists="labelLists"
:groupList="groupList"
:memberList="memberList"
ref="userDetails"
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" />
<coupon-List v-if="visibleCoupon" ref="couponList" :couponForm="couponForm" :checkedIds="checkedIds" :allCheck="allCheck" :userFrom="userFrom" @sendSuccess="sendSuccess" />
</el-dialog>
</div>
</template>
@ -439,7 +443,6 @@ export default {
multipleSelection: [],
ids: '',
wechatIds: '',
uid: '',
labelPosition: 'right',
userProps: {
children: 'children',
@ -466,7 +469,8 @@ export default {
limit: 20,
group_id: '',
fields_type: '',
fields_value: ''
fields_value: '',
is_lottery: ''
},
address: [],
grid: {
@ -582,7 +586,7 @@ export default {
} else if (index > -1) {
this.checkedPage.splice(index, 1)
}
this.syncCheckedId()
},
syncCheckedId() {
@ -651,7 +655,7 @@ export default {
if (lebData.export.length) {
data = data.concat(lebData.export)
excelData.page++
}
}
}
createWorkBook(lebData.header, lebData.title, data, lebData.foot,lebData.filename);
return
@ -671,7 +675,7 @@ export default {
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','': ''}),
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 = {
@ -766,7 +770,7 @@ export default {
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);
this.$refs.userDetails.getData(id,false,true);
},
closeDrawer() {
this.drawer = false
@ -779,7 +783,7 @@ export default {
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
@ -792,7 +796,7 @@ export default {
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++) {
@ -849,7 +853,7 @@ export default {
this.$modalForm(changeMemberApi(row.uid)).then(() => this.changeSearch())
},
//
giveMember(row) {
giveMember(row) {
this.$modalForm(giveMemberApi(row.uid)).then(() => this.changeSearch())
},
//
@ -867,7 +871,7 @@ export default {
this.$modalForm(changeNowMoneyApi(row.uid)).then(() => this.changeSearch())
},
//
changeIntegral(row){
changeIntegral(row){
this.$modalForm(changeNowIntegralApi(row.uid)).then(() => this.changeSearch())
},
//
@ -940,7 +944,7 @@ export default {
color: #00a2d4;
}
.dia ::v-deep .el-dialog__body {
height: 700px !important;
height: 700px !important;
}
.text-right {
text-align: right;

@ -5,7 +5,7 @@
:size="1000"
:visible.sync="drawer"
:direction="direction"
:before-close="handleClose"
:before-close="handleClose"
>
<div v-loading="loading" v-if="psInfo">
<div class="head">
@ -19,7 +19,7 @@
<img class="svip-img" src="../../../assets/images/svip.png">
</div>
</div>
</div>
<div v-if="isUser">
<el-button
@ -43,44 +43,40 @@
@click="onEdit"
>完成</el-button
>
<el-dropdown @command="handleCommand" class="ml10">
<el-button icon="el-icon-more" size="small"></el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="integral">设置积分</el-dropdown-item>
<el-dropdown-item command="balance">设置余额</el-dropdown-item>
<el-dropdown-item command="group">设置分组</el-dropdown-item>
<el-dropdown-item command="label">设置标签</el-dropdown-item>
<el-dropdown-item command="reference">修改推荐人</el-dropdown-item>
<el-dropdown-item command="password">修改密码</el-dropdown-item>
<el-dropdown-item command="svipLevel">编辑会员等级</el-dropdown-item>
<el-dropdown-item command="svipSet">付费会员设置</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!-- <el-dropdown @command="handleCommand" class="ml10">-->
<!-- <el-button icon="el-icon-more" size="small"></el-button>-->
<!-- <el-dropdown-menu slot="dropdown">-->
<!-- <el-dropdown-item command="integral">设置积分</el-dropdown-item>-->
<!-- <el-dropdown-item command="balance">设置余额</el-dropdown-item>-->
<!-- <el-dropdown-item command="group">设置分组</el-dropdown-item> -->
<!-- <el-dropdown-item command="label">设置标签</el-dropdown-item> -->
<!-- <el-dropdown-item command="reference">修改推荐人</el-dropdown-item> -->
<!-- <el-dropdown-item command="password">修改密码</el-dropdown-item> -->
<!-- <el-dropdown-item command="svipLevel">编辑会员等级</el-dropdown-item> -->
<!-- <el-dropdown-item command="svipSet">付费会员设置</el-dropdown-item> -->
<!-- </el-dropdown-menu>-->
<!-- </el-dropdown>-->
</div>
</div>
<div>
<ul class="list">
<li class="item">
<div class="title">余额</div>
<div class="title">消费积分</div>
<div>
<div class="value1">{{psInfo.now_money}}</div>
<div>{{psInfo.assets.integral_buy}}</div>
</div>
</li>
<li class="item">
<div class="title">总计订单</div>
<div>{{psInfo.pay_count}}</div>
</li>
<li class="item">
<div class="title">总消费金额</div>
<div>{{psInfo.pay_price}}</div>
<div class="title">提现积分</div>
<div>{{psInfo.assets.integral_withdraw}}</div>
</li>
<li class="item">
<div class="title">积分</div>
<div>{{psInfo.integral}}</div>
<div class="title">钻石</div>
<div>{{psInfo.assets.diamond}}</div>
</li>
<li class="item">
<div class="title">用户成长值</div>
<div>{{psInfo.member_value}}</div>
<div class="title">本票</div>
<div>{{psInfo.assets.stock}}</div>
</li>
</ul>
</div>
@ -120,30 +116,30 @@
<div class="section">
<div class="title">用户概况</div>
<ul class="list">
<li class="item">
<div>推广员</div>
<div class="value">{{psInfo.is_promoter == 1 ? '是' : '否'}}</div>
</li>
<li class="item">
<div>用户状态</div>
<div class="value">{{psInfo.status == 1 ? '开启' : '关闭'}}</div>
</li>
<li class="item">
<div>用户等级</div>
<div class="value">{{psInfo.member_level}}</div>
</li>
<li class="item">
<div>用户标签</div>
<div class="value">
<span v-for="(item,index) in psInfo.userLabel" :key="index">
{{item.label_name}}
</span>
</div>
</li>
<li class="item">
<div>用户分组</div>
<div class="value">{{psInfo.group && psInfo.group.group_name || '无'}}</div>
</li>
<!-- <li class="item">-->
<!-- <div>推广员</div>-->
<!-- <div class="value">{{psInfo.is_promoter == 1 ? '是' : '否'}}</div>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <div>用户状态</div>-->
<!-- <div class="value">{{psInfo.status == 1 ? '开启' : '关闭'}}</div>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <div>用户等级</div>-->
<!-- <div class="value">{{psInfo.member_level}}</div>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <div>用户标签</div>-->
<!-- <div class="value">-->
<!-- <span v-for="(item,index) in psInfo.userLabel" :key="index">-->
<!-- {{item.label_name}}-->
<!-- </span>-->
<!-- </div>-->
<!-- </li>-->
<!-- <li class="item">-->
<!-- <div>用户分组</div>-->
<!-- <div class="value">{{psInfo.group && psInfo.group.group_name || '无'}}</div>-->
<!-- </li>-->
<li class="item">
<div>推广人</div>
<div class="value">{{psInfo.spread && psInfo.spread.nickname || '无'}}</div>
@ -156,21 +152,21 @@
<div>登录时间</div>
<div class="value">{{psInfo.last_time}}</div>
</li>
<li v-if="psInfo.is_svip == 1 || psInfo.is_svip == 2" class="item">
<div>会员到期时间</div>
<div class="value">{{psInfo.svip_endtime}}</div>
</li>
</ul>
</div>
<div class="section">
<div class="title">用户备注</div>
<ul class="list">
<li class="item">
<div>备注</div>
<div class="value">{{ psInfo.mark ? psInfo.mark : '-' }}</div>
</li>
<!-- <li v-if="psInfo.is_svip == 1 || psInfo.is_svip == 2" class="item">-->
<!-- <div>会员到期时间</div>-->
<!-- <div class="value">{{psInfo.svip_endtime}}</div>-->
<!-- </li>-->
</ul>
</div>
<!-- <div class="section">-->
<!-- <div class="title">用户备注</div>-->
<!-- <ul class="list">-->
<!-- <li class="item">-->
<!-- <div>备注</div>-->
<!-- <div class="value">{{ psInfo.mark ? psInfo.mark : '-' }}</div>-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<div class="section">
<div class="title">补充信息</div>
<ul class="list">
@ -186,7 +182,7 @@
</ul>
</div>
</template>
</el-tab-pane>
<el-tab-pane v-else-if="isEdit&&!isDetail" label="用户信息" name="userInfo">
<el-form
@ -265,75 +261,75 @@
</el-col> -->
</el-row>
</div>
<div class="section">
<div class="title">用户概况</div>
<el-row :gutter="24" class="mt20">
<el-col :span="12">
<el-form-item label="用户等级:">
<el-select
size="small"
v-model="psInfo.member_level"
placeholder="请选择"
class="selWidth"
>
<el-option
v-for="item in memberList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户分组:">
<el-select
size="small"
v-model="psInfo.group_id"
placeholder="请选择"
class="selWidth"
>
<el-option value="">全部</el-option>
<el-option v-for="(item, index) in groupList" :key="index" :value="item.group_id" :label="item.group_name" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户标签:">
<el-select
size="small"
v-model="psInfo.label_id"
multiple
placeholder="请选择"
class="selWidth"
>
<el-option value="">全部</el-option>
<el-option v-for="(item, index) in labelLists" :key="index" :value="item.label_id" :label="item.label_name" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-form-item label="推广员:" prop="is_promoter">
<el-radio-group
v-model="psInfo.is_promoter"
>
<el-radio :label="1" class="radio">开启</el-radio>
<el-radio :label="0">关闭</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-row :gutter="24">
<el-form-item label="用户状态:" prop="status">
<el-radio-group
v-model="psInfo.status"
>
<el-radio :label="1" class="radio">开启</el-radio>
<el-radio :label="0">关闭</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
</div>
<!-- <div class="section">-->
<!-- <div class="title">用户概况</div>-->
<!-- <el-row :gutter="24" class="mt20">-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="用户等级:">-->
<!-- <el-select-->
<!-- size="small"-->
<!-- v-model="psInfo.member_level"-->
<!-- placeholder="请选择"-->
<!-- class="selWidth"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in memberList"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="用户分组:">-->
<!-- <el-select-->
<!-- size="small"-->
<!-- v-model="psInfo.group_id"-->
<!-- placeholder="请选择"-->
<!-- class="selWidth"-->
<!-- >-->
<!-- <el-option value="">全部</el-option>-->
<!-- <el-option v-for="(item, index) in groupList" :key="index" :value="item.group_id" :label="item.group_name" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="用户标签:">-->
<!-- <el-select-->
<!-- size="small"-->
<!-- v-model="psInfo.label_id"-->
<!-- multiple-->
<!-- placeholder="请选择"-->
<!-- class="selWidth"-->
<!-- >-->
<!-- <el-option value="">全部</el-option>-->
<!-- <el-option v-for="(item, index) in labelLists" :key="index" :value="item.label_id" :label="item.label_name" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row :gutter="24">-->
<!-- <el-form-item label="推广员:" prop="is_promoter">-->
<!-- <el-radio-group-->
<!-- v-model="psInfo.is_promoter"-->
<!-- >-->
<!-- <el-radio :label="1" class="radio">开启</el-radio>-->
<!-- <el-radio :label="0">关闭</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-row>-->
<!-- <el-row :gutter="24">-->
<!-- <el-form-item label="用户状态:" prop="status">-->
<!-- <el-radio-group-->
<!-- v-model="psInfo.status"-->
<!-- >-->
<!-- <el-radio :label="1" class="radio">开启</el-radio>-->
<!-- <el-radio :label="0">关闭</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-row>-->
<!-- </div>-->
<div class="section">
<div class="title">用户备注</div>
<el-row :gutter="24" class="mt20">
@ -359,7 +355,7 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
<el-form-item v-else-if="item.type=='int'" :label="item.title+':'" :required="item.is_require==1">
<el-input
@ -368,7 +364,7 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
<el-form-item v-else-if="item.type=='email'" :label="item.title+':'" :required="item.is_require==1">
<el-input
@ -376,7 +372,7 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
<el-form-item v-else-if="item.type=='date'" :label="item.title+':'" :required="item.is_require==1">
<el-date-picker
@ -396,7 +392,7 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
<el-form-item v-else-if="item.type=='phone'" :label="item.title+':'" :required="item.is_require==1">
<el-input
@ -405,7 +401,7 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
<el-form-item v-else-if="item.type=='radio'" :label="item.title+':'" :required="item.is_require==1">
<el-radio-group v-model="item.value">
@ -420,13 +416,13 @@
v-model="item.value"
:placeholder="item.msg"
class="selWidth"
/>
/>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</el-form>
</el-tab-pane>
<el-tab-pane label="消费记录" name="record">
<template v-if="activeName=='record'">
@ -451,8 +447,8 @@
</div>
</template>
</el-tab-pane>
<el-tab-pane label="积分明细" name="detailed">
<template v-if="activeName == 'detailed'">
<el-tab-pane label="积分" name="integral">
<template v-if="activeName == 'integral'">
<el-table :data="tableData.data" size="small">
<el-table-column
v-for="(item, index) in columns"
@ -461,19 +457,6 @@
:label="item.title"
width="item.minWidth"
>
<template slot-scope="scope">
<div v-if="item.key == 'number'">
<span v-if="scope.row.pm == 1" style="color:rgb(255, 59, 48);">+{{scope.row.number}}</span>
<span v-else-if="scope.row.pm == 0" style="color:rgb(130, 228, 147);">-{{scope.row.number}}</span>
</div>
<div v-else-if="item.key == 'status'">
<span v-if="scope.row.status == 1">已解冻</span>
<span v-else-if="scope.row.status == 0">冻结中</span>
</div>
<div v-else>
<span>{{scope.row[item.key]}}</span>
</div>
</template>
</el-table-column>
</el-table>
<div class="block">
@ -488,108 +471,9 @@
</div>
</template>
</el-tab-pane>
<el-tab-pane label="签到记录" name="signRecord">
<template v-if="activeName == 'signRecord'">
<el-table :data="tableData.data" size="small">
<el-table-column
v-for="(item, index) in columns"
:key="index"
:prop="item.key"
:label="item.title"
width="item.minWidth"
/>
</el-table>
<div class="block">
<el-pagination
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="prev, pager, next"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</template>
</el-tab-pane>
<el-tab-pane label="持有优惠券" name="coupon">
<template v-if="activeName == 'coupon'">
<el-table :data="tableData.data" size="small">
<el-table-column
v-for="(item, index) in columns"
:key="index"
:prop="item.key"
:label="item.title"
width="item.minWidth"
/>
</el-table>
<div class="block">
<el-pagination
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="prev, pager, next"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</template>
</el-tab-pane>
<el-tab-pane label="余额变更" name="balance" size="small">
<template v-if="activeName == 'balance'">
<el-table :data="tableData.data" size="small">
<el-table-column
v-for="(item, index) in columns"
:key="index"
:prop="item.key"
:label="item.title"
width="item.minWidth"
/>
</el-table>
<div class="block">
<el-pagination
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="prev, pager, next"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</template>
</el-tab-pane>
<el-tab-pane label="用户成长值" name="growth" size="small">
<template v-if="activeName == 'growth'">
<el-table :data="tableData.data" size="small">
<el-table-column
v-for="(item, index) in columns"
:key="index"
:prop="item.key"
:label="item.title"
width="item.minWidth"
>
<template slot-scope="scope">
<div v-if="item.key == 'number'">
<span v-if="scope.row['pm']>0" style="color: #ff0000;">+{{scope.row[item.key]}}</span>
<span v-else style="color: #00C050;">-{{scope.row[item.key]}}</span>
</div>
<span v-else>{{scope.row[item.key]}}</span>
</template>
</el-table-column>
</el-table>
<div class="block">
<el-pagination
:page-size="tableFrom.limit"
:current-page="tableFrom.page"
layout="prev, pager, next"
:total="tableData.total"
@size-change="handleSizeChange"
@current-change="pageChange"
/>
</div>
</template>
</el-tab-pane>
<el-tab-pane label="浏览足迹" name="footsteps">
<template v-if="activeName == 'footsteps'">
<el-tab-pane label="钻石" name="diamond">
<template v-if="activeName == 'diamond'">
<el-table :data="tableData.data" size="small">
<template>
<el-table-column
@ -599,16 +483,7 @@
:label="item.title"
width="item.minWidth"
>
<template slot-scope="scope">
<div v-if="item.key == 'image'" class="acea-row" style="align-items: center;">
<div class="demo-image__preview">
<el-image v-if="scope.row.spu" :src="scope.row.spu&&scope.row.spu.image" :preview-src-list="[scope.row.spu.image]" />
</div>
<span class="priceBox" style="margin-left: 10px;width: 220px;">{{scope.row.spu&&scope.row.spu.store_name}}</span>
</div>
<span v-else-if="item.key == 'create_time'">{{scope.row[item.key]}}</span>
<span v-else>{{scope.row.spu&&scope.row.spu[item.key]}}</span>
</template>
</el-table-column>
</template>
</el-table>
@ -624,20 +499,20 @@
</div>
</template>
</el-tab-pane>
<el-tab-pane label="推荐人变更记录" name="recommend">
<template v-if="activeName == 'recommend'">
<el-tab-pane label="本票" name="stock">
<template v-if="activeName == 'stock'">
<el-table :data="tableData.data" size="small">
<el-table-column prop="spread.uid" label="上级推荐人ID" min-width="100">
<template slot-scope="scope">
<span>{{(scope.row.spread && scope.row.spread.uid) || '-'}}</span>
</template>
</el-table-column>
<el-table-column prop="spread.nickname" label="上级推荐人昵称" min-width="100">
<template slot-scope="scope">
<span>{{(scope.row.spread && scope.row.spread.nickname) || '用户已注销'}}</span>
</template>
</el-table-column>
<el-table-column prop="create_time" label="绑定时间" min-width="100" />
<template>
<el-table-column
v-for="(item, index) in columns"
:key="index"
:prop="item.key"
:label="item.title"
width="item.minWidth"
>
</el-table-column>
</template>
</el-table>
<div class="block">
<el-pagination
@ -667,7 +542,7 @@
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import { userOrderApi, userDetailApi, userCouponApi, userBillApi,
import { userOrderApi, userDetailApi, userCouponApi, userBillApi,assetsLogList,
modifyUserRefLog, userPointsApi, userSignLogApi, userHistoryApi, memberGrowthLog, userEditApi } from '@/api/user'
import { verifyEmail } from '@/utils/toolsValidate';
export default {
@ -749,7 +624,7 @@ export default {
}
},
mounted() {
},
beforeUpdate(){
this.$nextTick(() =>{
@ -816,23 +691,24 @@ export default {
this.loading = false
})
break
case 'recommend':
modifyUserRefLog(this.uid, this.tableFrom).then(res => {
case 'integral':
let data = {'uid':this.uid,asset_type:1,page:this.tableFrom.page, limit:this.tableFrom.limit}
assetsLogList(data).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '上级推荐人ID',
key: 'spread.uid',
title: '分值来源',
key: 'type',
minWidth: 120
},
{
title: '上级推荐人昵称',
key: 'spread.nickname',
title: '变动情况',
key: 'count',
minWidth: 120
},
{
title: '绑定时间',
title: '变动时间',
key: 'create_time',
minWidth: 120
}
@ -842,239 +718,97 @@ export default {
this.loading = false
})
break
case 'signRecord':
userSignLogApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '获得积分',
key: 'number',
minWidth: 120
},
{
title: '签到时间',
key: 'create_time',
minWidth: 120
},
{
title: '备注',
key: 'title',
minWidth: 120
},
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'coupon':
userCouponApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '优惠券名称',
key: 'coupon_title',
minWidth: 120
},
{
title: '面值',
key: 'coupon_price',
minWidth: 120
},
{
title: '最低消费额',
key: 'use_min_price',
minWidth: 120
},
{
title: '兑换时间',
key: 'use_time',
minWidth: 120
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'balance':
userBillApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '变动金额',
key: 'number',
minWidth: 90
},
{
title: '变动后',
key: 'balance',
minWidth: 90
},
{
title: '类型',
key: 'title',
minWidth: 100
},
{
title: '创建时间',
key: 'create_time',
minWidth: 150
},
{
title: '备注',
key: 'mark',
minWidth: 200
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'growth':
this.tableFrom.uid = this.uid
memberGrowthLog(this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '成长值来源',
key: 'title',
minWidth: 90
},
{
title: '成长值变化',
key: 'number',
minWidth: 90
},
{
title: '变化后成长值',
key: 'balance',
minWidth: 100
},
{
title: '日期',
key: 'create_time',
minWidth: 150
},
{
title: '备注',
key: 'mark',
minWidth: 200
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'detailed':
userPointsApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '来源/用途',
key: 'title',
minWidth: 90
},
{
title: '积分变化',
key: 'number',
minWidth: 90
},
{
title: '状态',
key: 'status',
minWidth: 90
},
{
title: '当前有效积分',
key: 'balance',
minWidth: 100
},
{
title: '日期',
key: 'create_time',
minWidth: 150
},
{
title: '备注',
key: 'mark',
minWidth: 200
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'footsteps':
userHistoryApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '商品信息',
key: 'image',
minWidth: 200
},
{
title: '价格',
key: 'price',
minWidth: 50
},
{
title: '浏览时间',
key: 'create_time',
minWidth: 50
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
default:
userBillApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '变动金额',
key: 'number',
minWidth: 90
},
{
title: '变动后',
key: 'balance',
minWidth: 90
},
{
title: '类型',
key: 'title',
minWidth: 100
},
{
title: '创建时间',
key: 'create_time',
minWidth: 150
},
{
title: '备注',
key: 'mark',
minWidth: 200
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
case 'diamond':
data = {'uid':this.uid,asset_type:2,page:this.tableFrom.page, limit:this.tableFrom.limit}
assetsLogList(data).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '分值来源',
key: 'type',
minWidth: 120
},
{
title: '变动情况',
key: 'count',
minWidth: 120
},
{
title: '变动时间',
key: 'create_time',
minWidth: 120
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
case 'stock':
data = {'uid':this.uid,asset_type:3,page:this.tableFrom.page, limit:this.tableFrom.limit}
assetsLogList(data).then(res => {
console.log(res);
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '分值来源',
key: 'type',
minWidth: 120
},
{
title: '变动情况',
key: 'count',
minWidth: 120
},
{
title: '变动时间',
key: 'create_time',
minWidth: 120
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
break
default:
userBillApi(this.uid, this.tableFrom).then(res => {
this.tableData.data = res.data.list
this.tableData.total = res.data.count
this.columns = [
{
title: '变动金额',
key: 'number',
minWidth: 90
},
{
title: '变动后',
key: 'balance',
minWidth: 90
},
{
title: '类型',
key: 'title',
minWidth: 100
},
{
title: '创建时间',
key: 'create_time',
minWidth: 150
},
{
title: '备注',
key: 'mark',
minWidth: 200
}
]
this.loading = false
}).catch(() => {
this.loading = false
})
}
},
handleClose() {
@ -1165,7 +899,7 @@ export default {
this.$emit('setMember',{uid: this.uid});
} else if (command == 'svipSet') {
this.$emit('giveMember',{uid: this.uid});
}
}
},
pageChange(page) {
this.tableFrom.page = page
@ -1284,7 +1018,7 @@ export default {
margin-right: 7px;
}
.svip{
.svip-img{
width: 40px;
height: 15px;

Loading…
Cancel
Save