Commit 048f73cc by chenyu

update: update

parent 9d7c9c6c
......@@ -8,7 +8,7 @@
style="margin-right: 61px;">客户类型</p>
<el-checkbox-group v-model="customerType"
class="flex-wrap"
@change="customerTypeChange">
@change="onSearch">
<el-checkbox label="notMember">非会员</el-checkbox>
<i class="line"></i>
<p class="label">会员:</p>
......
<template>
<div>
<el-dialog title="编辑基本信息"
custom-class="customer-dailog"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
@close="cancel"
width="600px">
<el-form ref="form"
:model="form"
:rules="rules"
label-width="133px">
<el-form-item label="姓名:"
prop="memberName">
<el-input type="text"
maxlength="10"
show-word-limit
placeholder="请输姓名"
v-model="form.memberName"
style="width: 252px;"></el-input>
</el-form-item>
<el-form-item label="性别:"
prop="memberGender">
<el-select v-model="form.memberGender"
placeholder="请选择"
style="width: 252px;">
<el-option label="男"
:value="1"></el-option>
<el-option label="女"
:value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出生日期:"
prop="memberBirthday">
<el-select v-model="form.birthType"
placeholder="请选择"
style="width: 106px;margin-right:6px;">
<el-option label="阳历"
:value="1"></el-option>
<el-option label="农历"
:value="0"></el-option>
</el-select>
<el-date-picker :clearable="false"
value-format="timestamp"
style="width: 136px;"
v-model="form.memberBirthday"
type="date"
placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="手机号码:"
prop="phoneNumber">
<el-select style="width: 75px;margin-right:6px;"
v-model="form.nationCode">
<el-option v-for="item in nationCodeList"
:key="item.dictCode"
:value="item.dictCode"
:label="item.dictName"></el-option>
</el-select>
<el-input v-model="form.phoneNumber"
style="width: 301px"></el-input>
</el-form-item>
<el-form-item label="原因备注:"
prop="remark">
<el-input type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
style="width: 386px;"></el-input>
</el-form-item>
</el-form>
<span slot="footer"
class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary"
:loading="btnLoading"
@click="submit">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { doFetch } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "baseinfoDialog",
props: {
dialogVisible: {
type: Boolean,
default: false
},
baseInfo: {
type: Object,
default: () => {
return {};
}
},
nationCodeList: {
type: Array,
default: () => {
return [];
}
},
},
data() {
return {
form: {
memberId: '',
memberName: '',
memberGender: null,
memberBirthday: '',
birthType: 1,
remark: '',
phoneNumber: '',
nationCode: ''
},
rules: {
remark: [
{ required: true, message: "请输入原因备注", trigger: "blur" }
]
},
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
},
submit() {
this.$refs[ 'form' ].validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateBaseDetail, Object.assign({}, this.form))
.then(res => {
if (res.data.errorCode === 0) {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
} else {
checkFalse();
this.btnLoading = false;
}
})
.catch(err => {
this.btnLoading = false;
checkStatus(err);
});
} else {
return false;
}
});
},
},
watch: {
dialogVisible(n, o) {
if (n) {
const { memberId,
memberName,
memberGender,
memberBirthday,
birthType,
remark,
phoneNumber,
nationCode } = this.baseInfo;
this.form = Object.assign({}, this.form, {
memberId,
memberName,
memberGender,
memberBirthday,
birthType,
remark,
phoneNumber,
nationCode
});
this.$refs[ 'form' ].clearValidate();
}
}
}
};
</script>
<style lang="less">
// 去除dailog-footer上边框
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
......@@ -57,7 +57,7 @@ import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "tableColumDailog",
name: "gradeDailog",
props: {
dialogVisible: {
type: Boolean,
......@@ -124,7 +124,6 @@ export default {
this.multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
// 批量修改积分
doFetch(url.updateGrade, Object.assign({}, this.form, {
memberIds: this.selectAll == true ? "-1" : memberIdsArr.join(","),
isCurrent: this.selectAll == true ? 2 : this.multipleList.length == this.pageSize ? 1 : 0,
......@@ -192,11 +191,12 @@ export default {
</style>
<style lang="less">
// 去除dailog-footer上边框
.integral-dailog .el-dialog__footer {
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.integral-dailog .el-dialog__body {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
<template>
<div>
<el-dialog title="修改等级"
custom-class="customer-dailog"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
@close="cancel"
width="600px">
<el-form ref="form"
:model="form"
:rules="rules"
label-width="133px">
<el-form-item v-if="showEditClique"
label="等级类型:"
prop="gradeType">
<el-radio v-model="form.isClique"
:label="1"
@change="form.gradeId = ''">集团等级</el-radio>
<el-radio v-model="form.isClique"
:label="0"
@change="form.gradeId = ''">商户等级</el-radio>
</el-form-item>
<el-form-item label="调整后等级:"
prop="gradeId">
<el-select v-model="form.gradeId"
placeholder="请选择"
style="width: 386px;">
<el-option v-for="item in gradeList"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="原因备注:"
prop="remark">
<el-input type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
style="width: 386px;"></el-input>
</el-form-item>
</el-form>
<span slot="footer"
class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary"
:loading="btnLoading"
@click="submit">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { doFetch } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "customergradeDialog",
props: {
dialogVisible: {
type: Boolean,
default: false
},
gradeList: {
type: Array,
default: () => {
return [];
}
},
},
data() {
return {
form: {
gradeId: "",
remark: "",
isClique: 0
},
rules: {
gradeId: [
{ required: true, message: "请选择修改后等级", trigger: "change" }
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
],
},
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
},
submit() {
this.$refs[ 'form' ].validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateBaseDetail, Object.assign({}, this.form))
.then(res => {
if (res.data.errorCode === 0) {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
} else {
checkFalse();
this.btnLoading = false;
}
})
.catch(err => {
this.btnLoading = false;
checkStatus(err);
});
} else {
return false;
}
});
},
},
watch: {
dialogVisible(n, o) {
if (n) {
if (this.showEditClique) {
this.form.isClique = 1;
}
}
}
}
};
</script>
<style lang="less">
// 去除dailog-footer上边框
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
<template>
<div>
<el-dialog title="修改服务门店"
custom-class="customer-dailog"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
@close="cancel"
width="600px">
<el-form ref="form"
:model="form"
:rules="rules"
label-width="133px">
<el-form-item label="服务门店:"
prop="mainStoreId">
<el-select style="width: 386px"
v-model="form.mainStoreId"
filterable
remote
reserve-keyword
placeholder="请输入门店名称/门店code"
@change="getClerckList"
:remote-method="getMainStoreCodeName"
:loading="loading">
<el-option v-for="item in mainstoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId" />
</el-select>
</el-form-item>
<el-form-item label="专属导购:"
prop="mainClerkId">
<el-select v-model="form.mainClerkId"
style="width: 386px">
<el-option v-for="item in clerkOptions"
:key="item.clerkId"
:label="item.clerkName"
:value="item.clerkId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="原因备注:"
prop="remark">
<el-input type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
style="width: 386px;"></el-input>
</el-form-item>
</el-form>
<span slot="footer"
class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary"
:loading="btnLoading"
@click="submit">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { doFetch, doFetchqs, doFetchGet } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "customermainstoreDialog",
props: {
dialogVisible: {
type: Boolean,
default: false
},
mainStoreName: {
type: String,
default: ''
},
mainStoreId: {
type: String,
default: ''
},
mainClerkId: {
type: String,
default: ''
},
},
data() {
return {
form: {
mainStoreIdBak: '', // 修改前的服务门店id
mainStoreId: '',
mainClerkId: '',
remark: '',
optType: 1 // 1服务门店,2协管门店
},
rules: {
mainStoreId: [
{ required: true, message: "请选择服务门店", trigger: "change" }
],
mainClerkId: [
{ required: true, message: "请选择专属导购", trigger: "change" }
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
],
},
mainstoreList: [], // 服务门店列表
clerkOptions: [], // 专属导购列表
loading: false,
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
},
// 服务门店列表
getMainStoreCodeName(val) {
this.loading = true;
doFetchqs(url.storeCodeName, {
searchParam: val,
flag: 1
})
.then(res => {
if (res.data.errorCode === 0) {
this.mainstoreList = res.data.result;
} else {
checkFalse(res.data.message);
}
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.loading = false);
},
// 专属导购列表
getClerckList(v) {
this.clerkOptions = [];
this.form.mainClerkId = '';
doFetchGet(url.getClerkList, {
storeId: v,
requestProject: "member"
}).then(res => {
const { errorCode, message, result = [] } = res.data || {};
if (errorCode != 0) return this.$message.error(message);
this.clerkOptions = result;
});
},
submit() {
this.$refs[ 'form' ].validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateMemberStore, Object.assign({}, this.form))
.then(res => {
if (res.data.errorCode === 0) {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
} else {
checkFalse();
this.btnLoading = false;
}
})
.catch(err => {
this.btnLoading = false;
checkStatus(err);
});
} else {
return false;
}
});
},
},
watch: {
dialogVisible(n, o) {
if (n) {
this.form = Object.assign({}, this.form, { mainStoreIdBak: this.mainStoreId, mainStoreId: this.mainStoreId, mainClerkId: this.mainClerkId });
this.getMainStoreCodeName(this.mainStoreName);
this.getClerckList(this.mainStoreId)
}
}
}
};
</script>
<style lang="less">
// 去除dailog-footer上边框
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
<template>
<div>
<el-dialog title="修改协管门店"
custom-class="customer-dailog"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
@close="cancel"
width="600px">
<el-form ref="form"
:model="form"
:rules="rules"
label-width="133px">
<el-form-item label="协管门店:"
prop="fromSubStoreIds">
<el-select v-model="form.storeIds"
filterable
remote
multiple
class="fromSubStoreIds-select"
style="width:384px;"
:remote-method="getSubStoreList"
placeholder="请输入请输入门店名称/门店code"
v-select-loadmore="getOnlineStore"
@visible-change="(flag) => flag ? getSubStoreList() : ''">
<el-option v-for="item in subStoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"></el-option>
<el-option class="loadmore-loading"
v-if="loading">
<i class="loading-icon"
v-loading="true"></i> 加载中...
</el-option>
</el-select>
</el-form-item>
<el-form-item label="原因备注:"
prop="remark">
<el-input type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
style="width: 386px;"></el-input>
</el-form-item>
</el-form>
<span slot="footer"
class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary"
:loading="btnLoading"
@click="submit">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { doFetch, doFetchqs, doFetchGet } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "customermainstoreDialog",
props: {
dialogVisible: {
type: Boolean,
default: false
},
subStoreList: {
type: Array,
default: () => {
return [];
}
},
},
data() {
return {
form: {
subStoreIdsBak: '', // 修改前的协管门店id
storeIds: [],
remark: '',
optType: 2 // 1服务门店,2协管门店
},
rules: {
subStoreId: [
{ required: true, message: "请选择协管门店", trigger: "change" }
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
],
},
pageParam: {
loading: false,
searchName: '',
currentPage: 1,
pageSize: 20,
totalPage: 1
},
subStoreList: [], // 协管门店列表
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
},
getOnlineStore() {
const { searchName, currentPage, loading, totalPage } = this.pageParam;
if (loading || currentPage >= totalPage) return;
this.pageParam.loading = true;
doFetchqs(url.getOnlineStore, {
currentPage: currentPage + 1,
pageSize: 20,
searchName: searchName
}).then(res => {
const { errorCode, message, result } = res.data || {};
if (errorCode == 0) {
this.subStoreList = this.subStoreList.concat(result.list || []);
this.pageParam.totalPage = result.page.totalPage || 1;
this.pageParam.currentPage = currentPage + 1;
} else {
checkFalse(message);
}
}).finally(() => this.pageParam.loading = false);
},
getSubStoreList(query) {
this.pageParam.searchName = query;
this.pageParam.currentPage = 0;
this.subStoreList = [];
this.getOnlineStore();
},
submit() {
this.$refs[ 'form' ].validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateMemberStore, Object.assign({}, this.form, { storeIds: this.form.storeIds.join(',') }))
.then(res => {
if (res.data.errorCode === 0) {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
} else {
checkFalse();
this.btnLoading = false;
}
})
.catch(err => {
this.btnLoading = false;
checkStatus(err);
});
} else {
return false;
}
});
},
},
watch: {
dialogVisible(n, o) {
if (n) {
let storeIds = this.subStoreList.map(item => item.storeId);
this.form = Object.assign({}, this.form, { storeIds, subStoreIdsBak: storeIds.join(',') });
}
}
}
};
</script>
<style lang="less">
// 去除dailog-footer上边框
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
......@@ -69,7 +69,7 @@ import { doFetch, doFetchqs } from "../../axios/api";
import url from "../../axios/url";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "tableColumDailog",
name: "integralDailog",
props: {
dialogVisible: {
type: Boolean,
......@@ -159,7 +159,6 @@ export default {
this.multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
// 批量修改积分
doFetch(url.updateIntegrals, Object.assign({}, this.form, {
memberIds: this.selectAll == true ? "-1" : memberIdsArr.join(","),
isCurrent: this.selectAll == true ? 2 : this.multipleList.length == this.pageSize ? 1 : 0,
......
......@@ -52,7 +52,7 @@ import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "tableColumDailog",
name: "mainstoreDailog",
props: {
dialogVisible: {
type: Boolean,
......@@ -141,7 +141,6 @@ export default {
this.multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
// 批量修改积分
doFetch(url.updateStore, Object.assign({}, this.form, {
memberIds: this.selectAll == true ? "-1" : memberIdsArr.join(","),
isCurrent: this.selectAll == true ? 2 : this.multipleList.length == this.pageSize ? 1 : 0,
......
......@@ -67,7 +67,7 @@ import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
export default {
name: "tableColumDailog",
name: "substoreDialog",
props: {
dialogVisible: {
type: Boolean,
......@@ -170,7 +170,6 @@ export default {
this.multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
// 批量修改积分
doFetch(url.updateStore, Object.assign({}, this.form, {
fromSubStoreIds: this.form.fromSubStoreIds.join(","),
memberIds: this.selectAll == true ? "-1" : memberIdsArr.join(","),
......@@ -230,11 +229,12 @@ export default {
</style>
<style lang="less">
// 去除dailog-footer上边框
.integral-dailog .el-dialog__footer {
.customer-dailog .el-dialog__footer {
padding-top: 0;
padding-bottom: 20px;
border-top: none !important;
}
.integral-dailog .el-dialog__body {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
......@@ -6,7 +6,8 @@
<div class="customer-info-item">
<div class="info-item-header">
<h2 class="item-title"><i class="line"></i><span>基本信息</span></h2>
<el-button type="text">编辑</el-button>
<el-button type="text"
@click="baseinfoDialogVisible=true">编辑</el-button>
</div>
<div class="basic-info-contain">
<div class="flex-wrap max1600">
......@@ -27,20 +28,29 @@
<el-descriptions :column="3"
labelClassName="info-lebel"
contentClassName="info-content">
<el-descriptions-item label="姓名">kooriookami<span>(昵称:梦奇</span>
<el-descriptions-item label="姓名">{{memberInfo.memberName}}<span>(昵称:{{memberInfo.thirdNickname}}</span>
<el-tag type="success"
class="tag">微信会员</el-tag>
v-if="memberInfo.customerType"
class="tag">{{memberInfo.customerType|customerTypeFilter}}</el-tag><i v-if="memberInfo.status==1"
class="iconfont status-icon icon-weixin1"
title="微信会员"></i><i v-if="memberInfo.wxStatus==1"
class="iconfont status-icon icon-xiaochengxu1"
title="小程序"></i>
</el-descriptions-item>
<el-descriptions-item label="性别">未知</el-descriptions-item>
<el-descriptions-item label="出生日期(阳历)">1991-02-06</el-descriptions-item>
<el-descriptions-item label="手机号">15233659865</el-descriptions-item>
<el-descriptions-item label="常驻城市">未知</el-descriptions-item>
<el-descriptions-item label="关注来源">企业微信</el-descriptions-item>
<el-descriptions-item label="首次关注时间">2021-05-11 16:58:16</el-descriptions-item>
<el-descriptions-item label="达摩同意协议时间">达摩同意协议时间:</el-descriptions-item>
<el-descriptions-item label="性别">{{memberInfo.memberGender|genderFilter}}</el-descriptions-item>
<el-descriptions-item :label="`出生日期(${memberInfo.birthType==0?'农历':'阳历'})`">
{{memberInfo.memberBirthdayValue||'未知'}}</el-descriptions-item>
<el-descriptions-item label="手机号">{{memberInfo.phoneNumber ||'未知'}}</el-descriptions-item>
<el-descriptions-item label="常驻城市">{{memberInfo.memberMainStoreArea||'未知'}}</el-descriptions-item>
<el-descriptions-item label="关注来源">{{memberInfo.attentionChannelDict||'未知'}}</el-descriptions-item>
<el-descriptions-item label="首次关注时间">{{memberInfo.attentionTime|formatTime}}</el-descriptions-item>
<el-descriptions-item label="达摩同意协议时间">
<p style="margin:0;line-height:20px;">访问:2021-05-11 16:59:00</p>
<p style="margin:0;line-height:20px;">登录:2021-05-11 17:03:00</p>
{{memberInfo.memberProtocolInfo.consentPrivacyProtocolTime|formatTime}}</el-descriptions-item>
<el-descriptions-item label="微盟同意协议时间">
<p style="margin:0;line-height:20px;">
访问:{{memberInfo.memberProtocolInfo.visitConsentPrivacyProtocolTime|formatTime}}</p>
<p style="margin:0;line-height:20px;">
登录:{{memberInfo.memberProtocolInfo.loginConsentPrivacyProtocolTime|formatTime}}</p>
</el-descriptions-item>
</el-descriptions>
</div>
......@@ -113,7 +123,8 @@
effect="dark"
open-delay="200"
content="编辑商户会员等级"
placement="top-start"><span class="edit-span"><i class="el-icon-edit"></i></span>
placement="top-start"><span class="edit-span"
@click="gradeDialogVisible=true"><i class="el-icon-edit"></i></span>
</el-tooltip>
</el-descriptions-item>
<el-descriptions-item label="等级到期时间:">2022-05-11 16:59:00</el-descriptions-item>
......@@ -174,7 +185,8 @@
effect="dark"
open-delay="200"
content="修改服务门店"
placement="top-start"><span class="edit-span"><i class="el-icon-edit"></i></span>
placement="top-start"><span class="edit-span"
@click="mainStoreDialogVisible=true"><i class="el-icon-edit"></i></span>
</el-tooltip>
</el-descriptions-item>
<el-descriptions-item label="协管门店">
......@@ -189,7 +201,8 @@
effect="dark"
open-delay="200"
content="修改协管门店"
placement="top-start"><span class="edit-span"><i class="el-icon-edit"></i></span>
placement="top-start"><span class="edit-span"
@click="subStoreDialogVisible=true"><i class="el-icon-edit"></i></span>
</el-tooltip>
</div>
......@@ -210,17 +223,32 @@
<div class="one-line">
<icon-svg v-if="item.icon"
:icon-class="item.icon"
class="svg" />
:class="['svg', item.icon]" />
<img v-else
:src="require('../../../static/img/logo-blue.png')"
alt="">{{item.label}}<i class="el-icon-arrow-right"></i>
</div>
<div class="tow-line">{{memberInfo[item.key]||0}}</div>
<div class="two-line">{{memberInfo[item.key]||0}}</div>
</li>
</ul>
</div>
</div>
</div>
<!-- 基本信息修改弹窗 -->
<baseinfo-dialog :dialogVisible.sync="baseinfoDialogVisible"
:baseInfo="memberInfo"
:nationCodeList="nationCodeList" />
<!-- 等级修改弹窗 -->
<customergrade-dialog :dialogVisible.sync="gradeDialogVisible"
:gradeList="gradeList" />
<!-- 服务门店、专属导购修改弹窗 -->
<customermainstore-dialog :dialogVisible.sync="mainStoreDialogVisible"
:mainStoreName="memberInfo.mainStoreName"
:mainStoreId="memberInfo.mainStoreId"
:mainClerkId="memberInfo.mainClerkId" />
<!-- 协管门店修改弹窗 -->
<customersubstore-dialog :dialogVisible.sync="subStoreDialogVisible"
:subStoreList="memberInfo.shopNames" />
</div>
</template>
<script>
......@@ -340,7 +368,23 @@ export default { ...action };
.tag {
height: 17px;
padding: 0 8px;
margin-right: 13px;
line-height: 17px;
cursor: default;
}
.status-icon {
font-size: 20px;
line-height: 19px;
vertical-align: middle;
&.icon-weixin1 {
color: #28c445;
}
&.icon-xiaochengxu1 {
color: #11c18b;
}
& + .status-icon {
margin-left: 6px;
}
}
}
}
......@@ -498,6 +542,55 @@ export default { ...action };
}
}
}
// 交易记录
.transaction-record-contain {
padding: 20px 20px 30px;
.card-list-wrap {
display: flex;
justify-content: flex-start;
align-items: center;
.card-item {
margin-right: 127px;
cursor: default;
.one-line {
margin-bottom: 10px;
line-height: 20px;
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 20px;
.svg,
img {
margin-right: 6px;
line-height: 20px;
}
.svg {
font-size: 20px;
vertical-align: top;
&.icon-mendianbaojiadan {
color: #5c89ff;
}
}
img {
width: 14px;
vertical-align: middle;
}
.el-icon-arrow-right {
font-size: 14px;
color: #909399;
margin-left: 4px;
}
}
.two-line {
margin-left: 23px;
font-size: 20px;
font-weight: bold;
color: #303133;
line-height: 28px;
}
}
}
}
}
// 描述列表最后一行取消padding
/deep/.el-descriptions {
......@@ -519,6 +612,7 @@ export default { ...action };
}
.el-descriptions-item__container {
flex-wrap: nowrap;
// align-items: center;
.el-descriptions-item__label {
flex-shrink: 0;
}
......@@ -546,4 +640,4 @@ export default { ...action };
}
}
}
</style>
\ No newline at end of file
</style>
import NavPath from "@/common/navbar/navbar.vue";
import tableColumDailog from "./components/tableColumDialog.vue";
import integralDailog from "./components/integralDialog.vue";
import gradeDailog from "./components/gradeDialog.vue";
import gradeDailog from "./components/batchgradeDialog.vue";
import mainstoreDailog from "./components/mainstoreDialog.vue";
import substoreDailog from "./components/substoreDialog.vue";
import batchList from "./components/batchList.vue";
......@@ -329,7 +329,6 @@ export default {
},
// 批量处理
handleFocusBatch(val) {
console.log(val);
if (this.batchValue == "batchImport") {
// 批量导入
this.batchValue = "";
......
import nav from "../../common/navbar/navbar.vue";
import baseinfoDialog from "./components/baseinfoDialog.vue";
import customergradeDialog from "./components/customergradeDialog.vue";
import customermainstoreDialog from "./components/customermainstoreDialog.vue";
import customersubstoreDialog from "./components/customersubstoreDialog.vue";
import defaultImg from "../../../static/img/default.png";
import { mapState } from "vuex";
import url from "../../components/axios/url";
......@@ -24,6 +28,12 @@ export default {
toggleTag: false,
showFieldType: 1, // 1开卡拓展字段 2会员信息字段
showClique: false, // 集团权限
baseinfoDialogVisible: false,
gradeDialogVisible: false,
mainStoreDialogVisible: false,
subStoreDialogVisible: false,
nationCodeList: [], // 手机区号列表
gradeList: [], // 等级列表
assistStoreList: [
"杭州武林银泰",
"杭州城wqeq西银泰",
......@@ -34,10 +44,38 @@ export default {
{ label: "门店消费", icon: "icon-mendianbaojiadan", key: "1" },
{ label: "达摩商城", icon: "", key: "1" },
{ label: "微盟订单", icon: "icon-weimeng", key: "1" },
{ label: "其他订单", icon: "icon-dingdan", key: "1" },
{ label: "其他订单", icon: "icon-dingdan-copy", key: "1" }
]
};
},
filters: {
customerTypeFilter: v => {
switch (v) {
case "wxOpenCarMember":
return "微信会员";
break;
case "posMember":
return "POS会员";
break;
default:
return "非会员";
break;
}
},
genderFilter: v => {
switch (v) {
case 1:
return "男";
break;
case 2:
return "女";
break;
default:
return "未知";
break;
}
}
},
computed: {
...mapState(["showEditClique"])
},
......@@ -48,19 +86,21 @@ export default {
mounted() {
this.initData();
this.getEnterpriseInfo();
this.getcodeList();
this.getGradeList();
},
methods: {
updateImgUrl() {},
initData() {
this.loading = true;
doFetch(url.memberDetail, {
doFetch(url.memberLoadBaseDetail, {
memberId: this.memberId,
pageName: this.pageName
})
.then(res => {
if (res.data.errorCode === 0) {
const ret = res.data.result;
this.memberInfo = ret.memberInfo;
this.memberInfo = Object.assign({}, ret.member);
} else {
checkFalse(res.data.message);
return false;
......@@ -71,6 +111,26 @@ export default {
})
.finally(_ => (this.loading = false));
},
// 更新头像
updateImgUrl() {
doFetch(url.updateImgUrl, {
memberId: this.memberId
})
.then(res => {
if (res.data.errorCode === 0) {
checkSuccess();
const ret = res.data.result;
this.memberInfo = Object.assign({}, this.memberInfo, {
thirdImgUrl: !!ret.thirdImgUrl ? ret.thirdImgUrl : ""
});
} else {
checkFalse(res.data.message);
}
})
.catch(err => {
checkStatus(err);
});
},
// 集团配置
getEnterpriseInfo() {
doFetchqs(url.enterpriseInfo).then(res => {
......@@ -78,9 +138,49 @@ export default {
this.showClique = res.data.result.enterpriseInfo.showClique;
}
});
}
},
// 手机区号列表
getcodeList() {
doFetch(url.codeList)
.then(res => {
if (res.data.errorCode === 0) {
this.nationCodeList = res.data.result.nationCodeList.map(item => {
item.dictName += ` +${item.dictCode}`;
return {
dictName: item.dictName,
dictCode: item.dictCode
};
});
} else {
checkFalse(res.data.message);
}
})
.catch(err => {
checkStatus(err);
});
},
// 等级列表
getGradeList() {
doFetch(url.gradeList)
.then(res => {
if (res.data.errorCode === 0) {
this.gradeList = res.data.result || [];
} else {
checkFalse(res.data.message);
return false;
}
})
.catch(err => {
checkStatus(err);
});
},
},
components: {
"v-nav": nav
"v-nav": nav,
baseinfoDialog,
customergradeDialog,
customermainstoreDialog,
customersubstoreDialog
}
};
......@@ -65,6 +65,7 @@ const urlConfig = {
integralOperateType: '/api-member/member-integral-operate-type',//积分操作类型(字典列表)
memberIntegralUpdate: '/api-member/member-integral-update', //调整积分进行保存
enterpriseInfo: '/api-member/enterprise-info',//获取企业配置信息
memberLoadBaseDetail: '/api-member/member-load-base-detail',//获取客户配置信息
posInfo: '/api-member/member-load-member-pos-info',//pos会员详情 会员信息
posBaseDetail: '/api-member/member-load-update-pos-base-detail',//修改pos会员基本信息
batchUpdateStore: '/api-member/batch-update-members-store', // 回收站修改主门店
......
......@@ -54,7 +54,6 @@ export const constantRouterMap = [
component: _import("allCustomers", "customerDetail"),
meta: {
title: "客户详情",
keepAlive: true
}
},
{
......
......@@ -55,6 +55,12 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe68c;</span>
<div class="name">微信取关</div>
<div class="code-name">&amp;#xe68c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe689;</span>
<div class="name">积分</div>
<div class="code-name">&amp;#xe689;</div>
......@@ -529,6 +535,12 @@
</li>
<li class="dib">
<span class="icon iconfont">&#xeb5a;</span>
<div class="name">订单</div>
<div class="code-name">&amp;#xeb5a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe660;</span>
<div class="name">订单</div>
<div class="code-name">&amp;#xe660;</div>
......@@ -1722,9 +1734,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1636946760530') format('woff2'),
url('iconfont.woff?t=1636946760530') format('woff'),
url('iconfont.ttf?t=1636946760530') format('truetype');
src: url('iconfont.woff2?t=1637055326075') format('woff2'),
url('iconfont.woff?t=1637055326075') format('woff'),
url('iconfont.ttf?t=1637055326075') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
......@@ -1751,6 +1763,15 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-weixinquguan"></span>
<div class="name">
微信取关
</div>
<div class="code-name">.icon-weixinquguan
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jifen1"></span>
<div class="name">
积分
......@@ -2462,6 +2483,15 @@
</li>
<li class="dib">
<span class="icon iconfont icon-dingdan-copy"></span>
<div class="name">
订单
</div>
<div class="code-name">.icon-dingdan-copy
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-dingdan"></span>
<div class="name">
订单
......@@ -4254,6 +4284,14 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-weixinquguan"></use>
</svg>
<div class="name">微信取关</div>
<div class="code-name">#icon-weixinquguan</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jifen1"></use>
</svg>
<div class="name">积分</div>
......@@ -4886,6 +4924,14 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-dingdan-copy"></use>
</svg>
<div class="name">订单</div>
<div class="code-name">#icon-dingdan-copy</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-dingdan"></use>
</svg>
<div class="name">订单</div>
......
@font-face {
font-family: "iconfont"; /* Project id 688955 */
src: url('iconfont.woff2?t=1636946760530') format('woff2'),
url('iconfont.woff?t=1636946760530') format('woff'),
url('iconfont.ttf?t=1636946760530') format('truetype');
src: url('iconfont.woff2?t=1637055326075') format('woff2'),
url('iconfont.woff?t=1637055326075') format('woff'),
url('iconfont.ttf?t=1637055326075') format('truetype');
}
.iconfont {
......@@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-weixinquguan:before {
content: "\e68c";
}
.icon-jifen1:before {
content: "\e689";
}
......@@ -329,6 +333,10 @@
content: "\e643";
}
.icon-dingdan-copy:before {
content: "\eb5a";
}
.icon-dingdan:before {
content: "\e660";
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -6,6 +6,13 @@
"description": "",
"glyphs": [
{
"icon_id": "25735940",
"name": "微信取关",
"font_class": "weixinquguan",
"unicode": "e68c",
"unicode_decimal": 59020
},
{
"icon_id": "25698898",
"name": "积分",
"font_class": "jifen1",
......@@ -559,6 +566,13 @@
"unicode_decimal": 58947
},
{
"icon_id": "25750336",
"name": "订单",
"font_class": "dingdan-copy",
"unicode": "eb5a",
"unicode_decimal": 60250
},
{
"icon_id": "10094849",
"name": "订单",
"font_class": "dingdan",
......
No preview for this file type
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