Переглянути джерело

【会员积分模块 还差Add接口等待后端调通】

master
GL 4 роки тому
джерело
коміт
5874e7dcc9
8 змінених файлів з 382 додано та 110 видалено
  1. +9
    -2
      src/routers/index.js
  2. +12
    -0
      src/services/apiUrl.js
  3. +160
    -96
      src/views/navigation/accounts/marketingClose.vue
  4. +1
    -1
      src/views/navigation/consume/current.vue
  5. +70
    -0
      src/views/navigation/integral/AddEnd.vue
  6. +15
    -1
      src/views/navigation/integral/integralParticulars.vue
  7. +100
    -9
      src/views/navigation/integral/userMessage.vue
  8. +15
    -1
      src/views/navigation/ticket/chPhone.vue

+ 9
- 2
src/routers/index.js Переглянути файл

@@ -9,6 +9,7 @@ import marketingClose from "@/views/navigation/accounts/marketingClose"
import memberCancel from "@/views/navigation/memberCancel" import memberCancel from "@/views/navigation/memberCancel"
import memberGathering from "@/views/navigation/consume/memberGathering" import memberGathering from "@/views/navigation/consume/memberGathering"
import memberIntegral from "@/views/navigation/integral/memberIntegral" import memberIntegral from "@/views/navigation/integral/memberIntegral"
import AddEnd from "@/views/navigation/integral/AddEnd"
import memberTicket from "@/views/navigation/ticket/memberTicket" import memberTicket from "@/views/navigation/ticket/memberTicket"
import ticketDetails from "@/views/navigation/ticket/ticketDetails" import ticketDetails from "@/views/navigation/ticket/ticketDetails"
import chPhone from "@/views/navigation/ticket/chPhone" import chPhone from "@/views/navigation/ticket/chPhone"
@@ -124,13 +125,19 @@ const routes = [
}, },
{ {
path: '/memberIntegral',//会员积分integralParticulars
path: '/memberIntegral',//会员积分
name: 'memberIntegral', name: 'memberIntegral',
component:memberIntegral component:memberIntegral
}, },
{ {
path: '/integralParticulars',//会员积分 - 查询详情页
path: '/AddEnd',//会员积分 添加完成
name: 'AddEnd',
component:AddEnd
},
{
path: '/integralParticulars',//会员积分 - 查询详情页
name: 'integralParticulars', name: 'integralParticulars',
component:integralParticulars component:integralParticulars


+ 12
- 0
src/services/apiUrl.js Переглянути файл

@@ -62,4 +62,16 @@ export const apiUrl = {
* 获取营销结算汇总 * 获取营销结算汇总
*/ */
getSubsidySummary:"/api/subsidy/summary", getSubsidySummary:"/api/subsidy/summary",
/**
* 根据手机号查询C端会员信息
*/
findByPhone:"/api/credit/findByPhone",
/**
* 获取消费金额对应积分
*/
getCreditNum:"/api/credit/findByMerchantIdAndSpend",
/**
* 积分新增
*/
addCredit:"/api/credit/add",
} }

+ 160
- 96
src/views/navigation/accounts/marketingClose.vue Переглянути файл

@@ -26,16 +26,22 @@
</div> </div>
</div> </div>
<div class="accountBox numBox"> <div class="accountBox numBox">
<div class="numBox_left">{{item.sourceStr+" "+item.typeStr}}</div>
<div class="numBox_left">
{{ item.sourceStr + " " + item.typeStr }}
</div>
<div class="numBox_right" style="color: rgba(255, 106, 106, 1)"> <div class="numBox_right" style="color: rgba(255, 106, 106, 1)">
{{`应收:${item.subsidyStr}`}}
{{ `应收:${item.subsidyStr}` }}
</div> </div>
</div> </div>
<div class="backStatus_2" v-if="item.statusStr&&item.status==0">{{item.statusStr}}</div>
<div class="backStatus_1" v-if="item.statusStr&&item.status!==0">{{item.statusStr}}</div>
<div class="backStatus_2" v-if="item.statusStr && item.status == 0">
{{ item.statusStr }}
</div>
<div class="backStatus_1" v-if="item.statusStr && item.status !== 0">
{{ item.statusStr }}
</div>
</div> </div>
</div> </div>
<div class="status2_Box" v-if="navigationIndex == 1&&showTiem">
<div class="status2_Box" v-if="navigationIndex == 1 && showTiem">
<div class="beginDate" @click="beginDateShow = !beginDateShow"> <div class="beginDate" @click="beginDateShow = !beginDateShow">
{{ beginDateText }} {{ beginDateText }}
</div> </div>
@@ -45,7 +51,7 @@
</div> </div>
<div class="dateCha" @click="search()">查询</div> <div class="dateCha" @click="search()">查询</div>
</div> </div>
<div class="status3_Box" v-if="navigationIndex == 2&&showTiem">
<div class="status3_Box" v-if="navigationIndex == 2 && showTiem">
<div <div
:class="status3_index == 1 ? 'status3_activity' : 'my'" :class="status3_index == 1 ? 'status3_activity' : 'my'"
@click="settleWay(1)" @click="settleWay(1)"
@@ -59,7 +65,10 @@
微信分账 微信分账
</div> </div>
</div> </div>
<div class="status4_Box status3_Box" v-if="navigationIndex == 3&&showTiem">
<div
class="status4_Box status3_Box"
v-if="navigationIndex == 3 && showTiem"
>
<div <div
:class="status4_index == 1 ? 'status3_activity' : 'my'" :class="status4_index == 1 ? 'status3_activity' : 'my'"
@click="settleType(1)" @click="settleType(1)"
@@ -73,42 +82,45 @@
已结算 已结算
</div> </div>
</div> </div>
<div class="status5_Box status3_Box" v-if="navigationIndex == 4">
<div
class="status5_Box status3_Box"
v-if="navigationIndex == 4 && showTiem"
>
<div <div
:class="status5_index == 1 ? 'status3_activity' : 'my'"
@click="status5_index = 1"
:class="status5_index == 0 ? 'status3_activity' : 'my'"
@click="setSource(0)"
> >
未结算
补贴
</div> </div>
<div <div
:class="status5_index == 2 ? 'status3_activity' : 'wx'"
@click="status5_index = 2"
:class="status5_index == 1 ? 'status3_activity' : 'wx'"
@click="setSource(1)"
> >
已结算
卡消费
</div> </div>
<div <div
:class="status5_index == 3 ? 'status3_activity' : 'my'"
@click="status5_index = 3"
:class="status5_index == 2 ? 'status3_activity' : 'my'"
@click="setSource(2)"
> >
未结算
券核销
</div> </div>
<div <div
:class="status5_index == 4 ? 'status3_activity' : 'wx'"
@click="status5_index = 4"
:class="status5_index == 3 ? 'status3_activity' : 'wx'"
@click="setSource(3)"
> >
已结算
砍价核销
</div> </div>
<div <div
:class="status5_index == 5 ? 'status3_activity' : 'my'"
@click="status5_index = 5"
:class="status5_index == 4 ? 'status3_activity' : 'my'"
@click="setSource(4)"
> >
未结算
拼团核销
</div> </div>
<div <div
:class="status5_index == 6 ? 'status3_activity' : 'wx'"
@click="status5_index = 6"
:class="status5_index == 5 ? 'status3_activity' : 'wx'"
@click="setSource(5)"
> >
已结算
收银分账
</div> </div>
</div> </div>


@@ -116,7 +128,7 @@


<div class="bott_sum"> <div class="bott_sum">
<div class="text">总计应收</div> <div class="text">总计应收</div>
<div class="sum_num">{{`¥${aggregate/100}`}}</div>
<div class="sum_num">{{ `¥${aggregate / 100}` }}</div>
</div> </div>
<van-popup v-model="beginDateShow" position="bottom"> <van-popup v-model="beginDateShow" position="bottom">
<van-datetime-picker <van-datetime-picker
@@ -169,8 +181,8 @@ export default {
name: "来源", name: "来源",
}, },
], ],
showTiem:false,
noData:false,
showTiem: false,
noData: false,
navigationIndex: 0, navigationIndex: 0,
beginDateShow: false, beginDateShow: false,
endDateShow: false, endDateShow: false,
@@ -188,7 +200,8 @@ export default {
pageSize: 10, pageSize: 10,
list: [], list: [],
aggregate: "", aggregate: "",
type:"",
type: "",
source: "",
billtypes: [ billtypes: [
{ {
name: "自主结算", name: "自主结算",
@@ -214,55 +227,69 @@ export default {
}, },
], ],
auditWayOptions: [ auditWayOptions: [
/* {
/* {
name: "全部", name: "全部",
value: '' value: ''
}, */ }, */
{
name: "补贴",
value: 0,
id: 0
},
{
name: "卡消费",
value: 1,
id: 1
},
{
name: "券核销",
value: 2,
id: 2
},
{
name: "砍价核销",
value: 3,
id: 3
},
{
name: "拼团核销",
value: 4,
id: 4
},
{
name: "收银分账",
value: 5,
id: 5
},
],
{
name: "补贴",
value: 0,
id: 0,
},
{
name: "卡消费",
value: 1,
id: 1,
},
{
name: "券核销",
value: 2,
id: 2,
},
{
name: "砍价核销",
value: 3,
id: 3,
},
{
name: "拼团核销",
value: 4,
id: 4,
},
{
name: "收银分账",
value: 5,
id: 5,
},
],
}; };
}, },
methods: { methods: {
settleWay(value){
this.status3_index = value
this.type = value
this.search()
itiLsitData() {//初始化查询列表参数
this.pageNum1 = 1;
this.pageSize = 10;
this.beginDateText = "";
this.endDateText = "";
this.source = "";
this.type = "";
this.status = "";
},
settleWay(value) {
this.status3_index = value;
this.type = value;
this.search();
}, },
settleType(value){
status4_index=1
this.type = value
this.search()
settleType(value) {
this.status4_index = value;
this.type = value;
this.search();
}, },
setSource(value) {
this.status5_index = value;
this.source = value;
this.search();
},

//时间处理 //时间处理
setTiem(temp, format) { setTiem(temp, format) {
//第一个参数是时间戳 第二个参数是格式 参考momentJS //第一个参数是时间戳 第二个参数是格式 参考momentJS
@@ -270,16 +297,41 @@ export default {
}, },
switchover(index) { switchover(index) {
this.navigationIndex = index; this.navigationIndex = index;
this.list='';
this.list = "";
switch (index) { switch (index) {
case 0:this.noData = false;this.search();this.beginDateText= "";this.endDateText="";break;
case 1:this.noData = false;this.showTiem=true;this.beginDateText= "开始时间";this.endDateText="结束时间";break;
case 2:this.noData = false;this.showTiem=true;this.beginDateText= "";this.endDateText="";break;
case 3:this.noData = false;this.showTiem=true;this.beginDateText= "";this.endDateText="";break;
case 4:this.noData = false;this.showTiem=true;this.beginDateText= "";this.endDateText="";break;
case 0:
this.noData = false;
this.search();
this.beginDateText = "";
this.endDateText = "";
break;
case 1:
this.noData = false;
this.showTiem = true;
this.beginDateText = "开始时间";
this.endDateText = "结束时间";
break;
case 2:
this.noData = false;
this.showTiem = true;
this.beginDateText = "";
this.endDateText = "";
break;
case 3:
this.noData = false;
this.showTiem = true;
this.beginDateText = "";
this.endDateText = "";
break;
case 4:
this.noData = false;
this.showTiem = true;
this.beginDateText = "";
this.endDateText = "";
break;

default: default:
console.log("全部")
console.log("全部");
break; break;
} }
}, },
@@ -300,9 +352,9 @@ export default {
params: { params: {
pageNum: this.pageNum, pageNum: this.pageNum,
pageSize: this.pageSize, pageSize: this.pageSize,
startdate: this.beginDateText+' 00:00:00',
enddate: this.endDateText+' 23:59:59',
source: "",
startdate: this.beginDateText + " 00:00:00",
enddate: this.endDateText + " 23:59:59",
source: this.source,
type: this.type, type: this.type,
status: "", status: "",
}, },
@@ -310,21 +362,33 @@ export default {
.then((res) => { .then((res) => {
const { code, data, message } = res; const { code, data, message } = res;
if (code == 200) { if (code == 200) {
if(data.list.length==0){
this.noData = true
if (data.list.length == 0) {
this.noData = true;
} }
data.list.map(item=>{
item.sourceStr = this.auditWayOptions.filter(e => e.value == item.source).length > 0 ? this.auditWayOptions.filter(e => e.value == item.source)[0].name : '';
item.typeStr = this.billtypes.filter(e => e.id == item.type).length > 0 ? this.billtypes.filter(e => e.id == item.type)[0].name : '';
item.statusStr = item.status===0?'未结算' : "已结算";
})
data.list.map((item) => {
item.sourceStr =
this.auditWayOptions.filter((e) => e.value == item.source)
.length > 0
? this.auditWayOptions.filter(
(e) => e.value == item.source
)[0].name
: "";
item.typeStr =
this.billtypes.filter((e) => e.id == item.type).length > 0
? this.billtypes.filter((e) => e.id == item.type)[0].name
: "";
item.statusStr = item.status === 0 ? "未结算" : "已结算";
});
this.list = data.list; this.list = data.list;
this.itiLsitData()
} else { } else {
Toast(message); Toast(message);
this.itiLsitData()
} }
}) })
.catch((res) => { .catch((res) => {
Toast(res); Toast(res);
this.itiLsitData()
}); });
}, },
getTotal() { getTotal() {
@@ -332,9 +396,9 @@ export default {
.getSubsidySummary({ .getSubsidySummary({
method: "get", method: "get",
params: { params: {
startdate: this.beginDateText+' 00:00:00',
enddate:this.endDateText+' 23:59:59',
source: "",
startdate: this.beginDateText + " 00:00:00",
enddate: this.endDateText + " 23:59:59",
source: this.source,
type: this.type, type: this.type,
status: "", status: "",
}, },
@@ -351,14 +415,14 @@ export default {
Toast(res); Toast(res);
}); });
}, },
search(){
this.showTiem = false
search() {
this.showTiem = false;
this.getLsit(); this.getLsit();
this.getTotal();
this.getTotal();
}, },
}, },
mounted() { mounted() {
this.search()
this.search();
}, },
}; };
</script> </script>


+ 1
- 1
src/views/navigation/consume/current.vue Переглянути файл

@@ -69,7 +69,7 @@ import moment from "moment";
import Vue from "vue"; import Vue from "vue";
import { Calendar,Toast } from "vant"; import { Calendar,Toast } from "vant";
import{ mapState} from "vuex"; import{ mapState} from "vuex";
Vue.use(Calendar).use(Toast);
Vue.use(Calendar,Toast);
export default { export default {
data() { data() {
return { return {


+ 70
- 0
src/views/navigation/integral/AddEnd.vue Переглянути файл

@@ -0,0 +1,70 @@
<template>
<div class="Box">
<div class="succeedBox">
<div class="succeedBox_top">
<img src="@/assets/images/tick.png" alt="" class="succeedBox_left" />
<div class="succeedBox_right">操作成功</div>
</div>
<div class="succeedBox_Bot">{{ `本次积分:+100 ` }}</div>
</div>
<div class="backBox">
<div class="goNo">继续</div>
<div class="goBack">返回首页</div>
</div>
</div>
</template>


<style scoped>
.Box {
height: 100%;
background: #f6f6f8;
}
.succeedBox {
width: 80%;
margin: 1rem 10%;
background-color: #ffffff;
border-radius: 0.3rem;
}
.succeedBox_top {
overflow: hidden;
padding-top: 1.5rem;
}
.succeedBox_left {
float: left;
width: 1rem;
margin-left: 2rem;
}
.succeedBox_right {
float: right;
margin-right: 2.5rem;
font-size: 0.56rem;
}
.succeedBox_Bot {
padding-top: 0.4rem;
padding-bottom: 2rem;
}
.backBox {
margin-top: 1rem;
overflow: hidden;
}
.goNo {
float: left;
background-color: rgba(81, 160, 252, 1);
line-height: 1.1rem;
border-radius: 0.5rem;
color: #fff;
width: 38%;
margin-left: 1rem;
}
.goBack {
width: 38%;
float: right;
line-height: 1.1rem;
margin-right: 1rem;
color: #333;
background: #fff;
border-radius: 0.5rem;
border: 1px solid #d2d2d2;
}
</style>

+ 15
- 1
src/views/navigation/integral/integralParticulars.vue Переглянути файл

@@ -9,6 +9,9 @@
</div> </div>
</template> </template>
<script> <script>
import Vue from "vue";
import { Toast } from "vant";
Vue.use(Toast);
export default { export default {
data() { data() {
return { return {
@@ -18,7 +21,18 @@ export default {
}, },
methods: { methods: {
goUserMessage(){ goUserMessage(){
this.$router.push('/userMessage')
const str = /^1[0-9]{10}$/
if(str.test(this.phone)){
this.$router.push({
path:"/userMessage",
query:{
phone:this.phone
}
})
}else{
Toast("请输入正确手机号!");
}
// this.$router.push('/userMessage')
} }
}, },
} }


+ 100
- 9
src/views/navigation/integral/userMessage.vue Переглянути файл

@@ -4,18 +4,20 @@
<div class="textBox"> <div class="textBox">
<div class="chieBox"> <div class="chieBox">
<div class="left">会员姓名(昵称):</div> <div class="left">会员姓名(昵称):</div>
<div class="right"></div>
<div class="right">{{ list.name != undefined ? list.name : "" }}</div>
</div> </div>
<div class="chieBox"> <div class="chieBox">
<div class="left">会员等级:</div> <div class="left">会员等级:</div>
<div class="right">普通会员</div>
<div class="right">{{ list.level != undefined ? list.level : "" }}</div>
</div> </div>
<div class="chieBox"> <div class="chieBox">
<div class="left">手机号码:</div> <div class="left">手机号码:</div>
<div class="right">17671632874</div>
<div class="right">{{ phone }}</div>
</div> </div>
</div> </div>
<div class="add" v-show="!addFalg" @click="addFalg=!addFalg">新增积分</div>
<div class="add" v-show="!addFalg" @click="addFalg = !addFalg">
新增积分
</div>
<div class="consumption" v-show="addFalg"> <div class="consumption" v-show="addFalg">
<div class="text">消费金额</div> <div class="text">消费金额</div>
<div class="consumption_text">元</div> <div class="consumption_text">元</div>
@@ -24,21 +26,111 @@
class="consumption_num" class="consumption_num"
placeholder="请输入" placeholder="请输入"
v-model="consumption" v-model="consumption"
@input="setValue"
/> />
</div> </div>
<div class="integral" v-show="addFalg" >123</div>
<div class="submit" v-show="addFalg">提交</div>
<div class="integral" v-show="addFalg">{{ integral }}</div>
<div class="submit" v-show="addFalg" @click="addIntegral">提交</div>
</div> </div>
</template> </template>
<script> <script>
import Vue from "vue";
import { mapState } from "vuex";
import { Toast } from "vant";
export default { export default {
data() { data() {
return { return {
phone: "", phone: "",
consumption: "", consumption: "",
addFalg:false
addFalg: false,
list: "",
integral: 0,
}; };
}, },
computed: {
...mapState(["merchant_id"]),
},
methods: {
//提交添加积分
addIntegral() {
const reg = /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/;
if (reg.test(this.consumption)) {
this.$http.addCredit({
method: "POST",
data: {
creditType: 10,
cuserId: this.list.id,
merchantId: this.merchant_id,
operatorType: 3,
receiptUrl:"",
spendStr: this.integral,
tags:[]
},
}).then(res=>{
const {code ,data,message} = res
if(code == 200){
Toast('操作成功')
}else{
Toast(message)
}
}).catch(res=>{
Toast(res)
})
} else {
Toast("消费金额限制为大于0且小于9999999.99的保留两位小数的数字!");
}
},
//通过接口设置积分
setValue() {
this.$http
.getCreditNum({
methods: "get",
params: {
spendStr: this.consumption,
merchantId: this.merchant_id,
userId: this.list.id,
},
})
.then((res) => {
const { code, data, message } = res;
if (code == 200) {
this.integral = data.credit;
} else {
Toast(message);
}
})
.catch((res) => {
Toast(res);
});
},
//获取用户信息
getUserInfo() {
this.$http
.findByPhone({
methods: "get",
params: {
phone: this.phone,
},
})
.then((res) => {
const { code, data, message } = res;
if (code == 200) {
this.list = data;
console.log(data);
} else {
Toast(message);
}
})
.catch((res) => {
Toast(res);
});
},
},
mounted() {
this.phone = this.$route.query.phone;
this.getUserInfo();
console.log(this.phone, this.merchant_id);
},
}; };
</script> </script>


@@ -116,10 +208,9 @@ export default {
} }
.integral { .integral {
width: 95%; width: 95%;
margin: 1rem 0 1rem 0;
margin: 1rem 0 1rem 0;
text-align: right; text-align: right;
color: red; color: red;

} }
.integral::before { .integral::before {
content: "本次积分"; content: "本次积分";


+ 15
- 1
src/views/navigation/ticket/chPhone.vue Переглянути файл

@@ -9,6 +9,9 @@
</div> </div>
</template> </template>
<script> <script>
import Vue from "vue";
import { Toast } from "vant";
Vue.use(Toast);
export default { export default {
data() { data() {
return { return {
@@ -18,7 +21,18 @@ export default {
}, },
methods: { methods: {
goUserMessage(){ goUserMessage(){
this.$router.push('/ticketDetails')
const str = /^1[0-9]{10}$/
if(str.test(this.phone)){
this.$router.push({
path:"/ticketDetails",
query:{
phone:this.phone
}
})
}else{
Toast("请输入正确手机号!");
}
// this.$router.push('/ticketDetails')
} }
}, },
} }


Завантаження…
Відмінити
Зберегти