Тип диаграммы: кольцевая.
Особенность: в зависимости от процентов меняется цвет диаграммы и ее заполнение соответственно.
Характеристики: меньше 30% - красный, от 31 до 75 - желтый, от 76 до 100 - зеленый.
Визуальный пример:
Разметка в основном компоненте:
<div class="medicine-medical">
<div class="medicine-medical_transform transform">
<div class="notransform">
<span>Медосмотр</span>
</div>
</div>
<div class="medicine-medical_block">
<chart :userMedicalMedical="+worker.medinspection"/>
<div class="img" ref="imgMedical"></div>
<div class="data" ref="dataMedical"><p>{{worker.medinspection}} дн.</p></div>
</div>
</div>
Код из компонента с диаграммой:
<template>
<div class="chart-window">
<svg width='60px' height='60px'>
<circle cx='25' cy='25' r='41%' fill='transparent' stroke-width='1'></circle>
<circle cx='25' cy='25' r='37%' fill='transparent' stroke-width='5'></circle>
<circle ref="diagrammMin" cx='25' cy='25' r='35%' fill='transparent' stroke-width='5'></circle>
<circle ref="diagramm" cx='25' cy='25' r='35%' fill='transparent' stroke-width='5'></circle>
</svg>
</div>
</template>
<script>
export default {
name: "employeeCardChart",
props: {
userMedicalMedical: Number,
percent: Number,
userMedicalReplacement: Array,
training: Object,
worker: Object
},
data: function () {
return {
warning: false,
danger: false,
flor: false,
perpetual: false
}
},
methods: {
/***
* функция checkData - проверяет наличие полей и в дальнейшем, если есть, тогда изменяет стили диаграммы
* Выходные параметры :
* this.warning,this.danger,this,flor - ячейки дял хранения булевых значений -
* в дальнейшем нужны для определения приоритета оповещения
* diagramm - переменная содержащая в себе атрибут refs диаграммы ( участок, который изменяется от данных -
* цвет и положение )
*
*/
checkData() {
// если есть this.userMedicalMedical - МЕДОСМОТР
if (this.userMedicalMedical) {
let diagrammMin = this.$refs.diagrammMin;
let diagramm = this.$refs.diagramm;
if (this.userMedicalMedical >= 30) {
diagramm.style.strokeDasharray = '132 131';
diagramm.style.stroke = 'rgba(50, 50, 60, 1)'
} else if (this.userMedicalMedical <= 29 && this.userMedicalMedical >= 21) {
diagrammMin.style.stroke = 'rgba(239, 127, 26, 1'; // для внутреннего бордера
diagramm.style.stroke = 'rgb(230, 230, 230)'; //для внешнего бордера
diagramm.style.strokeDasharray = '78 41'; // положение внешнего бордера
this.$refs.diagrammMin.style.strokeDasharray = '38 41.5';
} else if (this.userMedicalMedical <= 20 && this.userMedicalMedical >= 14) {
diagrammMin.style.stroke = 'rgba(239, 127, 26, 1'; // для внутреннего бордера
diagramm.style.stroke = 'rgb(230, 230, 230)'; //для внешнего бордера
this.$refs.diagrammMin.style.strokeDasharray = '63 3.8';
diagramm.style.strokeDasharray = '65 67';
} else if (this.userMedicalMedical <= 13 && this.userMedicalMedical >= 7) {
diagrammMin.style.stroke = 'rgba(239, 127, 26, 1'; // для внутреннего бордера
diagramm.style.stroke = 'rgb(230, 230, 230)'; //для внешнего бордера
this.$refs.diagrammMin.style.strokeDasharray = '30, 3.3';
diagramm.style.strokeDasharray = '30 102';
} else {
diagramm.style.stroke = 'rgba(181, 90, 110, 1)'; //для внешнего бордера
}
}
if (this.percent) {
console.log(this.percent, '-------');
let breathalyzerUp = this.percent * 1.32;
let breathalyzerOn = this.$refs.diagramm;
// x.style.strokeDasharray = `${y} 131`
breathalyzerOn.style.strokeDasharray = `${breathalyzerUp} 131`
}
mounted() {
this.checkData();
}
}
</script>

'rgba(239, 127, 26, 1'- здесь у вас опечатка. И не только там. – Stepan Kasyanenko Jun 18 '19 at 05:26mountedкод выполнится только после готовности всех компонентов один раз и не факт что в этот момент данные уже пришли с сервера, поэтому его надо переместить (метод) вcomputedи тогда по изменении данных из вне страница перерендерится – bobanobi4 Jun 18 '19 at 07:18