Merge branch 'Star_Paddle' into Connect-UI

This commit is contained in:
Samuele Locatelli
2020-11-10 19:59:23 +01:00
33 changed files with 772 additions and 566 deletions
@@ -108,5 +108,12 @@
</Component>
</Component>
</Component>
<Component Name="Events">
<Variable SymbolicName="Donwtimes" BrowseName="Donwtimes" DataType="ua:String" ValueRank="Scalar" />
<Variable SymbolicName="Production" BrowseName="Production" DataType="ua:String" ValueRank="Scalar" />
<Variable SymbolicName="Kpis" BrowseName="Kpis" DataType="ua:String" ValueRank="Scalar" />
<Variable SymbolicName="Tools" BrowseName="Tools" DataType="ua:String" ValueRank="Scalar" />
<Variable SymbolicName="Messages" BrowseName="Messages" DataType="ua:String" ValueRank="Scalar" />
</Component>
</Machine>
</ModelDesign>
@@ -85,6 +85,10 @@
<key>LoaderXsize</key>
<value>1400</value>
</entry>
<entry>
<key>loaderSuckersNumber</key>
<value>12</value>
</entry>
<entry>
<key>ThermoCameraXpos</key>
<value>93</value>
@@ -33,7 +33,7 @@ namespace Thermo.Active.Database.Controllers
private const string machineAxisSpeed = "Machine:Axes:%NN%:FeedRate";
private const string machineAxisLoad = "Machine:Axes:%NN%:Load";
private const string machineAxisName = "Machine:Axes:%NN%:Name";
private const string machineEventKpis = "Machine:Events:Kpis";
private const string machineEventKpis = "Events:Kpis";
public static void WriteProductionNotification(uint ProductionProcess, string Notification)
{
@@ -63,6 +63,13 @@ namespace Thermo.Active.Database.Controllers
.Where(x => x.UserId == userId)
.ToList();
}
public List<KeyboardUserSoftKeyModel> FindkeyboardSoftkeys(int userId)
{
return dbCtx.
KeyboardUserSoftkeys
.Where(x => x.UserId == userId)
.ToList();
}
public List<DTOUserSoftKeyConfigModel> GetUserFavoriteSoftkeys(int userId)
{
@@ -87,7 +94,8 @@ namespace Thermo.Active.Database.Controllers
softKeys.Add(new FavoriteUserSoftkeyModel()
{
UserId = userId,
SoftkeyId = softKeyId
SoftkeyId = softKeyId,
Type = (int) SOFTKEY_PLACE.PADDLE
});
}
@@ -111,5 +119,83 @@ namespace Thermo.Active.Database.Controllers
// Save database context
dbCtx.SaveChanges();
}
public DTOKeyboardSoftKeyModel GetKeyboardFavoriteSoftkeys(int userId)
{
// Find user softkey stored in the database
List<KeyboardUserSoftKeyModel> keyboardKey = FindkeyboardSoftkeys(userId);
// Get config
DTOKeyboardSoftKeyModel keybSoftkey = new DTOKeyboardSoftKeyModel();
if(keyboardKey.Count==0)
{
keybSoftkey.IdStar1 = 0;
keybSoftkey.IdStar2 = 0;
}
else
{
keybSoftkey.IdStar1 = keyboardKey.FirstOrDefault().SoftkeyId1;
keybSoftkey.IdStar2 = keyboardKey.FirstOrDefault().SoftkeyId2;
}
return keybSoftkey;
}
public DTOKeyboardSoftKeyModel GetKeyboardFavoriteSoftkeysLoggedUser()
{
List<MachineUserModel> users = dbCtx
.Sessions
.Include("MachineUser")
.Select(x => x.MachineUser)
.GroupBy(x => x.MachineUserId)
.Select(x => x.FirstOrDefault())
.ToList();
if (users.Count > 0)
return GetKeyboardFavoriteSoftkeys(users[0].UserId);
else
return GetKeyboardFavoriteSoftkeys(-1);
}
public DTOKeyboardSoftKeyModel SetKeyboardFavoriteSoftkeys(int userId,int idSoftkey, int pos)
{
// Find user softkey stored in the database
List<KeyboardUserSoftKeyModel> keyboardKey = FindkeyboardSoftkeys(userId);
if (keyboardKey.Count == 0)
{
KeyboardUserSoftKeyModel newModel = new KeyboardUserSoftKeyModel();
newModel.UserId = userId;
if(pos==1)
{
newModel.SoftkeyId1 = idSoftkey;
newModel.SoftkeyId2 = 0;
}
else if (pos == 2)
{
newModel.SoftkeyId1 = 0;
newModel.SoftkeyId2 = idSoftkey;
}
dbCtx.KeyboardUserSoftkeys.Add(newModel);
}
else
{
KeyboardUserSoftKeyModel model = keyboardKey.FirstOrDefault();
if (pos == 1)
model.SoftkeyId1 = idSoftkey;
else if (pos == 2)
model.SoftkeyId2 = idSoftkey;
}
dbCtx.SaveChanges();
return GetKeyboardFavoriteSoftkeys(userId);
}
}
}
@@ -26,6 +26,7 @@ namespace Thermo.Active.Database
public DbSet<FunctionAccessModel> FunctionsAccess { get; set; }
public DbSet<SessionModel> Sessions { get; set; }
public DbSet<FavoriteUserSoftkeyModel> FavoriteUserSoftkeys { get; set; }
public DbSet<KeyboardUserSoftKeyModel> KeyboardUserSoftkeys { get; set; }
// Maintenances
public DbSet<MaintenanceModel> Maintenances { get; set; }
public DbSet<PerformedMaintenanceModel> PerformedMaintenances { get; set; }
@@ -0,0 +1,29 @@
// <auto-generated />
namespace Thermo.Active.Database.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")]
public sealed partial class AddedKeyboaSoftkey : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddedKeyboaSoftkey));
string IMigrationMetadata.Id
{
get { return "202011051531133_AddedKeyboaSoftkey"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,27 @@
namespace Thermo.Active.Database.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddedKeyboaSoftkey : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.keyboard_user_softKey",
c => new
{
user_id = c.Int(nullable: false),
pos1_softkey_id = c.Int(nullable: false),
pos2_softkey_id = c.Int(nullable: false),
})
.PrimaryKey(t => t.user_id);
}
public override void Down()
{
DropTable("dbo.keyboard_user_softKey");
}
}
}
File diff suppressed because one or more lines are too long
@@ -150,6 +150,10 @@
<Compile Include="Migrations\202011051133455_AddedTypeKey.Designer.cs">
<DependentUpon>202011051133455_AddedTypeKey.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202011051531133_AddedKeyboaSoftkey.cs" />
<Compile Include="Migrations\202011051531133_AddedKeyboaSoftkey.Designer.cs">
<DependentUpon>202011051531133_AddedKeyboaSoftkey.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Redis\redUtil.cs" />
@@ -198,6 +202,9 @@
<EmbeddedResource Include="Migrations\202011051133455_AddedTypeKey.resx">
<DependentUpon>202011051133455_AddedTypeKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202011051531133_AddedKeyboaSoftkey.resx">
<DependentUpon>202011051531133_AddedKeyboaSoftkey.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+6
View File
@@ -68,6 +68,12 @@ namespace Thermo.Active.Model
GROUP = 2
}
public enum SOFTKEY_PLACE : int
{
PADDLE = 0,
GANT = 1,
}
public enum HEAD_TYPE
{
SPINDLE = 0,
@@ -12,6 +12,14 @@ namespace Thermo.Active.Model.DTOModels
public string RefCallLabel { get; set; } = "";
public SOFTKEY_TYPE Type { get; set; }
public Dictionary<int, string> SubKeys { get; set; }
public SOFTKEY_TYPE Place { get; set; }
}
public class DTOKeyboardSoftKeyModel
{
public int IdStar1 { get; set; }
public int IdStar2 { get; set; }
}
public class DTOUserSoftKeyModel
@@ -0,0 +1,21 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Thermo.Active.Model.DatabaseModels
{
[Table("keyboard_user_softKey")]
public class KeyboardUserSoftKeyModel
{
[Key]
[Column("user_id")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
[Column("pos1_softkey_id")]
public int SoftkeyId1 { get; set; }
[Column("pos2_softkey_id")]
public int SoftkeyId2 { get; set; }
}
}
@@ -87,6 +87,7 @@
<Compile Include="DatabaseModels\FavoriteUserSoftKeyModel.cs" />
<Compile Include="DatabaseModels\FunctionAccessModel.cs" />
<Compile Include="ConfigModels\MessageModel.cs" />
<Compile Include="DatabaseModels\KeyboardUserSoftKeyModel.cs" />
<Compile Include="DatabaseModels\MachineModel.cs" />
<Compile Include="DatabaseModels\MaintenanceFileModel.cs" />
<Compile Include="DatabaseModels\MaintenanceModel.cs" />
+34
View File
@@ -7,6 +7,7 @@ using System.Configuration;
using System.Globalization;
using System.Linq;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.ConfigModels;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.AlarmModels;
@@ -1795,6 +1796,16 @@ namespace Thermo.Active.NC
}
// se si in questo caso scrivo configurazione attuale...
WriteRecipeParams(updtRecipe, nMaxParamWrite, delayParamWrite);
using (UserSoftkeysController controller = new UserSoftkeysController())
{
DTOKeyboardSoftKeyModel keybKey = controller.GetKeyboardFavoriteSoftkeysLoggedUser();
libraryError = WriteKeyboardStarSoftkey(keybKey.IdStar1, keybKey.IdStar2);
if (libraryError.IsError())
return libraryError;
}
// Ack !
libraryError = numericalControl.PLC_WAckConfRecipeRequest();
if (libraryError.IsError())
@@ -3076,6 +3087,29 @@ namespace Thermo.Active.NC
return libraryError;
}
/// <summary>
/// Scrive le softkey star
/// </summary>
/// <param name="idKey1">Softkey ID of the first button</param>
/// <param name="idKey2">Softkey ID of the second button</param>
/// <returns></returns>
public CmsError WriteKeyboardStarSoftkey(int idkey1, int idkey2)
{
int val1 = 0;
int val2 = 0;
UserSoftKeyConfigModel userSoftkey1 = SoftKeysConfig.Where(X => X.Id == idkey1).FirstOrDefault();
UserSoftKeyConfigModel userSoftkey2 = SoftKeysConfig.Where(X => X.Id == idkey2).FirstOrDefault();
if (userSoftkey1 != null)
val1 = userSoftkey1.PlcId;
if (userSoftkey2 != null)
val2 = userSoftkey2.PlcId;
CmsError libraryError = numericalControl.PLC_WKeyboardSoftkey((ushort)val1, (ushort)val2);
return libraryError;
}
/// <summary>
/// Write all warmers load for recipe
/// </summary>
@@ -1,10 +1,13 @@
using System;
using CMS_CORE_Library.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Web.Http;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using Thermo.Active.Utils;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Controllers.WebApi
@@ -12,6 +15,12 @@ namespace Thermo.Active.Controllers.WebApi
[RoutePrefix("api/user_softkey")]
public class FavoriteUserSoftkeyController : ApiController
{
/// <summary>
/// Oggetto adapter condiviso da WebAPI
/// </summary>
protected static NcAdapter ncAdapter = new NcAdapter();
[Route("favorite"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.READ)]
public IHttpActionResult GetFavoriteSoftkeys()
@@ -51,5 +60,49 @@ namespace Thermo.Active.Controllers.WebApi
}
}
[Route("keyboard"), HttpGet]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.READ)]
public IHttpActionResult GetKeyboardSoftkeys()
{
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.FirstOrDefault(c => c.Type == USER_ID_KEY);
int userIdInt = Convert.ToInt32(userId.Value);
using (UserSoftkeysController controller = new UserSoftkeysController())
{
return Ok(controller.GetKeyboardFavoriteSoftkeys(userIdInt));
}
}
[Route("keyboard"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.GENERAL, Action = ACTIONS.WRITE)]
public IHttpActionResult setKeyboardSoftkey(int softkeyId, int position)
{
if (position > 2)
return BadRequest("position_error");
var identity = User.Identity as ClaimsIdentity;
// Find user id from the bearer token
var userId = identity.Claims.FirstOrDefault(c => c.Type == USER_ID_KEY);
int userIdInt = Convert.ToInt32(userId.Value);
// Try connection
CmsError libraryError = ncAdapter.Connect();
using (UserSoftkeysController controller = new UserSoftkeysController())
{
DTOKeyboardSoftKeyModel softkey = controller.SetKeyboardFavoriteSoftkeys(userIdInt, softkeyId, position);
libraryError=ncAdapter.WriteKeyboardStarSoftkey(softkey.IdStar1, softkey.IdStar2);
if (libraryError.IsError())
return BadRequest(libraryError.localizationKey);
return Ok(softkey);
}
}
}
}
@@ -14,6 +14,7 @@ using System.Windows.Media.Animation;
using TeamDev.SDK.MVVM;
using Thermo.Active.Config;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.Model.DTOModels.ThRecipe;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.NC;
@@ -732,6 +733,18 @@ namespace Thermo.Active.Controllers.WebApi
return checkError;
}
using (UserSoftkeysController controller = new UserSoftkeysController())
{
DTOKeyboardSoftKeyModel keybKey = controller.GetKeyboardFavoriteSoftkeysLoggedUser();
libraryError = ncAdapter.WriteKeyboardStarSoftkey(keybKey.IdStar1, keybKey.IdStar2);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteCurrentRecipeToPlc | WriteKeyboardStarSoftkey error | {checkError.exception}");
return libraryError;
}
}
// process ch load setup...
Dictionary<int, int> newRisk = new Dictionary<int, int>();
@@ -452,6 +452,7 @@ namespace Thermo.Active.Listeners.SignalR
if (!LastProdPanelData.Equals(currProdPanel))
{
bool newPiece = currProdPanel.NumDone != LastProdPanelData.NumDone;
LastProdPanelData = currProdPanel;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
@@ -459,7 +460,7 @@ namespace Thermo.Active.Listeners.SignalR
if (Config.ServerConfig.ServerStartupConfig.CmsConnectReady)
{
if (currProdPanel.NumDone != LastProdPanelData.NumDone)
if (newPiece)
RedisController.WriteProductionRepsDone(1, currProdPanel.NumDone.ToString());
if (currProdPanel.NumTarget != LastProdPanelData.NumTarget)
@@ -468,10 +469,10 @@ namespace Thermo.Active.Listeners.SignalR
//if (currProdPanel.LastTCiclo != LastProdPanelData.LastTCiclo)
// RedisController.WriteProductionCycleTime(1, currProdPanel.LastTCiclo.ToString());
if (currProdPanel.NumDone > 0 && currProdPanel.NumDone != LastProdPanelData.NumDone)
if (currProdPanel.NumDone > 0 && newPiece)
{
var ts = DateTime.UtcNow.ToString("o");
var a = "{\"v\": { \"PART_COUNT\": 1}\"ts\": " + ts + "}";
var a = "{\"v\": { \"PART_COUNT\": 1},\"ts\": \"" + ts + "\"}";
RedisController.WriteMachineEventKpis(a);
}
}
@@ -1,4 +1,5 @@
using Microsoft.Owin.Security;
using CMS_CORE_Library.Models;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.OAuth;
using System;
using System.Linq;
@@ -6,6 +7,8 @@ using System.Security.Claims;
using System.Threading.Tasks;
using Thermo.Active.Database.Controllers;
using Thermo.Active.Model.DatabaseModels;
using Thermo.Active.Model.DTOModels;
using Thermo.Active.NC;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
@@ -13,6 +16,8 @@ namespace Thermo.Active.Provider
{
public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
protected static NcAdapter ncAdapter = new NcAdapter();
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
// Validate client
@@ -63,6 +68,21 @@ namespace Thermo.Active.Provider
await base.GrantResourceOwnerCredentials(context);
// Try connection
CmsError libraryError = ncAdapter.Connect();
using (UserSoftkeysController controller = new UserSoftkeysController())
{
DTOKeyboardSoftKeyModel softkey = controller.GetKeyboardFavoriteSoftkeys(user.UserId);
libraryError = ncAdapter.WriteKeyboardStarSoftkey(softkey.IdStar1, softkey.IdStar2);
if (libraryError.IsError())
{
context.SetError("plc_not_connected");
return;
}
}
return;
}
catch (Exception ex)
@@ -119,8 +119,26 @@
color: #979797;
margin: 0 1rem;
.keyb{
border: 2px solid #979797;
width: 35px;
height: 35px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 25px;
font-size: 22px;
font-weight: bold;
line-height: 35px;
&.active {
color: #1791ff;
border-color: #1791ff;
}
}
&.active {
color: #1791ff;
border-color: #1791ff;
}
}
@@ -211,6 +211,14 @@
flex: 1;
flex-flow: column;
align-items: center;
.ventosa{
color: #FFFF;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.volantino{
height: 48px;
width: 48px;
@@ -218,11 +226,33 @@
bottom: 101px;
left: 100px;
}
.quota-volantino{
height: 48px;
width: 169px;
position: absolute;
bottom: 101px;
left: 165px;
display: flex;
align-items: center;
font-size: 1.2em;
}
.quota-caricatore{
height: 48px;
width: 169px;
position: absolute;
bottom: 137px;
right: 71px;
display: flex;
align-items: center;
justify-content: flex-end;
font-size: 1.2em;
}
.load-label{
width: 100%;
text-align: center;
font-size: 2em;
color: #4b4b4b;
padding-right: 45px;
}
.borded_label {
@@ -189,6 +189,14 @@
flex-flow: column;
align-items: center;
}
.setup .modal section.body section article .svg-area .ventosa {
color: #FFFF;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.setup .modal section.body section article .svg-area .volantino {
height: 48px;
width: 48px;
@@ -196,11 +204,33 @@
bottom: 101px;
left: 100px;
}
.setup .modal section.body section article .svg-area .quota-volantino {
height: 48px;
width: 169px;
position: absolute;
bottom: 101px;
left: 165px;
display: flex;
align-items: center;
font-size: 1.2em;
}
.setup .modal section.body section article .svg-area .quota-caricatore {
height: 48px;
width: 169px;
position: absolute;
bottom: 137px;
right: 71px;
display: flex;
align-items: center;
justify-content: flex-end;
font-size: 1.2em;
}
.setup .modal section.body section article .svg-area .load-label {
width: 100%;
text-align: center;
font-size: 2em;
color: #4b4b4b;
padding-right: 45px;
}
.setup .modal section.body section article .svg-area .borded_label {
cursor: pointer;
@@ -5108,8 +5138,25 @@ article .box .body {
color: #979797;
margin: 0 1rem;
}
.paddle section footer .configure .keyb {
border: 2px solid #979797;
width: 35px;
height: 35px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 25px;
font-size: 22px;
font-weight: bold;
line-height: 35px;
}
.paddle section footer .configure .keyb.active {
color: #1791ff;
border-color: #1791ff;
}
.paddle section footer .configure.active {
color: #1791ff;
border-color: #1791ff;
}
.softkey {
width: 100%;
@@ -14,10 +14,12 @@ import { messageService } from "@/_base";
export default class Paddle extends Vue {
isOpen: boolean = true;
isOpen: boolean = false;
openFull: boolean = false
configMode: boolean = false;
configkey1: boolean = false;
configkey2: boolean = false;
get softKeys(): { [id: number]: SoftKeysConfigurationModel[] } {
return store.state.machineInfo.softKeys as { [id: number]: SoftKeysConfigurationModel[] };
}
@@ -43,6 +45,23 @@ export default class Paddle extends Vue {
return result;
}
setConfigkey1(){
this.configkey1 = !this.configkey1;
this.configkey2=false;
this.configMode=false;
}
setConfigkey2(){
this.configkey2 = !this.configkey2;
this.configkey1=false;
this.configMode=false;
}
setConfig(){
this.configMode = !this.configMode;
this.configkey1=false;
this.configkey2=false;
}
get favourites(): number[] {
return store.state.machineInfo.softkeysFavorites;
}
@@ -51,6 +70,31 @@ export default class Paddle extends Vue {
return this.favourites.map(i => this.getSoftKeyById(i) as SoftKeysConfigurationModel)
}
get keyb1(): number {
return store.state.machineInfo.starKeyboard1;
}
get keyb2(): number {
return store.state.machineInfo.starKeyboard2;
}
isInKeyboard(id): boolean{
if(this.configkey1)
return id == this.keyb1;
if(this.configkey2)
return id == this.keyb2;
return false
}
keyb1click(){
if(this.keyb1>0 && !this.configkey1 && !this.configkey2)
Hub.Current.sendUserSoftKey(this.keyb1);
}
keyb2click(){
if(this.keyb2>0 && !this.configkey1 && !this.configkey2)
Hub.Current.sendUserSoftKey(this.keyb2);
}
getSoftKeyById(id: number): SoftKeysConfigurationModel {
return this.allSoftKeys.find(i => i.id == id);
}
@@ -68,6 +112,13 @@ export default class Paddle extends Vue {
async loadData() {
await dataService.GetSoftKeysConfiguration();
await dataService.GetUserSoftkeyFavorite();
await dataService.GetKeybSoftkeyFavorite();
if(!this.isOpen){
this.configkey1=false;
this.configkey2=false;
this.configMode=false;
}
}
confirmationDelegate = null;
@@ -98,6 +149,15 @@ export default class Paddle extends Vue {
async toggleFavourite(id: number, add: boolean) {
if(this.configkey1){
await dataService.AddKeybSoftkey(id,1)
return;
}
if(this.configkey2){
await dataService.AddKeybSoftkey(id,2)
return;
}
if (add)
await dataService.AddUserSoftkeyFavorite(id)
else
@@ -16,17 +16,17 @@
<section class="main">
<header>{{'star-keyboard-softkeys' | localize("Keyboard softkeys")}}</header>
<article>
<button class="softkey star" >
<button class="softkey star" :disabled="keyb1==0" :click="keyb1click">
<span class="icon">
<span class="circle">|</span>
</span>
<span class="text">{{"test"}}</span>
<span class="text" v-if="keyb1 > 0">{{'softkey_' + keyb1 | localize('softkey_' + keyb1)}}</span>
</button>
<button class="softkey star" >
<button class="softkey star" :disabled="keyb2==0" :click="keyb2click" >
<span class="icon">
<span class="circle">||</span>
</span>
<span class="text">{{"test"}}</span>
<span class="text" v-if="keyb2 > 0">{{'softkey_' + keyb2 | localize('softkey_' + keyb2)}}</span>
</button>
</article>
<header>{{'preferred-softkeys' | localize("Soft Keys")}}</header>
@@ -38,6 +38,8 @@
:title="'softkey_' + b.id | localize('softkey_' + b.id)"
:type="b.type"
:config-mode="configMode"
:configkeyboardMode="configkey1 || configkey2"
:isInKeyboard="isInKeyboard(b.id)"
@toggleFavourite="toggleFavourite(b.id, false)"
v-model="getSoftKeyStatus(b.id).value"
:active="getSoftKeyStatus(b.id).active"
@@ -49,11 +51,13 @@
</template>
</article>
<footer>
<div class="configure" @click="configMode = !configMode" :class="{'active': configMode}">
<i class="fa fa-star-o"></i>
<div class="configure" @click="setConfigkey1" :class="{'active': configkey1}">
<span class="keyb" :class="{'active': configkey1}">|</span>
</div>
<div class="configure" @click="configMode = !configMode" :class="{'active': configMode}">
<div class="configure" @click="setConfigkey2" :class="{'active': configkey2}">
<div class="keyb" :class="{'active': configkey2}">||</div>
</div>
<div class="configure" @click="setConfig" :class="{'active': configMode}">
<i class="fa fa-gear"></i>
</div>
<div class="configure" @click="openFull = !openFull" :class="{'active': openFull}">
@@ -84,6 +88,8 @@
:title="'softkey_' + b.id | localize('softkey_' + b.id)"
:type="b.type"
:config-mode="configMode"
:configkeyboardMode="configkey1 || configkey2"
:isInKeyboard="isInKeyboard(b.id)"
@toggleFavourite="toggleFavourite(b.id, !isFavourite(b.id))"
v-model="getSoftKeyStatus(b.id).value"
:active="getSoftKeyStatus(b.id).active"
@@ -18,18 +18,24 @@ export default class SoftKey extends Vue {
@Prop({ default: false })
configMode: boolean;
@Prop({ default: false })
configkeyboardMode: boolean;
@Prop({ default: false })
active: boolean;
@Prop({ default: false })
isFavourite: boolean;
@Prop({ default: false })
isInKeyboard: boolean;
@Prop({ default: null })
id: number;
doclick() {
if (!this.configMode && this.type != 0) this.$emit('click');
if (this.configMode) this.$emit('toggleFavourite');
if (!this.configMode && !this.configkeyboardMode && this.type != 0) this.$emit('click');
if (this.configMode || this.configkeyboardMode) this.$emit('toggleFavourite');
}
get Checked() { return this.value; }
@@ -1,9 +1,13 @@
<template>
<button class="softkey" @click="doclick()" :disabled="!active && !configMode" :class="{ active: (value && type==1 && !configMode)}">
<button class="softkey" @click="doclick()" :disabled="!active && !configMode && !configkeyboardMode" :class="{ active: (value && type==1 && !configMode)}">
<button class="configure" v-if="configMode" @click.prevent.stop="$emit('toggleFavourite')">
<i class="fa fa-plus" v-if="!isFavourite"></i>
<i class="fa fa-minus" v-if="isFavourite"></i>
</button>
<button class="configure" v-if="configkeyboardMode && isInKeyboard" @click.prevent.stop="$emit('toggleFavourite')">
<i class="fa fa-star"></i>
</button>
<toggle-button v-if="type==0" v-model="Checked"></toggle-button>
{{title}}
</button>
@@ -55,6 +55,7 @@
</foreignObject>
<line
class="vertical-line"
v-if="showStatus && recipeValue"
:x1="(duration - (showStatus && recipeValue?statusDuration:0)) * ganttOptions.secondSize"
:x2="(duration - (showStatus && recipeValue?statusDuration:0)) * ganttOptions.secondSize"
:y1="0"
@@ -22,16 +22,45 @@ export default class SVGCaricatore extends Vue{
@Prop({default:1000})
larghTelaioReal:number;
@Prop({default:1000})
quotaVolantino:number;
@Prop({default:1})
numVentose:number;
@Prop({default:""})
umeasVolantino:string;
misVentosaReal = 50; //50 mm
larghTelaioSVG = 1055;
offsetVentoseSVG = 28.5
dimVentose = 18;
minoreuguale:string="<=";
getPositionSheet(id,col){
var vent = ((this.larghTelaioSVG + (this.dimVentose*2)) / (this.numVentose +1));
var posX = (id*vent ) - (this.dimVentose*2);
if(col == 1)
return "translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 0) translate("+ posX + ")";
else if(col == 2)
return "translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate("+ posX + ")";
else if(col == 3)
return "translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate("+ posX + ")";
else if(col == 4)
return "translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate("+ posX + ")";
return "";
}
get larghLastraCalc(){
return (this.larghLastraReal / this.larghTelaioReal ) * this.larghTelaioSVG;
}
get xLastraCalc(){
return (this.larghTelaioSVG/2.000 - this.larghLastraCalc/2.000);
}
get quotaVentose(){
return this.quotaVolantino - this.misVentosaReal;
}
}
@@ -1,6 +1,6 @@
<template>
<div class="svg-area">
<svg xmlns="http://www.w3.org/2000/svg" width="1057" height="707" viewBox="0 0 1057 707">
<svg xmlns="http://www.w3.org/2000/svg" width="1057" height="707" viewBox="0 0 1100 707">
<g fill="none" fill-rule="evenodd">
<g>
<g>
@@ -14,565 +14,59 @@
y="58" />
<path stroke="#BBBCBC" stroke-width="2" d="M528.5 0L528.5 606" transform="translate(-630 -147) translate(50 25) translate(580 122)"/>
<path stroke="#BBBCBC" stroke-width="2" d="M1055 306L0 306" transform="translate(-630 -147) translate(50 25) translate(580 122)"/>
<path stroke="#BBBCBC" stroke-width="2" d="M1100 306L0 306" transform="translate(-630 -147) translate(50 25) translate(580 122)"/>
<path stroke="#BBBCBC" stroke-width="2" d="M1090 306L1090 600" ></path>
<path stroke="#BBBCBC" stroke-width="2" d="M1100 306L528.5 306" transform="translate(-630 -147) translate(50 25) translate(580 359)"></path>
<path xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:type="star" sodipodi:sides="3" sodipodi:cx="62.114742" sodipodi:cy="292.18243" sodipodi:r1="1.8131942" sodipodi:r2="0.90659708" sodipodi:arg1="1.5707963" sodipodi:arg2="2.6179939" d="m 231.4,20.3 -0.785136,-1.3599 -0.785136,-1.35989 1.570272,0 1.570272,0 -0.785136,1.35989 z" transform="matrix(0.92838376,0,0,-1.0738472,15.707629,417.51225) scale(5)" style="fill: rgb(187, 188, 188); fill-opacity: 1; stroke: rgb(187, 188, 188); stroke-width: 0.264583; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 0.929368;"></path>
<path xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:type="star" sodipodi:sides="3" sodipodi:cx="62.114742" sodipodi:cy="292.18243" sodipodi:r1="1.8131942" sodipodi:r2="0.90659708" sodipodi:arg1="1.5707963" sodipodi:arg2="2.6179939" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="m 206.2,109.3 -0.785136,-1.3599 -0.785136,-1.35989 1.570272,0 1.570272,0 -0.785136,1.35989 z" inkscape:transform-center-y="0.45319651" transform="matrix(1.0001954,0,0,0.99979353,58.092706,-4.6559432) scale(5)" inkscape:transform-center-x="1.2206616e-06" style="fill: rgb(187, 188, 188); fill-opacity: 1; stroke: rgb(187, 188, 188); stroke-width: 0.264583; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 0.929368;"></path>
<g>
<path stroke="#E8E8E8" stroke-width="4" d="M27.926 89.875L27.926 42.451 0 42.451 88 0 175.68 42.451 149.242 42.451 149.242 89.875" transform="translate(-630 -147) translate(50 25) translate(580 122) translate(443 617)"/>
</g>
<g>
<g>
<path fill="#BBBCBCCC" stroke="#979797" stroke-width="4" d="M2 9H1055V31H2z" transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70)"/>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(28.5)">
<g v-for="index in numVentose" :key="'A'+index" :transform="getPositionSheet(index,1)" >
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A1</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(88.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A2</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(148.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A3</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(208.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A4</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(268.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A5</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(328.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A6</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(388.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A7</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(448.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A8</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(508.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12.5" y="25">A9</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(568.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A10</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(628.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A11</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(688.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A12</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(748.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A13</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(808.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A14</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(868.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A15</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(928.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A16</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(988.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9" y="25">A17</tspan>
</text>
<foreignObject
width="40"
height="40">
<div class="ventosa">{{index}}</div>
</foreignObject>
</g>
</g>
<g>
<path fill="#BBBCBCCC" stroke="#979797" stroke-width="4" d="M2 9H1055V31H2z" transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164)"/>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(28.5)">
<g v-for="index in numVentose" :key="'B'+index" :transform="getPositionSheet(index,2)" >
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B1</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(88.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B2</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(148.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B3</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(208.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B4</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(268.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B5</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(328.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B6</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(388.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B7</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(448.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B8</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(508.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">B9</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(568.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B10</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(628.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B11</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(688.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B12</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(748.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B13</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(808.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B14</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(868.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B15</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(928.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B16</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 164) translate(988.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">B17</tspan>
</text>
<foreignObject
width="40"
height="40">
<div class="ventosa">{{index}}</div>
</foreignObject>
</g>
</g>
<g>
<path fill="#BBBCBCCC" stroke="#979797" stroke-width="4" d="M2 9H1055V31H2z" transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268)"/>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(28.5)">
<g v-for="index in numVentose" :key="'C'+index" :transform="getPositionSheet(index,3)" >
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C1</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(88.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C2</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(148.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C3</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(208.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C4</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(268.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C5</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(328.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C6</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(388.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C7</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(448.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C8</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(508.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="13" y="25">C9</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(568.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C10</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(628.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C11</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(688.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C12</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(748.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C13</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(808.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C14</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(868.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C15</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(928.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C16</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 268) translate(988.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="9.5" y="25">C17</tspan>
</text>
<foreignObject
width="40"
height="40">
<div class="ventosa">{{index}}</div>
</foreignObject>
</g>
</g>
<g>
<path fill="#BBBCBCCC" stroke="#979797" stroke-width="4" d="M2 9H1055V31H2z" transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432)"/>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(28.5)">
<g v-for="index in numVentose" :key="'D'+index" :transform="getPositionSheet(index,4)" >
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D1</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(88.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D2</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(148.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D3</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(208.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D4</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(268.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D5</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(328.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D6</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(388.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D7</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(448.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D8</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(508.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="12" y="25">D9</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(568.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D10</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(628.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D11</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(688.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D12</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(748.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D13</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(808.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D14</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(868.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D15</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(928.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D16</tspan>
</text>
</g>
<g transform="translate(-630 -147) translate(50 25) translate(580 122) translate(0 70) translate(0 432) translate(988.5)">
<circle cx="20" cy="20" r="18" fill="#4B4B4B" stroke="#000" stroke-width="4"/>
<path fill="#BBBCBC" fill-opacity=".6" d="M0 7H40V33H0z"/>
<path fill="#979797" d="M0 7H40V11H0zM0 29H40V33H0z"/>
<text fill="#FFF" font-family="WorkSans-Medium, Work Sans" font-size="12" font-weight="400">
<tspan x="8.5" y="25">D17</tspan>
</text>
<foreignObject
width="40"
height="40">
<div class="ventosa">{{index}}</div>
</foreignObject>
</g>
</g>
</g>
@@ -582,6 +76,8 @@
</g>
</svg>
<img class="volantino" src="assets/svg/elementi-volante.svg" />
<div class="quota-volantino">{{quotaVolantino}} {{umeasVolantino}}</div>
<div class="quota-caricatore">{{quotaVentose}} {{umeasVolantino}}</div>
<div class="load-label">{{'lbl_loader_load_area'|localize('Area di Carico')}}</div>
</div>
</template>
@@ -107,7 +107,13 @@
</aside>
<hr />
<article>
<svgcaricatore :larghLastraReal="recipe.general_sizes_sheet_dim_x.setpointHMI" :larghTelaioReal="parameters.loaderXsize"></svgcaricatore>
<svgcaricatore
:quotaVolantino="recipe.general_sizes_sheet_dim_y.setpointHMI"
:umeasVolantino="recipe.general_sizes_sheet_dim_y.unitMeasure"
:larghLastraReal="recipe.general_sizes_sheet_dim_x.setpointHMI"
:larghTelaioReal="parameters.loaderXsize"
:numVentose="Number(parameters.loaderSuckersNumber)"
/>
<div class="absolute bottom left">
<!-- <button class="btn btn-info square">
<img src="assets/icons/png/info.png" />
@@ -1,6 +1,6 @@
import Vue from 'vue';
import Component from 'vue-class-component';
import { Prop } from 'vue-property-decorator';
import { Prop, Watch } from 'vue-property-decorator';
import Slider from "@/app_modules_thermo/components/slider.vue";
import Scheda from "@/app_modules_thermo/components/scheda.vue";
import svgChart from "@/app_modules_thermo/components/svgChart.vue";
@@ -12,6 +12,32 @@ export default class VuotoPrincipale extends Vue {
recipe: Recipe.IRecipe;
@Watch("recipe.vacuum_main_max_time", {deep:true})
editMaxTime(){
if(this.recipe.vacuum_main_3_chart_setpointx.setpointHMI > 0){
var maxtime = this.recipe.vacuum_main_1_chart_setpointx.setpointHMI + this.recipe.vacuum_main_2_chart_setpointx.setpointHMI;
this.recipe.vacuum_main_3_chart_setpointx.setpointHMI = this.recipe.vacuum_main_max_time.setpointHMI - maxtime;
}
else if(this.recipe.vacuum_main_2_chart_setpointx.setpointHMI > 0 && this.recipe.vacuum_main_3_chart_setpointx.setpointHMI <= 0){
var maxtime = this.recipe.vacuum_main_1_chart_setpointx.setpointHMI;
this.recipe.vacuum_main_3_chart_setpointx.setpointHMI = 0;
this.recipe.vacuum_main_2_chart_setpointx.setpointHMI = this.recipe.vacuum_main_max_time.setpointHMI - maxtime;
}
else if(this.recipe.vacuum_main_2_chart_setpointx.setpointHMI <= 0 && this.recipe.vacuum_main_3_chart_setpointx.setpointHMI <= 0){
this.recipe.vacuum_main_2_chart_setpointx.setpointHMI = 0;
this.recipe.vacuum_main_3_chart_setpointx.setpointHMI = 0;
this.recipe.vacuum_main_1_chart_setpointx.setpointHMI = this.recipe.vacuum_main_max_time.setpointHMI;
}
}
@Watch("recipe.vacuum_main_1_chart_setpointx", {deep:true})
@Watch("recipe.vacuum_main_2_chart_setpointx", {deep:true})
@Watch("recipe.vacuum_main_3_chart_setpointx", {deep:true})
editvaluesTime(n,o){
var somma = this.recipe.vacuum_main_1_chart_setpointx.setpointHMI + this.recipe.vacuum_main_2_chart_setpointx.setpointHMI + this.recipe.vacuum_main_3_chart_setpointx.setpointHMI;
this.recipe.vacuum_main_max_time.setpointHMI = somma;
}
get bars() {
return [
{
@@ -1,6 +1,6 @@
import { baseRestService } from "@/_base/baseRestService";
import { store, MachineInfoModel, machineInfoActions } from "@/store";
import { SoftKeysConfigurationModel, machineInfoStore } from "../store/machineInfo.store"
import { SoftKeysConfigurationModel,SoftKeysKeyboardModel, machineInfoStore } from "../store/machineInfo.store"
import { CONFIGURATION } from "@/config";
import { machineService } from ".";
@@ -24,6 +24,12 @@ export class DataService extends baseRestService {
let result = await this.Put<number[]>((await this.BASE_URL()) + "/api/user_softkey/favorite", machineInfoStore.state.softkeysFavorites, true);
return result;
}
async AddKeybSoftkey(id: number, position: number) {
//machineInfoActions.addSoftKeysFavorites(store, model);
let result = await this.Put<SoftKeysKeyboardModel>((await this.BASE_URL()) + "/api/user_softkey/keyboard?softkeyId=" + id +"&position=" + position, {}, true);
machineInfoActions.updateKeybKeysFavorites(store, {id1: result.idStar1, id2: result.idStar2});
return result;
}
async RemoveUserSoftKeyFavourite(model: number) {
machineInfoActions.removeSoftKeysFavorites(store, model);
@@ -36,6 +42,12 @@ export class DataService extends baseRestService {
return result;
}
async GetKeybSoftkeyFavorite() {
let result = await this.Get<SoftKeysKeyboardModel>((await this.BASE_URL()) + "/api/user_softkey/keyboard", true);
machineInfoActions.updateKeybKeysFavorites(store, {id1: result.idStar1, id2: result.idStar2});
return result;
}
async SetCurrentNcLanguage(language) {
return await this.Put((await this.BASE_URL()) + "/api/nc/active_language/" + language, null, true);
}
@@ -28,7 +28,10 @@ export interface MachineInfoModel {
defaultLanguage?: string,
clientDefaultLanguage?: string,
softkeysFavorites?: Array<number>
softkeysFavorites?: Array<number>,
starKeyboard1?: number,
starKeyboard2?: number
}
export interface MachineInfoActions {
@@ -37,6 +40,7 @@ export interface MachineInfoActions {
removeSoftKeysFavorites(context, model: number);
updateSoftKeysFavorites(context, model: number[]);
updateCanChangePages(context, canchanges: boolean);
updateKeybKeysFavorites(context, model);
}
export interface SoftKeysConfigurationModel {
@@ -49,6 +53,11 @@ export interface SoftKeysConfigurationModel {
}
export interface SoftKeysKeyboardModel {
idStar1: number,
idStar2: number
}
export const machineInfoStore = {
state: {
machineSerialNumber: "00000000000000",
@@ -82,7 +91,10 @@ export const machineInfoStore = {
defaultLanguage: "en",
clientDefaultLanguage: "en",
softkeysFavorites: [],
siemensKeyboardOption: false
siemensKeyboardOption: false,
starKeyboard1: -1,
starKeyboard2: -1,
} as MachineInfoModel,
getters: {
getNcSoftKeyInfo: state => id => {
@@ -115,6 +127,10 @@ export const machineInfoStore = {
},
UpdateCanChangePages(store, canchanges: boolean) {
store.canChangePages = canchanges;
},
updateKeybKeysFavorites(store, model){
store.starKeyboard1 = model.id1;
store.starKeyboard2 = model.id2;
}
},
actions: {
@@ -133,6 +149,9 @@ export const machineInfoStore = {
updateCanChangePages(context, canchanges: boolean) {
context.commit("UpdateCanChangePages", canchanges);
},
updateKeybKeysFavorites(context, model) {
context.commit("updateKeybKeysFavorites",model);
},
} as MachineInfoActions
}
@@ -73,7 +73,8 @@ export interface MachineStatusModel {
warmerAutocompStep: number,
resistSizeX: number,
resistSizeY: number,
loaderXsize:number
loaderXsize:number,
loaderSuckersNumber:number
}
}
@@ -150,7 +151,8 @@ export const machineStatusStore = {
warmerAutocompStep: 5,
resistSizeX: 100,
resistSizeY: 48,
loaderXsize: 1300
loaderXsize: 1300,
loaderSuckersNumber:1
}