WPFWorkMode.xaml.cs 14.5 KB
using BLL;
using ClosedXML.Excel;
using Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static System.Windows.Forms.AxHost;

namespace SmartScan.SetControl.WPF
{
    /// <summary>
    /// WPFWorkMode.xaml 的交互逻辑
    /// </summary>
    public partial class WPFWorkMode : System.Windows.Controls.UserControl
    {
        private int clickCount = 0;
        public delegate void PrintDelegate(Dictionary<string, string> content);
        public static event PrintDelegate Printing;
        public class PrinterInfo
        {
            public string Printer { get; set; }
            public string Label { get; set; }
            public string Template { get; set; }
        }
        public WPFWorkMode()
        {
            InitializeComponent();
            LoadInitialSettings();


        }
        private void LoadInitialSettings()
        {
            // 创建表格数据源
            List<PrinterInfo> printerInfoList = new List<PrinterInfo>();
            List<PrinterInfo> printerInfoList1 = new List<PrinterInfo>();
            List<PrinterInfo> printerInfoList2= new List<PrinterInfo>();

            // 添加可用打印机信息
            foreach (string printer in Printer.AllName)
            {
                printerInfoList.Add(new PrinterInfo
                {
                    Printer = printer,
                    Label = "",
                    Template = "",
                });
            }
            foreach (string printer in BLLCommon.labelEdit.Name)
            {
               printerInfoList1.Add(new PrinterInfo
                {
                    Printer = "",
                    Label = printer,
                    Template = "",
                });
            }
            foreach (string printer in BLLCommon.mateEdit.Name)
            {
                printerInfoList2.Add(new PrinterInfo
                {
                    Printer = "",
                    Label = "",
                    Template = printer,
                });
            }




            // 添加标签和模板信息
            foreach (var item in printerInfoList)
            {
                // 尝试匹配默认标签
                if (Printer.AllName.Length > 0)
                {
                    item.Label = BLLCommon.labelEdit.Name[0];
                }

                // 尝试匹配默认模板
                //if (BLLCommon.mateEdit.Name.Length > 0)
                //{
                //    item.Template = BLLCommon.mateEdit.Name[0];
                //}
            }
            foreach (var item in printerInfoList1)
            {
                

                // 尝试匹配默认模板
                if (BLLCommon.labelEdit.Name.Length > 0)
                {
                    if  (BLLCommon.mateEdit.Count>0)
                        item.Template = BLLCommon.mateEdit.Name[0];
                }
            }
            foreach (var item in printerInfoList2)
            {


                // 尝试匹配默认模板
                if (BLLCommon.mateEdit.Name.Length > 0)
                {
                    item.Printer = BLLCommon.mateEdit.Name[0];
                }
            }

            // 设置表格数据源
            PrinterInfoGrid.ItemsSource = printerInfoList;
            PrinterInfoGrid1.ItemsSource = printerInfoList1;
            PrinterInfoGrid2.ItemsSource = printerInfoList2;
            string configPrinterName=  BLLCommon.config.PrinterName;
            string configPrinterName1= BLLCommon.config.DefaultPrintLabel;
            string configPrinterName2= BLLCommon.config.DefaultMaterialName;
            if (!string.IsNullOrEmpty(configPrinterName))
            {
                // 查找匹配项
                PrinterInfo matchingPrinter = printerInfoList.FirstOrDefault(p => p.Printer == configPrinterName);

                if (matchingPrinter != null)
                {
                    // 选中匹配的项
                    PrinterInfoGrid.SelectedItem = matchingPrinter;

                    // 如果需要滚动到选中项
                    PrinterInfoGrid.ScrollIntoView(matchingPrinter);
                }
            }
            if (!string.IsNullOrEmpty(configPrinterName1))
            {
                // 查找匹配项
                PrinterInfo matchingPrinter = printerInfoList1.FirstOrDefault(p => p.Label == configPrinterName1);

                if (matchingPrinter != null)
                {
                    // 选中匹配的项
                    PrinterInfoGrid1.SelectedItem = matchingPrinter;

                    // 如果需要滚动到选中项
                    PrinterInfoGrid1.ScrollIntoView(matchingPrinter);
                }
            }
            if (!string.IsNullOrEmpty(configPrinterName2))
            {
                // 查找匹配项
                PrinterInfo matchingPrinter = printerInfoList2.FirstOrDefault(p => p.Template == configPrinterName2);

                if (matchingPrinter != null)
                {
                    // 选中匹配的项
                    PrinterInfoGrid2.SelectedItem = matchingPrinter;

                    // 如果需要滚动到选中项
                    PrinterInfoGrid2.ScrollIntoView(matchingPrinter);
                }
            }
            //// 选中默认打印机(如果已配置)
            //if (!string.IsNullOrEmpty(BLLCommon.config.PrinterName))
            //{
            //    foreach (PrinterInfo item in printerInfoList)
            //    {
            //        if (item.Printer == BLLCommon.config.PrinterName)
            //        {
            //            PrinterInfoGrid2.SelectedItem = item;
            //            item.Label = BLLCommon.config.DefaultPrintLabel;
            //            item.Template = BLLCommon.config.DefaultMaterialName;
            //            break;
            //        }
            //    }
            //}

            // 打印方向设置
            RdoLandscape.IsChecked = BLLCommon.config.PrintLandscape;
            RdoVertical.IsChecked = !BLLCommon.config.PrintLandscape;

            // 图像保存设置
            switch (BLLCommon.config.HistoryImage)
            {
                case HistoryImage.Original:
                    RdoOriginal.IsChecked = true;
                    break;
                case HistoryImage.Condense:
                    RdoCondense.IsChecked = true;
                    break;
                case HistoryImage.NoImage:
                    RdoNoImage.IsChecked = true;
                    break;
            }

            // 复选框设置
            ChkSelectPN.IsChecked = BLLCommon.config.SelectHttpPN;
            ChkLabelEmptyCheck.IsChecked = BLLCommon.config.LabelEmptyCheck;
            ChkOpenEnterWork.IsChecked = BLLCommon.config.OpenStartWork;
            ChkPrintCompletedClear.IsChecked = BLLCommon.config.PrintCompletedClear;
            ChkOpenMaximize.IsChecked = BLLCommon.config.OpenMaximize;
            ChkTriggerOpenLight.IsChecked = BLLCommon.config.TriggerOpenLight;
            ChkPromptAfterPrinting.IsChecked = BLLCommon.config.PromptAfterPrinting;
            ChkAutoPrint.IsChecked = BLLCommon.config.AutoPrint;
            ChkAllowModifyPrint.IsChecked = Config.AllowModifyPrintInfo;
            ChkCheckFunction.IsChecked = BLLCommon.config.CheckFunction;
        }
        private void PrinterInfoGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            // 可以在这里更新UI或处理选择变化
        }
      
