Merge remote-tracking branch 'origin/develop' into new/ThermoCamManager

This commit is contained in:
Samuele E. Locatelli
2021-02-15 12:00:05 +01:00
37 changed files with 574 additions and 33 deletions
@@ -40,4 +40,9 @@
<allowExternalBrowser>true</allowExternalBrowser>
<ncNeeded>false</ncNeeded>
</users>
<thermoHood>
<enabled>true</enabled>
<allowExternalBrowser>true</allowExternalBrowser>
<ncNeeded>false</ncNeeded>
</thermoHood>
</areasConfig>
@@ -82,6 +82,16 @@
</xs:complexType>
</xs:element>
<xs:element name="thermoHood">
<xs:complexType>
<xs:all>
<xs:element name="enabled" type="xs:boolean" />
<xs:element name="allowExternalBrowser" type="xs:boolean" />
<xs:element name="ncNeeded" type="xs:boolean" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
+1
View File
@@ -47,6 +47,7 @@ namespace Thermo.Active.Config
public static AreasConfigModel ScadaConfig;
public static AreasConfigModel JobEditorConfig;
public static AreasConfigModel UsersConfig;
public static AreasConfigModel ThermoHoodConfig;
public static List<ScadaSchemaModel> ProductionScadaSchema = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> ConfiguredScadaSchema = new List<ScadaSchemaModel>();
@@ -211,6 +211,10 @@ namespace Thermo.Active.Config
case AREAS.USERS_KEY:
SetAreaValue(ref UsersConfig, element);
break;
case AREAS.THERMO_HOOD_KEY:
SetAreaValue(ref ThermoHoodConfig, element);
break;
}
}
@@ -52,6 +52,7 @@ namespace Thermo.Active.Database.Migrations
new FunctionAccessModel() { Name = "usersArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 30, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "jobeditorArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 20, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "utilitiesArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 },
new FunctionAccessModel() { Name = "thermoHoodArea", Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 30, ReadLevelMin = 1, PlcId = 0 },
// thermo functions
new FunctionAccessModel() { Name = RECIPE_MANAGER, Area = GENERAL_KEY, Enabled = true, WriteLevelMin = 1, ReadLevelMin = 1, PlcId = 0 }
+1
View File
@@ -263,6 +263,7 @@ namespace Thermo.Active.Model
public const string USERS_KEY = "users";
public const string THERMO_KEY = "thermo";
public const string RISC_KEY = "risc";
public const string THERMO_HOOD_KEY = "thermoHood";
}
// Config File Names
@@ -12,5 +12,6 @@ namespace Thermo.Active.Model.DTOModels
public AreasConfigModel ScadaConfig;
public AreasConfigModel JobEditorConfig;
public AreasConfigModel UsersConfig;
public AreasConfigModel ThermoHoodConfig;
}
}
@@ -27,7 +27,8 @@ namespace Thermo.Active.Controllers.WebApi
ReportConfig = ReportConfig,
UtilitiesConfig = UtilitiesConfig,
JobEditorConfig = JobEditorConfig,
UsersConfig = UsersConfig
UsersConfig = UsersConfig,
ThermoHoodConfig = ThermoHoodConfig
};
return Ok(startupConfiguration);
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -139,7 +139,7 @@ button.btn.btn-success[disabled] {
}
button.under {
min-width: 118px;
min-width: 140px;
height: 45px;
object-fit: contain;
border-radius: 100px;
@@ -154,6 +154,13 @@ button.under {
font-weight: 500;
font-size: 18px;
&.thermoHood{
min-width:45px;
max-width: 45px;
margin-right: 15px;
margin-left: 10px;
}
img {
max-width: 178px;
max-height: 45px;
@@ -7,7 +7,7 @@
@footer-button-halfball-size: @footer-button-ball-size / 2;
@footer-button-margin: 19px;
@footer-padding: 0 0 9px 8px;
@footer-machine-area-size: 300px;
@footer-machine-area-size: 390px;
footer {
position: absolute;
@@ -29,6 +29,9 @@ footer {
img {
margin: 0px 5px;
}
.noThermoHood{
min-width: 45px;
}
}
.container {
@@ -45,6 +45,8 @@
@modal-history-maintenance-height: 700px;
@modal-create-user-width: 752px;
@modal-create-user-height: 550px;
@modal-resistance-info-width: 450px;
@modal-resistance-info-height: 650px;
@modal-machine-height: 730px;
@modal-machine-width: 600px;
@modal-machine-top: @modal-machine-height / 2;
@@ -3904,6 +3906,54 @@
justify-content: flex-end;
}
}
.@{modal}.info-resistance {
width: @modal-resistance-info-width;
height: @modal-resistance-info-height;
top: calc(~"50%"- @modal-resistance-info-height / 2);
left: calc(~"50%"- @modal-resistance-info-width / 2);
header {
background-color: @color-darkish-blue;
color: @color-white;
font-family: @font-family;
font-weight: 600;
font-size: 24px;
text-align: left;
padding: 0px 23px;
}
.details {
text-align: center;
color: @color-greyish-brown;
.status{
display: flex;
flex-flow: row;
align-items: center;
justify-content: flex-end;
strong {
font-size: 2.5em;
margin-right: 100px;
margin-left: 10px;
width: 10%;
.fa-check{
color: #90c03d;
}
.fa-exclamation-triangle{
color: #d0021b;
}
}
}
&>hr {
border: none;
margin-bottom: 40px;
}
}
}
.@{modal}.create-user {
width: @modal-create-user-width;
+53 -3
View File
@@ -3998,6 +3998,47 @@ article .box .body {
align-items: center;
justify-content: flex-end;
}
.modal.info-resistance {
width: 450px;
height: 650px;
top: calc(50%-650px / 2);
left: calc(50%-450px / 2);
}
.modal.info-resistance header {
background-color: #002680;
color: #fff;
font-family: 'Work Sans', sans-serif;
font-weight: 600;
font-size: 24px;
text-align: left;
padding: 0px 23px;
}
.modal.info-resistance .details {
text-align: center;
color: #4b4b4b;
}
.modal.info-resistance .details .status {
display: flex;
flex-flow: row;
align-items: center;
justify-content: flex-end;
}
.modal.info-resistance .details .status strong {
font-size: 2.5em;
margin-right: 100px;
margin-left: 10px;
width: 10%;
}
.modal.info-resistance .details .status strong .fa-check {
color: #90c03d;
}
.modal.info-resistance .details .status strong .fa-exclamation-triangle {
color: #d0021b;
}
.modal.info-resistance .details > hr {
border: none;
margin-bottom: 40px;
}
.modal.create-user {
width: 752px;
height: 550px;
@@ -6104,7 +6145,7 @@ button.btn.btn-success[disabled]:hover {
background-image: linear-gradient(to bottom, #1756ad, #002680) !important;
}
button.under {
min-width: 118px;
min-width: 140px;
height: 45px;
object-fit: contain;
border-radius: 100px;
@@ -6119,6 +6160,12 @@ button.under {
font-weight: 500;
font-size: 18px;
}
button.under.thermoHood {
min-width: 45px;
max-width: 45px;
margin-right: 15px;
margin-left: 10px;
}
button.under img {
max-width: 178px;
max-height: 45px;
@@ -6927,7 +6974,7 @@ footer .machine-area {
position: absolute;
bottom: 0;
right: 0;
width: 300px;
width: 390px;
height: 80px;
display: flex;
align-items: center;
@@ -6936,13 +6983,16 @@ footer .machine-area {
footer .machine-area img {
margin: 0px 5px;
}
footer .machine-area .noThermoHood {
min-width: 45px;
}
footer .container {
display: flex;
flex-direction: row;
align-items: flex-end;
background-image: linear-gradient(to bottom, #1791ff, #005e94);
box-shadow: 3px 2px 3px 0 rgba(0, 0, 0, 0.4);
right: 300px;
right: 390px;
margin: 0;
border-top-right-radius: 40px;
border-bottom-right-radius: 40px;
+2 -1
View File
@@ -283,10 +283,11 @@ export default class app extends Vue {
}
}
applyViewPosition(position, removetransition?) {
/* NO HANDLER
(this.$refs["main-view"] as any).style = (this.$refs["main-view-handler"] as any).style =
"transform:translateY(" +
position +
"px);" +
(removetransition ? "transition:unset;" : "");
(removetransition ? "transition:unset;" : "");*/
}
};
+2 -2
View File
@@ -14,8 +14,8 @@
<router-view :class="{'blur':applyBlurInternal}" />
<modal-container name="modal" container-name="modal-internal" :inform-hmi="false"></modal-container>
</div>
<sotto-cofano></sotto-cofano>
<paddle></paddle>
<sotto-cofano :class="{'blur':(applyBlur || applyBlurNc)}"></sotto-cofano>
<paddle :class="{'blur':(applyBlur || applyBlurNc)}"></paddle>
<app-footer :class="{'blur':(applyBlur || applyBlurNc)}"></app-footer>
<print-gantt></print-gantt>
+3 -1
View File
@@ -35,6 +35,7 @@ import ModalMissingTools from "./modules/base-components/modal-missing-tools.vue
import ProgramManagement from "./modules/program-management.vue";
import ZoomImage from './modules/base-components/zoom-image.vue';
import ModalReportSelectColumn from './modules/base-components/modal-report-select-column.vue';
import ModalInfoResistance from "./modules/base-components/modal-info-resistance.vue";
export {
@@ -56,7 +57,8 @@ export {
ZoomImage,
ModalCreateUser,
ModalPasswordUser,
ModalRoleUser
ModalRoleUser,
ModalInfoResistance
}
+2 -2
View File
@@ -1,5 +1,5 @@
import {
// Home,
Home,
// CreateMaintenance,
// SoftKeysPrefered,
// CreateQueue,
@@ -34,7 +34,7 @@ import { routes as users } from "./app_modules/users/route";
//import { routes as ioRoutes } from "@/app_modules_thermo/sotto-cofano/route";
export let routes = [
{ path: "", component: productionRoutes[0].component, name: productionRoutes[0].name, meta: { title: "Dashboard" } },
{ path: "", component: Home, name: "home", meta: { title: "Dashboard" } },
{ path: "/utilities", component: Utilities, meta: { title: "Utilities", area: "utilities" } },
// { path: "/card-utilities", component: CardUtilities, meta: { title: "Card-Utilities", area: "card-utilities" } },
// { path: "/card-tool-depot", component: CardToolDepot, meta: { title: "Card-Tool-Depot", area: "card-tool-depot" } },
@@ -6,7 +6,7 @@ import { Factory, messageService, awaiter } from "@/_base";
import { loginService } from "@/app.modules";
import { DataService } from 'src/services/dataService';
import iziToast, { IziToastSettings } from "izitoast";
import { store, machineStatusActions } from "@/store";
import { store, machineStatusActions,appModelActions } from "@/store";
@Component({ name: "login", components: { modal: Modal } })
export default class Login extends Vue {
@@ -31,6 +31,10 @@ export default class Login extends Vue {
if(!this.checkIfUserIsAuthorized()){
userNotAuthorized = true;
}
if(!this.checkIfUserIsAuthorizedToThermoHood()){
appModelActions.MainViewLiftDown(this.$store);
}
}).catch(() => {
this.logginIn = false;
this.hasError = !service.isAuthenticated;
@@ -67,6 +71,11 @@ export default class Login extends Vue {
return machineStatusActions.isAreaVisible(store, this.URLS_TO_FUNCTIONS_BINDING[this.$route.path]);
}
checkIfUserIsAuthorizedToThermoHood(): boolean {
return machineStatusActions.isAreaVisible(store, "thermoHood");
}
URLS_TO_FUNCTIONS_BINDING = {
"/production": "production",
"/tooling": "tooling",
@@ -13,7 +13,7 @@
<th class="assi-buttons"></th>
</tr>
</thead>
<tbody>
<tbody class="autocolor">
<template v-for="group of groupedData">
<template v-for="(item, index) of group">
<tr v-if="item.level === 0" :key="`${item.axis}_${index}`">
@@ -5,7 +5,7 @@
<img
v-if="pinned"
src="/assets/icons/sotto-cofano/png/ico-bt-selez-auto-pin.png"
class="ico-bt-selez-auto-pin-input"
class="ico-bt-selez-auto-pin-input pinned"
/>
<img
v-if="!pinned"
@@ -23,6 +23,7 @@
:item="item"
v-for="(item, index) of pinned"
:key="`pinned-${index}`"
:class="`back-${index%2}`"
></input-row>
</template>
@@ -40,6 +41,7 @@
:id="`input-${group}`"
v-for="(item, index) of items[group].filter(i => i.bank == bankid)"
:key="`h-${idx}-${idx2}-${index}`"
:class="`back-${index%2}`"
></input-row>
</template>
</template>
@@ -2,6 +2,7 @@ import Component from "vue-class-component";
import Vue from "vue";
import { Prop, Watch } from "vue-property-decorator";
import { underTheHoodService } from "@/services/underTheHoodService";
import { Modal as modal, ModalHelper } from "@/components/modals";
@Component({})
export default class outputRow extends Vue {
@@ -24,7 +25,20 @@ export default class outputRow extends Vue {
}
async force(value: number) {
console.log("force",value);
await underTheHoodService.forceChannel(this.group, this.item, value);
/*
if(this.item.isForced)
await underTheHoodService.forceChannel(this.group, this.item, value);
else
{
ModalHelper.AskConfirm( this.$options.filters.localize("modal_confirm_title", "Richiesta di conferma"),
this.$options.filters.localize("softkey_confirm", "Confirm?"),
async() => {
await underTheHoodService.forceChannel(this.group, this.item, value);
}, null, "modal");
}*/
}
async reset() {
@@ -5,7 +5,7 @@
<img
v-if="pinned"
src="/assets/icons/sotto-cofano/png/ico-bt-selez-auto-pin.png"
class="ico-bt-selez-auto-pin-input"
class="ico-bt-selez-auto-pin-input pinned"
/>
<img
v-if="!pinned"
@@ -24,6 +24,7 @@
:item="item"
v-for="(item, index) of pinned"
:key="`pinned-${index}`"
:class="`back-${index%2}`"
></output-row>
</template>
@@ -41,6 +42,7 @@
:id="`output-${group}`"
v-for="(item, index) of items[group].filter(i => i.bank == bankid)"
:key="`h-${idx}-${idx2}-${index}`"
:class="`back-${index%2}`"
></output-row>
</template>
</template>
@@ -10,7 +10,7 @@
<th></th>
</tr>
</thead>
<tbody>
<tbody class="autocolor">
<template v-for="(item, idx) in rowData">
<tr :key="`c-${idx}`">
<td>{{ item.date }}</td>
@@ -9,7 +9,7 @@
<th class="misurazioni-value">Value</th>
</tr>
</thead>
<tbody>
<tbody class="autocolor">
<tr v-for="(item, i) of rowData" :key="i" class="tr-inner">
<td>
<span>
@@ -0,0 +1,82 @@
.main-container th.riscaldi-set,
.main-container td.riscaldi-set {
width: 10%;
max-width: 10%;
}
.main-container th.riscaldi-cell-id,
.main-container td.riscaldi-cell-id {
width: 10%;
max-width: 10%;
}
.main-container th.channel-id,
.main-container td.channel-id {
width: 10%;
max-width: 10%;
}
.main-container th.board-id,
.main-container td.board-id {
width: 10%;
max-width: 10%;
}
.main-container th.output-id,
.main-container td.output-id {
width: 10%;
max-width: 10%;
}
.main-container th.reflector-id,
.main-container td.reflector-id {
width: 10%;
max-width: 10%;
}
.main-container th.riscaldi-current,
.main-container td.riscaldi-current {
width: 10%;
max-width: 10%;
}
.main-container th.riscaldi-status,
.main-container td.riscaldi-status {
width: 20%;
max-width: 20%;
}
.main-container th.riscaldi-details,
.main-container td.riscaldi-details {
width: 10%;
max-width: 10%;
}
.main-container td > span {
padding: 0 10px;
}
.main-container .status-td {
display: flex;
flex-flow: row;
justify-content: flex-start;
align-items: center;
}
.main-container .details-td {
display: flex;
flex-flow: row;
justify-content: flex-end;
align-items: center;
padding: 0;
}
.main-container .status-buttons {
width: 80px;
padding: 3px 3px;
border-radius: 2px;
text-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
color: #e8e8e8;
text-align: center;
}
.main-container .main-container label {
margin: 3px 16px 3px 16px;
}
.main-container .ok-button {
background-color: #90c03d;
}
.main-container .broken-button {
background-color: #d0021b;
}
.main-container .status-container {
display: flex;
justify-content: center;
}
@@ -1,5 +1,7 @@
import { Component, Vue } from "vue-property-decorator";
import { store } from "@/store";
import { ModalHelper } from "@/components/modals";
import { ModalInfoResistance } from "@/modules/base-components";
@Component({})
export default class RiscaldiTable extends Vue {
@@ -25,4 +27,15 @@ export default class RiscaldiTable extends Vue {
mounted() {
}
details(item) {
ModalHelper.selectedResistanceModal.idGroup = item.idGroup
ModalHelper.selectedResistanceModal.idReflector = item.idGroup
ModalHelper.selectedResistanceModal.idBoard = this.getOutput(item.idChannel)
ModalHelper.selectedResistanceModal.idoutput = this.getOutput(item.idChannel)
ModalHelper.selectedResistanceModal.status = this.getChannelInfo(item.idChannel).channelStatus
ModalHelper.ShowModal(ModalInfoResistance);
}
}
@@ -14,7 +14,7 @@
<th class="riscaldi-details">&nbsp;</th>
</tr>
</thead>
<tbody>
<tbody class="autocolor">
<tr v-for="(item, i) of resistances" :key="i">
<td ><span>{{item.idGroup}}</span></td>
<td ><span>{{item.idReflector}}</span></td>
@@ -39,7 +39,7 @@
</td>
<td >
<span class="details-td">
<button class="btn button-details" @click="goToDetails()">
<button class="btn button-details" @click="details(item)">
Details
</button>
</span>
@@ -0,0 +1,147 @@
.main-container {
width: 1920px;
height: 1080px;
display: grid;
grid-template-rows: 193px 1fr;
grid-template-columns: 495px 1fr;
}
.main-container table {
border-collapse: collapse;
position: relative;
}
.main-container table thead {
width: 674px;
height: 34px;
padding: 10px 0 0;
background-color: #4e585e;
box-sizing: border-box;
}
.main-container table thead tr th {
background-color: #4e585e;
position: sticky;
top: 0;
height: 12px;
font-size: 14px;
line-height: 34px;
text-align: left;
color: #ffffff;
min-width: 64px;
overflow: hidden;
padding: 0;
}
.main-container table thead tr th:after {
content: "";
position: absolute;
bottom: 0px;
width: 100%;
height: 2px;
background-color: #bbbcbc;
display: block;
}
.main-container table .center {
text-align: center;
}
.main-container table tbody {
width: 100%;
border-collapse: collapse;
border-spacing: 0px;
margin: 0;
}
.main-container table tbody td {
height: 64px;
color: #e8e8e8;
}
.main-container table tbody tr.back-0 {
background-color: #747f85;
}
.main-container table tbody tr.back-1 {
background-color: #4e585e;
}
.main-container table tbody.autocolor tr:nth-child(odd) {
background-color: #747f85;
}
.main-container table tbody.autocolor tr:nth-child(even) {
background-color: #4e585e;
}
.main-container table tbody::-webkit-scrollbar {
width: 16px;
}
.main-container table tbody::-webkit-scrollbar-track {
margin: 20px 0px;
background-color: #5a656b;
border-radius: 15px;
}
.main-container table tbody::-webkit-scrollbar-thumb {
width: 16px;
background: #3e464a;
border: 4px solid #5a656b;
border-radius: 15px;
}
.main-container .table-container {
height: 700px;
}
.main-container .table-container tr.group-row {
height: 64px;
width: 100%;
background: transparent !important;
}
.main-container .table-container tr.group-row td {
text-align: center;
padding: 20px;
height: auto;
font-size: 16px;
color: #fff;
font-weight: bold;
text-transform: uppercase;
}
.main-container .table-container td.pointer {
text-align: center;
}
.main-container .table-container button.pointer {
width: 48px;
height: 48px;
object-fit: contain;
border-radius: 2px;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
background-image: linear-gradient(to bottom, #818a8f 0%, #42494e 98%);
border: none;
}
.main-container .table-container button.pointer .pinned {
transform: rotateZ(45deg);
}
.main-container .column-menu {
grid-row: 2;
border-top: #ffffff 2px solid;
}
.main-container .column-page {
grid-row: 2;
grid-column: 2;
width: 1424px;
height: 885px;
border-top: #ffffff 2px solid;
background-color: #657178;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(600px, 1fr));
}
.main-container .column-page-one-column {
grid-row: 2;
grid-column: 2;
width: auto;
height: 885px;
border-top: #ffffff 2px solid;
background-color: #657178;
display: grid;
}
.main-container .column-page-one-column > table {
margin: 20px 0 0 20px;
}
.main-container .one-column-table-container {
height: 750px;
margin: 20px 20px 0 20px;
}
.main-container .one-column-table-container > table {
width: -webkit-fill-available;
}
.main-container .pointer {
cursor: pointer;
}
@@ -11,18 +11,19 @@
table {
border-collapse: collapse;
position: relative;
thead {
width: 674px;
height: 34px;
padding: 10px 0 0;
background-color: @fill-under-grey-1-2;
border-bottom: 2px solid @light-grey-blue;
box-sizing: border-box;
tr {
th {
background-color: @fill-under-grey-1-2;
// border-bottom: 2px solid @light-grey-blue;
position: sticky;
top: 0;
height: 12px;
@@ -31,6 +32,18 @@
text-align: left;
color: #ffffff;
min-width: 64px;
overflow: hidden;
padding: 0;
&:after {
content: "";
position: absolute;
bottom: 0px;
width: 100%;
height: 2px;
background-color: @light-grey-blue;
display: block;
}
}
}
}
@@ -50,13 +63,26 @@
color: #e8e8e8;
}
tr:nth-child(odd) {
// tr:nth-child(odd),
tr.back-0 {
background-color: @fill-under-grey-3-2;
}
tr:nth-child(even) {
// tr:nth-child(even),
tr.back-1 {
background-color: @fill-under-grey-1-2;
}
&.autocolor{
tr:nth-child(odd) {
background-color: @fill-under-grey-3-2;
}
tr:nth-child(even) {
background-color: @fill-under-grey-1-2;
}
}
&::-webkit-scrollbar {
width: 16px;
}
@@ -107,6 +133,9 @@
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
background-image: linear-gradient(to bottom, #818a8f 0%, #42494e 98%);
border: none;
.pinned{
transform: rotateZ(45deg);
}
}
}
@@ -129,7 +158,7 @@
.column-page-one-column {
grid-row: 2;
grid-column: 2;
width: 1384px;
width: auto;
height: 885px;
border-top: @white 2px solid;
background-color: @fill-under-grey-2-2;
@@ -141,7 +170,7 @@
.one-column-table-container {
height: 750px;
margin: 20px 0 0 20px;
margin: 20px 20px 0 20px;
> table {
width: -webkit-fill-available;
}
@@ -10,6 +10,14 @@ declare let $: any;
export class ModalHelper {
public static selectedResistanceModal = {
idGroup: -1,
idReflector: -1,
idBoard: -1,
idoutput: -1,
status: 0
};
public static loadDepotModal = {
positionId: 0,
@@ -58,6 +58,9 @@ export default class AppFooter extends Vue {
return machineStatusActions.isAreaVisible(store, areaname);
}
isThermoHoodVisible() {
return machineStatusActions.isAreaVisible(store, "thermoHood");
}
public getUtilities(): Array<Object> {
if (typeof cmsClient != "undefined")
return JSON.parse(cmsClient.getConfiguredProcessesInMainMenu());
@@ -95,15 +95,15 @@
</div>
<div class="machine-area">
<button
<button
@mouseup="toggleMainView()"
style="min-width:45px"
class="under"
class="under thermoHood"
v-if="isThermoHoodVisible()"
:class="{'pressed':state.isMainViewLiftedUp}"
:title="'footer_tooltip_under_hood' | localize('Open/Close Under-the-hood area')"
>
<i class="fa fa-gear"></i>
</button>
><img src="assets/icons/png/ico-bt-dark-advanced.png" /></button>
<span class="noThermoHood" v-else ></span>
<button
class="under"
@@ -22,6 +22,7 @@ import ModalAddOffsetTool from "./modal-add-offset-tool.vue";
import ModalMissingTools from "./modal-missing-tools.vue";
import ModalJobAddParameter from "./modal-job-add-parameter.vue";
import ModalNcContainer from "./modal-nc-container.vue";
import ModalInfoResistance from "./modal-info-resistance.vue";
export {
@@ -43,5 +44,6 @@ export {
ModalAddOffsetTool,
ModalMissingTools,
ModalJobAddParameter,
HistoryMaintenance
HistoryMaintenance,
ModalInfoResistance
};
@@ -0,0 +1,39 @@
import Vue from "vue";
import { Factory, messageService } from 'src/_base';
import Component from "vue-class-component";
import { Deferred } from "../../services/Deferred";
import { Prop } from "vue-property-decorator";
import { relativeTimeThreshold } from "moment";
import { ModalHelper, Modal } from "@/components/modals";
@Component({
components: {
modal: Modal,
}
})
export default class ModalInfoResistance extends Vue {
@Prop()
deferred: Deferred<any>;
get resis(){
return ModalHelper.selectedResistanceModal;
}
getBitVal(number){
if((this.resis.status & number) == number)
return true;
else
return false
}
close() {
messageService.deleteChannel("esc_pressed");
ModalHelper.HideModal();
};
};
@@ -0,0 +1,54 @@
<template>
<modal type="info-resistance" :title="'modal_resistance_info' | localize('Info Resistenza')">
<button class="close" slot="header-buttons" @click="close()"><i class="fa fa-remove"></i></button>
<div class="details">
<hr/>
<div class="status"><span>{{'resistance_info_id_group' | localize('Group ID:')}} </span>
<strong>{{resis.idGroup}}</strong>
</div>
<div class="status"><span>{{'resistance_info_id_reflector' | localize('Reflector ID:')}} </span>
<strong>{{resis.idReflector}}</strong>
</div>
<div class="status"><span>{{'resistance_info_id_output' | localize('Output ID:')}} </span>
<strong>{{resis.idoutput}}</strong>
</div>
<hr/>
<div class="status"><span>{{'resistance_info_wire_broken' | localize('Heater / Wire broken:')}} </span>
<strong v-if="getBitVal(1)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_fuse_blown' | localize('Fuse Blown:')}} </span>
<strong v-if="getBitVal(2)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_short_triac' | localize('Shortest Triac:')}} </span>
<strong v-if="getBitVal(4)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_amp_low' | localize('Amp too low:')}} </span>
<strong v-if="getBitVal(16)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_phase_missing' | localize('One or more phase are missinog:')}} </span>
<strong v-if="getBitVal(64)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_ssr_overload' | localize('SSR overload:')}} </span>
<strong v-if="getBitVal(128)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
<div class="status"><span>{{'resistance_info_frequency_not_ok' | localize('Frequency not 49..51 or 59..61 Hz:')}} </span>
<strong v-if="getBitVal(256)"><i class="fa fa-exclamation-triangle"></i></strong>
<strong v-else><i class="fa fa-check"></i></strong>
</div>
</div>
</modal>
</template>
<script src="./modal-info-resistance.ts" lang="ts">
</script>