积分列表详情和消息列表详情

master
382696293@qq.com 2 years ago
parent 83dcf16ee1
commit cf69d5b1c3

@ -0,0 +1,47 @@
package com.flossom.common.core.domain.ret;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.flossom.common.core.annotation.Excel;
import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.entity.WxUserRemark;
import com.flossom.common.core.domain.entity.WxUserTag;
import com.flossom.common.core.web.domain.BaseEntity;
import java.util.Date;
import java.util.List;
/**
*
*
* @author flossom
* @date 2023-12-08
*/
public class WxUserMemberRet extends WxUserMember {
/**
*
*/
private List<WxUserTag> miniProgramTags;
/**
*
*/
private List<WxUserTag> wecomTags;
public List<WxUserTag> getMiniProgramTags() {
return miniProgramTags;
}
public void setMiniProgramTags(List<WxUserTag> miniProgramTags) {
this.miniProgramTags = miniProgramTags;
}
public List<WxUserTag> getWecomTags() {
return wecomTags;
}
public void setWecomTags(List<WxUserTag> wecomTags) {
this.wecomTags = wecomTags;
}
}

@ -8,6 +8,7 @@ import com.flossom.common.core.domain.req.AllChangIntegralOperateReq;
import com.flossom.common.core.domain.req.WxUserIntegralVm;
import com.flossom.common.core.domain.req.WxUserMemberReq;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import com.flossom.common.core.domain.ret.WxUserMemberRet;
import com.flossom.common.core.enums.IntegralChangeTypeEnum;
import com.flossom.common.core.exception.ServiceException;
import com.flossom.common.core.utils.StringUtils;
@ -49,6 +50,16 @@ public class WxUserMemberController extends BaseController {
return getDataTable(list);
}
/**
*
*/
@GetMapping("/listRet")
public TableDataInfo listRet(WxUserMemberVm wxUserMemberVm) {
startPage();
List<WxUserMemberRet> list = wxUserMemberService.selectWxUserMemberRetList(wxUserMemberVm);
return getDataTable(list);
}
/**
*
*/

@ -5,6 +5,7 @@ import com.flossom.common.core.domain.entity.WxUserMember;
import com.flossom.common.core.domain.req.WxUserIntegralVm;
import com.flossom.common.core.domain.req.WxUserMemberReq;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import com.flossom.common.core.domain.ret.WxUserMemberRet;
import com.flossom.common.core.domain.vo.WxUserMemberVo;
import java.util.List;
@ -84,4 +85,6 @@ public interface IWxUserMemberService
void openOrCloseClock(Long id);
void openOrCloseActivity(Long id);
List<WxUserMemberRet> selectWxUserMemberRetList(WxUserMemberVm wxUserMemberVm);
}

@ -9,6 +9,7 @@ import com.flossom.common.core.domain.entity.*;
import com.flossom.common.core.domain.req.WxUserIntegralVm;
import com.flossom.common.core.domain.req.WxUserMemberReq;
import com.flossom.common.core.domain.req.WxUserMemberVm;
import com.flossom.common.core.domain.ret.WxUserMemberRet;
import com.flossom.common.core.domain.vo.WxUserMemberVo;
import com.flossom.common.core.enums.IntegralChangeTypeEnum;
import com.flossom.common.core.enums.Status;
@ -133,7 +134,7 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
/**
*
*
* @param WxUserMemberReq
* @param
* @return
*/
@Override
@ -351,4 +352,25 @@ public class WxUserMemberServiceImpl implements IWxUserMemberService {
}
wxUserMemberMapper.updateWxUserMember(update);
}
@Override
public List<WxUserMemberRet> selectWxUserMemberRetList(WxUserMemberVm wxUserMemberVm) {
List<WxUserMemberRet> list = new ArrayList<>();
List<WxUserMember> wxUserMembers = wxUserMemberMapper.selectWxUserMemberListByVm(wxUserMemberVm);
if (wxUserMembers != null && wxUserMembers.size() > 0) {
WxUserMemberRet wxUserMemberRet;
for (WxUserMember wxUserMember : wxUserMembers) {
wxUserMemberRet = new WxUserMemberRet();
BeanUtils.copyProperties(wxUserMember, wxUserMemberRet);
WxUserTag wxUserTag = new WxUserTag();
wxUserTag.setUserId(wxUserMember.getId());
wxUserTag.setType(TagTypeStatus.MINI_PROGRAM.getCode());
wxUserMemberRet.setMiniProgramTags(wxUserTagMapper.selectWxUserTagList(wxUserTag));
wxUserTag.setType(TagTypeStatus.ENTERPRISE_WECHAT.getCode());
wxUserMemberRet.setWecomTags(wxUserTagMapper.selectWxUserTagList(wxUserTag));
list.add(wxUserMemberRet);
}
}
return list;
}
}

