Commit 61ccec16 by huaying

Merge branch 'feature/9月基础迭代'

# Conflicts:
#	src/components/allCustomers/order-list/order-table.vue
parents cf4ef4ae aa71758b
......@@ -24,6 +24,14 @@ const authCode = {
memberInteractionSwitch: 'memberInteractionSwitch', // 会员成就互动类-开关
memberInteractionSetAmount: 'memberInteractionSetAmount', // 会员成就互动类-配置额度
memberInteractionSetAward: 'memberInteractionSetAward', // 会员成就互动类-配置奖励
//客户列表页面 批量导入中的下拉框数据
importMember: 'importMember', //会员导入
importIncreaseOfPoints: 'importIncreaseOfPoints', //积分增加
importPointDeduction: 'importPointDeduction', //积分扣除
importGradeAdjustment: 'importGradeAdjustment', //等级调整
importServiceStore: 'importServiceStore', //服务门店/专属导购调整
importMappingFreeze: 'importMappingFreeze', //批量冻结会员
importMappingUnfreeze: 'importMappingUnfreeze', //批量解冻会员
};
export default authCode;
......@@ -3971,11 +3971,12 @@
.el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close {
color: #2F54EB; }
.el-dialog__title {
line-height: 24px;
font-size: 18px;
line-height: 22px;
font-size: 16px !important;
font-weight: 500;
color: #303133; }
.el-dialog__body {
padding: 20px 20px 10px 20px;
padding: 10px 20px 10px 20px;
color: #606266;
font-size: 14px; }
.el-dialog__footer {
......@@ -28288,7 +28289,7 @@
left: 0;
bottom: 0;
width: 100%;
height: 2px;
height: 1px;
background-color: #e4e7ed;
z-index: 1; }
.el-tabs__nav-wrap.is-scrollable {
......@@ -4,6 +4,7 @@
<meta charset="utf-8" />
<link rel="shortcut icon" href="./favicon.ico" />
<style href="//at.alicdn.com/t/font_2996579_ubjq74uy5wj.css"></style><!--GIC3.0 客户 -->
<script src="//at.alicdn.com/t/font_2996579_ubjq74uy5wj.js"></script><!--GIC3.0 客户 -->
<!-- 3.0 组件库 -->
<script src="//at.alicdn.com/t/font_2859043_ckil7xvsqi.js"></script>
<!-- <link rel="stylesheet" href="//web-1251519181.file.myqcloud.com/simple-style.1.0.2.css"></link> -->
......
......@@ -55,9 +55,17 @@ let fomatFloat = val => {
}
}
let fomatFloatN = val => {
if (val || val == 0) {
return parseFloat(val).toFixed(2)
} else {
return '';
}
}
let defaultImg = val => {
if(!val) {
return './static/img/default.png'
}
}
export { formatTime,fomatNumber,fomatText,formatYMD,fomatFloat,defaultImg,formatHMS }
export { formatTime,fomatNumber,fomatText,formatYMD,fomatFloat,fomatFloatN,defaultImg,formatHMS }
......@@ -64,7 +64,7 @@
/>
</template>
</el-select>
<el-button v-if="getCodeAuth('memberBatchImport')" :limit-code="getCode('memberBatchImport')" type="primary" @click="batchImport" style="margin-right:5px">批量导入修改</el-button>
<el-button v-if="getCodeAuth('memberBatchImport')" :limit-code="getCode('memberBatchImport')" type="primary" @click="batchImport" style="margin-right:5px">批量导入</el-button>
</el-form-item>
</el-form>
<!-- <div class="action-wrap">
......@@ -137,6 +137,7 @@
</div>
<div class="list-section-table">
<el-table
:max-height="maxHeight"
v-loading="loading"
:data="tableData"
tooltip-effect="dark"
......@@ -153,7 +154,7 @@
:label="memberFieldsName[colum]"
:prop="colum"
show-overflow-tooltip
:min-width="colum==='name' ? 210 : colum == 'status' ? 170 : 150"
:min-width="colum==='name' ? 200 : (colum == 'status' || colum == 'lastCostPaid') ? 170 : (colum == 'lastCostTime' || colum == 'allChannelLastCostTime' || colum == 'costFeePaid' || colum == 'lastCost' || colum == 'allChannelDiscountRate') ? 180 : colum == 'allChannelCostTimes' ? 160 : (colum == 'costAll' || colum == 'allChannelCostAllPaid' || colum == 'allChannelHighCostPaid' || colum == 'highCost' || colum == 'highCostPaid') ? 190 : 150"
:fixed="colum==='name'"
:sortable="['name','grade','status','channel','createCardStoreName','cardNo','forzenStatus','mainStoreName'].includes(colum)?false:isExist[colum]?'custom':false"
>
......@@ -166,7 +167,11 @@
class="basic-info-table"
@click.native="linkDetail(row.memberId)"
>
<img :src="row.thirdImgUrl || defaultImg" class="basic-img" />
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="basic-img" />
<svg v-else aria-hidden="true" class="basic-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<div>
<div class="member-name">
......@@ -247,6 +252,11 @@
<div>{{ row.createTime.split(' ')[0] }}</div>
<div>{{ row.createTime.split(' ')[1] }}</div>
</div>
<!-- 最近消费时间(全渠道) -->
<!-- <div v-else-if="colum == 'allChannelLastCostTime'">
<div>{{ row.allChannelLastCostTime.split(' ')[0] }}</div>
<div>{{ row.allChannelLastCostTime.split(' ')[1] }}</div>
</div> -->
<!-- 关注时间 -->
<div v-else-if="colum == 'attentionDate'">
<div>{{ row.attentionTime.split(' ')[0] }}</div>
......
......@@ -18,17 +18,22 @@
>
<el-form-item label="导入类型" prop="importValue">
<el-select
style="width: 460px"
v-model="formByImport.importValue"
placeholder="请选择导入类型"
@change="handleChangeType"
:disabled="importList.length < 2"
>
<template v-for="item in importList">
<el-option
:label="item.importValue"
:value="item.importType"
v-for="item in importList"
:key="item"
></el-option>
v-if="getCodeAuth(item.btnCode)"
:limit-code="getCode(item.btnCode)"
:key="item">
</el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="选择文件" prop="file" required>
......@@ -39,21 +44,10 @@
<div class="dialogTips">
<h3><i class="el-icon-info"></i><span>导入规则</span></h3>
<p>
1. 通过导入Excel表格的形式变更GIC已存在的会员信息;不支持导入新会员数据
</p>
<p>
2. 仅支持.xlsx 文件的导入;每次导入数据量最多为10000条;文件大小不超过1M
</p>
<p>
3.
导入类型不同,文件模板也不同,请严格按照模板内容填入会员数据,否则将会报错
</p>
<p>
4. 请仔细核对需要变更的会员数据是否准确,否则GIC校验不通过将无法执行成功
</p>
<p>
5.
超管账号支持导入变更全部会员信息,已分权商户的子管理员账号仅可修改管辖范围内的会员信息
1. 不同的导入类型,请下载对应的导入模板,按照模板要求填充内容进行导入。<br/>
2. 每次导入数据最多10000条,文件大小不超过1M。<br/>
3. 请仔细核对需要导入/变更的会员数据是否准确,否则GIC校验不通过将无法执行成功。<br/>
4. 超管账号支持导入/变更全部会员信息,已分权商户的子管理员账号仅可导入/变更管辖范围内的会员信息。
</p>
</div>
<span slot="footer" class="dialog-footer">
......@@ -68,8 +62,10 @@
import url from "@/components/axios/url";
import { checkFalse } from "../../../../static/js/checkStatus";
import { doFetch } from "@/components/axios/api";
import authMethods from "@/mixins/auth";
export default {
mixins: [authMethods],
props: {
dialogVisible: {
type: Boolean,
......@@ -82,11 +78,13 @@ export default {
{
importType: 15,
importValue: "批量冻结会员",
btnCode: 'memberBatchImport'
},
{
importType: 16,
importValue: "批量解冻会员",
},
btnCode: 'memberBatchImport'
}
],
},
},
......@@ -130,6 +128,7 @@ export default {
watch: {
importList:{
handler(n){
n = n.filter(item=> item.btnCode);
let value = '';
if(n && n.length){
value = n[0].importType;
......@@ -167,9 +166,10 @@ export default {
},
// 确认导入
importTable() {
if (this.load) return;
this.$refs.formByImport.validateField("importValue", (err) => {
if (!err) {
// console.log(this.formByImport.fileList);
console.log(this.formByImport.fileList);
let {fileList,importValue} = this.formByImport;
if (fileList.length) {
this.load = true;
......@@ -190,7 +190,9 @@ export default {
this.onDialogImportClosed();
}
}).finally(()=>{
this.load = false;
setTimeout(() => {
this.load = false;
}, 50)
})
} else {
checkFalse("请上传文件");
......@@ -206,8 +208,8 @@ export default {
border: none;
}
.dialogTips {
padding-bottom: 8px;
padding-top: 22px;
padding-bottom: 24px;
padding-top: 20px;
border-top: 1px dashed #DCDFE6;
color: #909399;
h3 {
......@@ -225,6 +227,10 @@ export default {
}
p {
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #909399;
line-height: 20px;
}
}
.success_icon {
......
......@@ -85,7 +85,7 @@ export default {
.table-colum-wrap {
display: flex;
flex-wrap: wrap;
width: 100%;
width: 105%;
.table-colum-item {
flex: 25%;
line-height: 35px;
......
<template>
<el-dialog title="微信转POS" :visible.sync="dialogVisible" custom-class="customer-dialog" @close="cancel" width="420px">
<p style="margin-bottom: 8px">确认将此客户的微信信息删除吗?删除后:</p>
<p style="margin-bottom: 8px">
1、此客户的客户类型将从微信会员转为POS会员;<br/>
2、该客户与微信侧的关联信息将被清除(公众号和小程序);<br/>
3、与该客户相关的数据统计将产生影响如微信会员数、POS转微信会员数等
</p>
<p>删除后不可恢复,请谨慎操作!</p>
<span slot="footer" class="dialog-footer">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="okBtn">确定</el-button>
</span>
</el-dialog>
</template>
<script>
import { doFetchGet } from '../../axios/api';
import url from '../../axios/url';
export default {
props: {
dialogVisible: {
type: Boolean,
default: false,
},
memberId: {
type: String,
default: ''
}
},
data() {
return {
};
},
methods: {
cancel() {
this.$emit('update:dialogVisible', false);
},
okBtn() {
doFetchGet(url.weChantToPos,{mid: this.memberId}).then((res)=>{
if(res.data.errorCode == 0){
this.cancel();
this.$emit('refresh');
this.$message.success('操作成功');
}else{
this.$message.error(res.data.message);
}
})
}
}
};
</script>
<style lang="less">
.customer-dialog {
/deep/.el-dialog__header{
font-size: 16px !important;
}
}
</style>
<style lang="less" scoped>
.customer-dialog {
background: #000000;
opacity: 0.5;
p {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #303133;
line-height: 20px;
}
}
</style>
\ No newline at end of file
......@@ -6,10 +6,13 @@
<h2 class="item-title">
<i class="vertical-line" /><span>{{ section.title }}</span>
</h2>
<el-button type="text" v-if="section.name==='basic' && getCodeAuth('memberEditInfo')"
<div>
<el-button type="text" v-if="section.name==='basic' && getCodeAuth('memberEditInfo')"
@click="baseinfoDialogVisible=true" :limit-code="getCode('memberEditInfo')">
编辑
</el-button>
<el-button type="text" v-if="section.name==='basic' && getCodeAuth('wxToPOS') && member.customerType == 'wxOpenCarMember'" :limit-code="getCode('wxToPOS')" style="margin-left:12px" @click="weChantDialogVisible=true">微信转POS</el-button>
</div>
</div>
<div :class="[section.class]">
<!-- 基本信息 -->
......@@ -29,12 +32,16 @@
<el-image
fit="cover"
class="user-avatar-img"
:src="member.thirdImgUrl ? member.thirdImgUrl : defaultImg"
v-if="member.thirdImgUrl"
:src="member.thirdImgUrl"
>
<div slot="error" class="image-slot">
<img width="120" :src="require('../../../static/img/broke-img.png')" alt="">
</div>
</el-image>
<svg v-else aria-hidden="true" class="user-avatar-img" width="120px" height="120px">
<use xlink:href="#icon-user-default"></use>
</svg>
</div>
</div>
<div class="right">
......@@ -813,6 +820,9 @@
:memberId="memberId"
@refresh="initData"
/>
<!-- 微信转POS弹窗 -->
<wxToPosDialog :dialogVisible.sync="weChantDialogVisible" :memberId="memberId"
@refresh="initData"></wxToPosDialog>
</div>
</template>
<script>
......
......@@ -10,7 +10,6 @@ import { doFetch,doFetchGet } from "../../components/axios/api";
import url from "../../components/axios/url";
import { mapState } from "vuex";
import { formatLongTime, paddingBorth } from "@/utils/utils";
import defaultImg from "../../../static/img/default.png";
import authMethods from "@/mixins/auth";
import {
checkFalse,
......@@ -21,6 +20,7 @@ export default {
name: "allCustomersList",
data() {
return {
maxHeight: '',
selectChannelValue: '',
selectChannelList: {
selectOptions: {
......@@ -37,6 +37,7 @@ export default {
// disabled: false
// },
],
showExpandIcon: false,
props: {
label: 'label',
children: 'children',
......@@ -46,30 +47,42 @@ export default {
searchAble: false,
multipleAble: true
},
isShowClique: '',
importList:[
{
importType: 18,
importValue: "会员导入",
btnCode: 'importMember'
},
{
importType: 11,
importValue: "积分增加",
btnCode: 'importIncreaseOfPoints'
},
{
importType: 12,
importValue: "积分扣除",
btnCode: 'importPointDeduction'
},
{
importType: 13,
importValue: "等级调整",
btnCode: 'importGradeAdjustment'
},
{
importType: 14,
importValue: "服务门店/专属导购调整",
btnCode: 'importServiceStore'
},
{
importType: 15,
importValue: "批量冻结会员",
btnCode: 'importMappingFreeze'
},
{
importType: 16,
importValue: "批量解冻会员",
btnCode: 'importMappingUnfreeze'
},
],
sceneValue: "member", // 人群筛选器场景值
......@@ -115,7 +128,6 @@ export default {
{ value: "mainstore", label: "修改服务门店", code: "memberBatchSetService" },
{ value: "store", label: "修改协管门店", code: "memberBatchSetCustomer" }
],
defaultImg,
integralFlag: "", // 积分调整权限
memberGrade: [], // 商户等级列表
cliqueMemberGrade: [], // 集团等级列表
......@@ -237,22 +249,54 @@ export default {
}
},
created() {
this.$store.commit("mutations-slide", true);
this.initialize();
this.getGradeList();
this.getCliqueGradeList();
this.getMemberSourceList();
let screenHeight = document.documentElement.clientHeight - 293 + 'px';
this.$nextTick(() => {
this.maxHeight = screenHeight;
});
},
mounted() {
this.getcliqueMemberRelation();
this.getFindMemberFields();
this.getAjaxMembers();
this.getEnterpriseInfo();
const that = this;
window.onresize = () => {
return (() => {
let screenHeight = document.documentElement.clientHeight - 293 + 'px';
that.maxHeight = screenHeight;
})();
};
},
activated(){
this.getAjaxMembers();
},
beforUpdate() {},
methods: {
getcliqueMemberRelation() {
doFetchGet(url.cliqueMemberRelation, {}).then((res)=>{
let {errorCode,result} = res.data;
if(errorCode == 0){
this.isShowClique = result || 2;
this.importList = this.importList.map((item, index)=>{
if(this.getCodeAuth(item.btnCode)){
if(item.btnCode == 'importMember' && this.isShowClique == 1) {
return {};
}else {
return item;
}
}else{
return {};
}
})
}
})
},
onSelectTreeChange(data) {
this.customerType = data;
},
......@@ -336,10 +380,14 @@ export default {
tableData = resultData.map(ele => ({
...ele,
avgNumber: ele.avgNumber.toFixed(2),
allChannelLastCostTime:
ele.allChannelLastCostTime != -1
? formatLongTime(ele.allChannelLastCostTime, 2)
: "--", // 最近消费时间(全渠道)
lastCostTime:
ele.lastCostTime != -1
? formatLongTime(ele.lastCostTime, 2)
: "--", // 最近消费时间
: "--", // 最近消费时间(线下)
createTime:
ele.createTime != -1
? formatLongTime(ele.createTime, 1)
......
......@@ -5,12 +5,12 @@ import customermainstoreDialog from './components/customermainstoreDialog.vue';
import customersubstoreDialog from './components/customersubstoreDialog.vue';
import customerlabelDialog from './components/customerlabelDialog.vue';
import IconLabelValue from './components/icon-label-value.vue';
import defaultImg from '../../../static/img/default.png';
import { mapState } from 'vuex';
import url from '../../components/axios/url';
import { doFetch, doFetchqs, doFetchGet } from '../../components/axios/api';
import authMethods from '@/mixins/auth';
import CustomerLog from './components/customerLog.vue';
import wxToPosDialog from './components/wxToPosDialog.vue';
import {
checkFalse,
checkStatus,
......@@ -72,7 +72,6 @@ export default {
// currentPage: 1,
// },
// totalCount: 0,
defaultImg,
labelTabsActive: 'memberTagGroup',
fullscreenLoading: false, // 全局loading
// tableLoading: false, // 用户日志列表loading
......@@ -176,7 +175,9 @@ export default {
},
// { title: '客户日志', name: 'log', class: 'log-info-contain' },
],
marketingRecordNum: 0
marketingRecordNum: 0,
// 微信转POS
weChantDialogVisible: false,
};
},
watch: {
......@@ -517,6 +518,7 @@ export default {
customersubstoreDialog,
customerlabelDialog,
IconLabelValue,
CustomerLog
CustomerLog,
wxToPosDialog,
},
};
......@@ -119,6 +119,9 @@ const urlConfig = {
getFrozenWhiteList: '/api-member/white-member-list',//获取冻结白名单列表
removeFrozenWhiteMember:'/api-member//white-member-remove',// 移出白名单
frozenMemberExportExcel: '/api-admin/frozen-member-export-excel',// 异常会员搜索结果导出
cliqueMemberRelation: '/api-member/clique-member-relation',//判断是否有展示会员导入的权限 1不可,2,null可
weChantToPos: '/api-member/member-change-wechat-member-pos'
}
const defaultUrl = Object.assign({}, urlConfig);
......
......@@ -72,7 +72,10 @@
> </el-table-column>
<el-table-column label="基本信息">
<div slot-scope="{ row }" class="customer-info-cell">
<img :src="row.thirdImgUrl||require('../../../static/img/default.png')" alt="">
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="customer-icon" alt="">
<svg v-else aria-hidden="true" class="customer-icon">
<use xlink:href="#icon-user-default"></use>
</svg>
<p class="memberName">
{{ row.memberName | formatMember }}
</p>
......@@ -179,7 +182,7 @@ export default { ...memberReturn };
.customer-info-cell {
display: flex;
align-items: center;
img {
.customer-icon {
display: block;
width: 60px;
height: 60px;
......
......@@ -141,9 +141,6 @@ export default {
}
},
filters: {
defaultImg: val => {
if(!val) return './static/img/default.png';
},
formatColorSize: val => {
let temp = '';
if(val) {
......
......@@ -108,7 +108,12 @@
<el-table-column prop="clerkImageUrl" label="导购信息" width="260px">
<template slot-scope="scope">
<div class="record-clerk">
<span class="record-clerkimg"><img style="vertical-align: middle" width="60" height="60" :src="scope.row.clerkImageUrl | defaultImg" alt=""></span>
<span class="record-clerkimg">
<img v-if="scope.row.clerkImageUrl" style="vertical-align: middle" width="60" height="60" :src="scope.row.clerkImageUrl" alt="">
<svg v-else aria-hidden="true" width="60px" height="60px">
<use xlink:href="#icon-user-default"></use>
</svg>
</span>
<span class="record-clerkname">{{ scope.row.clerkName }}<br>{{ scope.row.clerkCode }}</span>
</div>
</template>
......@@ -164,7 +169,11 @@
<el-table-column prop="productName" label="商品信息" width="200px">
<template slot-scope="scope">
<div class="record-info">
<div class="record-infoimg"><img width="60" height="60" src="/static/img/default.png" alt=""></div>
<div class="record-infoimg">
<svg aria-hidden="true" width="60px" height="60px">
<use xlink:href="#icon-user-default"></use>
</svg>
</div>
<div class="record-infocontent">
<div>{{ scope.row.productName }}</div>
<div>{{ scope.row.productCode }}</div>
......
......@@ -60,12 +60,12 @@
>
<div class="pointer">
<div class="singelinfo">
<div class="singelinfo-img"><img
width="100"
height="100"
:src="scope.row.thirdImgUrl ? scope.row.thirdImgUrl : './static/img/default.png'"
alt=""
></div>
<div class="singelinfo-img">
<img v-if="scope.row.thirdImgUrl" width="100" height="100" :src="scope.row.thirdImgUrl" alt="">
<svg v-else aria-hidden="true" width="100px" height="100px">
<use xlink:href="#icon-user-default"></use>
</svg>
</div>
<div class="singelinfo-content pLeft10 pRight10">
<span class="lheigth0">{{ scope.row.memberName }}
<span
......@@ -104,13 +104,12 @@
<a class="singelinfo-jlitem">卡券记录 ({{ singleInfo.couponCount }})</a>
</div>
</div>
<span slot="reference" class="member-span"><img
class="tablecontent-cellimg mr6"
width="60"
height="60"
:src="scope.row.thirdImgUrl ? scope.row.thirdImgUrl : './static/img/default.png'"
alt=""
></span>
<span slot="reference" class="member-span">
<img v-if="scope.row.thirdImgUrl" class="tablecontent-cellimg mr6" width="60" height="60" :src="scope.row.thirdImgUrl" alt="">
<svg v-else aria-hidden="true" class="tablecontent-cellimg mr6" width="60px" height="60px">
<use xlink:href="#icon-user-default"></use>
</svg>
</span>
</el-popover>
<span class="fix-block">{{scope.row.memberName}}</span>
</div>
......@@ -159,10 +158,10 @@
:key="index"
>
<div class="basic-info">
<img
:src="item.thirdImgUrl ? item.thirdImgUrl : './static/img/default.png'"
class="list-img"
>
<img v-if="item.thirdImgUrl" :src="item.thirdImgUrl" class="list-img">
<svg v-else aria-hidden="true" class="list-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<span class="txt">{{item.memberName}}</span>
</div>
<i
......
......@@ -5,7 +5,6 @@ import {
checkSuccess
} from "../../../../../static/js/checkStatus";
import authMethods from "@/mixins/auth";
import defaultImg from "../../../../../static/img/default.png";
import { formatLongTime, paddingBorth } from "@/utils/utils";
import FreezeDialog from "../../components/dialog/freeze.vue";
import MemberFieldsDialog from "../../components/dialog/fieldsSettingDialog.vue";
......@@ -76,7 +75,6 @@ export default {
},
dialogMemberFieldVisible: false,
dialogExportFieldVisible: false,
defaultImg,
settingType: 0, // 0未查询 1已设置 2未设置
selectPage: {
type: 0,
......
......@@ -114,7 +114,10 @@
class="basic-info-table"
@click.native="linkDetail(row.memberId)"
>
<img :src="row.thirdImgUrl || defaultImg" class="basic-img" />
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="basic-img" />
<svg v-else aria-hidden="true" class="basic-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<div>
<div class="member-name">
......@@ -227,6 +230,10 @@
<div v-else-if="colum.code == 'lastCostTime'">
<div>{{ row.lastCostTime | formatDate("ymd") }}</div>
</div>
<!-- 最近消费时间(全渠道) -->
<div v-else-if="colum.code == 'allChannelLastCostTime'">
<div>{{ row.allChannelLastCostTime | formatDate("ymd") }}</div>
</div>
<!-- 生日 -->
<div v-else-if="colum.code == 'birthday'">
<div>{{ row.birthdayMD | formatBirth() }}</div>
......
......@@ -263,12 +263,12 @@
>
<template slot-scope="scope">
<div class="record-info">
<div class="record-infoimg"><img
width="60"
height="60"
:src="scope.row.imageUrl ? scope.row.imageUrl : './static/img/default.png'"
alt=""
></div>
<div class="record-infoimg">
<img v-if="scope.row.imageUrl" width="60" height="60" :src="scope.row.imageUrl" alt="">
<svg v-else aria-hidden="true" width="60px" height="60px">
<use xlink:href="#icon-user-default"></use>
</svg>
</div>
<div class="record-infocontent">
<div>{{ scope.row.productName }}</div>
<div>{{ scope.row.productCode }}</div>
......
......@@ -93,7 +93,7 @@ export default {
.table-colum-wrap {
display: flex;
flex-wrap: wrap;
width: 100%;
width: 105%;
.table-colum-item {
flex: 25%;
line-height: 35px;
......
......@@ -5,7 +5,6 @@ import {
checkSuccess
} from "../../../../../static/js/checkStatus";
import authMethods from "@/mixins/auth";
import defaultImg from "../../../../../static/img/default.png";
import { formatLongTime,paddingBorth } from "@/utils/utils";
import FreezeDialog from "../../components/dialog/freeze.vue";
import MemberFieldsDialog from "../../components/dialog/fieldsSettingDialog.vue";
......@@ -53,7 +52,6 @@ export default {
},
dialogMemberFieldVisible: false,
dialogExportFieldVisible: false,
defaultImg,
settingType: 0, // 0未查询 1已设置 2未设置
selectPage: {
type: 0,
......
......@@ -110,7 +110,10 @@
class="basic-info-table"
@click.native="linkDetail(row.memberId)"
>
<img :src="row.thirdImgUrl || defaultImg" class="basic-img" />
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="basic-img" />
<svg v-else aria-hidden="true" class="basic-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<div>
<div class="member-name">
......@@ -222,6 +225,10 @@
<div v-else-if="colum.code == 'lastCostTime'">
<div>{{ row.lastCostTime | formatDate("ymd") }}</div>
</div>
<!-- 最近消费时间(全渠道) -->
<div v-else-if="colum.code == 'allChannelLastCostTime'">
<div>{{ row.allChannelLastCostTime | formatDate("ymd") }}</div>
</div>
<!-- 生日 -->
<div v-else-if="colum.code == 'birthday'">
<div>{{ row.birthdayMD | formatBirth }}</div>
......
......@@ -5,7 +5,6 @@ import {
checkSuccess
} from "../../../../../static/js/checkStatus";
import authMethods from "@/mixins/auth";
import defaultImg from "../../../../../static/img/default.png";
import ImportDialog from "@/components/allCustomers/components/importDialog.vue";
import { formatLongTime } from "@/utils/utils";
export default {
......@@ -23,7 +22,6 @@ export default {
data() {
return {
dialogImportVisible: false,
defaultImg,
searchData: {
pageSize: 20,
currentPage: 1,
......
......@@ -41,7 +41,10 @@
<!-- 基本信息 -->
<el-row type="flex" align="middle" class="basic-info-table"
@click.native="linkDetail(row.memberId)">
<img :src="row.thirdImgUrl || defaultImg" class="basic-img" />
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="basic-img" />
<svg v-else aria-hidden="true" class="basic-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<div>
<div class="member-name">
<span v-if="row.memberName">{{ row.memberName }}</span>
......@@ -98,7 +101,10 @@
</el-row>
<div class="selected-list">
<div class="selected-item" v-for="item in multipleList" :key="item">
<img :src="item.thirdImgUrl || defaultImg" class="user-header" />
<img v-if="item.thirdImgUrl" :src="item.thirdImgUrl || defaultImg" class="user-header" />
<svg v-else aria-hidden="true" class="user-header">
<use xlink:href="#icon-user-default"></use>
</svg>
<div class="user-name">
<span v-if="item.memberName">{{ item.memberName }}</span>
<span class="nick-name" v-if="item.nickName"
......
......@@ -5,7 +5,6 @@ import {
checkSuccess
} from "../../../../../static/js/checkStatus";
import authMethods from "@/mixins/auth";
import defaultImg from "../../../../../static/img/default.png";
import ImportDialog from "@/components/allCustomers/components/importDialog.vue";
import { formatLongTime, paddingBorth } from "@/utils/utils";
import {dateformat} from '@/utils/formatTime';
......@@ -65,7 +64,6 @@ export default {
}
],
dialogImportVisible: false,
defaultImg,
searchData: {
pageSize: 20,
currentPage: 1,
......
......@@ -48,7 +48,10 @@
class="basic-info-table"
@click.native="linkDetail(row.memberId)"
>
<img :src="row.thirdImgUrl || defaultImg" class="basic-img" />
<img v-if="row.thirdImgUrl" :src="row.thirdImgUrl" class="basic-img" />
<svg v-else aria-hidden="true" class="basic-img">
<use xlink:href="#icon-user-default"></use>
</svg>
<div>
<div class="member-name">
<span v-if="row.memberName">{{ row.memberName }}</span>
......
......@@ -3975,8 +3975,9 @@
.el-dialog__headerbtn:focus .el-dialog__close, .el-dialog__headerbtn:hover .el-dialog__close {
color: #2F54EB; }
.el-dialog__title {
line-height: 24px;
font-size: 18px;
line-height: 22px;
font-size: 16px !important;
font-weight: 500;
color: #303133; }
.el-dialog__body {
padding: 20px 20px 10px 20px;
......@@ -28292,7 +28293,7 @@
left: 0;
bottom: 0;
width: 100%;
height: 2px;
height: 1px;
background-color: #e4e7ed;
z-index: 1; }
.el-tabs__nav-wrap.is-scrollable {
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