Commit afa080ce by 曾经

异常会员

parent 943147c8
......@@ -8,6 +8,7 @@ export function doFetchqs(url,option) {
}
export function doFetchGet(url, option) {
option = option || {};
option.requestProject = 'member';
return fetchGet(url, option);
}
......@@ -101,13 +101,14 @@ const urlConfig = {
batchUpdateFrozen: "/api-member/members-batch-update-frozen",
getExceptionList: '/api-member/list-exception-member',
getExceptionMemberList: '/api-member/exception-member-list',
getExceptionFieldsList: '/api-member/',
exceptionMemberExportExcel: '/api-member/exception-Member-export-excel',// 异常会员数据导出
getExceptionMemberList: '/api-member/exception-member-list',// 获取异常列表
exceptionMemberExportExcel: '/api-member/exception-member-export-excel',// 异常会员数据导出
exceptionMemberBatchFrozen: '/api-member/exception-batch-frozen',// 异常会员批量冻结
getAbnormalSetting: '/api-member/exception-config-view',// 异常配置详情
saveAbnormalSetting: '/api-member/exception-config-save',// 保存异常配置
getUnfreezeCount: '/api-member/',// 获取当前选中的异常会员的未冻结数量
getUnfreezeCount: '/api-member/no_froze_member_count',// 获取当前选中的异常会员的未冻结数量
getEnableDownload:'/api-auth/get-enable-download-data-config-by-user'
}
const defaultUrl = Object.assign({}, urlConfig);
......
......@@ -121,7 +121,7 @@
.data-abnormal-page{
position: relative;
text-align: center;
height: 100%;
height: calc(100% - 100px);
padding: 0 30px;
.icon{
margin: 116px auto 30px;
......
<template>
<div class="frozen-list">
<div class="forzen-container" v-if="settingType == 1">
<div class="forzen-container" v-if="settingType == 1 || settingType == 4">
<div class="search">
<div class="top-header">
<h2>异常会员 {{ total }}</h2>
......@@ -25,41 +25,34 @@
<el-option label="冻结" :value="2"></el-option>
</el-select>
</el-row>
<span class="right-btn" style="margin-left: 10px; min-width: 364px;text-align: right;">
<!--
<span
class="right-btn"
style="margin-left: 10px; min-width: 364px; text-align: right"
>
<!--
v-if="getCodeAuth('searchReasultDownload')"
:limit-code="getCode('searchReasultDownload')"
-->
<el-button
icon="el-icon-download"
@click="download"
<el-button icon="el-icon-download" @click="download"
>搜索结果导出</el-button
>
<!--
v-if="getCodeAuth('batchFreeze')"
:limit-code="getCode('batchFreeze')"
-->
<el-button
@click="batchFreeze"
plain
>批量冻结</el-button
>
<el-button @click="batchFreeze" plain>批量冻结</el-button>
<!--
v-if="getCodeAuth('abnormalSetting')"
:limit-code="getCode('abnormalSetting')"
-->
<el-button
type="primary"
@click="toSettingPage"
<el-button type="primary" @click="toSettingPage"
>异常规则配置</el-button
>
</span>
</div>
</div>
<div class="frozen-table">
<div class="frozen-table" v-if="settingType == 1">
<el-table
v-loading="load"
ref="multipleTable"
......@@ -102,7 +95,7 @@
"
:fixed="colum.code === 'name'"
:sortable="colum.isSort ? 'custom' : false"
:sort-orders="['descending','ascending']"
:sort-orders="['descending', 'ascending']"
>
<template slot-scope="{ row }">
<!-- 基本信息 -->
......@@ -117,9 +110,7 @@
<div>
<div>
<span v-if="row.memberName">{{
row.memberName
}}</span>
<span v-if="row.memberName">{{ row.memberName }}</span>
<span class="nick-name" v-if="row.nickName"
>({{ row.nickName }})</span
>
......@@ -305,9 +296,6 @@
>正常</span
>
<span class="dm-status--warning" v-if="row.frozenStatus == 1"
>异常</span
>
<span class="dm-status--warning" v-if="row.frozenStatus == 2"
>冻结</span
>
</div>
......@@ -327,29 +315,21 @@
<el-table-column label="异常原因" min-width="220">
<template slot-scope="{ row }">
<el-popover placement="top-start" width="200" trigger="hover">
<el-row type="flex">
<div class="dm-status--info">{{ row.reason }}</div>
<div>连续两周 每周消费次数大于2次;</div>
</el-row>
<el-row type="flex">
<div class="dm-status--info">{{ row.reason }}</div>
<div>
单笔订单同一SPU不同SKU购买大于等于2件且满足此类情况的订单大于等于3笔
</div>
<el-popover placement="top-start" width="200" trigger="hover" :disabled="!row.exceptionReason">
<el-row type="flex" v-for="(item,index) in (row.exceptionReason||'').split(',')" :key="index">
<div class="dm-status--info"></div>
<div>{{ item }}</div>
</el-row>
<span slot="reference"
>异常原因异常原因异常原因异常原因异常原因异常原因异常原因</span
>{{ row.exceptionReason || '--' }}</span
>
</el-popover>
</template>
</el-table-column>
<el-table-column label="判断异常时间" min-width="150">
<template slot-scope="{ row }">
<div>{{ row.bizData | formatDate("ymd") }}</div>
<div>{{ row.bizData | formatDate("hms") }}</div>
<div>{{ row.judgeTime | formatDate("ymd") }}</div>
<div>{{ row.judgeTime | formatDate("hms") }}</div>
</template>
</el-table-column>
<el-table-column
......@@ -360,7 +340,7 @@
>
<template slot="header">
<span>操作</span>
<i class="el-icon-setting" @click="dialogFieldVisible = true" />
<i class="el-icon-setting" @click="dialogMemberFieldVisible = true" />
</template>
<template slot-scope="{ row }">
<el-button
......@@ -375,7 +355,7 @@
tips="确定解冻?"
@confirm="unfreezeItem(row)"
placement="top-start"
v-if="getCodeAuth('memberFrozen') && row.frozenStatus == 2"
v-if="getCodeAuth('memberFrozen') && row.frozenStatus == 1"
>
<el-button type="text" :limit-code="getCode('memberFrozen')"
>解冻</el-button
......@@ -385,7 +365,7 @@
type="text"
@click="freezeItem(row)"
:limit-code="getCode('memberFrozen')"
v-if="getCodeAuth('memberFrozen') && row.frozenStatus == 1"
v-if="getCodeAuth('memberFrozen') && row.frozenStatus == 0"
>冻结</el-button
>
</template>
......@@ -404,6 +384,27 @@
</dm-pagination>
</div>
</div>
<!-- 已配置,已更新,但是数据异常 -->
<div class="data-abnormal-page" v-else-if="settingType == 4">
<div
class="icon iconfont-components3 icon-cp-warning-circle-fill"
></div>
<div class="title">
根据您当前配置的异常会员条件,系统统计出您商户的“异常会员数量”占比超过总会员数量的3%,请确认您所配置的条件是否合理。
</div>
<div class="subtitle">
(基于行业数据,常规的异常会员占比在大约在0.1%~2%之间)
</div>
<el-button
type="primary"
@click="toSetting"
v-if="getCodeAuth('abnormalSetting')"
:limit-code="getCode('abnormalSetting')"
>重新配置</el-button
>
</div>
</div>
<!-- 未配置 -->
<div class="no-setting-page" v-else-if="settingType == 2">
......@@ -433,49 +434,47 @@
</svg>
<div class="label">列表数据将在次日全量更新</div>
<el-alert class="no-update-alert"
<el-alert
class="no-update-alert"
title="异常会员规则配置已修改,如需解冻此前异常转冻结的会员,可前往冻结会员列表,筛选冻结方式,进行批量解冻"
type="info" :closable="false" show-icon>
type="info"
:closable="false"
show-icon
>
</el-alert>
</div>
</div>
<!-- 已配置,已更新,但是数据异常 -->
<div class="data-abnormal-page" v-else-if="settingType == 4">
<div class="icon iconfont-components3 icon-cp-warning-circle-fill"></div>
<div class="title">
根据您当前配置的异常会员条件,系统统计出您商户的“异常会员数量”占比超过总会员数量的3%,请确认您所配置的条件是否合理。
</div>
<div class="subtitle">
(基于行业数据,常规的异常会员占比在大约在0.1%~2%之间)
</div>
<el-button
type="primary"
@click="toSetting"
v-if="getCodeAuth('abnormalSetting')"
:limit-code="getCode('abnormalSetting')"
>重新配置</el-button
>
</div>
<table-colum-dialog
:dialogVisible.sync="dialogFieldVisible"
:memberFields="memberFields"
<member-fields-dialog
:max="8"
:dialogVisible.sync="dialogMemberFieldVisible"
:fields="memberFields"
@submit="submitMemberFields"/>
<vue-gic-export-excel
:dataArr="frozenList"
:dialogVisible.sync="exportData.dialogVisible"
:type="1"
:excelUrl="exportData.excelUrl"
:params="exportData.params"
:projectName="exportData.projectName"/>
<freeze-dialog
:visible.sync='freezeDialogOptions.visible'
:count='freezeDialogOptions.count'
:isBatchFreeze='freezeDialogOptions.isBatchFreeze'
<export-fields-dialog
:max="20"
:dialogVisible.sync="dialogExportFieldVisible"
:fields="exportFields"
@submit="submitExportFields"
/>
<vue-gic-export-excel
:dataArr="frozenList"
:dialogVisible.sync="exportData.dialogVisible"
:type="exportData.type"
:excelUrl="exportData.excelUrl"
:params="exportData.params"
:projectName="exportData.projectName"
/>
<freeze-dialog
:visible.sync="freezeDialogOptions.visible"
:count="freezeDialogOptions.count"
:isBatchFreeze="freezeDialogOptions.isBatchFreeze"
v-if="freezeDialogOptions.visible"
@submit="sureFreeze"/>
@submit="sureFreeze"
/>
</div>
</template>
......
......@@ -8,22 +8,22 @@
width="600px"
>
<div class="checkwtip mBottom10">
请选择您想显示的列表字段,最多勾选8个选项,已经勾选了 <span
请选择您想显示的列表字段,最多勾选{{ max }}个选项,已经勾选了 <span
class="curcheck"
>{{ checkedFieldsCopy.length }}</span>
</div>
<el-checkbox-group
v-model="checkedFieldsCopy"
class="table-colum-wrap"
:min="0"
:max="8"
:min="min"
:max="max"
>
<el-checkbox
v-for="(item, index) in memberFields"
v-for="(item, index) in fields"
class="table-colum-item"
:key="index"
:label="item"
:disabled="item.code==='name'"
:disabled="item.code==='name' || item.code==='memberName'"
>
{{ item.name }}
</el-checkbox>
......@@ -37,15 +37,11 @@
</template>
<script>
export default {
name: 'TableColumDailog',
name: 'ExportFieldsDialog',
props: {
checkedFields: {
type: Array,
default: () => {
return [];
},
},
memberFields: {
min: 0,
max: 8,
fields: {
type: Array,
default: () => {
return [];
......@@ -65,7 +61,7 @@ export default {
watch: {
dialogVisible (n, o) {
this.visible = n;
if(!(this.memberFields && this.memberFields.length)){
if(!(this.fields && this.fields.length)){
this.$message({
message: "设置异常",
type: "error"
......@@ -73,7 +69,7 @@ export default {
return this.visible = false;
}
if (n) {
this.checkedFieldsCopy = this.memberFields.filter((item)=>{
this.checkedFieldsCopy = this.fields.filter((item)=>{
return item.check
});
}
......@@ -87,7 +83,6 @@ export default {
}).join(','));
},
cancel () {
this.checkedFieldsCopy = [].concat(this.checkedFields);
this.$emit('update:dialogVisible', false);
},
},
......
......@@ -4,7 +4,7 @@
:visible.sync="visible" width="600px" @close="onClose">
<div v-if="isBatchFreeze" class="freeze-tips">
<span>当前已选择</span>
<span class="count"> 20 </span>
<span class="count"> {{ count }} </span>
<span>位未冻结的会员</span>
</div>
<el-form :model="submitData" ref="submitForm" :rules="rules">
......
import { doFetch, doFetchqs } from "@/components/axios/api";
import { doFetch,doFetchGet } from "@/components/axios/api";
import url from "@/components/axios/url";
import {
checkFalse,
......@@ -414,7 +414,8 @@ export default {
// ]
// });
doFetch(url.getAbnormalSetting).then(res => {
doFetchGet(url.getAbnormalSetting).then(res => {
console.log("res--->",res);
let { errorCode, result, message } = res.data || {};
if (errorCode != 0) {
checkFalse(message);
......@@ -437,6 +438,9 @@ export default {
let configsItem = (configs || []).find(item1 => {
return item.configType == item1.configType;
});
if(!configsItem){
return;
}
switch (+item.configType) {
case 1:
item.list.forEach(item1 => {
......@@ -513,7 +517,7 @@ export default {
this.formData = formData;
},
submit(){
doFetchqs(url.saveAbnormalSetting, this.submitData)
doFetch(url.saveAbnormalSetting, this.submitData)
.then(res => {
let { errorCode, message } = res.data || {};
if (errorCode != 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment