Преглед изворни кода

【会员积分模块 还差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 memberGathering from "@/views/navigation/consume/memberGathering"
import memberIntegral from "@/views/navigation/integral/memberIntegral"
import AddEnd from "@/views/navigation/integral/AddEnd"
import memberTicket from "@/views/navigation/ticket/memberTicket"
import ticketDetails from "@/views/navigation/ticket/ticketDetails"
import chPhone from "@/views/navigation/ticket/chPhone"
@@ -124,13 +125,19 @@ const routes = [
},
{
path: '/memberIntegral',//会员积分integralParticulars
path: '/memberIntegral',//会员积分
name: 'memberIntegral',
component:memberIntegral
},
{
path: '/integralParticulars',//会员积分 - 查询详情页
path: '/AddEnd',//会员积分 添加完成
name: 'AddEnd',
component:AddEnd
},
{
path: '/integralParticulars',//会员积分 - 查询详情页
name: 'integralParticulars',
component:integralParticulars


+ 12
- 0
src/services/apiUrl.js Прегледај датотеку

@@ -62,4 +62,16 @@ export const apiUrl = {
* 获取营销结算汇总
*/
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 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)">
{{`应收:${item.subsidyStr}`}}
{{ `应收:${item.subsidyStr}` }}
</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 class="status2_Box" v-if="navigationIndex == 1&&showTiem">
<div class="status2_Box" v-if="navigationIndex == 1 && showTiem">
<div class="beginDate" @click="beginDateShow = !beginDateShow">
{{ beginDateText }}
</div>
@@ -45,7 +51,7 @@
</div>
<div class="dateCha" @click="search()">查询</div>
</div>
<div class="status3_Box" v-if="navigationIndex == 2&&showTiem">
<div class="status3_Box" v-if="navigationIndex == 2 && showTiem">
<div
:class="status3_index == 1 ? 'status3_activity' : 'my'"
@click="settleWay(1)"
@@ -59,7 +65,10 @@
微信分账
</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
:class="status4_index == 1 ? 'status3_activity' : 'my'"
@click="settleType(1)"
@@ -73,42 +82,45 @@
已结算
</div>
</div>
<div class="status5_Box status3_Box" v-if="navigationIndex == 4">
<div
class="status5_Box status3_Box"
v-if="navigationIndex == 4 && showTiem"
>
<div
:class="status5_index == 1 ? 'status3_activity' : 'my'"
@click="status5_index = 1"
:class="status5_index == 0 ? 'status3_activity' : 'my'"
@click="setSource(0)"
>
未结算
补贴
</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
:class="status5_index == 3 ? 'status3_activity' : 'my'"
@click="status5_index = 3"
:class="status5_index == 2 ? 'status3_activity' : 'my'"
@click="setSource(2)"
>
未结算
券核销
</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
:class="status5_index == 5 ? 'status3_activity' : 'my'"
@click="status5_index = 5"
:class="status5_index == 4 ? 'status3_activity' : 'my'"
@click="setSource(4)"
>
未结算
拼团核销
</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>

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

<div class="bott_sum">
<div class="text">总计应收</div>
<div class="sum_num">{{`¥${aggregate/100}`}}</div>
<div class="sum_num">{{ `¥${aggregate / 100}` }}</div>
</div>
<van-popup v-model="beginDateShow" position="bottom">
<van-datetime-picker
@@ -169,8 +181,8 @@ export default {
name: "来源",
},
],
showTiem:false,
noData:false,
showTiem: false,
noData: false,
navigationIndex: 0,
beginDateShow: false,
endDateShow: false,
@@ -188,7 +200,8 @@ export default {
pageSize: 10,
list: [],
aggregate: "",
type:"",
type: "",
source: "",
billtypes: [
{
name: "自主结算",
@@ -214,55 +227,69 @@ export default {
},
],
auditWayOptions: [
/* {
/* {
name: "全部",
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: {
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) {
//第一个参数是时间戳 第二个参数是格式 参考momentJS
@@ -270,16 +297,41 @@ export default {
},
switchover(index) {
this.navigationIndex = index;
this.list='';
this.list = "";
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:
console.log("全部")
console.log("全部");
break;
}
},
@@ -300,9 +352,9 @@ export default {
params: {
pageNum: this.pageNum,
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,
status: "",
},
@@ -310,21 +362,33 @@ export default {
.then((res) => {
const { code, data, message } = res;
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.itiLsitData()
} else {
Toast(message);
this.itiLsitData()
}
})
.catch((res) => {
Toast(res);
this.itiLsitData()
});
},
getTotal() {
@@ -332,9 +396,9 @@ export default {
.getSubsidySummary({
method: "get",
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,
status: "",
},
@@ -351,14 +415,14 @@ export default {
Toast(res);
});
},
search(){
this.showTiem = false
search() {
this.showTiem = false;
this.getLsit();
this.getTotal();
this.getTotal();
},
},
mounted() {
this.search()
this.search();
},
};
</script>


+ 1
- 1
src/views/navigation/consume/current.vue Прегледај датотеку

@@ -69,7 +69,7 @@ import moment from "moment";
import Vue from "vue";
import { Calendar,Toast } from "vant";
import{ mapState} from "vuex";
Vue.use(Calendar).use(Toast);
Vue.use(Calendar,Toast);
export default {
data() {
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>
</template>
<script>
import Vue from "vue";
import { Toast } from "vant";
Vue.use(Toast);
export default {
data() {
return {
@@ -18,7 +21,18 @@ export default {
},
methods: {
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="chieBox">
<div class="left">会员姓名(昵称):</div>
<div class="right"></div>
<div class="right">{{ list.name != undefined ? list.name : "" }}</div>
</div>
<div class="chieBox">
<div class="left">会员等级:</div>
<div class="right">普通会员</div>
<div class="right">{{ list.level != undefined ? list.level : "" }}</div>
</div>
<div class="chieBox">
<div class="left">手机号码:</div>
<div class="right">17671632874</div>
<div class="right">{{ phone }}</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="text">消费金额</div>
<div class="consumption_text">元</div>
@@ -24,21 +26,111 @@
class="consumption_num"
placeholder="请输入"
v-model="consumption"
@input="setValue"
/>
</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>
</template>
<script>
import Vue from "vue";
import { mapState } from "vuex";
import { Toast } from "vant";
export default {
data() {
return {
phone: "",
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>

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

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


+ 15
- 1
src/views/navigation/ticket/chPhone.vue Прегледај датотеку

@@ -9,6 +9,9 @@
</div>
</template>
<script>
import Vue from "vue";
import { Toast } from "vant";
Vue.use(Toast);
export default {
data() {
return {
@@ -18,7 +21,18 @@ export default {
},
methods: {
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')
}
},
}


Loading…
Откажи
Сачувај