Added Backup Recipes
This commit is contained in:
@@ -267,6 +267,52 @@ namespace Client2020.BrowserTools
|
||||
return JsonConvert.SerializeObject(drivelist);
|
||||
}
|
||||
|
||||
public string getOSextDriveList()
|
||||
{
|
||||
List<Drive> drivelist = new List<Drive>();
|
||||
|
||||
// USB & HD Drives
|
||||
foreach (var drive in DriveInfo.GetDrives())
|
||||
{
|
||||
if (drive.IsReady)
|
||||
{
|
||||
//Filter NC Address
|
||||
if (drive.DriveType != DriveType.Network && drive.DriveType == DriveType.Removable)
|
||||
{
|
||||
drivelist.Add(new Drive()
|
||||
{
|
||||
Name = ElaborateName(drive.VolumeLabel, drive.Name.TrimEnd('\\'), drive.DriveType),
|
||||
Path = drive.RootDirectory.ToString(),
|
||||
Type = ElaborateType(drive.DriveType)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(drivelist);
|
||||
}
|
||||
public string backupRecipes(String p)
|
||||
{
|
||||
if (!Directory.Exists(p))
|
||||
{
|
||||
return (JsonConvert.SerializeObject(new ErrorContainer("path_not_exists")));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string finalPath = p + "Backup_Recipes_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss");
|
||||
Directory.CreateDirectory(finalPath);
|
||||
this.CopyFilesRecursively(new DirectoryInfo(THERMO_RECIPE_PATH),new DirectoryInfo(finalPath));
|
||||
Process.Start(finalPath);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return (JsonConvert.SerializeObject(new ErrorContainer("error_during_backup")));
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject("");
|
||||
}
|
||||
|
||||
// Read all files in directory
|
||||
public string getFileList(string p)
|
||||
{
|
||||
@@ -531,6 +577,13 @@ namespace Client2020.BrowserTools
|
||||
return retName;
|
||||
}
|
||||
|
||||
public void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo target)
|
||||
{
|
||||
foreach (DirectoryInfo dir in source.GetDirectories())
|
||||
CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name));
|
||||
foreach (FileInfo file in source.GetFiles())
|
||||
file.CopyTo(Path.Combine(target.FullName, file.Name));
|
||||
}
|
||||
|
||||
private List<String> DirSearch(string sDir)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Automatically generated by nicola.carminati: 2020-10-15 -->
|
||||
<!-- Automatically generated by nicola.carminati: 2020-11-03 -->
|
||||
<root>
|
||||
<language_it>Italiano</language_it>
|
||||
<header_maintainance_request>Effettuare manutenzione</header_maintainance_request>
|
||||
@@ -323,4 +323,18 @@
|
||||
<production_management>Lotto di produzione</production_management>
|
||||
<production_enabling>Setta numeto max di pezzi</production_enabling>
|
||||
<mock_pieces>Numero di pezzi:</mock_pieces>
|
||||
<heats_alert_thermocamera_not_enabled>Thermoprophet non abilitato</heats_alert_thermocamera_not_enabled>
|
||||
<thermoprophet>Thermoprophet</thermoprophet>
|
||||
<thermocamera_mode>Modalità Thermoprophet</thermocamera_mode>
|
||||
<warmers_showcamera>Mostra immagine thermocamera</warmers_showcamera>
|
||||
<warmers_enable>Gestione abilitazione/disabilitazione</warmers_enable>
|
||||
<warmers_enabletemp>Abilita selzionate</warmers_enabletemp>
|
||||
<warmers_disabletemp>Disabilita selezionate</warmers_disabletemp>
|
||||
<warmers_temperature>Gestione temperature</warmers_temperature>
|
||||
<warmers_set_temperature>Fissa tutte le temperature</warmers_set_temperature>
|
||||
<thermocamera_on_off>Attivazione Thermoprophet</thermocamera_on_off>
|
||||
<modal_title_backup>Backup ricette</modal_title_backup>
|
||||
<select_devices>Seleziona dispositivo</select_devices>
|
||||
<warmers_clear_temperature>Annulla tutte le temperature</warmers_clear_temperature>
|
||||
<heats_alert_thermocamera_enabled>Thermoprophet abilitato</heats_alert_thermocamera_enabled>
|
||||
</root>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Automatically generated by nicola.carminati: 2020-10-15 -->
|
||||
<!-- Automatically generated by nicola.carminati: 2020-11-03 -->
|
||||
<root>
|
||||
<language_it>English</language_it>
|
||||
<header_maintainance_request>Maintenance request</header_maintainance_request>
|
||||
@@ -279,7 +279,7 @@
|
||||
<upperplate_extraction>Upperplate extraction</upperplate_extraction>
|
||||
<blowers>Blowers</blowers>
|
||||
<nebulizers>Nebulizers</nebulizers>
|
||||
<telescopic>Telecopic</telescopic>
|
||||
<telescopic>Telescopics</telescopic>
|
||||
<shutters>Shutters</shutters>
|
||||
<main_vacuum>Main vacuum</main_vacuum>
|
||||
<direct_vacuum>Direct vacuum</direct_vacuum>
|
||||
@@ -321,6 +321,20 @@
|
||||
<modal_start_button>Start</modal_start_button>
|
||||
<edit_prod_lbl_title>Edit Production</edit_prod_lbl_title>
|
||||
<production_management>Production lot</production_management>
|
||||
<production_enabling>Set the max num of pieces</production_enabling>
|
||||
<production_enabling>Set the max number of pieces</production_enabling>
|
||||
<mock_pieces>Number of pieces:</mock_pieces>
|
||||
<heats_alert_thermocamera_not_enabled>Thermoprophet not enabled</heats_alert_thermocamera_not_enabled>
|
||||
<thermoprophet>Thermoprophet</thermoprophet>
|
||||
<thermocamera_mode>Thermoprophet mode</thermocamera_mode>
|
||||
<warmers_showcamera>Show Camera Image</warmers_showcamera>
|
||||
<warmers_enable>Enable/Disable Management</warmers_enable>
|
||||
<warmers_enabletemp>Enable selected</warmers_enabletemp>
|
||||
<warmers_disabletemp>Disable selected</warmers_disabletemp>
|
||||
<warmers_temperature>Temps Management</warmers_temperature>
|
||||
<warmers_set_temperature>Set all temperatures</warmers_set_temperature>
|
||||
<thermocamera_on_off>Thermoprophet run</thermocamera_on_off>
|
||||
<modal_title_backup>Recipes backup</modal_title_backup>
|
||||
<select_devices>Select devices</select_devices>
|
||||
<warmers_clear_temperature>Clear all temperatures</warmers_clear_temperature>
|
||||
<heats_alert_thermocamera_enabled>Thermoprophet enabled</heats_alert_thermocamera_enabled>
|
||||
</root>
|
||||
@@ -2117,6 +2117,7 @@
|
||||
header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 24px;
|
||||
height: 81px;
|
||||
font-size: 20px;
|
||||
|
||||
@@ -2274,6 +2274,7 @@ article .box .body {
|
||||
.modal.modal-add-element-queue header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 24px;
|
||||
height: 81px;
|
||||
font-size: 20px;
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
import Vue from "vue";
|
||||
import Component from "vue-class-component";
|
||||
import modal from "@/components/modals/modal.vue";
|
||||
import { Deferred } from "@/services";
|
||||
import { Prop , Watch } from "vue-property-decorator";
|
||||
import { messageService } from "@/_base";
|
||||
import { Modal, ModalHelper } from "@/components/modals";
|
||||
import * as iziToast from "izitoast";
|
||||
|
||||
declare var cmsClient: any;
|
||||
|
||||
@Component({ components: { modal: Modal } })
|
||||
export default class backupRecipe extends Vue {
|
||||
|
||||
@Prop()
|
||||
deferred: Deferred<string>;
|
||||
|
||||
devicelist = [];
|
||||
device = "";
|
||||
canDo = false;
|
||||
|
||||
mounted() {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
this.devicelist = JSON.parse(cmsClient.getOSextDriveList());
|
||||
}
|
||||
this.canDo = false;
|
||||
}
|
||||
|
||||
|
||||
@Watch("device")
|
||||
valueCHange(){
|
||||
this.canDo = this.device.trim() != "";
|
||||
}
|
||||
|
||||
run() {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
this.canDo = false;
|
||||
var obj = JSON.parse(cmsClient.backupRecipes(this.device));
|
||||
if (obj.error) {
|
||||
(iziToast as any).error({
|
||||
title: "error",
|
||||
message: obj.error,
|
||||
theme: "dark",
|
||||
timeout: 10000,
|
||||
class: "t-error",
|
||||
transitionOut: "fadeOut",
|
||||
})
|
||||
}
|
||||
else{
|
||||
this.deferred.resolve();
|
||||
ModalHelper.HideModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close() {
|
||||
messageService.deleteChannel("esc_pressed");
|
||||
this.deferred.reject();
|
||||
ModalHelper.HideModal();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<template>
|
||||
<div class="setup">
|
||||
<modal type="save-as" :title="'modal_title_Backup' | localize('Backup Recipes folder')">
|
||||
<div slot="header-buttons">
|
||||
<button class="modal-close" @click="close()">
|
||||
<i class="fa fa-remove"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{{'select_devices' | localize('Select Devices')}}</label>
|
||||
<select v-model="device" :placeholder="'select_devices' | localize('Select Devices')" >
|
||||
<option v-for="device in devicelist" :value="device.Path">{{device.Name}}</option>
|
||||
</select>
|
||||
</div>
|
||||
<footer>
|
||||
<button class="btn" @click="close()">{{'cancel' | localize("Annulla")}}</button>
|
||||
<button class="btn btn-success" @click="run()" :disabled="!canDo">{{'confirm' | localize("Conferma")}}</button>
|
||||
</footer>
|
||||
</modal>
|
||||
</div>
|
||||
</template>
|
||||
<script src="./backupRecipe.ts" lang="ts"></script>
|
||||
-2
@@ -50,10 +50,8 @@ export default class Resistance extends Vue {
|
||||
return "179, 179, 179";
|
||||
|
||||
var delta = this.channel.tCamTempSet - this.channel.tCamTempAct;
|
||||
console.log(delta);
|
||||
if(delta >= - 5 && delta <= 5)
|
||||
{
|
||||
console.log("delta");
|
||||
return "144,191,61";
|
||||
}
|
||||
else if(delta>5){
|
||||
|
||||
+18
-10
@@ -18,7 +18,6 @@ export default class Thermocamera extends Vue {
|
||||
|
||||
selectedChannelIds: number[] = [];
|
||||
uniformChannelValue: number = -1;
|
||||
|
||||
|
||||
modeEnabled: Recipe.IValue = {
|
||||
setpointHMI: this.thermocameraMode,
|
||||
@@ -34,7 +33,7 @@ export default class Thermocamera extends Vue {
|
||||
setpointHMI: this.thermocameraOnOff,
|
||||
range: { min: 0, max: 999999 },
|
||||
status: {
|
||||
enabled: this.isOnOffRunEnabled,
|
||||
enabled: true,
|
||||
hasError: false,
|
||||
visible: true
|
||||
}
|
||||
@@ -59,9 +58,23 @@ export default class Thermocamera extends Vue {
|
||||
store.state.warmers.tCamStatus.thermoCamOnOff = false;
|
||||
}
|
||||
|
||||
@Watch("warmers", { deep: true })
|
||||
async ChangedTemps() {
|
||||
this.OnOffEnabled.status.enabled = false;
|
||||
for(const ch of store.state.warmers.channels){
|
||||
if(ch.tCamTempSet > 0){
|
||||
this.OnOffEnabled.status.enabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beforeMount(){
|
||||
this.uniformChannelValue = -1;
|
||||
}
|
||||
async mounted(){
|
||||
this.ChangedTemps();
|
||||
}
|
||||
|
||||
get selectedChannels(): Warmers.IChannel[] {
|
||||
return store.state.warmers.channels.filter(i => this.selectedChannelIds.indexOf(i.idChannel) >= 0);
|
||||
@@ -72,14 +85,6 @@ export default class Thermocamera extends Vue {
|
||||
return !store.state.warmers.tCamStatus.thermoCamOnOff;
|
||||
}
|
||||
|
||||
get isOnOffRunEnabled(): Boolean{
|
||||
for(const ch of store.state.warmers.channels){
|
||||
if(ch.tCamTempSet > 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
get thermocameraMode(): number {
|
||||
if(store.state.warmers.tCamStatus.thermoCamMode)
|
||||
return 1
|
||||
@@ -104,6 +109,9 @@ export default class Thermocamera extends Vue {
|
||||
for (const c of this.selectedChannels) c.tCamTempSet = this.uniformChannelValue;
|
||||
}
|
||||
|
||||
get warmers() {
|
||||
return store.state.warmers;
|
||||
}
|
||||
|
||||
zoomIn() {
|
||||
(this.$refs.warmers as any).zoomIn();
|
||||
|
||||
+4
-3
@@ -19,6 +19,7 @@
|
||||
@click="showcamera"
|
||||
>{{'warmers_showcamera' | localize('Show Camera Image')}}</button>
|
||||
</div>
|
||||
<!-- NOT USED
|
||||
<div class="divider"></div>
|
||||
<div class="input-area">
|
||||
<label>{{'warmers_selection' | localize('Selezione')}}</label>
|
||||
@@ -45,7 +46,7 @@
|
||||
<button class="btn btn-info" @click="$refs.warmers.selectNone()">
|
||||
<label>{{'warmers_select_none' | localize('Nessuno')}}</label>
|
||||
</button>
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="divider"></div>
|
||||
<div class="input-area">
|
||||
<label>{{'warmers_enable' | localize('Enable/Disable Management')}}</label>
|
||||
@@ -81,12 +82,12 @@
|
||||
class="btn btn-success"
|
||||
@click="setAllTemperature"
|
||||
:disabled="!isEnableDisableEnabled"
|
||||
>{{'warmers_setTemperature' | localize('Set all temperature')}}</button>
|
||||
>{{'warmers_set_temperature' | localize('Set all temperature')}}</button>
|
||||
<button
|
||||
class="btn btn-success"
|
||||
@click="clearAllTemperature"
|
||||
:disabled="!isEnableDisableEnabled"
|
||||
>{{'warmers_setTemperature' | localize('Clear all temperature')}}</button>
|
||||
>{{'warmers_clear_temperature' | localize('Clear all temperature')}}</button>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<template>
|
||||
|
||||
+7
-4
@@ -168,14 +168,17 @@ export default class ShowRiscaldamentoSuperioreInfo extends Vue {
|
||||
|
||||
this.isLoading = true;
|
||||
if(this.warmersEdited){
|
||||
for (const ch of store.state.warmers.channels) {
|
||||
if(ch.setpointHMI==0)
|
||||
ch.tCamActive = false;
|
||||
}
|
||||
store.state.warmers.channels.forEach(function(element, index){
|
||||
if (element.setpointHMI==0)
|
||||
store.state.warmers.channels[index].tCamActive = false;
|
||||
else
|
||||
store.state.warmers.channels[index].tCamActive = true;
|
||||
});
|
||||
await warmersService.Update(store.state.warmers.channels.reduce((p, c) => { p[c.idChannel] = c.setpointHMI; return p; }, {}));
|
||||
}
|
||||
if(this.tempsEdited)
|
||||
await warmersService.UpdateTemp(store.state.warmers.channels.reduce((p, c) => { p[c.idChannel] = c.tCamTempSet; return p; }, {}));
|
||||
|
||||
if(this.warmersEdited || this.tempEnabledEdited){
|
||||
await warmersService.UpdateEnable(store.state.warmers.channels.reduce((p, c) => { p[c.idChannel] = c.tCamActive; return p; }, {}));
|
||||
await warmersService.setTCamMode(store.state.warmers.tCamStatus.thermoCamMode);
|
||||
|
||||
@@ -9,6 +9,7 @@ import * as iziToast from "izitoast";
|
||||
import ZoomImage from './zoom-image.vue'
|
||||
import { recipeService } from "@/services/recipeService";
|
||||
import duplicateModal from "@/app_modules_thermo/save/duplicate.vue";
|
||||
import backupModal from "@/app_modules_thermo/save/backupRecipe.vue";
|
||||
import askNameModal from "./cards/modalAskName.vue";
|
||||
import { Watch } from "vue-property-decorator";
|
||||
|
||||
@@ -84,6 +85,10 @@ export default class ModalLoadProgram extends Vue {
|
||||
return this.$store.state.machineInfo;
|
||||
}
|
||||
|
||||
get recipe() {
|
||||
return this.$store.state.recipe;
|
||||
}
|
||||
|
||||
get canLoadProgram() {
|
||||
if(!this.$store.state.machineStatus.cycleProd) return false
|
||||
return this.$store.state.machineStatus.cycleProd.mode!=2;
|
||||
@@ -95,6 +100,10 @@ export default class ModalLoadProgram extends Vue {
|
||||
this.relaodFiles();
|
||||
}
|
||||
|
||||
async backup() {
|
||||
let result = await ModalHelper.ShowModalAsync(backupModal);
|
||||
}
|
||||
|
||||
async mounted() {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
this.driveList = JSON.parse(cmsClient.getOSdriveList());
|
||||
@@ -395,7 +404,6 @@ export default class ModalLoadProgram extends Vue {
|
||||
|
||||
await this.loadProgram(item.AbsolutePath);
|
||||
|
||||
this.$router.push({ name: 'setup' })
|
||||
|
||||
this.askConfirmLayer = false
|
||||
}
|
||||
@@ -406,19 +414,21 @@ export default class ModalLoadProgram extends Vue {
|
||||
}
|
||||
|
||||
async loadProgram(path: string) {
|
||||
if (typeof cmsClient != "undefined") {
|
||||
try {
|
||||
await recipeService.Load(path);
|
||||
if (typeof cmsClient != "undefined") {
|
||||
if(!this.recipe.changed)
|
||||
{
|
||||
await awaiter (recipeService.Load(path));
|
||||
this.close();
|
||||
} catch (err) {
|
||||
(iziToast as any).error({
|
||||
title: err.split(";")[0],
|
||||
message: err.split(";")[1],
|
||||
theme: "dark",
|
||||
timeout: 10000,
|
||||
class: "t-error",
|
||||
transitionOut: "fadeOut",
|
||||
})
|
||||
this.$router.push({ name: 'setup' })
|
||||
}
|
||||
else{
|
||||
ModalHelper.AskConfirm(this.$options.filters.localize("modal_confirm_title", "Richiesta di conferma"),
|
||||
this.$options.filters.localize("modal_confirm_load_recipe", "Vuoi continuare senza salvare la ricetta precedente?"),
|
||||
async () => {
|
||||
await awaiter (recipeService.Load(path));
|
||||
this.close();
|
||||
this.$router.push({ name: 'setup' })
|
||||
}, () => void (0))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
type="modal-load-program"
|
||||
:title="'modal_load_program_lbl_title_window' | localize('Selezione programma')"
|
||||
>
|
||||
<!--<button class="close" slot="header-buttons" @click="close()">
|
||||
<i class="fa fa-remove"></i>
|
||||
</button>-->
|
||||
<div class="pull-right" slot="header-buttons">
|
||||
<button class="btn" @click="backup()">
|
||||
<i class="fa fa-upload" aria-hidden="true"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-load-program-header">
|
||||
<!-- <div class="title">
|
||||
<i class="fa fa-chevron-left"></i>
|
||||
@@ -30,22 +32,6 @@
|
||||
</div>
|
||||
<div class="modal-load-program-body">
|
||||
<div class="first-column" :class="{blur:mustCLeanPProgram}" >
|
||||
<!-- <card-folder-path
|
||||
name="CNC"
|
||||
:iconType="'DATABASE'"
|
||||
:selected="'\\\\' == currentDrive"
|
||||
:disabled="!isCnReady()"
|
||||
@click="navigateTo('\\\\','\\\\', false, 1,0)"
|
||||
></card-folder-path>-->
|
||||
<!-- <hr /> -->
|
||||
<!--
|
||||
<card-folder-path
|
||||
name="Recent"
|
||||
:iconType="'SPFO'"
|
||||
:selected="currentDrive == recentPath"
|
||||
@click="navigateTo(recentPath, recentPath, true, 1, 0)"
|
||||
></card-folder-path>
|
||||
<hr />-->
|
||||
<card-folder-path
|
||||
v-for="(val, key) in this.driveList"
|
||||
:key="key"
|
||||
|
||||
Reference in New Issue
Block a user