Commit e45f4704 authored by 乐宝呗666's avatar 乐宝呗666

联调客户接口修改bug

parent d8b02a88
<template>
<div id="app" class="bg">
<router-view/>
<Star />
</div>
</template>
<script>
import Star from '@/components/start/index'
import util from '@/libs/util'
export default {
name: 'app',
components: { Star },
watch: {
'$i18n.locale': 'i18nHandle'
},
......
......@@ -59,7 +59,7 @@ export function getBillRate (params) {
})
}
// 用户端获取商机阶段分析饼状图
export function getBigetOpportunitiesByNumberOrMoneyllRate (params) {
export function getOpportunitiesByNumberOrMoney (params) {
return request({
url: '/tp/opportunities/getOpportunitiesByNumberOrMoney',
method: 'get',
......
import { request } from './service'
// 用户端客户统计
export function getStatisticsCustomer () {
return request({
url: '/tp/customerInformation/getStatisticsCustomer',
method: 'get'
})
}
// 用户端客户行业分布
export function getCustomerByCustomerAttribute () {
return request({
......@@ -28,10 +36,11 @@ export function GetClientList () {
})
}
// 根据客户name查询
export function GetCustomerName (name) {
export function GetCustomerName (params) {
return request({
url: `/tp/customer/getByName?name=${name}`,
method: 'get'
url: '/tp/customerInformation/getList',
method: 'post',
params
})
}
// 根据客户id查询
......@@ -48,3 +57,26 @@ export function CustomerInfo () {
method: 'get'
})
}
// 获取服务分析年份下拉框
export function getAnalysisYear () {
return request({
url: '/tp/customer/getAnalysisYear',
method: 'get'
})
}
// 获取服务分析
export function getAnalysis (params) {
return request({
url: '/tp/customer/getAnalysis',
method: 'get',
params
})
}
// 获取重要客户
export function getImportantCus (params) {
return request({
url: '/tp/customer/getImportantCus',
method: 'get',
params
})
}
......@@ -16,3 +16,36 @@ export function recruitmentStatistics (params) {
params
})
}
// 用户端-员工信息-通过名字查询
export function getEmployeeInformanceByName (params) {
return request({
url: '/tp/Employee/getEmployeeInformanceByName',
method: 'get',
params
})
}
// 用户端-员工信息
export function getEmployeeInformance (params) {
return request({
url: '/tp/Employee/getEmployeeInformance',
method: 'get',
params
})
}
// 查询相应部门或中心下的入离职统计
export function getYearRms (params) {
return request({
url: '/tp/recruitment/getYearRms',
method: 'get',
params
})
}
// 用户端-员工学历分布
// export function getEmpEdacutionData () {
// return request({
// url: '/tp/Employee/getEmpEdacutionData',
// method: 'get'
// })
// }
......@@ -6,7 +6,7 @@
font-family:PingFang-SC-Medium,PingFang-SC;
box-sizing: border-box;
width: 100%;
padding: .24rem;
padding: 0 .24rem;
margin: 0 auto;
>.row-item {
line-height: 2;
......@@ -20,15 +20,21 @@
box-sizing: border-box;
color: #fff;
width: 100%;
height: 1.3rem;
height: 1.4rem;
overflow-y: auto;
padding: .12rem .24rem;
border-radius: .05rem;
border: 1px solid rgba(48,221,244,1);
background: #09154e;
>span{
float: left;
width: 50%;
.list-body{
padding: .04rem 0;
cursor: pointer;
&:nth-of-type(2n){
background-color: #0d1e5b;
}
&:hover {
background-color: rgba(48,221,244,1);
}
}
}
.babel{
......@@ -55,10 +61,20 @@
cursor: pointer;
}
.iconBlock{
padding: .24rem;
padding: 1rem .24rem;
height:calc(100% - 1.6rem);
margin: 0 auto;
}
.customer-list {
font-size: .14rem;
color: #fff;
padding: .24rem;
padding-top: 0;
height:calc(100% - 1.6rem);
}
.customer-name{
padding: .06rem .12rem;
}
i{
display: inline-block;
position: relative;
......
:root {
--twinkle-duration: 4s;
}
.stars-wrapper {
position: absolute;
top: 0;
pointer-events: none;
width: 100vw;
height: 100vh;
overflow: hidden;
}
.stars {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
-webkit-animation: twinkle var(--twinkle-duration) ease-in-out infinite;
animation: twinkle var(--twinkle-duration) ease-in-out infinite;
}
.stars:nth-child(2) {
-webkit-animation-delay: calc(var(--twinkle-duration) * -0.33);
animation-delay: calc(var(--twinkle-duration) * -0.33);
}
.stars:nth-child(3) {
-webkit-animation-delay: calc(var(--twinkle-duration) * -0.66);
animation-delay: calc(var(--twinkle-duration) * -0.66);
}
@-webkit-keyframes twinkle {
25% {
opacity: 0;
}
}
@keyframes twinkle {
25% {
opacity: 0;
}
}
.star {
fill: rgba(255,255,225,.6);
}
.star:nth-child(3n) {
opacity: 0.4;
}
.star:nth-child(7n) {
opacity: 0.3;
}
.star:nth-child(13n) {
opacity: 0.2;
}
.star:nth-child(19n) {
opacity: 0.1;
}
.comet {
-webkit-transform-origin: center center;
transform-origin: center center;
-webkit-animation: comet 10s linear infinite;
animation: comet 10s linear infinite;
}
@-webkit-keyframes comet {
0%,
40% {
-webkit-transform: translateX(0);
transform: translateX(0);
opacity: 0;
}
50% {
opacity: 1;
}
60%,
100% {
-webkit-transform: translateX(-100vmax);
transform: translateX(-100vmax);
opacity: 0;
}
}
@keyframes comet {
0%,
40% {
-webkit-transform: translateX(0);
transform: translateX(0);
opacity: 0;
}
50% {
opacity: 1;
}
60%,
100% {
-webkit-transform: translateX(-100vmax);
transform: translateX(-100vmax);
opacity: 0;
}
}
.comet-b {
-webkit-animation-delay: -3.3s;
animation-delay: -3.3s;
}
.comet-c {
-webkit-animation-delay: -5s;
animation-delay: -5s;
}
\ No newline at end of file
......@@ -20,4 +20,4 @@ $color-border-3: #EBEEF5;
$color-border-4: #F2F6FC;
// 背景
$color-bg: #000E42;;
$color-bg: #000E42;
......@@ -58,7 +58,7 @@ export default {
],
yAxis: {
type: 'value',
name: '金额 :万元',
name: vm.message.yAxis,
splitLine: {
show: true,
lineStyle: {
......
......@@ -82,6 +82,14 @@ export default {
// 绘制图表
const vm = this
vm.chart.setOption(vm.option)
vm.eventList()
},
eventList () {
const vm = this
vm.chart.off('click')
vm.chart.on('click', function (params) {
vm.$emit('refreshPie', params.name)
})
}
},
watch: {
......
......@@ -14,7 +14,7 @@ export default {
chart: null
}
},
props: ['message', 'idstr', 'noDrill'],
props: ['message', 'idstr', 'noDrill', 'isLeft'],
mounted () {
this.drawLine()
},
......@@ -49,7 +49,7 @@ export default {
{
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '50%'],
center: vm.isLeft ? ['30%', '50%'] : ['50%', '50%'],
label: {
show: false
},
......
......@@ -141,27 +141,37 @@ export default {
data: [data],
top: '1%',
left: '7%',
bottom: '1%',
right: '20%',
left: '1%',
right: '1%',
top: '8%',
bottom: '30%',
symbolSize: 14,
orient: 'vertical',
label: {
position: 'left',
// rotate: -90,
verticalAlign: 'middle',
align: 'right',
fontSize: 12,
color: '#fff'
color: '#fff',
formatter: (val) => {
console.log(val)
return val.name.split('').join('\n')
}
},
leaves: {
label: {
position: 'right',
verticalAlign: 'middle',
position: 'bottom',
// rotate: -90,
verticalAlign: 'top',
align: 'left',
color: '#fff'
color: '#fff',
formatter: (val) => {
return val.name.split('').join('\n')
}
}
},
......
<template>
<div class="stars-wrapper">
<svg class="stars" width="100%" height="100%" preserveAspectRatio="none">
<circle class="star" cx="37.3%" cy="9.18%" r="0.5"></circle>
<circle class="star" cx="75.89%" cy="22.4%" r="1.5"></circle>
<circle class="star" cx="88.67%" cy="39.85%" r="0.6"></circle>
<circle class="star" cx="0.09%" cy="100%" r="1.3"></circle>
<circle class="star" cx="80.4%" cy="40.8%" r="0.8"></circle>
<circle class="star" cx="14.84%" cy="85.07%" r="1"></circle>
<circle class="star" cx="45.8%" cy="41.66%" r="0.6"></circle>
<circle class="star" cx="34.09%" cy="47.77%" r="1.5"></circle>
<circle class="star" cx="38.71%" cy="16.26%" r="1.2"></circle>
<circle class="star" cx="32.29%" cy="77.33%" r="1.3"></circle>
<circle class="star" cx="64.98%" cy="38.48%" r="0.6"></circle>
<circle class="star" cx="52.01%" cy="54.4%" r="1.2"></circle>
<circle class="star" cx="85.95%" cy="50.91%" r="1.2"></circle>
<circle class="star" cx="5.8%" cy="53.26%" r="1.3"></circle>
<circle class="star" cx="22.81%" cy="38.09%" r="1.4"></circle>
<circle class="star" cx="11.21%" cy="6.08%" r="0.5"></circle>
<circle class="star" cx="60.81%" cy="65.87%" r="1"></circle>
<circle class="star" cx="87.69%" cy="69.93%" r="0.7"></circle>
<circle class="star" cx="13.58%" cy="46.91%" r="1.2"></circle>
<circle class="star" cx="51.6%" cy="32.09%" r="0.7"></circle>
<circle class="star" cx="47.54%" cy="20.98%" r="0.9"></circle>
<circle class="star" cx="82.56%" cy="92.52%" r="1.1"></circle>
<circle class="star" cx="63.14%" cy="43.93%" r="0.6"></circle>
<circle class="star" cx="45.68%" cy="14.5%" r="1.1"></circle>
<circle class="star" cx="10.86%" cy="21.85%" r="0.8"></circle>
<circle class="star" cx="84.4%" cy="3.4%" r="1"></circle>
<circle class="star" cx="75.88%" cy="97.15%" r="0.8"></circle>
<circle class="star" cx="25.75%" cy="8.19%" r="1.1"></circle>
<circle class="star" cx="19.18%" cy="66.58%" r="1.5"></circle>
<circle class="star" cx="88.78%" cy="61.2%" r="0.7"></circle>
<circle class="star" cx="32.47%" cy="0.01%" r="0.6"></circle>
<circle class="star" cx="84.38%" cy="41.2%" r="0.9"></circle>
<circle class="star" cx="66.33%" cy="41.77%" r="1"></circle>
<circle class="star" cx="25.04%" cy="87.88%" r="1"></circle>
<circle class="star" cx="71.12%" cy="89.26%" r="1"></circle>
<circle class="star" cx="14.38%" cy="66.74%" r="1"></circle>
<circle class="star" cx="38.42%" cy="88.73%" r="0.7"></circle>
<circle class="star" cx="77.62%" cy="46%" r="0.7"></circle>
<circle class="star" cx="72.33%" cy="51.09%" r="0.7"></circle>
<circle class="star" cx="91.41%" cy="34.87%" r="0.5"></circle>
<circle class="star" cx="78.46%" cy="56.02%" r="1.3"></circle>
<circle class="star" cx="51.58%" cy="91.83%" r="1"></circle>
<circle class="star" cx="16.06%" cy="46.42%" r="0.6"></circle>
<circle class="star" cx="61.21%" cy="12.52%" r="1.2"></circle>
<circle class="star" cx="4%" cy="42.33%" r="1.5"></circle>
<circle class="star" cx="12.7%" cy="71.96%" r="1"></circle>
<circle class="star" cx="46.69%" cy="48.82%" r="0.8"></circle>
<circle class="star" cx="44.38%" cy="18.71%" r="1.3"></circle>
<circle class="star" cx="17.78%" cy="44.18%" r="0.8"></circle>
<circle class="star" cx="43.4%" cy="56.16%" r="0.7"></circle>
</svg>
<svg class="extras" width="100%" height="100%" preserveAspectRatio="none">
<defs>
<radialGradient id="comet-gradient" cx="0" cy=".5" r="0.5">
<stop offset="0%" stop-color="rgba(255,255,255,.8)"></stop>
<stop offset="100%" stop-color="rgba(255,255,255,0)"></stop>
</radialGradient>
</defs>
<g transform="rotate(-135)">
<ellipse class="comet comet-a" fill="url(#comet-gradient)" cx="0" cy="0" rx="150" ry="2"></ellipse>
</g>
<g transform="rotate(20)">
<ellipse class="comet comet-b" fill="url(#comet-gradient)" cx="100%" cy="0" rx="150" ry="2"></ellipse>
</g>
<g transform="rotate(300)">
<ellipse class="comet comet-c" fill="url(#comet-gradient)" cx="40%" cy="100%" rx="150" ry="2"></ellipse>
</g>
</svg>
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss" scoped>
@import '~@/assets/style/start.scss';
</style>
......@@ -11,7 +11,7 @@
<div class="flex-1">
<div class="box">
<div class="boxTitle">商机总数<span>(个)</span></div>
<div class="boxValue">{{totalObj.opportunitiesNumber}}</div>
<div class="boxValue">{{totalObj.opportunitiesNumber|| 0}}</div>
</div>
<div class="box">
<div class="boxTitle">整体预算<span>(百万)</span></div>
......@@ -33,7 +33,7 @@
<div class="flex-1">
<div class="box">
<div class="boxTitle">售前参与<span>(个)</span></div>
<div class="boxValue">{{totalObj.saler}}</div>
<div class="boxValue">{{totalObj.saler || 0}}</div>
</div>
<div class="box">
<div class="boxTitle">预计成本<span>(百万)</span></div>
......@@ -65,7 +65,7 @@
<div class="flex-1 d-flex">
<div class="flex-1">
<div class="title">商机阶段分析</div>
<funnel :message="bussionStep" :idstr="'bussionStep'" class="heightCut44"></funnel>
<funnel :message="bussionStep" @refreshPie="refreshPie" :idstr="'bussionStep'" class="heightCut44"></funnel>
</div>
<div class="flex-1">
<div class="title">商机类型</div>
......@@ -111,6 +111,7 @@ export default {
data () {
return {
chartActive: 'number',
stepActive: '',
totalObj: {}, // 商机统计
industry: '',
// 行业分布
......@@ -142,9 +143,9 @@ export default {
this.getProductType()
this.getNewOpportunities()
this.getBillRate()
this.getBigetOpportunitiesByNumberOrMoneyllRate()
this.getOpportunitiesByStep()
this.getOpportunitiesByDept('', false)
this.getOpportunitiesByStep()
this.getOpportunitiesByNumberOrMoney()
},
filters: {
numFilter (value) {
......@@ -181,6 +182,7 @@ export default {
async getOpportunitiesDistribution () {
const _data = await API_BUSSINESS.getOpportunitiesDistribution()
this.bussionDistribute = _data.data
this.bussionDistribute.yAxis = '单位 :个'
},
// 合同税率
async getTaxRate () {
......@@ -225,12 +227,17 @@ export default {
// q切换数量和金额
changeType (item) {
this.chartActive = item
this.getBigetOpportunitiesByNumberOrMoneyllRate()
this.getOpportunitiesByNumberOrMoney()
this.getOpportunitiesByDept()
},
// 点击漏斗图 切换饼图数据
refreshPie (item) {
this.stepActive = item
this.getOpportunitiesByNumberOrMoney()
},
// 商机阶段分析-中间饼图
async getBigetOpportunitiesByNumberOrMoneyllRate () {
const _data = await API_BUSSINESS.getBigetOpportunitiesByNumberOrMoneyllRate({ name: this.chartActive })
async getOpportunitiesByNumberOrMoney () {
const _data = await API_BUSSINESS.getOpportunitiesByNumberOrMoney({ name: this.chartActive, step: this.stepActive || null })
this.bussionType = {
legend: _data.data.legend,
data: _data.data.data.map(item => {
......
<template>
<div>
<div class="d-flex search-box jc-end">
<el-select v-model="selectYear" size="mini">
<el-select v-model="selectYear" size="mini" @change="getAnalysis">
<el-option
v-for="item in yearList"
:key="item"
......@@ -16,26 +16,30 @@
<script>
import pieChart from '@/components/echarts/pieChart' // 饼图
import * as API_CLIENT from '@/api/con.client.js'
export default {
components: { pieChart },
data () {
return {
selectYear: '2020',
yearList: ['2021', '2020', '2019', '2018', '2017'],
dataList: { // 服务分析
legend: ['软件解决方案', '云产品及服务', '系统集成及IT服务'],
data: [
{ value: 335, name: '软件解决方案' },
{ value: 310, name: '云产品及服务' },
{ value: 234, name: '系统集成及IT服务' }
]
}
selectYear: '',
yearList: [],
dataList: {} // 服务分析
}
},
mounted () {
this.getAnalysisYear()
},
methods: {
async getAnalysisYear () {
const _data = await API_CLIENT.getAnalysisYear()
this.yearList = _data.data
this.selectYear = _data.data[0]
this.getAnalysis()
},
async getAnalysis () {
const _data = await API_CLIENT.getAnalysis({ year: this.selectYear })
this.dataList = _data.data
}
}
}
</script>
......
......@@ -11,33 +11,33 @@
<div class="flex-1">
<div class="box">
<div class="boxTitle">客户总数<span>(个)</span></div>
<div class="boxValue">{{totalObj}}</div>
<div class="boxValue">{{totalObj.allCustomer }}</div>
</div>
<div class="box">
<div class="boxTitle">商机客户<span>(个)</span></div>
<div class="boxValue">{{totalObj}}</div>
<div class="boxValue">{{totalObj.opportunitiesCustomer }}</div>
</div>
</div>
<div class="horizontal"></div>
<div class="flex-1">
<div class="box">
<div class="boxTitle">集成商<span>(个)</span></div>
<div class="boxValue">{{totalObj}}</div>
<div class="boxValue">{{totalObj.projectCustomer }}</div>
</div>
<div class="box">
<div class="boxTitle">本年新增<span>(个)</span></div>
<div class="boxValue">{{totalObj}}</div>
<div class="boxValue">{{totalObj.newCustomer }}</div>
</div>
</div>
<div class="horizontal"></div>
<div class="flex-1">
<div class="box">
<div class="boxTitle">优秀案例<span>(个)</span></div>
<div class="boxValue">500</div>
<div class="boxValue">{{totalObj.excellentCustomer }}</div>
</div>
<div class="box">
<div class="boxTitle">本年活跃<span>(个)</span></div>
<div class="boxValue">29</div>
<div class="boxValue">{{totalObj.activeCustomer }}</div>
</div>
</div>
<div class="horizontal horizontal1 "></div>
......@@ -75,99 +75,62 @@
<div class="row-item d-flex jc-between">
<div class="flex-1">
<span class="babel">客户名称</span>
<span class="babelMsg pr-24">
<template>
<span v-if="customername.name == ''"></span>
<span v-else>{{ customername.name }}</span>
</template>
</span>
<span class="babelMsg pr-24">{{ companyInfo.customerName|| '无' }}</span>
</div>
<div class="flex-1">
<span class="babel">客户规模</span>
<span class="babelMsg">3000人以上</span>
<span class="babelMsg">{{companyInfo.customerSize}}</span>
</div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1"><span class="babel">客户属性</span><span class="babelMsg pr-24">IT服务</span></div>
<div class="flex-1"><span class="babel">所在省份</span><span class="babelMsg">河北省</span></div>
<div class="flex-1"><span class="babel">客户属性</span><span class="babelMsg pr-24">{{companyInfo.customerAttribute}}</span></div>
<div class="flex-1"><span class="babel">所在省份</span><span class="babelMsg">{{companyInfo.province}}</span></div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1">
<span class="babel">联系人</span>
<span class="babelMsg pr-24">
<template>
<span v-if="customername.person == ''"></span>
<span v-else>{{ customername.person }}</span>
</template>
</span>
</div>
<div class="flex-1">
<span class="babel">联系方式</span>
<span class="babelMsg">
<template>
<span v-if="customername.phone == ''"></span>
<span v-else>{{ customername.phone }}</span>
</template>
</span>
<div class="flex-1"><span class="babel">联系人</span><span class="babelMsg pr-24">{{ companyInfo.applicantName ||'无' }}</span></div>
<div class="flex-1"><span class="babel">协同销售</span><span class="babelMsg">{{companyInfo.salesName}}</span></div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1"><span class="babel">主责任人</span><span class="babelMsg pr-24">{{ companyInfo.chargePersonName ||'无' }}</span></div>
<div class="flex-1"><span class="babel">项目数</span><span class="babelMsg">{{companyInfo.projectNum}}</span></div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1"><span class="babel">主责任人</span><span class="babelMsg pr-24">李裙裙</span></div>
<div class="flex-1"><span class="babel">协同销售</span><span class="babelMsg">张苗苗</span></div>
<div class="flex-1"><span class="babel">商机数</span><span class="babelMsg">{{companyInfo.nicheNum}}</span></div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1"><span class="babel">商机数</span><span class="babelMsg pr-24">{{customername.nicheNum}}</span></div>
<div class="flex-1"><span class="babel">项目数</span><span class="babelMsg">{{customername.projectNum}}</span></div>
<div class="flex-1">
<span class="babel">联系方式</span>
<span class="babelMsg">{{companyInfo.postalAddress || '无'}}</span>
</div>
</div>
<div class="row-item d-flex jc-between">
<div class="flex-1">
<span class="babel">备注说明</span>
<span class="babelMsg">{{customername.remark || '无'}}</span>
<span class="babelMsg">{{companyInfo.remark || '无'}}</span>
</div>
</div>
<div class="row-product">
<div class="c-title">项目</div>
<div class="row-product mt-2">
<div class="c-list">
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
<span>XXXXXX项目</span>
</div>
</div>
<div class="row-business">
<div class="c-title">商机</div>
<div class="c-title d-flex">
<span class="flex-1">序号</span>
<span class="flex-4">项目名称</span>
</div>
<div class="list-body d-flex" v-for="(item,index) in companyInfo.projects" :key="index">
<span class="flex-1">{{index+1}}</span>
<span class="flex-4">{{item}}</span>
</div>
</div>
</div>
<div class="row-business mt-2">
<div class="c-list">
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<span>XXXXXX商机</span>
<div class="c-title d-flex">
<span class="flex-1">序号</span>
<span class="flex-4">商机名称</span>
</div>
<div class="list-body d-flex" v-for="(item,index) in companyInfo.niches" :key="index">
<span class="flex-1">{{index+1}}</span>
<span class="flex-4">{{item}}</span>
</div>
</div>
</div>
</div>
......@@ -185,31 +148,21 @@
<div class="boxHeight-3 mt-2">
<div class="title">重要客户</div>
<div class="d-flex search-box jc-end">
<el-select v-model="selectYear" size="mini">
<el-select v-model="selectYear" size="mini" @change="getImportantCus">
<el-option
v-for="item in yearList"
:key="item"
:label="item"
:value="item">
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<span class="moreTxt">更多</span>
</div>
<div class="iconBlock">
<i class="icon20 icon-datangjituan"></i>
<i class="icon20 icon-zhongguoshiyou"></i>
<i class="icon20 icon-changjiangdianli"></i>
<i class="icon20 icon-datangjituan"></i>
<i class="icon20 icon-zhongguoshiyou"></i>
<i class="icon20 icon-changjiangdianli"></i>
<i class="icon5 icon-guojiadianwang"></i>
<div class="customer-list">
<div class="customer-name" v-for="(item,index) in customerList" :key="index">{{item}}</div>
</div>
</div>
<div class="boxHeight-3 mt-2">
<div class="title">合作伙伴</div>
<div class="d-flex search-box jc-end">
<span class="moreTxt">更多</span>
</div>
<div class="iconBlock">
<i class="icon20 icon-datangjituan"></i>
<i class="icon20 icon-zhongguoshiyou"></i>
......@@ -239,18 +192,29 @@ export default {
customDistribute: {}, // 地区分布
clientAnalysis: {}, // 客户分析
state: '',
customername: {},
selectYear: '综合', // 选中重要客户项
yearList: ['综合', '按资金', '按项目'] // 重要客户下拉框
companyInfo: {},
selectYear: '1', // 选中重要客户项
yearList: [
{ id: '1', name: '综合' },
{ id: '2', name: '按资金' },
{ id: '3', name: '按项目' }
], // 重要客户下拉框
customerList: [] // 重要客户
}
},
mounted () {
this.GetCustomerInfo()
this.getCustomerByProvince()
this.getDistribution()
this.getCustomerByAmount()
this.getImportantCus()
this.getStatisticsCustomer()
},
methods: {
// 客户统计
async getStatisticsCustomer () {
const _data = await API_CLIENT.getStatisticsCustomer()
this.totalObj = _data.data
},
// 行业分布
async getDistribution () {
const _data = await API_CLIENT.getCustomerByCustomerAttribute()
......@@ -269,24 +233,25 @@ export default {
async getCustomerByProvince () {
const _data = await API_CLIENT.getCustomerByProvince()
this.customDistribute = _data.data
this.customDistribute.yAxis = '单位 :个'
},
// 合同分布
async getCustomerByAmount () {
const _data = await API_CLIENT.getCustomerByAmount()
this.clientAnalysis = _data.data
},
// 默认展示公司信息
GetCustomerInfo () {
API_CLIENT.CustomerInfo().then(res => {
this.customername = res.data
})
// 中要客户
async getImportantCus () {
const _data = await API_CLIENT.getImportantCus({ type: this.selectYear })
this.customerList = _data.data.map(item => item.customerName)
this.handleSelect(_data.data[0])
},
// 输入公司名称触发
querySearch (queryString, cb) {
API_CLIENT.GetCustomerName(queryString).then(res => {
API_CLIENT.GetCustomerName({ customerName: queryString }).then(res => {
const customerData = res.data
for (var i = 0; i < customerData.length; i++) {
customerData[i].value = customerData[i].name
customerData[i].value = customerData[i].customerName
}
cb(customerData)
})
......@@ -294,7 +259,7 @@ export default {
// 点击下拉列表出发
handleSelect (item) {
API_CLIENT.GetCustomerId(item.id).then(res => {
this.customername = res.data
this.companyInfo = res.data
})
}
}
......
......@@ -9,7 +9,7 @@
:value="item.id">
</el-option>
</el-select>
<el-select v-model="selectYear" size="mini" style="width:1.4rem;" @change="getCashFlow">
<el-select v-model="selectYear" size="mini" @change="getCashFlow">
<el-option
v-for="item in yearList"
:key="item"
......@@ -57,7 +57,7 @@ export default {
this.dataList = _data.data
this.dataList.data.inflow = _data.data.data.inflow.map(item => item.value)
this.dataList.data.flowOut = _data.data.data.flowOut.map(item => -item.value)
this.dataList.data.netInflow = _data.data.data.netInflow.map(item => -item.value)
this.dataList.data.netInflow = _data.data.data.netInflow.map(item => item.value)
}
}
}
......
......@@ -55,7 +55,8 @@ export default {
isLeaf: isLeaf,
xAxis: _data.data.xAxis,
idxs: _data.data.idxs,
data: _data.data.data
data: _data.data.data,
yAxis: '单位:万元'
}
},
downData (item) {
......
......@@ -45,7 +45,8 @@ export default {
isLeaf: isLeaf,
xAxis: _data.data.xAxis,
idxs: _data.data.idxs,
data: _data.data.data
data: _data.data.data,
yAxis: '单位:万元'
}
},
downData (item) {
......
......@@ -18,7 +18,7 @@
</div>
<div class="centerBlock">
<div class="centerBoxHeight-3">
<div class="title">回款</div>
<div class="title">回款统计</div>
<receiptStatistics class="heightCut44"/>
</div>
<div class="centerBoxHeight-3 mt-2">
......
......@@ -56,9 +56,10 @@ export default {
}
}
.org-content {
text-align: center;
color: #fff;
font-size: .14rem;
width: 10.8rem;
width: 100%;
height: 7.89rem;
margin: 0 auto;
}
......
<template>
<div class="staff-box">
<div class="d-flex search-box jc-center">
<div class="search">
<el-autocomplete
class="inline-input"
v-model="input"
size="mini"
clearable
:fetch-suggestions="querySearch"
placeholder="请输入员工名称"
:trigger-on-focus="false"
@select="handleSelect"
></el-autocomplete>
<el-button class="searchBtn" type="text">搜索</el-button>
</div>
</div>
<div class="tab-box">
<span
class="tab-btn"
......@@ -14,11 +29,11 @@
<el-col span="12">
<div class="item-box d-flex jc-between">
<span class="label">姓名</span>
<span class="text">赵忠祥</span>
<span class="text">{{employeeInfo.name}}</span>
</div>
<div class="item-box d-flex jc-between">
<span class="label">职位</span>
<span class="text">主持人</span>
<span class="text">{{employeeInfo.position}}</span>
</div>
</el-col>
......@@ -36,11 +51,11 @@
<el-col span="24">
<div class="item-box d-flex jc-between">
<span class="label">电话</span>
<span class="text">13242321122</span>
<span class="text">{{employeeInfo.phone}}</span>
</div>
<div class="item-box d-flex jc-between">
<span class="label">邮箱</span>
<span class="text">zhaozongxiang@163.cn</span>
<span class="text">{{employeeInfo.email}}</span>
</div>
</el-col>
</el-row>
......@@ -50,10 +65,12 @@
</template>
<script>
import * as API_ORGAN from '@/api/con.organ'
export default {
name: 'staff',
data () {
return {
input: '',
isActive: 0,
tabList: [
{ name: '基本信息', id: 1 },
......@@ -63,7 +80,31 @@ export default {
{ name: '项目经验', id: 5 },
{ name: '绩效呈现', id: 6 },
{ name: '素质评价', id: 7 }
]
],
employeeInfo: {}
}
},
mounted () {
const userId = sessionStorage.getItem('user') ? JSON.parse(sessionStorage.getItem('user')).id : ''
this.handleSelect(userId)
},
methods: {
// 根据name查id
querySearch (queryString, cb) {
console.log(queryString)
API_ORGAN.getEmployeeInformanceByName({ name: queryString }).then(res => {
const _data = res.data
for (var i = 0; i < _data.length; i++) {
_data[i].value = _data[i].name
}
cb(_data)
})
},
// 点击下拉列表搜索
handleSelect (item) {
API_ORGAN.getEmployeeInformance({ empId: item || null }).then(res => {
this.employeeInfo = res.data
})
}
}
}
......
......@@ -60,30 +60,7 @@
</div>
<div class="centerBlock">
<div class="content">
<div class="d-flex search-box">
<el-select v-model="value" size="mini">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div class="search">
<el-autocomplete
class="inline-input"
v-model="input"
size="mini"
clearable
:fetch-suggestions="querySearch"
placeholder="请输入公司名称"
:trigger-on-focus="false"
@select="handleSelect"
></el-autocomplete>
<el-button class="searchBtn" type="text">搜索</el-button>
</div>
</div>
<staffInfo :searchId="input"/>
<staffInfo/>
</div>
<div class="centerBoxHeight-3 mt-2">
<div class="title">入/离职统计</div>
......@@ -123,15 +100,6 @@ export default {
components: { headerLayout, pieChart, barChart, waterBall, lineChart, peopleCounting, staffInfo },
data () {
return {
options: [
{
value: 1,
label: '员工名称'
}, {
value: 2,
label: '证书名称'
}
],
dataList: {
parentId: '',
idxs: [1, 2, 3, 4, 5],
......@@ -143,10 +111,9 @@ export default {
{ id: 4, value: 162.2, parent: '', isLeaf: false },
{ id: 5, value: 32.6, parent: '', isLeaf: false }
]
},
performActive: 1,
distributeActive: 1,
input: '',
}, // 上月绩效
performActive: 1, // 上月绩效
distributeActive: 1, // 人员分布
jobDistribution: {
legend: ['技术岗', '销售岗', '管理岗', '职能岗', '其他岗'],
data: [
......@@ -156,35 +123,14 @@ export default {
{ value: 135, name: '职能岗' },
{ value: 548, name: '其他岗' }
]
},
refundAmountLine: {
legend: ['简历数', '面试数', '发放offer', '入职'],
xAxis: ['1月', '2月', '3月', '4月', '5月', '6月', '7月'],
data: [{
name: '简历数',
data: [820, 932, 901, 934, 1290, 1330, 620],
type: 'line'
},
{
name: '面试数',
data: [420, 532, 701, 434, 290, 330, 120],
type: 'line'
}, {
name: '发放offer',
data: [520, 232, 401, 334, 790, 830, 320],
type: 'line'
},
{
name: '入职',
data: [620, 732, 101, 234, 690, 530, 520],
type: 'line'
}]
},
recruitment: {}
}, // 人员分布
refundAmountLine: {}, // 入离职统计
recruitment: {} // 人才招聘
}
},
mounted () {
this.recruitmentStatistics()
this.getYearRms()
},
methods: {
// 获取人才招聘信息
......@@ -204,13 +150,22 @@ export default {
name: '离职率'
}
},
querySearch (queryString, cb) {
// cb()
},
handleSelect (item) {
// 获取入离职统计
async getYearRms () {
const _data = await API_ORGAN.getYearRms()
this.refundAmountLine = {
legend: _data.data.legend,
xAxis: _data.data.xAxis,
data: _data.data.data.map(item => {
return {
name: item.name,
data: item.data,
type: 'line'
}
})
}
},
// 上月绩效下钻
downData (item) {
// console.log('传来的值:', item)
setTimeout(() => {
......@@ -259,6 +214,7 @@ export default {
}
}, 0)
},
// 跳转组织机构详情
orgDetail () {
this.$router.push('/orgDetail')
}
......
......@@ -3,7 +3,7 @@
<div class="title">全国</div>
<div class="content d-flex">
<div class="flex-1">
<pieChart :message="itemNationWide" :noDrill="true" idstr="itemNationWide" class="heightCut44"></pieChart>
<pieChart :message="itemNationWide" :noDrill="true" :isLeft="type=='4'" idstr="itemNationWide" class="h-100"></pieChart>
<p v-if="type=='4'">共计客户 <strong>{{message.allCustomerNumber}}</strong></p>
<p v-if="type=='3'">共计商机 <strong>{{message.allOpportunitiesNumber}}</strong></p>
<p v-if="type=='1'">共计项目 <strong>{{message.allProjectNumber}}</strong></p>
......@@ -13,7 +13,7 @@
<div class="d-flex flex-column">
<div class="text-box">
<label>本年度签署合同</label>
<span>{{message.contactMoney|moneyFormat(8)|numFormat}} 亿</span>
<span>{{message.contactMoney|moneyFormat(4)|numFormat}} 万元</span>
</div>
<div class="text-box">
<label>相关产品</label>
......@@ -29,11 +29,11 @@
<div class="d-flex flex-column">
<div class="text-box">
<label>预计总收入</label>
<span>{{message.allRevenueMoney|moneyFormat(8)|numFormat}} 亿</span>
<span>{{message.allRevenueMoney|moneyFormat(4)|numFormat}} 万元</span>
</div>
<div class="text-box">
<label>预计总成本</label>
<span>{{message.allCostMoney|moneyFormat(8)|numFormat}} 亿</span>
<span>{{message.allCostMoney|moneyFormat(4)|numFormat}} 万元</span>
</div>
<div class="text-box">
<label>参与售前</label>
......@@ -110,18 +110,23 @@ export default {
font-size: .16rem;
color: #fff;
text-align: center;
margin-top: -.05rem;
}
.sum-box {
border-left: 1px solid #30DDF4;
padding-top: .24rem;
}
.text-box {
text-align: center;
padding: 0 .3rem;
flex: 1;
font-family: PingFang-SC-Medium;
font-size: .16rem;
line-height: 2;
color: #FFFFFF;
label {
width: 1.4rem;
display: inline-block;
}
span {
padding-left: .24rem;
font-family: ZhenyanGB-Regular;
......
......@@ -36,8 +36,15 @@
</div>
</div>
<h3>关系筛选</h3>
<div style="padding-left:30px;color:#fff;">
群智合
<span class="pointer" style="background-color:#f40;"></span>
</div>
<el-checkbox-group v-model="checked">
<el-checkbox :disabled="value==item.value" v-for="item in checkList" :key="item.value" :label="item.value">{{item.name}}</el-checkbox>
<el-checkbox :disabled="value==item.value" v-for="item in checkList" :key="item.value" :label="item.value">
{{item.name}}
<span class="pointer" :style="{'background-color':item.color}"></span>
</el-checkbox>
</el-checkbox-group>
<div class="inquire" @click="handleChange">查询</div>
</div>
......@@ -90,11 +97,11 @@ export default {
knowledData: [],
checked: [1, 2, 3, 4, 5],
checkList: [
{ name: '项目', value: 1 },
{ name: '销售', value: 2 },
{ name: '商机', value: 3 },
{ name: '客户', value: 4 },
{ name: '成员', value: 5 }
{ name: '项目', value: 1, color: '#8419c7' },
{ name: '销售', value: 2, color: '#b9c719' },
{ name: '商机', value: 3, color: '#199fc7' },
{ name: '客户', value: 4, color: '#4f19c7' },
{ name: '成员', value: 5, color: '#69c719' }
],
value: '',
topoData: {} // 接收到的topo数据
......@@ -198,6 +205,12 @@ export default {
padding-top: .5rem;
position: relative;
margin-top: .1rem;
.pointer {
display: inline-block;
width: .08rem;
height: .08rem;
border-radius: 50%;
}
h3{
width: calc(100% - .2rem);
font-size:.16rem;
......
......@@ -402,7 +402,7 @@ export default {
if (geoCoord) {
res.push({
name: this.message[i].province,
value: geoCoord.concat(this.message[i][type])
value: geoCoord.concat(this.message[i][type] || 0)
})
}
}
......
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