This commit is contained in:
Samuele Locatelli
2020-06-17 18:35:49 +02:00
44 changed files with 881 additions and 1763 deletions
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,70 @@
// out: false, sourceMap: false, main: ../style.less
@import "colors.less";
@gauge-h: 610px;
@gauge-w: 610px;
@smallgauge-h: @gauge-h - 30px;
@smallgauge-w: @gauge-w - 30px;
.gauge-container {
grid-column: 3;
grid-row: 2;
display: grid;
grid-template-rows: 1fr auto 1fr;
hr {
grid-row: 2;
grid-column: 1;
margin: auto;
height: 5px;
width: calc(@gauge-w/2);
background-color: gray;
z-index: 1;
border: none;
}
width: @gauge-w;
height: @gauge-h;
.gauge1,
.gauge2 {
grid-column: 1;
grid-row-start: 1;
grid-row-end: 3;
.gauge {
.dial {
fill: rgba(153, 207, 255, 0.6);
stroke: #003366;
stroke-width: 2.5;
}
.value {
stroke: #90C03D;
stroke-width: 2.5;
}
.value-text {
fill: black;
font-size: 20px;
}
}
}
.gauge2 {
.gauge {
.dial {
stroke: rgba(0, 0, 0, .5);
stroke-width: 1;
}
.value {
stroke: #4caaff;
stroke-width: 1;
}
}
}
}
@@ -5,483 +5,106 @@
.dashboard {
height : 100%;
width : 100%;
background-image: url("../../assets/icons/png/bg.png");
position : fixed;
z-index : 1001;
display : flex;
flex-direction : column;
justify-content : flex-start;
height: 100%;
width: 100%;
background-image: url("../../assets/icons/png/bg.png");
position: fixed;
z-index: 1001;
display: grid;
grid-template-rows: 144px 1fr;
grid-template-columns: 152px 1fr 610px 1fr 152px;
grid-row-gap: 40px;
padding-top: 21px;
.header {
width : 100%;
display: flex;
header {
grid-row: 1;
grid-column-start: 1;
grid-column-end: -1;
width: 100% !important;
justify-content: space-between;
height: 144px !important;
position: relative !important;
.ribbon-container {
height : 80px;
z-index: 900;
.ribbon-container,
.app-ribbon {
height: 144px;
width: 152px;
border-top-right-radius: 72px;
border-bottom-right-radius: 72px;
.status-icon {
width: 114px;
height: 114px;
border-radius: 57px;
* {
font-size: 48px;
}
.box-date {
display : flex;
width : 70%;
margin-left: 100px;
div {
flex-shrink: 0;
font-size : 47px;
text-align : right;
font-weight: 500;
}
time {
flex-shrink: 0;
transition : color 200ms ease-in-out;
margin-left: 28px;
display : flex;
font-size : 120px;
}
}
.arch {
width: 100%;
.box-gauge {
height: 150px;
width : 150px;
.gauge-container,
.three {
width : 126px;
height: 92px;
.gauge {
.value {
stroke: #1791ff;
}
.value-text {
fill: #4b4b4b;
}
}
}
div {
&:last-of-type {
margin-top: -10px;
label {
&:first-of-type {
font-size : 18px;
font-weight : 300;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&:last-of-type {
font-size : 26px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1.96;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
}
}
}
}
.header-buttons {
display: inline-block;
.box-close-dashboard {
height : 70px;
text-align: right;
button.modal-close {
background-color: #4B4B4B;
margin : 23px;
}
}
.user-info {
margin-top : 10px;
display : flex;
font-size : 25px;
color : @color-input-light;
flex-grow : 1;
justify-content: flex-end;
margin-right : 21px;
button.profile {
width : 48px;
height : 48px;
background-image: url("../profile.png");
color : #000;
background-size : cover;
border : none;
background-color: transparent;
&.colorWhite {
color: #FFF;
}
}
div {
align-self : center;
margin-right: 10px;
font-size : 18px;
}
}
}
}
}
section {
margin-top : -400px;
height : 722px;
display : flex;
justify-content: flex-end;
padding-right : 15px;
padding-bottom : 50px;
.specific {
display : flex;
flex-direction : column;
justify-content: flex-end;
div {
display: flex;
}
//inizio sezione style del primo specific
&:first-of-type {
margin-right: 15%;
div {
&:first-of-type {
img {
flex-shrink: 0;
width : 41px;
height : 41px;
object-fit : contain;
}
label {
flex-shrink : 0;
font-size : 54px;
font-weight : normal;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : right;
color : #4b4b4b;
}
}
&:last-of-type {
margin: unset;
button {
flex-shrink : 0;
width : 65px;
height : 65px;
box-shadow : 0 2px 10px 0 rgba(0, 0, 0, 0.5);
border : solid 3px #4b4b4b;
background-color: rgba(255, 255, 255, 0.2);
border-radius : 50%;
color : #4b4b4b;
font-size : 50px;
text-align : center;
}
label {
flex-shrink: 0;
&:first-of-type {
font-size : 12px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&:last-of-type {
font-size : 25px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
}
}
}
//inizio sezione style del secondo specific
label {
flex-shrink: 0;
&:first-of-type {
font-size : 26px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1.96;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&:last-of-type {
font-size : 120px;
font-weight : 300;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
//inizio sezione style del terzo specific
&:last-of-type {
margin-left: 15%;
div {
flex-shrink : 0;
width : 542px;
height : 71px;
background-color: rgba(0, 0, 0, 0.5);
}
.actual {
background-color: unset;
width : unset;
height : unset;
.specific {
background-color: unset;
width : unset;
height : unset;
margin : unset;
label {
flex-shrink: 0;
&:first-of-type {
font-size : 26px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1.96;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&:last-of-type {
font-size : 120px;
font-weight : 300;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
}
}
aside {
margin-top: 5px;
width : 641px;
height : 100%;
overflow-x: hidden;
.component {
width : 621px;
height: 77px;
}
}
.component-info {
width : unset;
height : unset;
background-color: unset;
display : flex;
flex-direction : column;
section {
margin : unset;
padding : unset;
height : unset;
width : unset;
display : flex;
justify-content: flex-end;
section {
margin : unset;
padding : unset;
height : unset;
width : unset;
display : flex;
flex-direction: column;
.component {
width : 478px;
height : 60px;
background-color: #e8e8e8;
div {
flex-shrink: unset;
button {
border-color : black;
width : 50PX;
height : 50px;
border-radius : 50%;
background-color: unset;
}
}
}
}
}
.component {
width : 641px;
height : 84px;
background-color: #e8e8e8;
display : flex;
flex-direction : column;
justify-content : flex-end;
div {
flex-shrink : 0;
margin : auto;
padding : 0px 15px;
width : unset;
height : unset;
background-color: unset;
label {
flex-shrink : 0;
font-size : 54px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : right;
color : #4b4b4b;
}
.specific {
height : unset;
width : unset;
background-color: unset;
margin : unset;
label {
flex-shrink: 0;
&:first-of-type {
font-size : 12px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&:last-of-type {
font-size : 25px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
}
button {
height : 20px;
width : 20px;
background-color: black;
}
}
span {
flex-shrink : 0;
width : 100%;
height : 1px;
background-color: #676767;
}
}
}
}
.header-buttons {
padding-right: 21px;
display: flex;
flex-flow: column;
align-items: flex-end;
justify-content: space-between;
height: 100%;
.user-info {
font-size: 14px;
.name {
text-align: right;
}
}
button.modal-close {
box-shadow: none;
background-color: @color-darkish-blue;
color: white;
}
}
}
.timing-area {
grid-row: 2;
grid-column: 2;
display: grid;
grid-template-rows: 1fr 1fr 1fr;
height: 610px;
.start,
.current,
.end {
display: flex;
flex-flow: column;
align-items: center;
justify-content: center;
background-color: rgba(153, 207, 255, 0.6);
border-top-left-radius: 100px;
border-bottom-left-radius: 100px;
small {
font-size: 26px;
text-transform: uppercase;
}
time {
font-size: 120px;
font-weight: 300;
}
}
.current {
background-color: transparent;
time {
font-size: 54px;
font-weight: 500;
}
}
}
}
@@ -1,44 +1,58 @@
// out: false, sourceMap: false, main: ../style.less
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
src: local('Work Sans'), local('WorkSans-Regular'), url(../fonts/WorkSans-Regular.ttf) format('ttf');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
font-family: 'Work Sans';
font-style: normal;
font-weight: 200;
src: local('Work Sans Thin'), local('WorkSans-Thin'), url(/assets/fonts/WorkSans-Thin.ttf) format('truetype');
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 300;
src: local('Work Sans Light'), local('WorkSans-Light'), url(/assets/fonts/WorkSans-Light.ttf) format('truetype');
}
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 400;
src: local('Work Sans Regular'), local('WorkSans-Regular'), url(/assets/fonts/WorkSans-Regular.ttf) format('truetype');
}
/* latin-ext */
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 500;
src: local('Work Sans Medium'), local('WorkSans-Medium'), url(../fonts/WorkSans-Medium.ttf) format('ttf');
font-family: 'Work Sans';
font-style: normal;
font-weight: 500;
src: local('Work Sans Medium'), local('WorkSans-Medium'), url(/assets/fonts/WorkSans-Medium.ttf) format('truetype');
}
/* latin-ext */
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 600;
src: local('Work Sans SemiBold'), local('WorkSans-SemiBold'), url(../fonts/WorkSans-SemiBold.ttf) format('ttf');
font-family: 'Work Sans';
font-style: normal;
font-weight: 600;
src: local('Work Sans SemiBold'), local('WorkSans-SemiBold'), url(/assets/fonts/WorkSans-SemiBold.ttf) format('truetype');
}
/* latin-ext */
@font-face {
font-family: 'Work Sans';
font-style: normal;
font-weight: 700;
src: local('Work Sans Bold'), local('WorkSans-Bold'), url(../fonts/WorkSans-Bold.ttf) format('ttf');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
font-family: 'Work Sans';
font-style: normal;
font-weight: 700;
src: local('Work Sans Bold'), local('WorkSans-Bold'), url(/assets/fonts/WorkSans-Bold.ttf) format('truetype');
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}
.text-22{
.text-22 {
font-size: 22px !important;
}
}
@@ -1,193 +0,0 @@
// out: false, sourceMap: false, main: ../style.less
@import "colors.less";
@gauge-h: 800px;
@gauge-w: 800px;
@smallgauge-h: @gauge-h - 30px;
@smallgauge-w: @gauge-w - 30px;
.box-graph-dashboard {
height : 610px;
display : flex;
align-items : center;
justify-content: flex-end;
.svg-dashboard {
background-repeat: no-repeat;
display : flex;
flex-direction : column;
justify-content : center;
&.dashboard3 {
margin-left: -150px;
margin-bottom : 250px;
height : 100px;
width : 900px;
background-size : 900px;
background-image: url(/assets/icons/svg/svg-dashboard3.svg);
label {
margin : unset;
font-size : 35px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
}
}
.time-box {
display : flex;
flex-direction : column;
justify-content: center;
height : 100%;
margin-top: 200px;
margin-right: -150px;
.svg-dashboard {
label {
margin-top : 8px;
font-size : 26px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : 1.96;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
time {
font-size : 120px;
font-weight : 300;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #4b4b4b;
}
&.dashboard {
background-image: url(/assets/icons/svg/svg-dashboard.svg);
height : 178px;
width : 545px;
background-size : 545px;
position : relative;
}
&.dashboard2 {
height : 178px;
background-size : 545px;
width : 545px;
background-image: url(/assets/icons/svg/svg-dashboard2.svg);
}
}
.box-time-passed {
height : 117px;
margin : 40px 0px;
text-align : center;
display : flex;
justify-content: center;
flex-direction : column;
label {
&:first-of-type {
font-size: 26px;
}
&:last-of-type {
font-size: 54px;
}
}
}
}
.box-circle-piece {
margin-top: 200px;
display : flex;
align-items: center;
position : relative;
height : @gauge-h;
width : @gauge-w;
hr {
margin : auto;
height : 5px;
width : calc(@gauge-w/2);
background-color: gray;
z-index : 1;
border : none;
}
.gauge-container-dashboard {
width : @gauge-w;
height : @gauge-h;
border-radius: 5px;
position : absolute;
top : calc(~"50%" - (@gauge-h/2));
left: calc(~"50%" - (@gauge-w/2));
&.gauge1 {
width : @smallgauge-w;
height: @smallgauge-h;
top : calc(~"50%" - (@smallgauge-h/2));
left : calc(~"50%" - (@smallgauge-w/2));
.gauge {
.dial {
fill : #99CFFF;
stroke: #91A2B1;
}
.value {
stroke: #4DAAFF;
}
.value-text {
fill : black;
alignment-baseline: before-edge;
font-size : 20px;
}
}
}
&.gauge2 {
.gauge {
.value-text {
fill : black;
alignment-baseline: after-edge;
font-size : 20px;
}
.dial {
stroke: #003264;
}
.value {
stroke : #90C03D;
stroke-width: 2;
}
}
}
}
}
}
@@ -3,7 +3,8 @@
@header-height: 80px;
@header-button-size: 44px;
#app>header {
#app>header,
.dashboard>header {
display: flex;
flex-flow: row nowrap;
align-items: center;
@@ -2,7 +2,7 @@
@import "setup.less";
@import "colors.less";
@import "modals.less";
@import "graph-dashboard.less";
@import "dashboard-gauge.less";
@import "dashboard.less";
@import "riscaldi.less";
@import "slider.less";
@@ -3,47 +3,26 @@
@import "colors.less";
@import "fonts.less";
html {
height : 100%;
overflow: hidden;
}
body {
border : 0;
margin : 0;
padding: 0;
height : 100%;
}
.hidden {
visibility: hidden;
}
.main-nav {
position: absolute;
top : 50%;
right : 0;
z-index : 1000;
}
.container {
#app {
nav {
position: absolute;
// top : 50%;
right : 0;
height: 100%;
display: flex;
flex-direction: column;
position : absolute;
right : 0;
height : 100%;
display : flex;
flex-direction : column;
justify-content: center;
.active button {
transform: translate(-761px, 0px);
}
.active_second_card button {
transform: translate(-1522px, 0px);
}
div {
button {
@@ -87,8 +66,6 @@ body {
}
}
.sidebar {
width : 100vw;
height : 100vh;
@@ -96,21 +73,15 @@ body {
flex-direction : column;
justify-content: center;
// .sidebar-backdrop {
// width: 100vw;
// height: 100vh;
// // position: fixed;
// // top: 0;
// // left: 0;
// cursor: pointer;
// }
.active {
transform: translate(-761px, 0px);
}
.sidebar-panel {
overflow-y : auto;
// overflow-y : auto;
background-color: #130f40;
position: fixed;
right: 0;
// top: 141px;
position : fixed;
right : 0;
z-index : 900;
padding : 3rem 20px 2rem 20px;
width : 721px;
@@ -119,19 +90,43 @@ body {
box-shadow : 2px 10px 15px 0 rgba(0, 0, 0, 0.5);
background-color: #dddddd;
.text-head-sidebar {
margin : 10px auto;
font-size : 24px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #002680;
.head-sidebar {
margin: 10px 0px;
display: flex;
align-items: center;
justify-content: space-evenly;
button{
width: 100px;
height: 30px;
font-size: 20px;
background-color: unset;
border: none;
&.selected{
color:#002680;
border-bottom: 2px solid #002680;
}
}
label {
font-size : 24px;
font-weight : 500;
font-stretch : normal;
font-style : normal;
line-height : normal;
letter-spacing: normal;
text-align : center;
color : #002680;
}
}
.box-sidebar-panel {
aside {
height: 95%;
}
section {
display : grid;
grid-template-columns: repeat(2, 1fr);
align-items : center;
@@ -145,11 +140,10 @@ body {
background-color: #808e96;
margin : 10px 30px;
.text-box-paddle {
div {
display : flex;
width : 268px;
height : 78px;
font-family : WorkSans;
font-size : 18px;
font-weight : 500;
font-stretch : normal;
@@ -166,19 +160,12 @@ body {
}
label {
width : 117px;
width : 100%;
margin: 10px;
}
}
.text-box-paddle.text-soft {
label {
width : 100%;
align-self: center;
}
}
}
}
@@ -5,49 +5,48 @@
.modal.processo-info {
width : 1808px;
height : 976px;
margin : 120px auto;
box-shadow: none;
position : relative;
header {
font-size: 22px;
color: #4b4b4b;
font-size : 22px;
color : #4b4b4b;
display : flex;
flex-flow : row nowrap;
justify-content: space-evenly;
align-items : center;
.tab-header {
padding: 10px 0px;
width : 70%;
display : flex;
align-items : center;
justify-content: space-evenly;
button {
padding: 0;
display: flex;
justify-content: flex-start;
margin-right: 10px;
width: 149px;
height: 48px;
border-radius: 2px;
box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5);
background-image: linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
font-size: 14px;
font-weight: 500;
font-stretch: normal;
font-style: normal;
line-height: 1.15;
letter-spacing: normal;
color: #4b4b4b;
border : none;
border-radius : 2px;
background-image : linear-gradient(to bottom, #f1f1f1 0%, #bbbcbc 98%);
display : grid;
grid-template-columns: 48px 101px;
grid-template-rows : 48px;
img {
margin-right: 20px;
span {
margin : auto;
font-size: 13px;
color : #4b4b4b;
}
img {
margin: auto;
}
}
label {
width: 106px;
height: 32px;
label{
font-size: 32px;
font-weight: 600;
font-stretch: normal;
font-style: normal;
line-height: 1;
letter-spacing: normal;
text-align: right;
color: #545454;
}
}
@@ -11,7 +11,29 @@
flex-flow: column nowrap;
width: 100vw;
height: 100vh;
.tab-header {
display: flex;
flex-flow: row;
align-items: stretch;
justify-content: flex-start;
button {
background: none;
border: 1px solid #bbbcbc;
padding: 0 38px;
border-bottom: none;
font-size: 20px;
background-color: #bbbcbc;
color: #002680;
&.active {
background-color: #fff;
font-weight: bold;
border-top: 2px solid #002680;
}
}
}
hr {
flex-shrink: 0;
background-color: #979797;
@@ -237,37 +259,11 @@
padding-left: 31px;
display: flex;
align-items: center;
font-size: 20px;
font-weight: bold;
color: darkblue;
}
}
.tab-header {
display: flex;
flex-flow: row;
align-items: stretch;
justify-content: flex-start;
button {
background: none;
border: 1px solid #bbbcbc;
padding: 0 38px;
border-bottom: none;
font-size: 20px;
background-color: #bbbcbc;
color: #002680;
&.active {
background-color: #fff;
font-weight: bold;
border-top: 2px solid #002680;
}
}
}
.modal.setup-info {
@@ -277,7 +273,7 @@
margin: 150px auto;
box-shadow: none;
position: relative;
section {
height: 100%;
File diff suppressed because it is too large Load Diff
@@ -5,14 +5,22 @@ import { paddleActions } from '@/store/paddle.store';
@Component({ name: 'sidebar' })
export default class Sidebar extends Vue {
azione1: boolean = false;
azione2: boolean = false;
show:string="tutti";
isPanelOpen() {
return this.$store.state.paddle.isNavOpen;
}
closeSidebarPanel() {
paddleActions.Toggle(this.$store);
get action1() {
return this.$store.state.paddle.action1;
}
get action2() {
return this.$store.state.paddle.action2;
}
ConfigPressed(action: string) {
paddleActions.ToggleAction(this.$store,action);
}
}
@@ -1,71 +1,122 @@
<template>
<div class="sidebar">
<!-- <transition> -->
<div v-if="isPanelOpen()" class="sidebar-panel">
<div class="text-head-sidebar">
<div v-if="isPanelOpen()" class="sidebar-panel" :class="{ 'active' : action1||action2 }">
<div class="head-sidebar">
<label>Pulsanti personalizzati</label>
</div>
<div class="box-sidebar-panel">
<section @click="ConfigPressed('action1')">
<div class="sidebar-panel-nav">
<div class="text-box-paddle">
<div>
<img src="assets/icons/svg/paddle-riscaldo.svg" />
<label>Estensione riscaldo 20 secondi</label>
<i class="fa fa-cog gear-box-paddle"></i>
<i class="fa fa-cog"></i>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle">
<div class="sidebar-panel-nav" @click="ConfigPressed('action2')">
<div>
<img src="assets/icons/svg/paddle-altra-funzione.svg" />
<label>Altra funzione tasto fisico della tastiera</label>
<i class="fa fa-cog gear-box-paddle"></i>
<i class="fa fa-cog"></i>
</div>
</div>
</div>
</section>
<div class="text-head-sidebar">
<div class="head-sidebar">
<label>Soft keys</label>
</div>
<div class="box-sidebar-panel">
<section>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<div>
<label>Estensione riscaldo 20 secondi</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<toggle-button v-model="azione1"></toggle-button>
<div>
<toggle-button></toggle-button>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<toggle-button v-model="azione2"></toggle-button>
<div>
<toggle-button></toggle-button>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div class="text-box-paddle text-soft">
<div>
<label>Nome azione soft key</label>
</div>
</div>
</section>
</div>
<div v-if="(action1||action2) && isPanelOpen()" class="sidebar-panel">
<div class="head-sidebar">
<button :class="{'selected':show=='tutti'}" @click="show='tutti'">Tutti</button>
<button :class="{'selected':show=='one'}" @click="show='one'">Gruppo 1</button>
<button :class="{'selected':show=='two'}" @click="show='two'">Gruppo 2</button>
<button :class="{'selected':show=='three'}" @click="show='three'">Gruppo 3</button>
</div>
<aside class="scrollable auto">
<section>
<div class="sidebar-panel-nav">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<label>Estensione riscaldo 20 secondi</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<toggle-button></toggle-button>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<toggle-button></toggle-button>
<label>Nome azione soft key</label>
</div>
</div>
<div class="sidebar-panel-nav">
<div>
<label>Nome azione soft key</label>
</div>
</div>
</section>
</aside>
</div>
<!-- </transition> -->
</div>
@@ -9,6 +9,14 @@ export default class SwitchButton extends Vue{
return this.$store.state.paddle.isNavOpen;
}
get action1(){
return this.$store.state.paddle.action1;
}
get action2(){
return this.$store.state.paddle.action2;
}
togglePaddle() {
paddleActions.Toggle(this.$store);
}
@@ -1,5 +1,5 @@
<template>
<div :class="{ 'active' : isSwitchActive() }" @click="togglePaddle()">
<div :class="{ 'active' : isSwitchActive() , 'active_second_card' : action1 || action2}" @click="togglePaddle()">
<slot>
<button title="Menu">
<div>
@@ -0,0 +1,15 @@
import Vue from "vue";
import Component from "vue-class-component";
@Component({})
export default class Clock extends Vue {
today: Date = new Date();
mounted() {
let $this = this;
setInterval(() => {
$this.today = new Date();
}, 1000)
}
}
@@ -0,0 +1,42 @@
<template>
<div class="clock">
<div class="day">
<span>{{today | date('dddd DD')}}</span>
<span>{{today | date('MMMM')}}</span>
</div>
<time>{{today | date('HH:mm:ss')}}</time>
</div>
</template>
<style scoped>
.clock {
display: grid;
grid-template-columns: 1fr 1fr;
grid-column-gap: 1rem;
width: fit-content;
}
.day {
display: flex;
flex-flow: column;
align-items: flex-end;
justify-content: center;
height: 100%;
font-family: "Work Sans";
font-size: 47px;
font-weight: 500;
line-height: 1.01;
padding-right: 1rem;
}
time {
padding-left: 1rem;
display: flex;
flex-flow: column;
font-family: "Work Sans";
align-items: flex-start;
justify-content: center;
font-size: 120px;
font-weight: 300;
}
</style>
<script src="./clock.ts"></script>
@@ -1,10 +0,0 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Prop} from 'vue-property-decorator';
@Component({})
export default class Componente extends Vue{
submenù:boolean=false;
}
@@ -1,79 +0,0 @@
<template>
<div class="component-info">
<div class="component">
<div>
<label>(num)</label>
<div class="specific">
<label>TEMPO RISCALDO</label>
<label>1'12''</label>
</div>
<div class="specific">
<label>VUOTO</label>
<label>-0.88 bar</label>
</div>
<div class="specific">
<label>TEMPO CICLO NETTO</label>
<label>2'51''</label>
</div>
<button @click="submenù=!submenù"></button>
</div>
<span></span>
</div>
<section v-if="submenù">
<section>
<div class="component">
<div>
<button>
<img src="assets/icons/png/bt.png" />
</button>
<div class="specific">
<label>TEMPO VENTILAZIONE</label>
<label>1'12''</label>
</div>
<div class="specific">
<label>TEMPO CICLO LORDO</label>
<label>2'51''</label>
</div>
</div>
<span></span>
</div>
<div class="component">
<div>
<div class="specific">
<label>TEMPERATURA STAMPO</label>
<label>270°C</label>
</div>
<div class="specific">
<label>T. MATERIALE FINE RISCALDO</label>
<label>295°C</label>
</div>
<div class="specific">
<label>T. MATERIALE FINE VENTILAZIONE</label>
<label>48°C</label>
</div>
</div>
<span></span>
</div>
<div class="component">
<div>
<div class="specific">
<label>TEMPO VUOTO</label>
<label>16''</label>
</div>
<div class="specific">
<label>ENERGIA UTILIZZATA IN</label>
<label>2,3kW</label>
</div>
<div class="specific">
<label>ENERGIA UTILIZZATA OUT</label>
<label>2,1kW</label>
</div>
</div>
<span></span>
</div>
</section>
</section>
</div>
</template>
<script lang="ts" src="./componente.ts"></script>
@@ -0,0 +1,36 @@
import Vue from "vue";
import Component from "vue-class-component";
import Gauge from "svg-gauge";
@Component({})
export default class MainGauge extends Vue {
gauge1: any = null;
gauge2: any = null;
mounted() {
this.gauge1 = Gauge(
this.$refs.gauge1, {
max: 100,
dialStartAngle: -90,
dialEndAngle: -90.001,
value: 30,
showValue: false,
viewBox: [8, 8, 84, 84]
}
);
this.gauge2 = Gauge(
this.$refs.gauge2, {
max: 100,
dialStartAngle: -90,
dialEndAngle: -90.001,
value: 70,
showValue: false,
viewBox: [6, 6, 88, 88]
}
);
}
}
@@ -0,0 +1,9 @@
<template>
<div class="gauge-container">
<div ref="gauge1" class="gauge1"></div>
<div ref="gauge2" class="gauge2"></div>
<hr />
</div>
</template>
<script lang="ts" src="./gauge.ts"></script>
@@ -1,48 +0,0 @@
import Vue from "vue";
import Component from "vue-class-component";
import Gauge from "svg-gauge";
@Component({})
export default class dashboard extends Vue{
mounted(){
var gauge1= Gauge(
this.$refs.gauge1, {
max: 100,
dialStartAngle: -90,
dialEndAngle: -90.001,
value: 100,
label: function(value) {
return Math.round(value * 100) / 100;
}
}
);
var gauge2= Gauge(
this.$refs.gauge2, {
max: 100,
dialStartAngle: -90,
dialEndAngle: -90.001,
value: 100,
label: function(value) {
return Math.round(value * 100) / 100;
}
}
);
function loop() {
var value1 = Math.random() * 100,
value2 = Math.random() * 100,
value3 = Math.random() * 100,
value4 = Math.random() * 100,
value5 = Math.random() * 100;
// setValueAnimated(value, durationInSecs);
gauge1.setValueAnimated(value1, 1);
gauge2.setValueAnimated(value2, 1);
window.setTimeout(loop, 6000);
}
loop()
}
}
@@ -1,35 +0,0 @@
<template>
<div class="box-graph-dashboard">
<div class="time-box">
<div class="svg-dashboard dashboard">
<label>INIZIO</label>
<time>10:41</time>
</div>
<div class="box-time-passed">
<label>TEMPO TRASCORSO</label>
<label>0:21:10</label>
</div>
<div class="svg-dashboard dashboard2">
<label>FINE</label>
<time>~16:20</time>
</div>
</div>
<div class="box-circle-piece">
<div ref="gauge1" class="gauge-container-dashboard gauge1">
</div>
<hr/>
<div ref="gauge2" class="gauge-container-dashboard gauge2">
</div>
</div>
<div class="svg-dashboard dashboard3">
<label>Nome ricetta lungo 8888x8888</label>
</div>
</div>
</template>
<script lang="ts" src="./graph-dashboard.ts"></script>
@@ -1,52 +1,29 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import {Prop} from 'vue-property-decorator';
import { Prop } from 'vue-property-decorator';
import { messageService } from '@/_base';
import { ModalHelper } from '@/components/modals';
import AppRibbon from "@/components/app-ribbon.vue";
import { alarmList } from "@/app_modules/alarms";
import moment from "moment";
import { AppModel, appModelActions } from '@/store';
import { getColorFromName,isDarkColor } from "@/_base/utils";
import { getColorFromName, isDarkColor } from "@/_base/utils";
import ArchInterface from "../components/arch-interface/arch-interface.vue";
import { LocalizationService, localizationService } from "@/services/localizationService";
import Componente from "./base-components/componente.vue";
import GraphDashboard from "./base-components/graph-dashboard.vue"
import gauge from "./base-components/gauge.vue"
import clock from "./base-components/clock.vue";
@Component({
components: {
appRibbon: AppRibbon,
archInterface: ArchInterface,
alarmList,
componente:Componente,
graphdashboard: GraphDashboard
gauge, clock
}
})
export default class Dashboard extends Vue{
@Prop({ default: 9 })
components: number;
export default class Dashboard extends Vue {
$store: any;
@Prop({ default: 9 })
components: number;
public minutes: string = "";
public hours: string = "";
public Time: string = "";
public date: string = "";
public mid: string = "";
public dayIt: string = moment(new Date()).locale(this.$store.state.localization.currentLanguage).format('dddd DD');
public monthIt: string = moment(new Date()).locale(this.$store.state.localization.currentLanguage).format('MMMM');
created(){
this.updateTime();
// Ora aggiornata ogni 10 secondi
window.setInterval(() => {
this.updateTime();
}, 10000);
}
// User
get currentUser() {
return (this.$store.state as AppModel).currentUser;
@@ -55,50 +32,16 @@ export default class Dashboard extends Vue{
get cmsConnectReady() {
return (this.$store.state as AppModel).machineInfo.cmsConnectReady;
}
getColor(nome,cognome){
return getColorFromName(nome,cognome);
getColor(nome, cognome) {
return getColorFromName(nome, cognome);
}
isDarkColor(color){
isDarkColor(color) {
return isDarkColor(color);
}
// Clock
private updateTime() {
this.mid = "";
let date = moment(new Date()).format('LT');
let hours: any = date.split(":")[0];
let minutesGrez = date.split(":")[1].split(" ");
//Check if is AM/PM
let minutes = "";
if(minutesGrez.length>1)
minutes = minutesGrez[0] + " " + minutesGrez[1];
else{
minutes = ("00" + minutesGrez[0]).slice(-2)
hours = ("00" + hours).slice(-2)
}
// time non italian
if (this.$store.state.localization.currentLanguage != 'it'){
hours = (hours+24)%24;
this.mid = "AM";
if (hours==0){
hours=12;
}
else if (hours>12){
hours=hours%12;
this.mid = "PM";
}
}
this.$set(this, "minutes", minutes);
this.$set(this, "hours", hours);
this.$set(this, "date", moment(new Date()).format('L'));
}
// Ribbon
@@ -156,13 +99,13 @@ export default class Dashboard extends Vue{
}
}
public sendMessage(name:string) {
public sendMessage(name: string) {
messageService.publishToChannel(name);
}
close() {
appModelActions.ShowDashboard(this.$store);
};
};
}
@@ -1,102 +1,102 @@
<template>
<div class="dashboard">
<div class="header">
<app-ribbon
:status="{'alarm': ribbonStatus == 3, 'working': ribbonStatus == 1, 'warning': ribbonStatus == 2}"
<div class="dashboard">
<header>
<app-ribbon
:status="{'alarm': ribbonStatus == 3, 'working': ribbonStatus == 1, 'warning': ribbonStatus == 2}"
:has-service="serviceRequired"
>
<i
class="fa fa-check"
slot="icon"
v-if="ribbonStatus == 0"
:title="'header_tooltip_nc_idle' | localize('Nc in Idle state')"
></i>
<i
class="fa fa-play"
slot="icon"
v-if="ribbonStatus == 1"
:title="'header_tooltip_nc_running' | localize('Nc in Running state')"
></i>
<i
class="fa fa-exclamation"
slot="icon"
v-if="ribbonStatus >1"
:title="'header_tooltip_nc_error' | localize('Open/Close alarm list')"
></i>
<div
slot="content"
class="content"
v-if="ribbonStatus>1"
:title="'header_tooltip_nc_error' | localize('Open/Close alarm list')"
>
<strong v-if="!showDetails">{{alarmTitle | localize(alarmTitle,alarmCount)}}</strong>
<strong v-if="showDetails && alarms[0].title">{{alarms[0].title}}</strong>
<strong
v-if="showDetails && !alarms[0].title"
>{{'alarm_'+ alarms[0].id | localize('alarm_'+ alarms[0].id)}}</strong>
<div v-if="showDetails">
<span class="processes">{{alarms[0].source}}</span>
<span class="processes" v-if="alarms[0].source === 'PLC' && alarms[0].process.length>0">
<span v-for="p in alarms[0].process" :key="p">{{ p }}</span>
</span>
<span
class="processes"
v-if="alarms[0].source !== 'PLC' && alarms[0].process"
>{{ alarms[0].process }}</span>
</div>
</div>
<div slot="service" class="content" v-if="serviceRequired">
<strong>{{'header_maintainance_request' | localize('Effettuare manutenzione')}}</strong>
<span>{{'header_maintainance_request_explanation' | localize('C\'è una procedura da effettuare')}}</span>
</div>
</app-ribbon>
:has-service="serviceRequired"
>
<i class="fa fa-check" slot="icon" v-if="ribbonStatus == 0" :title="'header_tooltip_nc_idle' | localize('Nc in Idle state')"></i>
<i class="fa fa-play" slot="icon" v-if="ribbonStatus == 1" :title="'header_tooltip_nc_running' | localize('Nc in Running state')"></i>
<i class="fa fa-exclamation" slot="icon" v-if="ribbonStatus >1" :title="'header_tooltip_nc_error' | localize('Open/Close alarm list')"></i>
<div slot="content" class="content" v-if="ribbonStatus>1" :title="'header_tooltip_nc_error' | localize('Open/Close alarm list')">
<clock></clock>
<strong v-if="!showDetails">{{alarmTitle | localize(alarmTitle,alarmCount)}}</strong>
<strong v-if="showDetails && alarms[0].title">{{alarms[0].title}}</strong>
<strong v-if="showDetails && !alarms[0].title">{{'alarm_'+ alarms[0].id | localize('alarm_'+ alarms[0].id)}}</strong>
<div v-if="showDetails">
<span class="processes">{{alarms[0].source}}</span>
<span class="processes" v-if="alarms[0].source === 'PLC' && alarms[0].process.length>0">
<span v-for="p in alarms[0].process" :key="p" >{{ p }} </span>
</span>
<span class="processes" v-if="alarms[0].source !== 'PLC' && alarms[0].process">{{ alarms[0].process }}</span>
</div>
</div>
<div slot="service" class="content" v-if="serviceRequired">
<strong>{{'header_maintainance_request' | localize('Effettuare manutenzione')}}</strong>
<span>{{'header_maintainance_request_explanation' | localize('C\'è una procedura da effettuare')}}</span>
</div>
</app-ribbon>
<!-- <alarm-list></alarm-list> -->
<div class="header-buttons">
<button class="modal-close" @click="close()">
<i class="fa fa-remove"></i>
</button>
<div class="box-date">
<div>{{dayIt}}<br>{{monthIt}}</div>
<time>
<span>{{hours}}:{{minutes}} {{mid}}</span>
</time>
</div>
<div class="user-info">
<div class="name">
{{currentUser.firstName}}
<br />
{{currentUser.lastName}}
</div>
<button
class="profile dark-blue"
v-if="currentUser"
@click="sendMessage('show-user-info')"
:title="'header_tooltip_btn_usrinfo' | localize('Show User Info')"
:class="{'colorWhite':isDarkColor(getColor(currentUser.lastName,currentUser.firstName))}"
></button>
<button
class="profile dark-blue colorWhite"
v-else
@click="sendMessage('show-user-info')"
:title="'header_tooltip_btn_usrinfo' | localize('Show User Info')"
></button>
</div>
</div>
</header>
<gauge></gauge>
<archInterface></archInterface>
<div class="header-buttons">
<div class="box-close-dashboard">
<button class="modal-close" @click="close()">
<i class="fa fa-remove"></i>
</button>
</div>
<div class="user-info">
<div>
<span>{{currentUser.firstName}} <br> {{currentUser.lastName}}</span>
</div>
<button class="profile dark-blue" v-if="currentUser" @click="sendMessage('show-user-info')" :title="'header_tooltip_btn_usrinfo' | localize('Show User Info')" :class="{'colorWhite':isDarkColor(getColor(currentUser.lastName,currentUser.firstName))}">
</button>
<button class="profile dark-blue colorWhite" v-else @click="sendMessage('show-user-info')" :title="'header_tooltip_btn_usrinfo' | localize('Show User Info')">
</button>
</div>
</div>
</div>
<graphdashboard></graphdashboard>
<section>
<div class="specific">
<div>
<img src="assets/icons/png/inv.png">
<label>218°C</label>
</div>
<div>
<button>-</button>
<div class="specific">
<label>setpoint</label>
<label>278°C</label>
</div>
<button>+</button>
</div>
</div>
<div class="specific">
<label>TEMPO RESTANTE</label>
<label>5:18:40</label>
</div>
<div class="specific">
<div class="actual">
<div class="specific">
<label>PEZZI/ORA</label>
<label>18,2</label>
</div>
<div class="specific">
<label>TEMPO/CICLO</label>
<label>3'12''</label>
</div>
</div>
<div>GRAFICO</div>
<componente></componente>
<aside class="scrollable">
<componente v-for="iter in components" :key="iter"></componente>
</aside>
</div>
</section>
</div>
<div class="timing-area">
<div class="start">
<small>{{'dashboard-timing-start' | localize('inizio')}}</small>
<time>10:53</time>
</div>
<div class="current">
<small>{{'dashboard-timing-elapsed' | localize('tempo trascorso')}}</small>
<time>10:53</time>
</div>
<div class="end">
<small>{{'dashboard-timing-end' | localize('fine')}}</small>
<time>~10:53</time>
</div>
</div>
</div>
</template>
<script lang="ts" src="./dashboard.ts"></script>
@@ -1,16 +1,15 @@
<template>
<div class="setup">
<div class="container">
<modal type="processo-info" :title="'processo_lbl_title' | localize('Attività attuale (es. attesa spostamento assi)')">
<div class="tab-header" slot="header-buttons">
<button> <img src="assets/icons/png/star.png"> Opzioni di lavorazione </button>
<button> <img src="assets/icons/png/star.png"> Pirometro</button>
<button> <img src="assets/icons/png/star.png"> Attivazione riscaldi</button>
<button> <img src="assets/icons/png/star.png"> Riscaldo +10 secondi</button>
<button> <img src="assets/icons/png/star.png"> Risclado -10 secondi</button>
<button> <img src="assets/icons/png/star.png"> Label pulsante opzionanle</button>
<button> <img src="assets/icons/png/star.png"> <span>Opzioni di lavorazione</span> </button>
<button> <img src="assets/icons/png/star.png"> <span>Pirometro</span> </button>
<button> <img src="assets/icons/png/star.png"> <span>Attivazione riscaldi</span> </button>
<button> <img src="assets/icons/png/star.png"> <span>Riscaldo +10 secondi</span> </button>
<button> <img src="assets/icons/png/star.png"> <span>Risclado -10 secondi</span> </button>
<button> <img src="assets/icons/png/star.png"> <span>Label pulsante opzionale</span></button>
<label>{{actual}}/{{tot}}</label>
</div>
<circlegantt></circlegantt>
</modal>
</div>
</template>
@@ -1,20 +1,36 @@
export interface PaddleModel {
isNavOpen: boolean
isNavOpen: boolean,
action1: boolean,
action2:boolean
}
export const paddleStore={
state:{
isNavOpen:false
isNavOpen:false,
action1:false,
action2:false
} as PaddleModel,
mutations: {
toggleNav(state){
state.isNavOpen=!state.isNavOpen
state.isNavOpen=!state.isNavOpen,
state.action1=false,
state.action2=false
},
toggleAction(state,action:string){
if(action=="action1"){
state.action1=!state.action1
}else{
state.action2=!state.action2
}
}
},
actions:{
Toggle(context){
context.commit("toggleNav");
},
ToggleAction(context,action:string){
context.commit("toggleAction",action);
}
}
}