|
@@ -65,27 +65,85 @@
|
|
|
<div class="value">39</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="cover-range"></div>
|
|
|
+ <div class="desc-text">覆盖4个大区:北京、天津、武汉、广州</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div></div>
|
|
|
</div>
|
|
|
<div
|
|
|
class="card m-t-15px"
|
|
|
style="height: calc((100% - 206px) * 4 / 7)"
|
|
|
- ></div>
|
|
|
+ >
|
|
|
+ <div class="title">
|
|
|
+ <span class="label">项目角色待调配额盘点</span>
|
|
|
+ </div>
|
|
|
+ <div class="box4">
|
|
|
+ <div class="charts-box">
|
|
|
+ <div class="chart-item">
|
|
|
+ <div class="chart-wrap">
|
|
|
+ <my-chart :options="options4"></my-chart>
|
|
|
+ </div>
|
|
|
+ <div class="title-wrap">实施工程师</div>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <div class="chart-wrap">
|
|
|
+ <my-chart :options="options5"></my-chart>
|
|
|
+ </div>
|
|
|
+ <div class="title-wrap">区域协调人</div>
|
|
|
+ </div>
|
|
|
+ <div class="chart-item">
|
|
|
+ <div class="chart-wrap">
|
|
|
+ <my-chart :options="options6"></my-chart>
|
|
|
+ </div>
|
|
|
+ <div class="title-wrap">助理工程师</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="desc-text">
|
|
|
+ <p>大区内同业务类型待划拨派单数量:3个</p>
|
|
|
+ <p>当前大区覆盖城市:2个</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="card m-t-15px" style="height: 80px">
|
|
|
<div class="title">
|
|
|
<span class="label">项目配额完成进度</span>
|
|
|
</div>
|
|
|
+ <div class="bar-box flex items-center">
|
|
|
+ <div class="process-box">
|
|
|
+ <div class="process" :style="{ width: '20%' }"></div>
|
|
|
+ </div>
|
|
|
+ <span class="process-text m-l-10px">20%</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="card m-t-15px" style="height: 80px">
|
|
|
<div class="title">
|
|
|
<span class="label">人员配额完成进度</span>
|
|
|
</div>
|
|
|
+ <div class="bar-box flex items-center">
|
|
|
+ <div class="process-box">
|
|
|
+ <div class="process" :style="{ width: '90%' }"></div>
|
|
|
+ </div>
|
|
|
+ <span class="process-text m-l-10px">90%</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="col3">
|
|
|
+ <div class="card">
|
|
|
+ <div class="title">
|
|
|
+ <span class="label">设备供应商设备使用占比</span>
|
|
|
+ </div>
|
|
|
+ <div style="height: calc(100% - 36px)">
|
|
|
+ <my-chart :options="options7"></my-chart>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="card">
|
|
|
+ <div class="title">
|
|
|
+ <span class="label">大区在服务人数分布及对比</span>
|
|
|
+ </div>
|
|
|
+ <div style="height: calc(100% - 36px)">
|
|
|
+ <my-chart :options="options8"></my-chart>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="col3"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -98,12 +156,14 @@ import {
|
|
|
createWaterBallOption,
|
|
|
createRingPieOption,
|
|
|
createCakePieOption,
|
|
|
+ createStackingBarOption,
|
|
|
} from '@/utils/chart';
|
|
|
const curTimeRange = ref([]);
|
|
|
const serviceId = ref('');
|
|
|
const options1 = createWaterBallOption({
|
|
|
data: 23.5 / 100,
|
|
|
title: '项目执行进度',
|
|
|
+ radius: '80%',
|
|
|
});
|
|
|
const options2 = createRingPieOption(
|
|
|
{
|
|
@@ -120,17 +180,17 @@ const options2 = createRingPieOption(
|
|
|
{ name: 'HHHH', value: 72 },
|
|
|
],
|
|
|
title: '派单数',
|
|
|
- center: ['50%', '35%'],
|
|
|
+ center: ['50%', '25%'],
|
|
|
seriesName: '数量',
|
|
|
- radius: [45, 65],
|
|
|
+ radius: [40, 60],
|
|
|
},
|
|
|
{
|
|
|
legend: {
|
|
|
- type: 'scroll',
|
|
|
+ // type: 'scroll',
|
|
|
orient: 'horizontal',
|
|
|
top: null,
|
|
|
right: null,
|
|
|
- bottom: '10%',
|
|
|
+ bottom: '0%',
|
|
|
left: 'center',
|
|
|
},
|
|
|
}
|
|
@@ -159,6 +219,70 @@ const options3 = createCakePieOption(
|
|
|
// },
|
|
|
}
|
|
|
);
|
|
|
+
|
|
|
+const options4 = createWaterBallOption({
|
|
|
+ data: 65 / 100,
|
|
|
+ title: '剩130配额',
|
|
|
+ radius: '80%',
|
|
|
+});
|
|
|
+const options5 = createWaterBallOption({
|
|
|
+ data: 35 / 100,
|
|
|
+ title: '剩34配额',
|
|
|
+ radius: '80%',
|
|
|
+ color: '35, 195, 67',
|
|
|
+});
|
|
|
+const options6 = createWaterBallOption({
|
|
|
+ data: 55 / 100,
|
|
|
+ title: '剩14配额',
|
|
|
+ radius: '80%',
|
|
|
+ color: '255, 154, 46',
|
|
|
+});
|
|
|
+const options7 = createCakePieOption(
|
|
|
+ {
|
|
|
+ data: [
|
|
|
+ { name: 'AAAA', value: 32 },
|
|
|
+ { name: 'BBBB', value: 39 },
|
|
|
+ { name: 'CCCC', value: 69 },
|
|
|
+ { name: 'DDDD', value: 19 },
|
|
|
+ { name: 'EEEE', value: 69 },
|
|
|
+ { name: 'FFFF', value: 9 },
|
|
|
+ ],
|
|
|
+ radius: [0, 60],
|
|
|
+ center: ['50%', '30%'],
|
|
|
+ seriesName: '设备使用占比',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ legend: {
|
|
|
+ // type: 'scroll',
|
|
|
+ orient: 'horizontal',
|
|
|
+ top: null,
|
|
|
+ right: null,
|
|
|
+ bottom: '0%',
|
|
|
+ left: 'center',
|
|
|
+ },
|
|
|
+ }
|
|
|
+);
|
|
|
+
|
|
|
+const options8 = createStackingBarOption(
|
|
|
+ {
|
|
|
+ xData: [
|
|
|
+ '北京',
|
|
|
+ '上海',
|
|
|
+ '武汉',
|
|
|
+ '天津',
|
|
|
+ '广州',
|
|
|
+ '南京',
|
|
|
+ '长沙',
|
|
|
+ '青海',
|
|
|
+ '福建',
|
|
|
+ ],
|
|
|
+ seriesData: [
|
|
|
+ { name: '阳光雨露', data: [322.1, 421.4, 100.9, 662, 200.03] },
|
|
|
+ { name: '软通智服', data: [990.84, 400, 343.5, 200.3, 552] },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {}
|
|
|
+);
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
@@ -198,12 +322,72 @@ const options3 = createCakePieOption(
|
|
|
width: calc(100% - 566px);
|
|
|
margin-left: 15px;
|
|
|
margin-right: 15px;
|
|
|
+ .process-text {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #262626;
|
|
|
+ width: 40px;
|
|
|
+ }
|
|
|
+ .process-box {
|
|
|
+ flex: 1;
|
|
|
+ background-color: #d9d9d9;
|
|
|
+ height: 6px;
|
|
|
+ border-radius: 3px;
|
|
|
+ overflow: hidden;
|
|
|
+ .process {
|
|
|
+ background-color: #4080ff;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .box4 {
|
|
|
+ height: calc(100% - 36px);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ .charts-box {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-around;
|
|
|
+ .chart-item {
|
|
|
+ width: 33.3%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ .chart-wrap {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+ .title-wrap {
|
|
|
+ text-align: center;
|
|
|
+ color: #595959;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .desc-text {
|
|
|
+ margin-top: 10px;
|
|
|
+ background-color: #f7f7f7;
|
|
|
+ border-radius: 2px;
|
|
|
+ padding: 8px 15px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #262626;
|
|
|
+ height: 58px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-around;
|
|
|
+ }
|
|
|
+ }
|
|
|
.box3 {
|
|
|
height: calc(100% - 36px);
|
|
|
.gird3-others {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
justify-content: space-around;
|
|
|
+ .desc-text {
|
|
|
+ background-color: #f7f7f7;
|
|
|
+ border-radius: 2px;
|
|
|
+ padding: 8px 15px;
|
|
|
+ line-height: 1.4;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #262626;
|
|
|
+ }
|
|
|
.num-show {
|
|
|
.desc {
|
|
|
.label {
|