@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询用户列表
export function listMember(query) {
return request({
url: '/system/member/list',
url: '/system/member/listRet',
method: 'get',
params: query
})
@ -249,3 +249,30 @@ export function openOrCloseActivity(id) {
method: 'get'
})
}
// 分页获取消息列表
export function uObtainUserScriptLog(data) {
return request({
url: '/system/userScriptLog/list',
method: 'get',
params: data
})
}
// 删除用户的消息列表
export function delUserScriptLog(data) {
return request({
url: '/system/userScriptLog',
method: 'put',
data: data
})
}
// 获取用户积分列表
export function obtainUserIntegralLog(data) {
return request({
url: '/system/integralLog/list',
method: 'get',
params: data
})
}

@ -197,19 +197,35 @@
<el-table-column label="用户编号" align="center" prop="id"/>
<el-table-column label="手机号码" align="center" prop="mobile" width="120px"/>
<el-table-column label="生日" align="center" prop="birthday" width="120px"/>
<el-table-column label="省" align="center" prop="province"/>
<el-table-column label="市" align="center" prop="city"/>
<el-table-column label="区" align="center" prop="area"/>
<el-table-column label="地区" align="center" prop="province" width="150px">
<template slot-scope="scope">
<span>{{ scope.row.province }}</span><br/>
<span>{{ scope.row.city }}</span><br/>
<span>{{ scope.row.area }}</span>
</template>
</el-table-column>
<el-table-column label="信息完善" align="center" prop="isCompleteInformation">
<template slot-scope="scope">
<span v-show="scope.row.isCompleteInformation == 0"></span>
<span v-show="scope.row.isCompleteInformation == 1"></span>
<span style="color: red" v-show="scope.row.isCompleteInformation == 0"></span>
<span v-show="scope.row.isCompleteInformation == 1"></span>
</template>
</el-table-column>
<el-table-column label="用户注册时间" align="center" prop="createTime" width="200px"/>
<el-table-column label="仪器数量" align="center" prop="devicesNum"/>
<el-table-column label="小程序标签" align="center" prop=""/>
<el-table-column label="企微标签" align="center" prop=""/>
<el-table-column label="小程序标签" align="center" prop="miniProgramTags" width="150px">
<template slot-scope="scope">
<el-tag v-for="item in scope.row.miniProgramTags" :key="item.id">
{{ item.tagName }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="企微标签" align="center" prop="wecomTags" width="150px">
<template slot-scope="scope">
<el-tag v-for="item in scope.row.wecomTags" :key="item.id">
{{ item.tagName }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="是否对接" align="center" prop="is_abutment">
<template slot-scope="scope">
<span v-show="scope.row.isAbutment == 1"></span>
@ -217,7 +233,13 @@
<span v-show="scope.row.isAbutment == 3"></span>
</template>
</el-table-column>
<el-table-column label="积分" align="center" prop="credit"/>
<el-table-column label="积分" align="center" prop="credit">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="viewUserIntegralDetail(scope.row)">
{{ scope.row.credit }}
</el-button>
</template>
</el-table-column>
<el-table-column label="即将过期积分" align="center" prop=""/>
<el-table-column label="用户类型" align="center" prop="userType">
<template slot-scope="scope">
@ -235,7 +257,11 @@
</template>
</el-table-column>
<el-table-column label="消息列表" align="center" prop="">
<span>查看详情</span>
<template slot-scope="scope">
<el-button size="mini" type="text" @click="viewMessageDetail(scope.row)">
查看详情
</el-button>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
@ -541,6 +567,70 @@
<el-button @click="cancelscriptDialog"> </el-button>
</div>
</el-dialog>
<!-- 查看用户消息列表 -->
<el-dialog title="消息记录" :visible.sync="userScriptLogVisible" width="90%"
:before-close="cancelUserScriptLogDialog">
<template>
<el-table :data="userScriptLogQuery.userScriptList" :stripe="true" style="width: 100%">
<el-table-column type="index" width="50"></el-table-column>
<el-table-column prop="messageType" label="消息类型" width="100px">后台消息</el-table-column>
<el-table-column prop="titile" label="标题" width="200"></el-table-column>
<el-table-column prop="content" label="内容"></el-table-column>
<el-table-column prop="isRead" label="状态" width="100">
<template slot-scope="scope">
<span v-show="scope.row.isRead == 0"></span>
<span v-show="scope.row.isRead == 1"></span>
</template>
</el-table-column>
<el-table-column prop="createTime" label="发送时间" width="200"></el-table-column>
<el-table-column prop="status" label="操作" width="100">
<template slot-scope="scope">
<el-button v-show="scope.row.status == 0" size="mini" type="text" @click="delUserScriptLog(scope.row)">
撤销
</el-button>
<el-button v-show="scope.row.status == 1" size="mini" type="text" disabled>已撤销</el-button>
</template>
</el-table-column>
</el-table>
</template>
<pagination
v-show="userScriptLogQuery.total>0"
:total="userScriptLogQuery.total"
:page.sync="userScriptLogQuery.pageNum"
:limit.sync="userScriptLogQuery.pageSize"
@pagination="getUserScriptLogList"
/>
</el-dialog>
<!-- 查看用户积分列表 -->
<el-dialog title="积分记录" :visible.sync="userIntegralLogVisible" width="90%"
:before-close="cancelUserIntegralLogDialog">
<template>
<el-table :data="userIntegralLogQuery.userIntegralLogList" @sort-change="userIntegralSortChang"
:default-sort="{prop: 'createTime', order: 'desc'}" :stripe="true" style="width: 100%">
<el-table-column type="index" width="50"></el-table-column>
<el-table-column prop="source" label="类型" width="100px">
<template slot-scope="scope">
<span v-show="scope.row.source == 0"></span>
<span v-show="scope.row.source == 1"></span>
</template>
</el-table-column>
<el-table-column prop="floatScore" label="变动积分"
:sortable="'custom'" width="100"></el-table-column>
<el-table-column prop="soureId" label="来源ID" width="100"></el-table-column>
<el-table-column prop="remarkContent" label="说明"></el-table-column>
<el-table-column prop="createTime" :sortable="'custom'" label="操作时间" width="200"></el-table-column>
</el-table>
</template>
<pagination
v-show="userIntegralLogQuery.total>0"
:total="userIntegralLogQuery.total"
:page.sync="userIntegralLogQuery.pageNum"
:limit.sync="userIntegralLogQuery.pageSize"
@pagination="getUserIntegralLogList"
/>
</el-dialog>
</div>
</template>
@ -569,7 +659,7 @@ import {
getMiniProgramTagsTree,
scriptTreeSelect,
editRemark, delRemark,
openOrCloseClock, openOrCloseActivity,
openOrCloseClock, openOrCloseActivity, uObtainUserScriptLog, delUserScriptLog, obtainUserIntegralLog,
} from "@/api/system/member";
import Treeselect from "@riophae/vue-treeselect";
import {tagTreeSelect} from "@/api/system/wechatTab";
@ -580,6 +670,23 @@ export default {
components: {Treeselect},
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}],
//
loading: true,
//
@ -671,6 +778,28 @@ export default {
//
scriptContent: null,
},
//
userScriptLogVisible: false,
userScriptLogQuery: {
total: 0,
pageNum: 1,
pageSize: 10,
wxUserId: null,
userScriptList: null,
orderByColumn: "createTime",
isAsc: "desc"
},
//
userIntegralLogVisible: false,
userIntegralLogQuery: {
total: 0,
pageNum: 1,
pageSize: 10,
userIntegralLogList: null,
userId: null,
orderByColumn: "createTime",
isAsc: "desc"
},
//
queryParams: {
pageNum: 1,
@ -822,9 +951,25 @@ export default {
this.batchRemarkVisible = false;
}
},
cancelUserScriptLogDialog() {
this.userScriptLogVisible = false;
this.userScriptLogQuery.total = 0;
this.userScriptLogQuery.pageNum = 1;
this.userScriptLogQuery.pageSize = 10;
this.userScriptLogQuery.wxUserId = null;
this.userScriptLogQuery.userScriptList = null;
},
cancelUserIntegralLogDialog() {
this.userIntegralLogVisible = false;
this.userIntegralLogQuery.total = 0
this.userIntegralLogQuery.pageNum = 1;
this.userIntegralLogQuery.pageSize = 10;
this.userIntegralLogQuery.userId = null;
this.userIntegralLogQuery.userIntegralLogList = null;
},
cancelscriptDialog(isclose) {
this.scriptForm.isCustom = null,
this.scriptForm.scriptName = null;
this.scriptForm.isCustom = null;
this.scriptForm.scriptName = null;
this.scriptForm.titile = null;
this.scriptForm.content = null;
this.scriptForm.tagType = null;
@ -1320,6 +1465,48 @@ export default {
this.download('system/member/export', {
...this.queryParams
}, `member_${new Date().getTime()}.xlsx`)
},
//
viewMessageDetail(row) {
this.userScriptLogQuery.wxUserId = row.id;
this.getUserScriptLogList();
this.userScriptLogVisible = true;
},
//
getUserScriptLogList() {
uObtainUserScriptLog(this.userScriptLogQuery).then(response => {
this.userScriptLogQuery.userScriptList = response.rows;
this.userScriptLogQuery.total = response.total;
});
},
//
delUserScriptLog(row) {
let wxUserScriptLog = {
id: row.id,
status: row.status == 0 ? 1 : 0,
}
delUserScriptLog(wxUserScriptLog).then(Response => {
row.status = wxUserScriptLog.status;
this.$modal.msgSuccess("撤销成功");
})
},
//
viewUserIntegralDetail(row) {
this.userIntegralLogQuery.userId = row.id;
this.getUserIntegralLogList();
this.userIntegralLogVisible = true;
},
//
getUserIntegralLogList() {
obtainUserIntegralLog(this.userIntegralLogQuery).then(Response => {
this.userIntegralLogQuery.userIntegralLogList = Response.rows;
this.userIntegralLogQuery.total = Response.total;
})
},
userIntegralSortChang({column, prop}) {
this.userIntegralLogQuery.orderByColumn = prop;
this.userIntegralLogQuery.isAsc = column.order == 'ascending' ? 'asc' : 'desc';
this.getUserIntegralLogList();
}
}
}

Loading…
Cancel
Save