merge
This commit is contained in:
@@ -462,7 +462,7 @@ namespace CMS_Client.Browser_Tools
|
||||
form.Add(new ByteArrayContent(filecontent), "file", fileName);
|
||||
if (imagecontent != null)
|
||||
form.Add(new ByteArrayContent(imagecontent), "image", imageName);
|
||||
|
||||
// Add reps to the form-data
|
||||
form.Add(new StringContent(reps.ToString()), "reps");
|
||||
|
||||
//Send them
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
<Reference Include="Microsoft.WindowsAPICodePack.ShellExtensions, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
<package id="MetroModernUI" version="1.4.0.0" targetFramework="net462" />
|
||||
<package id="Microsoft.WindowsAPICodePack-Core" version="1.1.0.2" targetFramework="net462" />
|
||||
<package id="Microsoft.WindowsAPICodePack-Shell" version="1.1.0.0" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||
</packages>
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
|
||||
<!-- Maintenance -->
|
||||
<!-- Heads -->
|
||||
<xs:element name="head" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<macros>
|
||||
<macro>Macro 1</macro>
|
||||
<macro>Macro 2</macro>
|
||||
<macro>Macro 3</macro>
|
||||
</macros>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="macros">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<!-- Macros -->
|
||||
<xs:element name="macro" minOccurs="0" maxOccurs="unbounded" type="xs:string">
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<!-- Language Type -->
|
||||
<xs:complexType name="langType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute name="langKey" use="required" type="xs:string" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
||||
@@ -32,5 +32,7 @@ namespace Step.Config
|
||||
public static AreasConfigModel MaintenanceConfig;
|
||||
public static AreasConfigModel UtilitiesConfig;
|
||||
public static AreasConfigModel ScadaConfig;
|
||||
|
||||
public static List<string> MacrosConfig;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace Step.Config
|
||||
ReadAlarmsConfig();
|
||||
ReadHeadsConfig();
|
||||
ReadToolManagerConfig();
|
||||
ReadMacros();
|
||||
}
|
||||
catch (System.Xml.XmlException ex)
|
||||
{
|
||||
@@ -385,6 +386,18 @@ namespace Step.Config
|
||||
.FirstOrDefault();
|
||||
}
|
||||
|
||||
public static void ReadMacros()
|
||||
{
|
||||
XDocument xmlConfigFile = GetXmlHandlerWithValidator(MACROS_CONFIG_SCHEMA_PATH, MACROS_CONFIG_PATH);
|
||||
|
||||
// Read config from XML file
|
||||
MacrosConfig = xmlConfigFile
|
||||
.Descendants("macros")
|
||||
.Elements()
|
||||
.Select(x => x.Value)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
#endregion Read config from file from configuration
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,10 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Config\macrosConfig.xml">
|
||||
<SubType>Designer</SubType>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServerConfig.cs" />
|
||||
<Compile Include="ServerConfigController.cs" />
|
||||
@@ -115,5 +119,10 @@
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Config\macrosConfigValidator.xsd">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -87,6 +87,7 @@
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="Resources\SinumerikHmi.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.10.4.0" newVersion="6.10.4.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -5,7 +5,7 @@
|
||||
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
|
||||
</configSections>
|
||||
<entityFramework>
|
||||
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"/>
|
||||
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
|
||||
<providers>
|
||||
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.10.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
|
||||
</providers>
|
||||
|
||||
@@ -10,8 +10,13 @@ namespace Step.Model
|
||||
public static readonly string[] VALID_IMAGE_EXTENSIONS = { ".jpg", ".jpeg", ".png" };
|
||||
public const double EPSILON = 0.001;
|
||||
public static string QUEUE_FILE_NAME = "pp";
|
||||
public const string JOB_MAIN_FILENAME = "main.cnc";
|
||||
public const string JOB_METADATA_FILENAME = "metadata.json";
|
||||
|
||||
public static String JOB_OPENING_PATH = BASE_PATH + "TempJob\\";
|
||||
|
||||
|
||||
|
||||
|
||||
public enum ROLE_IDS
|
||||
{
|
||||
CMS_SERVICE_ONLY = 1,
|
||||
@@ -140,6 +145,9 @@ namespace Step.Model
|
||||
public const string TOOL_MANAGER_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "toolManagerConfigValidator.xsd";
|
||||
public const string TOOL_MANAGER_CONFIG_PATH = CONFIG_DIRECTORY + "toolManagerConfig.xml";
|
||||
|
||||
public const string MACROS_CONFIG_SCHEMA_PATH = RESOURCE_DIRECTORY + "macrosConfigValidator.xsd";
|
||||
public const string MACROS_CONFIG_PATH = CONFIG_DIRECTORY + "macrosConfig.xml";
|
||||
|
||||
public static string WEBSITE_DIRECTORY = Path.Combine(BASE_PATH, "..", "wwwroot");
|
||||
public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\";
|
||||
public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd";
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOGenericParamModel
|
||||
{
|
||||
public List<DTOImageParamModel> Images;
|
||||
public string Description;
|
||||
public TimeSpan ExecutionTime;
|
||||
|
||||
public DTOGenericParamModel()
|
||||
{
|
||||
Images = new List<DTOImageParamModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOImageParamModel
|
||||
{
|
||||
public string Name;
|
||||
public string Base64;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOJobCustomParamModel
|
||||
{
|
||||
public string Name;
|
||||
public string Type;
|
||||
public List<string> SelectionList;
|
||||
public int Value;
|
||||
|
||||
public DTOJobCustomParamModel()
|
||||
{
|
||||
SelectionList = new List<string>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOJobModel
|
||||
{
|
||||
public string Name;
|
||||
public DateTime LastEditTimestamp;
|
||||
public string IsoMainProgram;
|
||||
public DTOMetadataModel Metadata;
|
||||
|
||||
public DTOJobModel()
|
||||
{
|
||||
Metadata = new DTOMetadataModel();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOMetadataFieldsModel
|
||||
{
|
||||
public string Description;
|
||||
public TimeSpan ExecutionTime;
|
||||
public List<int> Tools;
|
||||
public List<DTOJobCustomParamModel> Customs;
|
||||
|
||||
public DTOMetadataFieldsModel()
|
||||
{
|
||||
Tools = new List<int>();
|
||||
Customs = new List<DTOJobCustomParamModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Step.Model.DTOModels.JobModels
|
||||
{
|
||||
public class DTOMetadataModel
|
||||
{
|
||||
public DTOGenericParamModel Generics;
|
||||
public List<int> Tools;
|
||||
public List<DTOJobCustomParamModel> Customs;
|
||||
|
||||
public DTOMetadataModel()
|
||||
{
|
||||
Generics = new DTOGenericParamModel();
|
||||
Tools = new List<int>();
|
||||
Customs = new List<DTOJobCustomParamModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,7 +94,13 @@
|
||||
<Compile Include="DTOModels\DTOAxesModel.cs" />
|
||||
<Compile Include="DTOModels\DTOAxisNameModel.cs" />
|
||||
<Compile Include="DTOModels\DTOClientConfigurationModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOGenericParamModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOImageParamModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOJobCustomParamModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOJobModel.cs" />
|
||||
<Compile Include="DTOModels\DTOQueueModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOMetadataFieldsModel.cs" />
|
||||
<Compile Include="DTOModels\JobModels\DTOMetadataModel.cs" />
|
||||
<Compile Include="DTOModels\ToolModels\DTONewToolDataModel.cs" />
|
||||
<Compile Include="DTOModels\MaintenanceModels\DTOExpiredMaintenanceModel.cs" />
|
||||
<Compile Include="DTOModels\DTOHeadModel.cs" />
|
||||
|
||||
+13
-8
@@ -317,12 +317,12 @@ namespace Step.NC
|
||||
if (item.Status == QUEUE_STATUS.WAITING_OPERATOR)
|
||||
PartProgramQueue[item.ProcessId][QueueRunningIndexes[item.ProcessId]].Status = QUEUE_ITEM_STATUS.WAITING_OPERATOR;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Update data
|
||||
using (QueueController queueController = new QueueController())
|
||||
{
|
||||
queueController.UpdateQueue();
|
||||
}
|
||||
//using (QueueController queueController = new QueueController())
|
||||
//{
|
||||
// queueController.UpdateQueue();
|
||||
//}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
@@ -379,10 +379,11 @@ namespace Step.NC
|
||||
{
|
||||
itemId = itemId - 1;
|
||||
|
||||
// Update queue running index
|
||||
var a = QueueRunningIndexes[processId];
|
||||
// Update queue running index after move an item
|
||||
if (itemId < QueueRunningIndexes[processId] && newIndex >= QueueRunningIndexes[processId])
|
||||
QueueRunningIndexes[processId] -= 1;
|
||||
if (newIndex <= QueueRunningIndexes[processId] && itemId > QueueRunningIndexes[processId])
|
||||
if (newIndex < QueueRunningIndexes[processId] && itemId > QueueRunningIndexes[processId])
|
||||
QueueRunningIndexes[processId] += 1;
|
||||
|
||||
queue = new List<DTOQueueModel>();
|
||||
@@ -1267,6 +1268,7 @@ namespace Step.NC
|
||||
{
|
||||
config.FamilyOptionActive = true;
|
||||
config.MultitoolOptionActive = true;
|
||||
config.OffsetOptionActive = true;
|
||||
|
||||
List<string> categories = new List<string>();
|
||||
if (!ToolManagerConfig.ShankOpt)
|
||||
@@ -1281,13 +1283,16 @@ namespace Step.NC
|
||||
config.FamilyOptionActive = false;
|
||||
categories.Add("family");
|
||||
config.ToolsConfiguration = config.ToolsConfiguration.Where(x => !(x.Name == "familyId")).ToList();
|
||||
config.ToolsConfiguration = config.ToolsConfiguration.Concat(config.FamiliesConfiguration.FamilyConfiguration).ToList();
|
||||
config.ToolsConfiguration = config.FamiliesConfiguration.FamilyConfiguration.Concat(config.ToolsConfiguration).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
config.ToolsConfiguration = config.ToolsConfiguration.Concat(config.FamiliesConfiguration.FamilyReadOnlyConfiguration).ToList();
|
||||
}
|
||||
|
||||
if(!ToolManagerConfig.OffsetOpt)
|
||||
config.OffsetOptionActive = false;
|
||||
|
||||
if (!ToolManagerConfig.OffsetOpt)
|
||||
categories.Add("offset");
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="Language\ERR_english.INI">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.10.4.0" newVersion="6.10.4.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -35,11 +35,16 @@
|
||||
<Reference Include="MySql.Data, Version=6.10.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MySql.Data.6.10.4\lib\net452\MySql.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NLog.4.4.12\lib\net45\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.IO.Compression" />
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
|
||||
@@ -145,8 +145,8 @@
|
||||
<tooling_equipment_newlabel>Creazione Nuovo Utensile</tooling_equipment_newlabel>
|
||||
<siemens_tooling_edgesdata_label_edit>Modifica Tagliente n. %d</siemens_tooling_edgesdata_label_edit>
|
||||
<tooling_edgesdata_label_edit>Modifica Offset n. %d</tooling_edgesdata_label_edit>
|
||||
<tooling_edgesdata_label_new>Creazione nuovo Tagliente</tooling_edgesdata_label_new>
|
||||
<siemens_tooling_edgesdata_label_new>Associazionie nuovo Offset</siemens_tooling_edgesdata_label_new>
|
||||
<tooling_edgesdata_label_new>Associazionie nuovo Offset</tooling_edgesdata_label_new>
|
||||
<siemens_tooling_edgesdata_label_new>Creazione nuovo Tagliente</siemens_tooling_edgesdata_label_new>
|
||||
<tooling_shanks_label_box>Gestione Codoli</tooling_shanks_label_box>
|
||||
<tooling_shanks_label_search>Seleziona un Codolo:</tooling_shanks_label_search>
|
||||
<tooling_shanks_label_add>Crea un nuovo Codolo</tooling_shanks_label_add>
|
||||
@@ -248,6 +248,11 @@
|
||||
<tooling_families_list_category_selfAdaptive>Percorso autoadattativo:</tooling_families_list_category_selfAdaptive>
|
||||
<tooling_families_list_category_life>Vita:</tooling_families_list_category_life>
|
||||
<tooling_families_list_category_revive>Ravvivatura:</tooling_families_list_category_revive>
|
||||
<tooling_equipment_list_category_limits>Limiti:</tooling_equipment_list_category_limits>
|
||||
<tooling_equipment_list_category_revive>Ravvivatura:</tooling_equipment_list_category_revive>
|
||||
<tooling_equipment_list_category_dynamicCompensation>Compensazione Dinamica:</tooling_equipment_list_category_dynamicCompensation>
|
||||
<tooling_equipment_list_category_tcp>Tabella TCP:</tooling_equipment_list_category_tcp>
|
||||
<tooling_equipment_list_category_selfAdaptive>Percorso autoadattativo:</tooling_equipment_list_category_selfAdaptive>
|
||||
|
||||
|
||||
<!-- Tool Manager - Tool Params -->
|
||||
@@ -385,7 +390,8 @@
|
||||
<tooling_equipment_list_select_countLife>A Contatore</tooling_equipment_list_select_countLife>
|
||||
<tooling_equipment_list_select_wearLife>Ad Usura</tooling_equipment_list_select_wearLife>
|
||||
<tooling_equipment_list_select_clockWhise>Rot. Oraria</tooling_equipment_list_select_clockWhise>
|
||||
<tooling_equipment_list_select_counterClockWhise>Rot. Antioraria</tooling_equipment_list_select_counterClockWhise>
|
||||
<tooling_equipment_list_select_counterClockWhise>Rot. Antioraria</tooling_equipment_list_select_counterClockWhise>
|
||||
<tooling_equipment_list_select_doubleRotation>Tutti i sensi di rotazione</tooling_equipment_list_select_doubleRotation>
|
||||
<tooling_equipment_list_select_millingTool>UT per fresatura</tooling_equipment_list_select_millingTool>
|
||||
<tooling_equipment_list_select_ballNoseEndMill>Fr.cilin.testa sfer.</tooling_equipment_list_select_ballNoseEndMill>
|
||||
<tooling_equipment_list_select_conicalBallEnd>Fr.conic.testa sfer.</tooling_equipment_list_select_conicalBallEnd>
|
||||
|
||||
@@ -247,7 +247,12 @@
|
||||
<tooling_families_list_category_selfAdaptive>Adatpive Path:</tooling_families_list_category_selfAdaptive>
|
||||
<tooling_families_list_category_life>Life:</tooling_families_list_category_life>
|
||||
<tooling_families_list_category_revive>Tool Revive:</tooling_families_list_category_revive>
|
||||
|
||||
<tooling_equipment_list_category_limits>Limits:</tooling_equipment_list_category_limits>
|
||||
<tooling_equipment_list_category_revive>Tool Revive:</tooling_equipment_list_category_revive>
|
||||
<tooling_equipment_list_category_dynamicCompensation>Dynamic Compensation:</tooling_equipment_list_category_dynamicCompensation>
|
||||
<tooling_equipment_list_category_tcp>TCP Table:</tooling_equipment_list_category_tcp>
|
||||
<tooling_equipment_list_category_selfAdaptive>Adatpive Path:</tooling_equipment_list_category_selfAdaptive>
|
||||
|
||||
|
||||
<!-- Tool Manager - Tool Params -->
|
||||
<tooling_equipment_param_id>Tool Id</tooling_equipment_param_id>
|
||||
@@ -385,6 +390,7 @@
|
||||
<tooling_equipment_list_select_wearLife>Wear</tooling_equipment_list_select_wearLife>
|
||||
<tooling_equipment_list_select_clockWhise>Clockwhise Rot.</tooling_equipment_list_select_clockWhise>
|
||||
<tooling_equipment_list_select_counterClockWhise>Counter Clockwhise Rot.</tooling_equipment_list_select_counterClockWhise>
|
||||
<tooling_equipment_list_select_doubleRotation>All rotations</tooling_equipment_list_select_doubleRotation>
|
||||
<tooling_equipment_list_select_millingTool>Milling tool</tooling_equipment_list_select_millingTool>
|
||||
<tooling_equipment_list_select_ballNoseEndMill>Ball nose end mill</tooling_equipment_list_select_ballNoseEndMill>
|
||||
<tooling_equipment_list_select_conicalBallEnd>Conical ball end</tooling_equipment_list_select_conicalBallEnd>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="MySql.Data" version="6.10.4" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||
<package id="NLog" version="4.4.12" targetFramework="net461" />
|
||||
</packages>
|
||||
@@ -1,6 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
using Newtonsoft.Json;
|
||||
using Step.Model.DTOModels.JobModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using static Step.Model.Constants;
|
||||
|
||||
namespace Step.Utils
|
||||
@@ -101,7 +105,7 @@ namespace Step.Utils
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int GetNextId(IEnumerable<int> objIds)
|
||||
{
|
||||
if (objIds.Count() == 0)
|
||||
@@ -121,6 +125,86 @@ namespace Step.Utils
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
public static DTOJobModel UnpackJobAndReadMetadata(string path)
|
||||
{
|
||||
DTOJobModel job = new DTOJobModel();
|
||||
// Check if job exists
|
||||
if (!File.Exists(path))
|
||||
return null;
|
||||
|
||||
EmptyFolder(path);
|
||||
|
||||
string fileName = Path.GetFileName(path);
|
||||
|
||||
using (ZipArchive zipExtractor = ZipFile.OpenRead(fileName))
|
||||
{
|
||||
// Setup main job fields
|
||||
job.Name = Path.GetFileName(fileName);
|
||||
job.LastEditTimestamp = new FileInfo(fileName).LastAccessTime;
|
||||
|
||||
foreach (ZipArchiveEntry entry in zipExtractor.Entries)
|
||||
{
|
||||
// Get main program content
|
||||
if (entry.Name.Equals(JOB_MAIN_FILENAME, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
using (var reader = new StreamReader(entry.Open()))
|
||||
job.IsoMainProgram = (reader.ReadToEnd());
|
||||
}
|
||||
|
||||
// Read images
|
||||
else if (VALID_IMAGE_EXTENSIONS.Contains(Path.GetExtension(entry.Name).ToLower()))
|
||||
{
|
||||
var bytes = default(byte[]);
|
||||
entry.ExtractToFile(JOB_OPENING_PATH + entry.Name, true);
|
||||
using (var memstream = new MemoryStream())
|
||||
{
|
||||
entry.Open().CopyTo(memstream);
|
||||
bytes = memstream.ToArray();
|
||||
job.Metadata.Generics.Images.Add(new DTOImageParamModel()
|
||||
{
|
||||
Name = Path.GetFileNameWithoutExtension(entry.Name),
|
||||
Base64 = "data:image/" + Path.GetExtension(entry.Name).ToLower().TrimStart('.') + ";base64," + Convert.ToBase64String(bytes)
|
||||
});
|
||||
}
|
||||
}
|
||||
// Read metadata
|
||||
else if (entry.Name.Equals(JOB_METADATA_FILENAME, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
DTOMetadataFieldsModel metasFromFile = new DTOMetadataFieldsModel();
|
||||
|
||||
using (var reader = new StreamReader(entry.Open()))
|
||||
{
|
||||
metasFromFile = JsonConvert.DeserializeObject<DTOMetadataFieldsModel>(reader.ReadToEnd());
|
||||
if (metasFromFile == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
job.Metadata.Generics.Description = metasFromFile.Description;
|
||||
job.Metadata.Generics.ExecutionTime = metasFromFile.ExecutionTime;
|
||||
job.Metadata.Tools = metasFromFile.Tools;
|
||||
job.Metadata.Customs = metasFromFile.Customs;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Consider other file as part program
|
||||
else
|
||||
entry.ExtractToFile(JOB_OPENING_PATH + entry.Name, true);
|
||||
}
|
||||
|
||||
return job;
|
||||
}
|
||||
}
|
||||
|
||||
public static void EmptyFolder(string path)
|
||||
{
|
||||
DirectoryInfo di = new DirectoryInfo(path);
|
||||
foreach (FileInfo file in di.GetFiles())
|
||||
file.Delete();
|
||||
foreach (DirectoryInfo dir in di.GetDirectories())
|
||||
dir.Delete(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -22,7 +22,7 @@
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
|
||||
|
||||
@@ -291,6 +291,12 @@ namespace Step.Controllers.WebApi
|
||||
}
|
||||
}
|
||||
|
||||
[Route("macros")]
|
||||
public IHttpActionResult GetMacros()
|
||||
{
|
||||
return Ok(MacrosConfig);
|
||||
}
|
||||
|
||||
public class MoveItems
|
||||
{
|
||||
public int ObjectId;
|
||||
|
||||
+2
-2
@@ -97,8 +97,8 @@
|
||||
<Reference Include="Microsoft.Owin.StaticFiles, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Owin.StaticFiles.3.1.0\lib\net45\Microsoft.Owin.StaticFiles.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<package id="Microsoft.Owin.Security.OAuth" version="3.1.0" targetFramework="net462" />
|
||||
<package id="Microsoft.Owin.StaticFiles" version="3.1.0" targetFramework="net462" />
|
||||
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net462" />
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||
<package id="Owin" version="1.0" targetFramework="net462" />
|
||||
<package id="Swashbuckle" version="5.6.0" targetFramework="net462" />
|
||||
<package id="Swashbuckle.Core" version="5.6.0" targetFramework="net462" />
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"vue-drag-drop": "1.1.0",
|
||||
"vue-smooth-dnd": "0.2.1",
|
||||
"vue2-ace-editor": "0.0.11",
|
||||
"brace":"0.11.1"
|
||||
"brace": "0.11.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^7.1.2",
|
||||
|
||||
Vendored
+1
@@ -15,6 +15,7 @@ declare module server {
|
||||
multitoolOptionActive: boolean
|
||||
familyOptionActive: boolean
|
||||
magPositionOptionActive: boolean
|
||||
offsetOptionActive: boolean
|
||||
}
|
||||
|
||||
export interface EdgesConfiguration {
|
||||
|
||||
@@ -25,7 +25,11 @@ export default class toolingEquipment extends Vue {
|
||||
public get familyOptionActive(): boolean {
|
||||
return (this.$store.state as AppModel).tooling.familyOptionActive;
|
||||
}
|
||||
|
||||
|
||||
public get offsetOptionActive(): boolean {
|
||||
return (this.$store.state as AppModel).tooling.offsetOptionActive;
|
||||
}
|
||||
|
||||
public get tools(): server.Tool[] { return (this.$store.state as AppModel).tooling.tools; }
|
||||
public get ncTools(): server.ToolNc[] { return (this.$store.state as AppModel).tooling.ncTools; }
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<span v-if="ed.id>=0">{{'tooling_edgesdataequip_skill_tools' | localize("Offset")}} {{ed.id}}</span>
|
||||
<span v-if="!ed.id || ed.id<=0">{{'tooling_edgesdataequip_new' | localize("Nuovo Offset")}}</span>
|
||||
</button>
|
||||
<div class="tab plus" :class="{'avoid-clicks': enableAddEdge}">
|
||||
<div class="tab plus" :class="{'avoid-clicks': enableAddEdge}" v-if="offsetOptionActive">
|
||||
<button class="btn" @click="addOffset(selectedTool)"><i class="fa fa-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -147,7 +147,7 @@
|
||||
</div>
|
||||
|
||||
<div class="box-right-body" v-if="enableEquipment && !isSiemens">
|
||||
<button class="btn deleteElement" @click="deleteEdgeData(selectedTool,selectedEquipment)"><i class="fa fa-trash"></i></button>
|
||||
<button class="btn deleteElement" @click="deleteEdgeData(selectedTool,selectedEquipment)" v-if="offsetOptionActive"><i class="fa fa-trash"></i></button>
|
||||
<div class="box-right-label-header" v-if="selectedEquipment.id>=0">{{'tooling_edgesdata_label_edit' | localize("Modifica Tagliente n. %d",selectedEquipment.id)}}</div>
|
||||
<!-- <div class="box-right-label-header" v-if="!selectedEquipment.id || selectedEquipment.id<0">{{'tooling_edgesdata_label_new' | localize("Creazione nuovo Tagliente")}}</div> -->
|
||||
<div class="list-skill-equipment scrollable">
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="queue-body scrollable" v-if="selectedTab == 'Sinistra'">
|
||||
<Container @drag-start="onDrag" @drag-end="onDragEnd" @drop="changePosition($event)" :get-child-payload="getPayloadForItemQueue">
|
||||
<Container @drop="changePosition($event)" :get-child-payload="getPayloadForItemQueue">
|
||||
<Draggable v-for="pp in partPrograms" :key="pp.id">
|
||||
<div class="element-queue">
|
||||
<div class="draggable-item element-queue">
|
||||
<label class="number">{{pp.id}}</label><card-element-queue @click="deleteItemQueue(selectedProcess, pp)" :selected-process="selectedProcess" :id-part-program="pp.id" :name="pp.partProgramName" :number="pp.reps" :remaining-reps="pp.remainingReps" :status="pp.status" @position="positionBoxReps($event,pp)"></card-element-queue>
|
||||
</div>
|
||||
</Draggable>
|
||||
@@ -111,19 +111,18 @@ export default {
|
||||
await new FileService().deleteQueue(id);
|
||||
},
|
||||
async deleteItemQueue(processId, item){
|
||||
debugger
|
||||
await new FileService().deleteItemQueue(processId, item);
|
||||
},
|
||||
onDrag({ isSource, payload, willAcceptDrop }) {
|
||||
this.enablePopup = false;
|
||||
this.draggingIn = true;
|
||||
this.draggingItem = payload;
|
||||
},
|
||||
// onDrag({ isSource, payload, willAcceptDrop }) {
|
||||
// this.enablePopup = false;
|
||||
// this.draggingIn = true;
|
||||
// this.draggingItem = payload;
|
||||
// },
|
||||
|
||||
onDragEnd() {
|
||||
this.draggingIn = false;
|
||||
// this.draggingTool = null;
|
||||
},
|
||||
// onDragEnd({ isSource, payload, willAcceptDrop }) {
|
||||
// this.draggingIn = false;
|
||||
// this.draggingItem = payload;
|
||||
// },
|
||||
|
||||
onDragEnter(position) {
|
||||
this.draggingPosition = position;
|
||||
@@ -136,13 +135,14 @@ export default {
|
||||
if(event.payload && event.payload.status != 1 && event.payload.status != 3 && event.addedIndex != event.removedIndex){
|
||||
this.draggingIn = false;
|
||||
this.draggingItem = null;
|
||||
var itemsPositions = {objectId: event.payload.id, newPosition: event.addedIndex};
|
||||
await new FileService().moveItemsQueue(this.selectedProcess,itemsPositions,this.partPrograms).then(function(){
|
||||
response = true;
|
||||
});
|
||||
if(response && event.addedIndex && event.removeIndex){
|
||||
this.partPrograms.splice(event.addedIndex, 0, this.partPrograms.splice(event.removedIndex,1)[0]);
|
||||
}
|
||||
var itemsPositions = {objectId: event.payload.id, newPosition: event.addedIndex, oldPosition: event.removedIndex};
|
||||
await new FileService().moveItemsQueue(this.selectedProcess,itemsPositions,this.partPrograms);
|
||||
// .then(function(){
|
||||
// response = true;
|
||||
// });
|
||||
// if(response && event.addedIndex && event.removeIndex){
|
||||
// this.partPrograms.splice(event.addedIndex, 0, this.partPrograms.splice(event.removedIndex,1)[0]);
|
||||
// }
|
||||
}
|
||||
else{
|
||||
event = null;
|
||||
|
||||
@@ -36,15 +36,15 @@ export class FileService extends baseRestService {
|
||||
}
|
||||
|
||||
async deleteItemQueue(processId, model){
|
||||
debugger
|
||||
var result = await this.Delete<any>(this.BASE_URL + "queue/" + processId + "/remove/" + model.id, true);
|
||||
productionActions.deletePartProgram(store,model);
|
||||
return result;
|
||||
}
|
||||
|
||||
async moveItemsQueue(processId, itemsPositions, model){
|
||||
var result = await this.Put<any>(this.BASE_URL + "queue/" + processId + "/move", itemsPositions, true);
|
||||
productionActions.movePartPrograms(store,result);
|
||||
async moveItemsQueue(processId, position, model){
|
||||
var result = await this.Put<any>(this.BASE_URL + "queue/" + processId + "/move", position, true);
|
||||
model = result;
|
||||
productionActions.movePartProgram(store,{model,position});
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ export class FileService extends baseRestService {
|
||||
}
|
||||
|
||||
async changeReps(processId,model){
|
||||
debugger
|
||||
var result = await this.Put<any>(this.BASE_URL + "queue/" + processId + "/edit/" + model.id, {reps: model.reps});
|
||||
productionActions.updatePartProgram(store, result);
|
||||
return result;
|
||||
|
||||
@@ -75,6 +75,7 @@ export class ToolingService extends baseRestService {
|
||||
toolingActions.setToolsPerMultitools(store, result.maxToolsPerMultitools);
|
||||
toolingActions.setMultitoolOptionActive(store, result.multitoolOptionActive);
|
||||
toolingActions.setFamilyOptionActive(store, result.familyOptionActive);
|
||||
toolingActions.setOffsetOptionActive(store, result.offsetOptionActive);
|
||||
toolingActions.setMagPositionOptionActive(store, result.magPositionOptionActive);
|
||||
toolingActions.updateToolsConfigurations(store, result.toolsConfiguration);
|
||||
toolingActions.updateMagazinePosConfigurations(
|
||||
|
||||
@@ -11,7 +11,8 @@ export interface ProductionActions {
|
||||
updatePartPrograms(context, model:server.PartProgramModel[]);
|
||||
deletePartPrograms(context);
|
||||
deletePartProgram(context, model:server.PartProgramModel);
|
||||
movePartPrograms(context, model:server.PartProgramModel[]);
|
||||
movePartPrograms(context, model:server.PartProgramModel[]);
|
||||
movePartProgram(context, {model,position});
|
||||
}
|
||||
|
||||
export const productionStore = {
|
||||
@@ -23,24 +24,39 @@ export const productionStore = {
|
||||
},
|
||||
mutations: {
|
||||
UpdatePartProgram(store, model: server.PartProgramModel) {
|
||||
debugger
|
||||
store._partProgram.set(model.id, model);
|
||||
store.partProgram = Array.from(store._partProgram.values());
|
||||
},
|
||||
UpdatePartPrograms(store, model: server.PartProgramModel[]){
|
||||
store._partProgram.clear();
|
||||
store.partProgram = [];
|
||||
for(const key in model){
|
||||
const element = model[key];
|
||||
store._partProgram.set(element.id,element);
|
||||
store.partProgram = Array.from(store._partProgram.values());
|
||||
}
|
||||
},
|
||||
DeletePartPrograms(store) {
|
||||
store.partProgram = [];
|
||||
},
|
||||
DeletePartProgram(store, model:server.PartProgramModel) {
|
||||
debugger
|
||||
let idx = store.partProgram.indexOf(model);
|
||||
if(store.partProgram[idx] && model && store.partProgram[idx].id == model.id){
|
||||
store.partProgram.splice(idx,1);
|
||||
}
|
||||
// store._partProgram.delete(model.id);
|
||||
// store.partProgram = Array.from(store._partProgram.values());
|
||||
// let idx = store.partProgram.indexOf(model);
|
||||
// if(store.partProgram[idx] && model && store.partProgram[idx].id == model.id){
|
||||
// store.partProgram.splice(idx,1);
|
||||
// }
|
||||
store._partProgram.delete(model.id);
|
||||
store.partProgram = Array.from(store._partProgram.values());
|
||||
},
|
||||
MovePartPrograms(store, model:server.PartProgramModel[]) {
|
||||
store.partProgram = model;
|
||||
store.partProgram = [];
|
||||
store.partProgram = model;
|
||||
},
|
||||
MovePartProgram(store, {model,position}) {
|
||||
if(position){
|
||||
var model = store.partProgram.splice(position.oldPosition, 1)[0];
|
||||
store.partProgram.splice(position.newPosition, 0, model);
|
||||
// store.partProgram.splice(position.newPosition, 0, store.partProgram.splice(position.oldPosition,1)[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
@@ -48,10 +64,14 @@ export const productionStore = {
|
||||
context.commit("UpdatePartProgram", model);
|
||||
},
|
||||
updatePartPrograms(context, model:server.PartProgramModel[]) {
|
||||
context.commit("MovePartPrograms", model);
|
||||
context.commit("UpdatePartPrograms", model);
|
||||
// context.commit("MovePartPrograms", model);
|
||||
},
|
||||
movePartPrograms(context, model:server.PartProgramModel[]) {
|
||||
context.commit("MovePartPrograms", model);
|
||||
},
|
||||
movePartProgram(context, {model,position}) {
|
||||
context.commit("MovePartProgram", {model,position});
|
||||
},
|
||||
deletePartProgram(context, model:server.PartProgramModel) {
|
||||
context.commit("DeletePartProgram", model);
|
||||
|
||||
@@ -30,6 +30,7 @@ export interface ToolingStoreModel {
|
||||
multitoolOptionActive: boolean
|
||||
familyOptionActive: boolean
|
||||
magPositionOptionActive: boolean
|
||||
offsetOptionActive: boolean
|
||||
}
|
||||
|
||||
export interface ToolingGetters{
|
||||
@@ -98,6 +99,7 @@ export interface ToolingActions {
|
||||
setToolsPerMultitools(context, number);
|
||||
setMultitoolOptionActive(context, multitoolOptionActive: boolean);
|
||||
setFamilyOptionActive(context, familyOptionActive: boolean);
|
||||
setOffsetOptionActive(context, offsetOptionActive: boolean);
|
||||
setMagPositionOptionActive(context, magPositionOptionActive: boolean);
|
||||
}
|
||||
|
||||
@@ -147,7 +149,8 @@ export const toolingStore = {
|
||||
maxToolsPerMultitools: 0,
|
||||
multitoolOptionActive: false,
|
||||
familyOptionActive: false,
|
||||
magPositionOptionActive: false
|
||||
magPositionOptionActive: false,
|
||||
offsetOptionActive: false
|
||||
} as ToolingStoreModel,
|
||||
getters:{
|
||||
toolIsInWarning : (state) => (id) : boolean =>{
|
||||
@@ -398,6 +401,9 @@ export const toolingStore = {
|
||||
SetFamilyOptionActive(store, familyOptionActive){
|
||||
store.familyOptionActive = familyOptionActive;
|
||||
},
|
||||
SetOffsetOptionActive(store, offsetOptionActive){
|
||||
store.offsetOptionActive = offsetOptionActive;
|
||||
},
|
||||
SetMagPositionOptionActive(store, magPositionOptionActive){
|
||||
store.magPositionOptionActive = magPositionOptionActive;
|
||||
},
|
||||
@@ -427,6 +433,9 @@ export const toolingStore = {
|
||||
setFamilyOptionActive(context, familyOptionActive: boolean){
|
||||
context.commit("SetFamilyOptionActive", familyOptionActive);
|
||||
},
|
||||
setOffsetOptionActive(context, offsetOptionActive: boolean){
|
||||
context.commit("SetOffsetOptionActive", offsetOptionActive);
|
||||
},
|
||||
setMagPositionOptionActive(context, magPositionOptionActive: boolean){
|
||||
context.commit("SetMagPositionOptionActive", magPositionOptionActive);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user