Commit 8c2d4644 authored by 罗超's avatar 罗超

新增数据统计

parent 05e36b42
......@@ -1320,6 +1320,7 @@ export default {
this.hasNewMsg = tempCount;
this.isFirstLoad = false;
// this.allSsionList = JSON.parse(JSON.stringify(sessionlist));
return sessionlist;
},
sessionId() {
......@@ -1374,8 +1375,8 @@ export default {
this.MsgBus.$on('doudong',function(){
that.dou()
});
this.MsgBus.$on('openChat',function(obj){
that.lt(obj)
this.MsgBus.$on('enterChat',function(obj){
that.enterChat(obj)
});
//调用初始化信息提示
this.MsgBus.$on('comMsgTips',function(){
......
......@@ -5,6 +5,12 @@
</template>
<script>
export default {
props:{
data:{
type:Array,
default:[]
}
},
data() {
return {};
},
......@@ -14,16 +20,12 @@ export default {
methods: {
init() {
let myChart = this.$echarts.init(this.$refs.myLineRank);
var dataAxis = [
"9",
"10",
"11",
"12",
"13",
"14",
"15"
];
var data2 = [130, 202, 500, 200, 220, 310, 360];
var dataAxis = [];
var data2 = [];
this.data.forEach(x=>{
dataAxis.push(x.dataStr)
data2.push(x.preferPrice)
})
let option = {
backgroundColor: "#0abb87", //"#19133e6e",
title: {
......@@ -64,11 +66,7 @@ export default {
},
splitLine: {
show: false
},
interval: 600,
max: 600,
min: 0,
splitNumber: 5
}
},
grid: {
left: -45,
......
......@@ -4,14 +4,14 @@
<div class="notice-title">{{notices.title}}</div>
<div v-html="notices.content"></div>
<div class="user">{{notices.updateName}}</div>
<div class="time">{{notices.updateTime}}</div>
<div class="time">{{notices.updateTime?notices.updateTime.replace("T"," "):""}}</div>
</div>
<div class="foot">
<div class="lt">
<div>附件:</div>
<!-- <div>附件:</div>
<div class="v">
<a href="javascript:void(0);">关于库存现金管理的通知.jpg</a>
</div>
</div> -->
</div>
<div class="rt">
<span :class="{'disable':notices.maxID==0}" @click="queryNotice(notices.maxID)">
......@@ -77,9 +77,7 @@ export default {
.ad .content .time,
.ad .content .user {
text-align: right;
position: absolute;
right: 20px;
bottom: 20px;
margin-top: 20px;
}
.ad .content .user {
bottom: 50px;
......@@ -116,9 +114,11 @@ export default {
color: #5d78ff;
margin-left: 30px;
font-size: 12px;
cursor: pointer;
}
.ad .foot .rt span.disable {
color: #cdd3ee;
cursor:no-drop;
}
.ad .foot .rt span i {
zoom: 0.1;
......
<template>
<div class="imbox-c">
<div class="item">
<img src="http://imgfile.oytour.com/Upload/User/xushuxue.png" />
<div v-for="(session, index) in data" :key="index">
<div class="item" v-if="index<4">
<img :src="session.avatar" />
<div class="content">
<div class="name-box">
徐数学
<el-tag size="mini" style="margin-left:10px">线控</el-tag>
{{session.name}}
<!-- <el-tag size="mini" style="margin-left:10px">线控</el-tag> -->
</div>
<div class="last-msg">你看这样可以了吗?</div>
<div class="last-msg">{{session.lastMsgShow}}</div>
</div>
<i class="iconfont icon-chat send-msg" title="和TA聊一下"></i>
<i class="iconfont icon-chat send-msg" title="和TA聊一下" @click="openChart(session)"></i>
</div>
<div class="item">
<img src="http://imgfile.oytour.com/Upload/User/636749538798815181.jpg?imageView&thumbnail=40z40" />
<div class="content">
<div class="name-box">
羊三红
<el-tag size="mini" style="margin-left:10px">财务总监</el-tag>
</div>
<div class="last-msg">大概就是这样</div>
</div>
<i class="iconfont icon-chat send-msg" title="和TA聊一下"></i>
</div>
<div class="item">
<img src="http://192.168.2.214:8130/Upload/User/636747229894789210.jpg" />
<div class="content">
<div class="name-box">
李建波
<el-tag size="mini" style="margin-left:10px">分公司总经理</el-tag>
</div>
<div class="last-msg">这次酒店的地址是在阳光新业2栋8楼哈“乐家林语艺术公寓”,出电梯就能看到,报和平国旅入住</div>
</div>
<i class="iconfont icon-chat send-msg" title="和TA聊一下"></i>
</div>
</div>
</template>
<script>
export default {};
import util from "../../utils";
import config from "../../configs";
export default {
data() {
return {
data: []
};
},
mounted() {
this.init();
},
methods: {
openChart(obj) {
this.MsgBus.$emit("enterChat", obj);//enterTeamChat enterChat
},
init() {
this.data = this.$store.state.sessionlist.filter(item => {
if (
item.to === "684cb79fe92f46877777" ||
item.to === "684cb79fe92f46888888"
)
return;
let that = this;
item.name = "";
item.avatar = "";
if (item.scene === "p2p") {
let userInfo = null;
if (item.to !== this.myPhoneId) {
userInfo = this.userInfos[item.to];
} else {
return false;
}
if (userInfo) {
item.name = util.getFriendAlias(userInfo);
item.avatar = userInfo.avatar;
}
} else if (item.scene === "team") {
let teamInfo = null;
teamInfo = this.$store.state.teamlist.find(team => {
return team.teamId === item.to;
});
if (teamInfo) {
item.name = teamInfo.name;
item.avatar =
"http://yx-web.nos.netease.com/webdoc/h5/im/default-group.png";
} else {
item.name = "讨论组";
item.avatar =
"http://yx-web.nos.netease.com/webdoc/h5/im/default-group.png";
}
if (
!this.$store.state.teamMembers[item.to] ||
this.$store.state.teamMembers[item.to].length == 0
) {
this.$store.dispatch("getTeamMembers", item.to);
}
}
let lastMsg = item.lastMsg || {};
if (lastMsg.type === "text") {
item.lastMsgShow = lastMsg.text || "";
} else if (lastMsg.type === "custom") {
item.lastMsgShow = util.parseCustomMsg(lastMsg);
} else if (
lastMsg.scene === "team" &&
lastMsg.type === "notification"
) {
item.lastMsgShow = util.generateTeamSysmMsg(lastMsg);
} else if (util.mapMsgType(lastMsg)) {
item.lastMsgShow = `[${util.mapMsgType(lastMsg)}]`;
} else {
item.lastMsgShow = "";
}
if (item.updateTime) {
item.updateTimeShow = util.formatDate(item.updateTime, true);
}
return item;
});
console.log(this.data);
},
sessionId() {
let sessionId = this.$route.params.sessionId;
return sessionId;
},
getsessionName() {
let sessionId = this.sessionId;
let user = null;
if (/^p2p-/.test(sessionId)) {
user = sessionId.replace(/^p2p-/, "");
if (user === this.$store.state.userUID) {
return "我的手机";
} else if (this.isRobot) {
return this.robotInfos[user].nick;
} else {
let userInfo = this.userInfos[user] || {};
return util.getFriendAlias(userInfo);
}
} else if (/^team-/.test(sessionId)) {
return "群";
}
},
scene() {
return util.parseSession(this.sessionId).scene;
},
to() {
return util.parseSession(this.sessionId).to;
},
// 判断是否是机器人
isRobot() {
let sessionId = this.sessionId;
let user = null;
if (/^p2p-/.test(sessionId)) {
user = sessionId.replace(/^p2p-/, "");
if (this.robotInfos[user]) {
return true;
}
}
return false;
},
robotInfos() {
return this.$store.state.robotInfos;
},
msglist() {
let msgs = this.$store.state.currSessionMsgs;
return msgs;
},
key() {
return this.$route.path + Math.random();
},
sysMsgUnread() {
let temp = this.$store.state.sysMsgUnread;
let sysMsgUnread = temp.addFriend || 0;
sysMsgUnread += temp.team || 0;
let customSysMsgUnread = this.$store.state.customSysMsgUnread;
return sysMsgUnread + customSysMsgUnread;
},
canLoadMore() {
return !this.$store.state.noMoreHistoryMsgs;
},
userInfos() {
return this.$store.state.userInfos;
},
myInfo() {
return this.$store.state.myInfo;
},
myPhoneId() {
return `${this.$store.state.userUID}`;
},
teamList() {
this.$store.state.teamlist.filter(x => {
x.avatar =
"http://yx-web.nos.netease.com/webdoc/h5/im/default-group.png";
x.id = "team-" + x.teamId;
x.scene = "team";
x.to = x.teamId;
return x;
});
return this.$store.state.teamlist;
}
}
};
</script>
<style scoped>
.imbox-c {
......@@ -91,6 +231,5 @@ export default {};
}
.imbox-c .item:hover .send-msg {
color: #5d78ff;
}
</style>
<template>
<div class="m-box" v-if="zoomW!=0" v-loading="result==null" :style="{zoom:zoomW}">
<div class="m-box" v-loading="result==null" :style="{zoom:zoomW}">
<div v-if="result">
<div class="c-box">
<div class="first">
<div class="fince">
<div class="canvas-box">
<fince></fince>
<fince :data="result.financeWeekList"></fince>
</div>
<div class="todayIncome">
<div class="infos">
......@@ -97,7 +98,7 @@
<div class="first">
<div class="pingtai">
<div class="title">成交平台占比</div>
<pingtai :result="result.orderSourceList"></pingtai>
<pingtai :result="result.orderSourceList" :total='result.totalOrderNum'></pingtai>
</div>
<div class="cloud">
<div class="title">云盘</div>
......@@ -132,7 +133,8 @@
<div class="sell">
<div class="title">本周销冠</div>
<i class="more iconfont icon-gengduo1 white" title="查看往期排行"></i>
<sell></sell><!-- //:champion="item.orderRankList" -->
<sell :champion="result.orderRankList"></sell>
<!-- // -->
</div>
<div class="todayOpera">
<div class="title">今日操作</div>
......@@ -147,7 +149,8 @@
<div class="tousu">
<div class="title">我的投诉</div>
<div class="content">
<tousu :result="result.complainList"></tousu>
<tousu :result="result.complainList" :total="result.complainNum"></tousu>
</div>
</div>
</div>
</div>
......@@ -210,15 +213,23 @@ export default {
init() {
this.apipost("customerIndex_post_GetPersonalCenter", {}, r => {
this.result = r.data.data;
this.result.totalFinancePrice=0;
this.result.financeWeekList.forEach(x=>{
this.result.totalFinancePrice+=x.preferPrice
})
});
},
queryOrder() {
this.pageLoading=true
this.apipost("customerIndex_post_GetPersonalCenterOrder",this.queryCommonData,r=>{
this.orders=r.data.data.pageData
this.queryCommonData.total=r.data.data.count
this.pageLoading=false
})
this.pageLoading = true;
this.apipost(
"customerIndex_post_GetPersonalCenterOrder",
this.queryCommonData,
r => {
this.orders = r.data.data.pageData;
this.queryCommonData.total = r.data.data.count;
this.pageLoading = false;
}
);
},
openOrders(id) {
let query = {
......@@ -231,7 +242,6 @@ export default {
const { href } = this.$router.resolve({ path: "/groupTourOrder" });
window.open(href, "_blank");
}
}
};
</script>
......
......@@ -66,11 +66,7 @@ export default {
},
splitLine: {
show: false
},
interval: 600,
max: 600,
min: 0,
splitNumber: 5
}
},
grid: {
left: -45,
......
......@@ -9,6 +9,10 @@ export default {
result:{
type:Array,
default:[]
},
total:{
type:Number,
default:0
}
},
data() {
......@@ -43,7 +47,7 @@ export default {
left: "23%",
top: "30%",
style: {
text: "151",
text: this.total,
textAlign: "center",
fill: "#A2A4A7", //文字的颜色
fontSize: 40,
......
......@@ -17,18 +17,18 @@
<div class="name-box">
{{champion.employeeName}}
</div>
<div class="last-msg">成都印象 · 欧洲销售组</div>
<div class="last-msg">{{champion.branchName}} · {{champion.deptName}}</div>
</div>
</div>
<div class="r">
<div class="count">18</div>
<div class="count">{{champion.rankTopCount}}</div>
<div class="txt">周冠次数</div>
</div>
</div>
<div class="remark">
徐数学在本期的排名中取得了{{champion.weekTotalIncome}}的业绩,领先第二名51800.00,这是他第18次获得销售周冠的称号,想看他的成功秘笈?戳下面的按钮查看吧!
徐数学在本期的排名中取得了{{champion.weekTotalIncome}}的业绩,领先第二名{{champion.differencePrice.toFixed(2)}},这是他第{{champion.rankTopCount}}次获得销售周冠的称号,想看他的成功秘笈?戳下面的按钮查看吧!
</div>
<div class="more-btn">立即查看</div>
<div class="more-btn" @click="openRank">立即查看</div>
</div>
</div>
</template>
......@@ -49,6 +49,12 @@ export default {
mounted() {
},
methods: {
openRank(){
const { href } = this.$router.resolve({ path: "/saleRnkBefore"});
window.open(href, "_blank");
}
},
}
</script>
......
......@@ -12,6 +12,10 @@ export default {
result:{
type:Array,
default:[]
},
total:{
type:Number,
default:0
}
},
data() {
......@@ -31,7 +35,7 @@ export default {
let dataItemName=[]
this.result.forEach(x=>{
dataItemName.push(x.name);
x.value=x.rate*100
x.value=x.rate
})
let data=this.result.filter(x=>{
if(x.value>0)
......@@ -52,10 +56,10 @@ export default {
graphic: [
{
type: "text",
left: "15.3%",
left: "17%",
top: "30%",
style: {
text: "10",
text: this.total,
textAlign: "center",
fill: "#A2A4A7", //文字的颜色
fontSize: 32,
......
......@@ -317,7 +317,7 @@ export default {
this.columns.push(notIncome);
this.columns.push(pCount);
this.columns.push(cCount);
if (this.activeName != "first") {
if (this.activeName != "first" && this.activeName!='four') {
unitPrice.title = "人均销售额";
this.columns.push(avgPCount);
}
......
......@@ -4,7 +4,7 @@
<div class="name">销售结果分析</div>
<div class="nav-item active">日常销售分析</div>
<div class="nav-item">年度数据统计</div>
<div class="travelData">
<!-- <div class="travelData">
出团日期:
<span class="ipt">
<div class="left-top-border-samll"></div>
......@@ -16,7 +16,7 @@
<div class="right-bottom-border-samll"></div>
<input v-model="endTime" readonly />
</span>
</div>
</div> -->
</div>
<div class="base-box">
<div class="base-item">
......@@ -87,12 +87,12 @@
<div class="item">
<span class="blod">80%</span>
<br />盈利率
<div class="progress" style="clip: rect(0px, 146px, 112px, 0px)"></div>
<div class="progress" style="clip: rect(0px, 100px, 80px, 0px)"></div>
</div>
<div class="item" style="color:#5D78FF;">
<span class="blod">20%</span>
<br />亏损率
<div class="progress" style="clip: rect(0px, 146px, 34px, 0px);border-color:#5D78FF;"></div>
<div class="progress" style="clip: rect(0px, 100px, 20px, 0px);border-color:#5D78FF;"></div>
</div>
</div>
</div>
......@@ -101,7 +101,7 @@
<div class="sq-block-left"></div>
<div class="t">订单类别销售占比</div>
<div class="c lirun">
<div class="more-itms" v-for="(item, index) in result.OrderJoinTypeRatioList" :key="index">
<div class="more-items" :style="{'margin-right':index==result.OrderB2BTypeList.length?'0px':'20px'}" v-for="(item, index) in result.OrderB2BTypeList" :key="index">
<progressAny :percent="item.Ratio" :item="item.Name" :count="item.Num"></progressAny>
</div>
</div>
......@@ -115,13 +115,17 @@
<div class="sq-block-right"></div>
<div class="sq-block-left"></div>
<div class="t">产品线路销售占比</div>
<div class="more-itms" v-for="(item, index) in result.LineRatioList" :key="index">
<div class="more-itms" :style="{'margin-right':index==result.LineRatioList.length?'0px':'20px'}" v-for="(item, index) in result.LineRatioList" :key="index">
<progressAny v-if="item.Num>0" :percent="item.Ratio" :item="item.Name" :count="item.Num" :rank='2' color="#5D78FF"></progressAny>
</div>
</div>
<div class="r">
<div class="sq-block-right"></div>
<div class="sq-block-left"></div>
<div class="t">团队类型占比</div>
<div class="c">
<teamRatio :data="result.OrderJoinTypeRatioList"></teamRatio>
</div>
</div>
</div>
</div>
......@@ -132,6 +136,7 @@ import pricQujian from "./priceQujian";
import yeji from "./yeji";
import pingtai from "./pingtai";
import progressAny from "./progress";
import teamRatio from './teamRatio'
export default {
data() {
return {
......@@ -147,7 +152,8 @@ export default {
pricQujian,
yeji,
pingtai,
progressAny
progressAny,
teamRatio
},
mounted() {
this.zoomW = (document.documentElement.clientWidth / 1920).toFixed(2);
......@@ -179,6 +185,7 @@ export default {
overflow-y: auto;
padding-bottom: 20px;
padding-right: 10px;
overflow-x:hidden
}
.daliy .head {
height: 64px;
......@@ -563,11 +570,11 @@ export default {
}
.daliy .middle-order-box .content-box .item-box .lirun {
display: flex;
align-items: baseline;
}
.daliy .middle-order-box .content-box .item-box .lirun .item {
width: 146px;
height: 146px;
width: 100px;
height: 100px;
border: 3px solid rgba(1, 156, 255, 0.3);
border-radius: 50%;
position: relative;
......@@ -575,8 +582,8 @@ export default {
text-align: center;
font-size: 12px;
color: #46c3f1;
padding-top: 43px;
margin-right: 18px;
padding-top: 12px;
margin-right: 108px;
}
.daliy .middle-order-box .content-box .item-box .lirun .item:last-child {
margin-right: 0px;
......@@ -589,8 +596,8 @@ export default {
display: inline-block;
}
.daliy .middle-order-box .content-box .item-box .lirun .item .progress {
width: 146px;
height: 146px;
width: 100px;
height: 100px;
border: 3px solid #46c3f1;
border-radius: 50%;
position: absolute;
......@@ -599,11 +606,8 @@ export default {
}
.daliy .middle-order-box .content-box .item-box .lirun .more-itms {
height: 100%;
width: 110px;
flex: 1;
}
.daliy .middle-order-box .content-box .item-box .lirun .more-itms:last-child {
margin-right: 0;
flex:1;
margin-right: 20px;
}
.daliy .bottom-order-box {
display: flex;
......@@ -620,6 +624,7 @@ export default {
height: 215px;
padding: 0 18px;
background: rgba(3, 85, 164, 0.2);
flex-direction: row
}
.daliy .bottom-order-box .r {
width: 346px;
......@@ -643,8 +648,22 @@ export default {
font-family: pingfangR;
width: 279px;
}
.daliy .bottom-order-box .r .t {
height: 40px;
line-height: 40px;
font-size: 14px;
color:#FFF;
font-family: pingfangR;
width: 100%;
}
.daliy .bottom-order-box .r .c{
flex: 1;
width: 100%;
height: calc(100% - 50px);
}
.daliy .bottom-order-box .l .more-items {
flex: 1;
height: 100%;
margin-right: 20px;
}
</style>
<template>
<div class="inerank-container">
<div :style="{height:'100%',width:'130%'}" ref="myLineRank"></div>
<div :style="{height:'100%',width:'100%'}" style="text-align:center" ref="myLineRank"></div>
<div class="title" v-if="rank==-1">收客{{this.count}}</div>
<div class="h-title" :style="{color:color}" v-else>
<span class="blod">团队排名 {{rank==0?'未上榜':"NO."+rank}}</span>
......@@ -34,14 +34,17 @@ export default {
},
data() {
return {
center: ["35%", "35%"],
pos:"16%"
center: ["50%", "35%"],
pos:"16%",
radius:["75%", "85%"]
};
},
mounted() {
if (this.rank != -1) {
this.center = ["50%", "35%"];
this.pos ='31%';
this.pos ='40%';
}else{
this.radius=["85%", "95%"];
}
this.init();
},
......@@ -57,7 +60,7 @@ export default {
graphic: [
{
type: "text",
left: this.pos,
left:'center',
top: "25%",
style: {
text: this.percent + "%",
......@@ -70,7 +73,7 @@ export default {
},
{
type: "text",
left: this.pos,
left:'center',
top: "43%",
style: {
text: this.item,
......@@ -87,7 +90,7 @@ export default {
name: "valueOfMarket",
type: "pie",
center: this.center,
radius: ["60%", "70%"],
radius: this.radius,
avoidLabelOverlap: false,
hoverAnimation: false,
label: {
......@@ -138,7 +141,7 @@ export default {
<style>
.inerank-container {
height: 100%;
width: 100%;
width: 100px;
position: relative;
}
.inerank-container .title {
......@@ -147,8 +150,9 @@ export default {
bottom: 15px;
font-size: 12px;
color: #46c3f1;
text-align: center;
text-align: left;
width: 100%;
padding-left: 26px;
}
.inerank-container .h-title {
position: absolute;
......
<template>
<div class="inerank-container">
<div :style="{height:'110%',width:'100%'}" ref="myLineRank"></div>
</div>
</template>
<script>
export default {
props: {
data: {
type: Array,
default: []
}
},
data() {
return {};
},
mounted() {
this.init();
},
methods: {
init() {
let myChart = this.$echarts.init(this.$refs.myLineRank);
let dataAlias=[]
let data2=[]
this.data.forEach(x=>{
if(x.Num>0){
dataAlias.push(x.Name)
let t={}
t.name=x.Name
t.value=x.Num
data2.push(t)
}
})
let option = {
tooltip: {
trigger: "item",
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
calculable: true,
series: [
{
center: ["50%", "40%"],
name: "团队类型",
type: "pie",
radius: ["70%", "0%"],
itemStyle: {
normal: {
label: {
show: false
},
labelLine: {
show: false
},
color: function(params) {
//自定义颜色
var colorList = [
"#FFB822",
"#34BFA3",
"#FD3995",
"#5D78FF",
"#8e44ad",
"#2c3e50",
"#16a085"
];
return colorList[params.dataIndex];
}
}
},
data: data2
}
]
};
myChart.setOption(option);
}
}
};
</script>
<style>
.inerank-container {
height: 100%;
width: 100%;
}
</style>
......@@ -119,7 +119,7 @@ export default {
let domainUrl = '';
let locationName = window.location.hostname;
// domainUrl = "http://192.168.2.214:8082";
domainUrl = "http://192.168.2.16:8083";
domainUrl = "http://192.168.2.65:8025";
if (locationName.indexOf('oytour') !== -1) {
domainUrl = "http://reborn.oytour.com";
} else if (locationName.indexOf('viitto') !== -1) {
......
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