        public void Save()
        {
            // 保存选中的打印机设置
            // 检查是否有选中的行
            if (PrinterInfoGrid.SelectedItem != null)
            {
                // 获取选中的数据对象
                var selectedItem = PrinterInfoGrid.SelectedItem;

                // 如果您知道对象类型,可以进行转换
                // 假设您的数据绑定类型是 PrinterInfo
                var printerInfo = selectedItem as PrinterInfo;

                if (printerInfo != null)
                {
                    // 现在可以访问选中行的数据
                    string printer = printerInfo.Printer;
                    BLLCommon.config.PrinterName = printer;


                }
            }
            if (PrinterInfoGrid1.SelectedItem != null)
            {
                // 获取选中的数据对象
                var selectedItem = PrinterInfoGrid1.SelectedItem;

                // 如果您知道对象类型,可以进行转换
                // 假设您的数据绑定类型是 PrinterInfo
                var printerInfo = selectedItem as PrinterInfo;

                if (printerInfo != null)
                {
                    // 现在可以访问选中行的数据
                    string printer = printerInfo.Label;
                    BLLCommon.config.DefaultPrintLabel = printer;


                }
            }
            if (PrinterInfoGrid2.SelectedItem != null)
            {
                // 获取选中的数据对象
                var selectedItem = PrinterInfoGrid2.SelectedItem;

                // 如果您知道对象类型,可以进行转换
                // 假设您的数据绑定类型是 PrinterInfo
                var printerInfo = selectedItem as PrinterInfo;

                if (printerInfo != null)
                {
                    // 现在可以访问选中行的数据
                    string printer = printerInfo.Template;
                    BLLCommon.config.DefaultMaterialName = printer;


                }
            }



            //if (PrinterInfoGrid.SelectedItem is PrinterInfo selectedInfo)
            //{
            //    BLLCommon.config.PrinterName = selectedInfo.Printer;
            //    BLLCommon.config.DefaultPrintLabel = selectedInfo.Label;
            //    BLLCommon.config.DefaultMaterialName = selectedInfo.Template;
            //}

            // 保存打印方向
            BLLCommon.config.PrintLandscape = RdoLandscape.IsChecked.Value;

            // 保存图像设置
            if (RdoOriginal.IsChecked.Value)
                BLLCommon.config.HistoryImage = HistoryImage.Original;
            else if (RdoCondense.IsChecked.Value)
                BLLCommon.config.HistoryImage = HistoryImage.Condense;
            else if (RdoNoImage.IsChecked.Value)
                BLLCommon.config.HistoryImage = HistoryImage.NoImage;

            // 保存复选框设置
            BLLCommon.config.SelectHttpPN = ChkSelectPN.IsChecked.Value;
            BLLCommon.config.LabelEmptyCheck = ChkLabelEmptyCheck.IsChecked.Value;
            BLLCommon.config.OpenStartWork = ChkOpenEnterWork.IsChecked.Value;
            BLLCommon.config.OpenMaximize = ChkOpenMaximize.IsChecked.Value;
            BLLCommon.config.PrintCompletedClear = ChkPrintCompletedClear.IsChecked.Value;
            BLLCommon.config.TriggerOpenLight = ChkTriggerOpenLight.IsChecked.Value;
            BLLCommon.config.PromptAfterPrinting = ChkPromptAfterPrinting.IsChecked.Value;
            BLLCommon.config.AutoPrint = ChkAutoPrint.IsChecked.Value;
            BLLCommon.config.CheckFunction = ChkCheckFunction.IsChecked.Value;
            Config.AllowModifyPrintInfo = ChkAllowModifyPrint.IsChecked.Value;

            BLLCommon.config.Save();
        }
        private void BtnReadFilePrint_Click(object sender, RoutedEventArgs e)
        {
            clickCount++;
            if (clickCount >= 10)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog
                {
                    Multiselect = false,
                    Title = "请选择文件",
                    Filter = "所有文件(*.*)|*.*"
                };
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    string file = openFileDialog.FileName;
                    ContinuousPrinting(file);
                }
                clickCount = 0;
            }
        }
        private void ContinuousPrinting(string filepath)
        {
            Dictionary<int, Dictionary<string, string>> valuePairs = new Dictionary<int, Dictionary<string, string>>();

            if (!File.Exists(filepath))
            {
                //MessageBox.Show("文件不存在");
                return;
            }

            var Titles = ExtraFileData.ParseXLSFileTitle(filepath);

            try
            {
                XLWorkbook wb = new XLWorkbook(filepath);
                var ws = wb.Worksheet(1);
                int emptyrow = 0;
                int currow = 1;

                while (emptyrow < 3)
                {
                    var rowdata = new Dictionary<string, string>();
                    for (int i = 0; i < Titles.Count; i++)
                    {
                        var v = ws.Row(currow + 1).Cell(i + 1).Value.ToString().Trim();
                        rowdata.Add(Titles[i], v);
                    }

                    currow++;

                    if (!valuePairs.ContainsKey(currow))
                    {
                        valuePairs.Add(currow, rowdata);
                    }
                    if (rowdata.Values.Contains(""))
                    {
                        emptyrow++;
                    }
                }
            }
            catch (Exception ex)
            {
               // MessageBox.Show($"数据源加载文件出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
                // 可以根据需要添加日志记录
                // LogNet.log.Info("数据源加载文件出错:" + ex.ToString());
            }
            foreach (var item in valuePairs)
            {
                Printing?.Invoke(item.Value);
            }
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        { 
            LanguageWwitchover.LoadPath(FilePath.LANGUAGE_DIR);
            PrinterInfoGridtext.Header = LanguageWwitchover.Dialog("WorkMode_Printer", "打印机");
            PrinterInfoGridtext1.Header = LanguageWwitchover.Dialog("WorkMode_DefaultTemplate", "默认打印标签");
            PrinterInfoGridtext2.Header = LanguageWwitchover.Dialog("WorkMode_PrioritizeMatchTemplate", "优先匹配模板");
            LanguageWwitchover.LoadLanguage(BLLCommon.config.Language);
            LanguageWwitchover.SetLanguage(this);
        }
    }
}