From ccf6a0bc014d86290efffc55cbea9cf3dc860d56 Mon Sep 17 00:00:00 2001
From: queenwuli <942534046@qq.com>
Date: Wed, 23 Dec 2020 16:19:23 +0800
Subject: [PATCH] 会员编辑,新增联调
---
hive-app/common/styles/index.css | 2
hive-app/pages/workbench/selectCustomer.vue | 57 ++++-
hive-app/components/filterDropdown/index.vue | 73 +++++-
hive-app/static/images/no-data.png | 0
hive-app/pages/member/index.vue | 227 ++++++++++++++-----
hive-app/pages/member/detail.vue | 55 +++--
hive-app/pages/workbench/customerInfo.vue | 32 +-
hive-app/components/searchBar/index.vue | 10
hive-app/pages/member/editMember.vue | 161 +++++++++++---
9 files changed, 455 insertions(+), 162 deletions(-)
diff --git a/hive-app/common/styles/index.css b/hive-app/common/styles/index.css
index 6482a8e..4a2e383 100644
--- a/hive-app/common/styles/index.css
+++ b/hive-app/common/styles/index.css
@@ -109,7 +109,7 @@
color: #a5abaf;
}
.light-gray{
- color: #a7a7a7;
+ color: #d8d6d6;
}
.dark-gray{
color: #3a3f3f;
diff --git a/hive-app/components/filterDropdown/index.vue b/hive-app/components/filterDropdown/index.vue
index abd303c..b73b26e 100644
--- a/hive-app/components/filterDropdown/index.vue
+++ b/hive-app/components/filterDropdown/index.vue
@@ -2,21 +2,26 @@
<view :class="isShow?'dropdown-wrap-open':'dropdown-wrap-close'">
<view class="mask" @touchmove.stop.prevent="moveHandle" @click.stop="hide">
<view v-if="type===1" class="dropdown-wrap-con">
- <view v-for="(item, index) in list" class="flex justify-between">
- <text :class="index===0?'blue':''">{{item}}</text>
- <text v-if="index===0" class="iconfont icongouxuan blue font-18"></text>
+ <view v-for="(item, index) in list" class="flex justify-between" @click="_changeItem(item, index)">
+ <text :class="selectIndex==index?'blue':''">{{item.title}}</text>
+ <text v-if="selectIndex==index" class="iconfont icongouxuan blue font-18"></text>
</view>
</view>
<view v-else class="all-screen-wrap">
- <view v-for="(item, index) in list" class="all-screen">
+ <view v-for="(item, index) in list" class="all-screen" @click.stop="show">
<text class="title">{{item.title}}</text>
<view>
- <text v-for="op in item.list" class="name">{{op.title}}</text>
+ <text class="name"
+ v-for="op in item.list"
+ :class="_handleActiveClass(item, op)"
+ @click="_chooseItem(item, op)">
+ {{op.title}}
+ </text>
</view>
</view>
<view class="btn-group">
- <text class="btn">重置</text>
- <text class="btn btn-blue">完成</text>
+ <text class="btn" @click="_reset">重置</text>
+ <text class="btn btn-blue" @click="_confirm">完成</text>
</view>
</view>
</view>
@@ -31,25 +36,58 @@
},
type: {
default: 1 //0表示全部筛选
+ },
+ filterKey: {
+ default: {}
}
},
data(){
return {
- isShow: false
+ isShow: false,
+ selectItem: {},
+ selectIndex: 0
}
},
created() {
-
+ this.init();
},
methods:{
moveHandle(){
+ },
+ init(){
+ this.selectItem = JSON.parse(JSON.stringify(this.filterKey));
},
show(){
this.isShow = true;
},
hide(){
this.isShow = false
+ },
+ // 普通下拉选择
+ _changeItem(item, index){
+ this.selectIndex = index;
+ this.$emit('confirm', item);
+ },
+
+ // 处理选项选中/不选中状态class
+ _handleActiveClass(item, option){
+ return this.selectItem[item.key] == option.value?'active':'';
+ },
+ // 选中筛选条件
+ _chooseItem(item, option){
+ if(this.selectItem[item.key] === option.value){
+ this.selectItem[item.key] = ''
+ } else {
+ this.selectItem[item.key] = option.value;
+ }
+ },
+ _reset(){
+ this.init();
+ this.$emit('reset');
+ },
+ _confirm(){
+ this.$emit('confirm', this.selectItem);
}
}
}
@@ -72,7 +110,7 @@
}
.dropdown-wrap-con{
background: #FFFFFF;
- padding: 10px 10px;
+ padding: 5px 10px 10px;
font-size: 14px;
line-height: 32px;
color: #999999;
@@ -86,20 +124,25 @@
.all-screen .title{
display: block;
font-size: 14px;
- padding: 10px 0;
+ padding: 5px 0 10px;
color: #666666;
}
.all-screen .name{
- font-size: 12px;
+ font-size: 10px;
background: #F2f2f2;
color: #666666;
- padding: 5px 10px;
- min-width: 56px;
+ padding: 5px 0;
+ width: 160rpx;
+ box-sizing: border-box;
text-align: center;
display: inline-block;
margin-right: 10px;
border-radius: 2px;
- margin-bottom: 5px;
+ margin-bottom: 8px;
+ }
+ .all-screen .name.active{
+ background: #518EFF;
+ color: #FFFFFF;
}
.btn-group{
display: flex;
diff --git a/hive-app/components/searchBar/index.vue b/hive-app/components/searchBar/index.vue
index 46f5ca2..8a5890e 100644
--- a/hive-app/components/searchBar/index.vue
+++ b/hive-app/components/searchBar/index.vue
@@ -1,7 +1,7 @@
<template>
<view class="search-group">
<text class="iconfont iconsousuo"></text>
- <input class="uni-input" confirm-type="search" :placeholder=placeholder placeholder-class="placeholder" />
+ <input class="uni-input" confirm-type="search" @confirm="confirm" :placeholder="placeholder" placeholder-class="placeholder" />
</view>
</template>
@@ -9,13 +9,19 @@
export default {
props:{
placeholder: {
- default: '输入会员姓名、手机号、编号查询'
+ default: '输入会员姓名、手机号、会员编号、拼音'
}
},
data() {
return {
};
+ },
+ methods:{
+ confirm(e){
+ this.$emit('confirm', e.detail.value);
+ }
}
+
}
</script>
diff --git a/hive-app/pages/member/detail.vue b/hive-app/pages/member/detail.vue
index 3b2a115..29c4d53 100644
--- a/hive-app/pages/member/detail.vue
+++ b/hive-app/pages/member/detail.vue
@@ -2,11 +2,11 @@
<!-- 会员详情 -->
<view>
<view class="header flex flex-v align-center">
- <image class="header-img" src="../../static/images/head-img.jpg"></image>
- <text class="font-18 mt-5">333</text>
- <text class="font-14 mt-5">会员编号: 101010</text>
+ <image class="avatar" :src="memberInfo.photo?memberInfo.photo:'../../static/images/default-avatar.png'"></image>
+ <text class="font-18 mt-5">{{memberInfo.vipName}}</text>
+ <text class="font-14 mt-5">会员编号: {{memberInfo.vipNo}}</text>
<view class="flex align-center mt-5">
- <text class="font-12 mr-10">{{handlePhone(15569216885)}}</text>
+ <text class="font-12 mr-10">{{handlePhone(memberInfo.phone)}}</text>
<text class="icon iconfont" :class="isHidePhone?'iconyanjing':'iconyanjing1'" @click="isHidePhone=!isHidePhone"></text>
</view>
<view class="flex mt-10">
@@ -21,21 +21,21 @@
<view class="content">
<view class="content-row flex justify-around">
<view class="center">
- <text class="font-18 red">600.00</text>
+ <text class="font-18 red">{{memberInfo.totalBalance}}</text>
<text class="font-14 mt-10 block">余额</text>
</view>
<view class="center">
- <text class="font-18 green">600.00</text>
+ <text class="font-18 green">{{memberInfo.giftBalance}}</text>
<text class="font-14 mt-10 block">赠送余额</text>
</view>
<view class="center">
- <text class="font-18 blue">600.00</text>
+ <text class="font-18 blue">{{memberInfo.totalShopping}}</text>
<text class="font-14 mt-10 block">累计消费</text>
</view>
</view>
<view class="content-row flex flex-wrap">
<view class="detail-item">
- <navigator url="./editMember" hover-class="none" >
+ <navigator :url="'./editMember?id='+id" hover-class="none" >
<image class="detail-icon" mode="aspectFit" src="../../static/images/member-detail1.png"></image>
<text class="mt-5">会员信息</text>
</navigator>
@@ -97,35 +97,46 @@
export default{
data(){
return{
- isHidePhone: true
+ isHidePhone: true,
+ id: '',
+ memberInfo: {}
}
},
+ onLoad(options) {
+ this.id = options.id;
+ },
+ onShow() {
+ this.loadMemberInfo()
+ },
methods:{
+ loadMemberInfo(){
+ this.$httpUtils.request('/api/vip/findVipInfoById/'+this.id).then((res) => {
+ if(res.status == 200){
+ this.memberInfo = res.mapInfo.vipInfo;
+ }
+ })
+ },
handlePhone(val){
if(this.isHidePhone){
return this.$utils.encryptAccount(val);
}
return val;
},
+ // 打电话
call(){
uni.makePhoneCall({
- phoneNumber: '15200889645',
- success: (res) => {
-
- },
- fail: (err) => {
-
- }
+ phoneNumber: this.memberInfo.phone
})
},
+ // 发信息
sendMessage(){
// #ifdef APP-PLUS
let msg = plus.messaging.createMessage(plus.messaging.TYPE_SMS);
- msg.to = ['15200889645'];
- msg.body = 'This is HTML5 Plus example test message';
+ msg.to = [this.memberInfo.phone];
+ msg.body = '';
plus.messaging.sendMessage(msg);
// #endif
- }
+ },
}
}
</script>
@@ -142,9 +153,9 @@
border-bottom-right-radius: 20px;
padding: 0 15px 15px;
}
- .header-img{
- width: 80px;
- height: 80px;
+ .avatar{
+ width: 60px;
+ height: 60px;
border-radius: 50%;
}
.icon-box{
diff --git a/hive-app/pages/member/editMember.vue b/hive-app/pages/member/editMember.vue
index 015989f..d86f5d4 100644
--- a/hive-app/pages/member/editMember.vue
+++ b/hive-app/pages/member/editMember.vue
@@ -1,20 +1,24 @@
<template>
<view class="container">
- <form @submit="add">
+ <form @submit="submit" id="list">
<view class="input-group-row">
<text class="label">会员姓名<text class="require">*</text></text>
- <input name="account" type="text" value="" placeholder="请填写会员姓名" placeholder-class='placeholder'/>
+ <input name="vipName" v-model="formData.vipName" type="text" maxlength="20" placeholder="请填写会员姓名" placeholder-class='placeholder'/>
+ </view>
+ <view class="input-group-row">
+ <text class="label">会员编号<text class="require">*</text></text>
+ <input name="vipNo" v-model="formData.vipNo" type="text" maxlength="10" placeholder="请填写会员编号" placeholder-class='placeholder'/>
</view>
<view class="input-group-row">
<text class="label">手机号码<text class="require">*</text></text>
- <input name="account" type="number" value="" placeholder="请填写手机号码" placeholder-class='placeholder'/>
+ <input name="phone" v-model="formData.phone" type="number" maxlength="11" placeholder="请填写手机号码" placeholder-class='placeholder'/>
</view>
<view class="input-group-row">
<text class="label">性别<text class="require">*</text></text>
<view class="right-text">
- <radio-group @change="sexChange">
- <label><radio name="sex" value="1" color="#518EFF" class="radio" checked/>男</label>
- <label><radio name="sex" value="2" color="#518EFF" class="radio"/>女</label>
+ <radio-group name="sex">
+ <label><radio value="男" color="#518EFF" class="radio" :checked="formData.sex==='男'"/>男</label>
+ <label><radio value="女" color="#518EFF" class="radio" :checked="formData.sex==='女'"/>女</label>
</radio-group>
</view>
</view>
@@ -22,27 +26,26 @@
<text class="label">生日</text>
<view class="right-text">
<picker mode="date" @change="dateChange" :end="endDate">
- <view>{{birthday}}</view>
+ <text :class="formData.birthday?'':'gray'">{{formData.birthday?formData.birthday:'请选择生日'}}</text>
</picker>
</view>
</view>
<view class="input-group-row">
<text class="label">省市区</text>
<view @click="openAddres" class="right-text">
- <text v-if="regionText">{{regionText}}</text>
- <text v-else class="gray">请选择省市区</text>
+ <text :class="formData.areas?'':'gray'">{{formData.areas?formData.areas:'请选择省市区'}}</text>
</view>
</view>
<view class="input-group-row">
<text class="label">详细地址</text>
- <input name="account" type="text" value="" placeholder="请填写详细地址" placeholder-class='placeholder'/>
+ <input name="address" v-model="formData.address" type="text" value="" placeholder="请填写详细地址" placeholder-class='placeholder'/>
</view>
<view class="input-group-row">
<text class="label">到店途径</text>
<view class="right-text">
- <picker mode="selector" :range="wayList" @change="wayChange">
+ <picker mode="selector" range-key="value" :range="arrivalWayList" @change="wayChange">
<view>
- {{way}}
+ <text :class="formData.arrivalWay?'':'gray'">{{formData.arrivalWay?formData.arrivalWay:'请选择到店途径'}}</text>
<text class="iconfont iconjiantouarrow486 gray"></text>
</view>
</picker>
@@ -51,9 +54,9 @@
<view class="input-group-row">
<text class="label">推荐人</text>
<view class="right-text">
- <picker mode="selector" :range="referrerList" @change="referrerChange">
+ <picker mode="selector" range-key="vipName" :range="referrerList" @change="referrerChange">
<view>
- {{referrer}}
+ <text :class="recommendName?'':'gray'">{{recommendName?recommendName:'请选择推荐人'}}</text>
<text class="iconfont iconjiantouarrow486 gray"></text>
</view>
</picker>
@@ -61,16 +64,15 @@
</view>
<view class="input-group-row">
<text class="label">备注</text>
- <input name="account" type="text" value="" placeholder="请填写备注" placeholder-class='placeholder'/>
+ <input name="remark" v-model="formData.remark" maxlength="60" type="text" placeholder="请填写备注" placeholder-class='placeholder'/>
</view>
<view class="input-group-row">
<text class="label">标签</text>
<view class="right-text">
- <text class="tag">大方<text class="iconfont iconguanbi gray"></text></text>
- <text class="tag">大方<text class="iconfont iconguanbi gray"></text></text>
+ <!-- <text class="tag">大方<text class="iconfont iconguanbi gray"></text></text> -->
</view>
</view>
- <button type="submit" class="blue-btn sticky-footer">保存</button>
+ <button form-type="submit" :disabled="isDisabled" class="blue-btn sticky-footer">保存</button>
</form>
<region ref="simpleAddress" @onConfirm="addressChange" themeColor="#518EFF" cancelColor="#8c9fad"></region>
</view>
@@ -84,20 +86,36 @@
},
data(){
return {
- birthday: '1990-01-02',
- regionText: '',
- wayList: ['美团','户外广告'],
- way: '美团',
- referrerList: ['张三'],
- referrer: '张三'
+ formData: {
+ vipName: '',
+ vipNo: '',
+ phone: '',
+ sex: '女',
+ birthday: '',
+ areas: '',
+ address: '',
+ arrivalWay: '',
+ recommendId: '',
+ remark: '',
+ labels: []
+ },
+ id: '',
+ isDisabled: false,
+ arrivalWayList: [],
+ referrerList: [],
+ recommendName: ''
}
},
onLoad(options) {
if(options.id){
+ this.id = options.id;
uni.setNavigationBarTitle({
title: '编辑会员'
});
+ this.getMemberInfo()
}
+ this.loadArrivalWayList();
+ this.loadReferrerList();
},
computed: {
endDate() {
@@ -105,15 +123,48 @@
}
},
methods:{
- add(){
-
+ // 加载到店途径列表
+ loadArrivalWayList(){
+ this.$httpUtils.request('/api/vip/findArrivalWayList').then((res) => {
+ if(res.status == 200){
+ this.arrivalWayList = res.rows;
+ }
+ })
},
- sexChange(e){
- console.log(e)
+ // 加载推荐人列表
+ loadReferrerList(){
+ this.$httpUtils.request('/api/vip/findAllVipInfo').then((res) => {
+ if(res.status == 200){
+ this.referrerList = res.rows;
+ if(this.id){
+ for(var i in this.referrerList){
+ if(this.referrerList[i].id === this.formData.recommendId){
+ this.recommendName = this.referrerList[i].vipName;
+ break;
+ }
+ }
+ }
+ }
+ })
+ },
+ // 查询会员详情
+ getMemberInfo(){
+ this.$httpUtils.request('/api/vip/findVipInfoDetailById/'+this.id).then((res) => {
+ if(res.status == 200){
+ const result = res.mapInfo.vipInfo;
+ const {province, city, area} = result;
+ for(var key in this.formData){
+ this.formData[key] = result[key];
+ }
+ let arr = [province, city, area].filter((item) => {
+ return item
+ })
+ this.formData.areas = arr.join('-')
+ }
+ })
},
dateChange(e){
- this.birthday = e.detail.value;
- console.log(e)
+ this.formData.birthday = e.detail.value;
},
getDate(type) {
const date = new Date();
@@ -132,14 +183,56 @@
this.$refs.simpleAddress.open();
},
addressChange(e){
- this.regionText = e.labelArr.join(' ');
+ this.formData.areas = e.labelArr.join('-');
},
wayChange(e){
- this.way = this.wayList[e.detail.value];
+ this.formData.arrivalWay = this.arrivalWayList[e.detail.value].value;
},
referrerChange(e){
- this.referrer = this.referrerList[e.detail.value];
- }
+ this.formData.recommendId = this.referrerList[e.detail.value].id;
+ this.recommendName = this.referrerList[e.detail.value].vipName;
+ },
+ valid(){
+ const {vipName, vipNo, phone, sex} = this.formData;
+ if(!vipName){
+ this.$toast.info('请填写会员姓名');
+ return false;
+ }
+ if(!vipNo){
+ this.$toast.info('请填写会员编号');
+ return false;
+ }
+ if(!this.$utils.checkPhone(phone)){
+ this.$toast.info('请填写正确的手机号码');
+ return false;
+ }
+ if(!sex){
+ this.$toast.info('请选择性别');
+ return false;
+ }
+ },
+ submit(e){
+ let url = '';
+ if(this.valid() === false){
+ return;
+ }
+ this.isDisabled = true;
+ if(this.id){
+ url = '/api/vip/modifyVip';
+ Object.assign(this.formData, {vipId: this.id})
+ } else {
+ url = '/api/vip/addVip';
+ }
+ this.$httpUtils.request(url, this.formData, 'POST').then((res) => {
+ if(res.status == 200){
+ uni.navigateBack()
+ }
+ this.$toast.info(res.info);
+ this.isDisabled = false;
+ }).catch(() => {
+ this.isDisabled = false;
+ })
+ },
}
}
</script>
diff --git a/hive-app/pages/member/index.vue b/hive-app/pages/member/index.vue
index d03f6d2..e397c34 100644
--- a/hive-app/pages/member/index.vue
+++ b/hive-app/pages/member/index.vue
@@ -3,33 +3,33 @@
<!-- #ifndef H5 -->
<view class="status_bar"></view>
<!-- #endif -->
- <search-bar></search-bar>
+ <search-bar @confirm="search"></search-bar>
<view class="sort-wrap">
- <view @click="filterCustom(1)">
- <text>本月到店次数</text>
+ <view @click="showFilterCustom(1)">
+ <text>{{filterText}}</text>
<text class="iconfont iconjiantouarrow486 gray"></text>
</view>
- <view @click="filterCustom(3)">
+ <view @click="showFilterCustom(2)">
<text>筛选</text>
<text class="iconfont iconshaixuan gray"></text>
</view>
</view>
- <filter-dropdown ref="filterDropdownEl" :list="filterList" :type="filterType"></filter-dropdown>
- <view class="flex justify-between" @click="toDetail">
+ <filter-dropdown ref="filterDropdownEl" :list="filterList" :filterKey="filterKeys" :type="filterType" @confirm="confirmFilter" @reset="resetFilter"></filter-dropdown>
+ <view class="flex justify-between">
<view class="flex-1 mr-10">
- <view class="member-list flex align-center" v-for="(item, index) in 15">
- <text class="first-name" :style="{background: caculateBgcolor(index)}">李</text>
+ <navigator :url="'./detail?id='+item.id" hover-class="none" class="member-list" v-for="(item, index) in list">
+ <text class="first-name" :style="{background: caculateBgcolor(index)}">{{item.vipName | formatName}}</text>
<view class="flex-1 flex align-center justify-between member-list-con">
- <view>
- <text>李广</text>
- <text class="ml-10">152****9645</text>
+ <view class="flex flex-v">
+ <text>{{item.vipName}}</text>
+ <text class="font-13 gray mt-5">{{$utils.encryptAccount(item.phone)}}</text>
</view>
<view>
- <text class="blue">30天未到店</text>
- <text class="iconfont iconarrow-backimg gray"></text>
+ <text class="blue">到店{{item.arriveCnt || 0}}次</text>
+ <text class="iconfont iconarrow-backimg light-gray"></text>
</view>
</view>
- </view>
+ </navigator>
</view>
<indexed-list></indexed-list>
</view>
@@ -56,60 +56,107 @@
colors: ['#CCC6B4', '#C0CCB4', '#B4C2CC', '#BEB4CC', '#B4CCBE', '#B4CCCA', '#CCB4C6', '#CCB4B4'],
filterType: 1,
filterList: [],
- filter1: ['本月到店次数(由低到高)','本月到店次数(由高到低)','本年到店次数(由低到高)','本年到店次数(由高到低)','本月消费(由高到低)','本月消费(由低到高)','本月消耗(由高到低)','本月消耗(由低到高)'],
- filter2: ['7天内卡项到期','15天内卡项到期','30天内卡项到期'],
- filter3: [{
- title: '到店途径',
+ filterText: '首字母排序',
+ filter1: [{
+ title: '首字母排序',
+ key: '',
+ value: ''
+ },{
+ title: '本月到店次数(由高到低)',
+ key: 'monthArrived',
+ value: 'desc'
+ },{
+ title: '本月到店次数(由低到高)',
+ key: 'monthArrived',
+ value: 'asc'
+ },{
+ title: '本年到店次数(由高到低)',
+ key: 'yearArrived',
+ value: 'desc'
+ },{
+ title: '本年到店次数(由低到高)',
+ key: 'yearArrived',
+ value: 'asc'
+ },{
+ title: '本月消费(由高到低)',
+ key: 'used',
+ value: 'desc'
+ },{
+ title: '本月消费(由低到高)',
+ key: 'used',
+ value: 'asc'
+ },{
+ title: '本月消耗(由高到低)',
+ key: 'consume',
+ value: 'desc'
+ },{
+ title: '本月消耗(由低到高)',
+ key: 'consume',
+ value: 'asc'
+ },{
+ title: '会员级别(由高到低)',
+ key: 'vipLevel',
+ value: 'desc'
+ },{
+ title: '会员级别(由低到高)',
+ key: 'vipLevel',
+ value: 'asc'
+ },{
+ title: '上次到店时间(由近到远)',
+ key: 'arriveTime',
+ value: 'desc'
+ },{
+ title: '上次到店时间(由远到近)',
+ key: 'arriveTime',
+ value: 'asc'
+ }],
+ filterKeys: {birthType: '', vipType: '', other: ''},
+ filter2: [{
+ title: '生日',
+ key: 'birthType',
list: [
{
- 'title': '美团预约',
- 'value': ''
+ 'title': '三天内生日',
+ 'value': 1
},
{
- 'title': '网络预约',
- 'value': ''
+ 'title': '本月生日',
+ 'value': 2
+ },
+ {
+ 'title': '下月生日',
+ 'value': 3
}
]
},
{
- title: '会员等级',
- list: [
- {
- 'title': '一级会员',
- 'value': ''
- },
- {
- 'title': '二级会员',
- 'value': ''
- },
- {
- 'title': '三级会员',
- 'value': ''
- }
- ]
+ title: '会员类型',
+ key: 'vipType',
+ list: []
},
{
- title: '活跃度',
+ title: '其他',
+ key: 'other',
list: [
{
- 'title': '活跃',
- 'value': ''
+ 'title': '老客户',
+ 'value': 1
},
{
- 'title': '不活跃',
- 'value': ''
- },
- {
- 'title': '睡眠',
- 'value': ''
- },
- {
- 'title': '沉睡',
- 'value': ''
+ 'title': '新客户',
+ 'value': 2
}
]
- }]
+ }],
+ queryKey: '',
+ sort: '',
+ order: '',
+ list: []
};
+ },
+ onLoad() {
+ this.loadMemberType()
+ this.loadMemberList()
},
onHide(){
this.$refs.filterDropdownEl.hide();
@@ -118,23 +165,76 @@
caculateBgcolor(index){
return this.colors[index%8];
},
- toDetail(){
- uni.navigateTo({
- url:'./detail'
- })
- },
- filterCustom(type){
+ showFilterCustom(type){
this.$refs.filterDropdownEl.show();
if(type===1){
this.filterList = this.filter1;
this.filterType = 1;
- } else if(type===2){
- this.filterList = this.filter2;
- this.filterType = 1;
} else {
- this.filterList = this.filter3;
+ this.filterList = this.filter2;
this.filterType = 0;
}
+ },
+
+ // 搜索
+ search(val){
+ this.queryKey = val;
+ this.loadMemberList();
+ },
+ // 重置筛选
+ resetFilter(){
+ this.filterKeys = {birthType: '', vipType: '', other: ''};
+ this.loadMemberList();
+ },
+ // 全部筛选
+ confirmFilter(val){
+ if(this.filterType == 1){
+ this.sort = val.key;
+ this.order = val.value;
+ this.filterText = val.title;
+ } else {
+ this.filterKeys = val;
+ }
+ this.loadMemberList();
+ },
+ // 获取会员类型
+ loadMemberType(){
+ this.$httpUtils.request('/api/vip/findVipType').then((res) => {
+ if(res.status == 200){
+ let result = res.rows.map((item) => {
+ return {
+ title: item.levelName,
+ value: item.id
+ }
+ });
+ this.filter2[1].list = result;
+ }
+ })
+ },
+ loadMemberList(){
+ let parma = Object.assign({
+ order: this.order,
+ queryKey: this.queryKey,
+ sort: this.sort
+ }, this.filterKeys)
+ this.$httpUtils.request('/api/vip/findVipInfoList', parma, 'POST').then((res) => {
+ if(res.status == 200){
+ this.list = res.rows;
+ } else {
+ this.list = [];
+ }
+ }).catch((err) => {
+ this.list = [];
+ })
+ }
+ },
+ filters:{
+ formatName(val){
+ if(!val){
+ return '无'
+ }
+ val = val.trim();
+ return val.substr(0, 1)
}
}
}
@@ -167,10 +267,12 @@
font-size: 16px;
}
.member-list{
+ display: flex;
+ align-items: center;
font-size: 14px;
}
.member-list-con{
- padding: 18px 0 18px 5px;
+ padding: 15px 0 15px 5px;
border-bottom: 1px solid #EDEAF4;
}
.quick-entry{
@@ -184,7 +286,6 @@
border-radius: 50%;
background: #518EFF;
color: #FFFFFF;
- box-shadow: 4px 4px 5px #ddd;
}
.quick-entry .iconfont{
font-size: 24px;
diff --git a/hive-app/pages/workbench/customerInfo.vue b/hive-app/pages/workbench/customerInfo.vue
index 27986ab..5a69135 100644
--- a/hive-app/pages/workbench/customerInfo.vue
+++ b/hive-app/pages/workbench/customerInfo.vue
@@ -2,37 +2,37 @@
<!-- 客户信息 -->
<view class="container">
<view class="header">
- <image class="avatar" src="../../static/images/head-img.jpg"></image>
- <text>李某</text>
+ <image class="avatar" :src="memberInfo.photo?memberInfo.photo:'../../static/images/default-avatar.png'"></image>
+ <text>{{memberInfo.vipName}}</text>
</view>
<view>
<view class="list-row">
<text class="font-14">手机号码</text>
- <text class="font-14 gray">15569218888</text>
+ <text class="font-14 gray">{{memberInfo.phone}}</text>
</view>
<view class="list-row">
<text class="font-14">会员级别</text>
- <text class="font-14 gray">普通会员</text>
+ <text class="font-14 gray">{{memberInfo.vipLevel || '-'}}</text>
</view>
<view class="list-row">
- <text class="font-14">卡号</text>
- <text class="font-14 gray">Q232</text>
+ <text class="font-14">会员编号</text>
+ <text class="font-14 gray">{{memberInfo.vipNo}}</text>
</view>
<view class="list-row">
<text class="font-14">总余额</text>
- <text class="font-14 gray">¥2,323</text>
+ <text class="font-14 gray">¥{{memberInfo.totalBalance}}</text>
</view>
<view class="list-row">
<text class="font-14">赠送余额</text>
- <text class="font-14 gray">¥1,323</text>
+ <text class="font-14 gray">¥{{memberInfo.giftBalance}}</text>
</view>
<view class="list-row">
<text class="font-14">剩余积分</text>
- <text class="font-14 gray">123</text>
+ <text class="font-14 gray">{{memberInfo.integral}}</text>
</view>
<view class="list-row">
<text class="font-14">所属门店</text>
- <text class="font-14 gray">东莞店</text>
+ <text class="font-14 gray">{{memberInfo.shopName}}</text>
</view>
</view>
<navigator :url="url">
@@ -45,7 +45,8 @@
export default{
data(){
return{
- url: './selectProduct/index',
+ memberInfo: {},
+ url: './selectProduct/index'
}
},
onLoad(options) {
@@ -54,9 +55,16 @@
} else {
this.url = './selectService';
}
+ this.loadMemberInfo(options.id);
},
methods:{
-
+ loadMemberInfo(id){
+ this.$httpUtils.request('/api/vip/findVipInfoById/'+id).then((res) => {
+ if(res.status == 200){
+ this.memberInfo = res.mapInfo.vipInfo;
+ }
+ })
+ }
}
}
</script>
diff --git a/hive-app/pages/workbench/selectCustomer.vue b/hive-app/pages/workbench/selectCustomer.vue
index 60b4e15..ef2017f 100644
--- a/hive-app/pages/workbench/selectCustomer.vue
+++ b/hive-app/pages/workbench/selectCustomer.vue
@@ -1,22 +1,25 @@
<template>
<view class="container">
- <search-bar placeholder="客户姓名、手机、卡号、拼音"></search-bar>
+ <search-bar @confirm="search"></search-bar>
<view class="flex justify-between">
- <navigator :url="'./customerInfo?type='+type" hover-class="none" class="flex-1 mr-10">
- <view class="member-list flex align-center" v-for="(item, index) in 15">
- <text class="first-name" :style="{background: caculateBgcolor(index)}">李</text>
+ <view class="flex-1 mr-10">
+ <navigator class="member-list flex align-center"
+ :url="'./customerInfo?type='+type+'&id='+item.id"
+ hover-class="none"
+ v-for="(item, index) in list">
+ <text class="first-name" :style="{background: caculateBgcolor(index)}">{{item.vipName | formatName}}</text>
<view class="flex-1 flex align-center justify-between member-list-con">
- <view>
- <text>李广</text>
- <text class="ml-10">152****9645</text>
+ <view class="flex flex-v">
+ <text>{{item.vipName}}</text>
+ <text class="font-13 gray mt-5">{{$utils.encryptAccount(item.phone)}}</text>
</view>
<view>
- <text class="blue">东莞店</text>
- <text class="iconfont iconarrow-backimg gray"></text>
+ <text class="blue">{{item.shopName}}</text>
+ <text class="iconfont iconarrow-backimg light-gray"></text>
</view>
</view>
- </view>
- </navigator>
+ </navigator>
+ </view>
<indexed-list></indexed-list>
</view>
</view>
@@ -33,18 +36,46 @@
data() {
return {
type: 1 ,//1新建订单 2新建服务单
- colors: ['#CCC6B4', '#C0CCB4', '#B4C2CC', '#BEB4CC', '#B4CCBE', '#B4CCCA', '#CCB4C6', '#CCB4B4']
+ colors: ['#CCC6B4', '#C0CCB4', '#B4C2CC', '#BEB4CC', '#B4CCBE', '#B4CCCA', '#CCB4C6', '#CCB4B4'],
+ queryKey: '',
+ list: []
};
},
onLoad(options) {
if(options.type){
this.type = options.type;
}
+ this.loadMemberList()
},
methods:{
caculateBgcolor(index){
return this.colors[index%8];
},
+ search(val){
+ this.queryKey = val;
+ this.loadMemberList();
+ },
+ loadMemberList(){
+ let parma = Object.assign({
+ order: this.order,
+ queryKey: this.queryKey,
+ sort: this.sort
+ }, this.filterKeys)
+ this.$httpUtils.request('/api/vip/findVipInfoList', parma, 'POST').then((res) => {
+ if(res.status == 200){
+ this.list = res.rows;
+ }
+ })
+ }
+ },
+ filters:{
+ formatName(val){
+ if(!val){
+ return '无'
+ }
+ val = val.trim();
+ return val.substr(0, 1)
+ }
}
}
</script>
@@ -78,7 +109,7 @@
font-size: 14px;
}
.member-list-con{
- padding: 18px 0 18px 5px;
+ padding: 15px 0 15px 5px;
border-bottom: 1px solid #EDEAF4;
}
.quick-entry{
diff --git a/hive-app/static/images/no-data.png b/hive-app/static/images/no-data.png
new file mode 100644
index 0000000..6de9878
--- /dev/null
+++ b/hive-app/static/images/no-data.png
Binary files differ
--
Gitblit v1.9.1