From 4eddfe1f596d24ab295fed1cf72d21c77e929387 Mon Sep 17 00:00:00 2001 From: chenjinbu Date: Wed, 10 Sep 2025 10:57:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=83=E7=BD=AE=E5=9B=BE=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E5=80=BC=E6=94=B9=E6=88=90=E5=8F=AF=E8=BE=93=E5=85=A5=E7=9A=84?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=EF=BC=8Cini=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=B8=83=E7=BD=AE?= =?UTF-8?q?=E5=9B=BE=E5=8A=A0=E8=BD=BD=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 2660 -> 2653 bytes .../DI-Electrical/ViewModels/ConfigViewModel.cs | 19 +- .../DI-Electrical/ViewModels/LoginViewModel.cs | 12 +- .../SWS.CAD.Base/bin/Debug/INIFileParser.dll | Bin 28672 -> 0 bytes .../SWS.CAD.Base/bin/Debug/INIFileParser.xml | 1181 ----------------- newFront/c#前端/SWS.CAD/SWS.CAD.csproj.user | 2 +- .../SWS.CAD/ViewModels/ConfigViewModel.cs | 13 +- .../SWS.CAD/ViewModels/LoginViewModel.cs | 2 +- .../SWS.CAD/Views/Style/CustomStyles.xaml | 5 +- newFront/c#前端/SWS.Commons/GlobalObject.cs | 9 +- .../c#前端/SWS.Commons/Helper/IniHelper.cs | 56 + .../c#前端/SWS.Commons/Helper/LoggerHelper.cs | 2 + .../c#前端/SWS.Commons/SWS.Commons.csproj | 1 + .../SWS.Commons/SWS.Commons.csproj.user | 2 +- newFront/c#前端/SWS.Electrical/GlobalObj.cs | 32 +- .../SWS.Electrical/SWS.Electrical.csproj | 1 + .../DialogAutoArrangeLayoutViewModel.cs | 122 +- .../Views/DialogAutoArrangeLayout.xaml | 15 +- .../Debug/Views/DialogAutoArrangeLayout.g.cs | 4 +- .../Debug/Views/DialogAutoArrangeLayout.g.i.cs | 4 +- newFront/c#前端/SWS.Electrical/配置说明.docx | Bin 0 -> 74693 bytes newFront/c#前端/SWS.Service/ConfigService.cs | 59 +- .../c#前端/SWS.WPF/Style/CustomStyles.xaml | 6 +- .../obj/Debug/Views/CustomDialogWindow.g.cs | 24 - .../obj/Debug/Views/CustomDialogWindow.g.i.cs | 24 - 25 files changed, 286 insertions(+), 1309 deletions(-) delete mode 100644 newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.dll delete mode 100644 newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.xml create mode 100644 newFront/c#前端/SWS.Commons/Helper/IniHelper.cs create mode 100644 newFront/c#前端/SWS.Electrical/配置说明.docx diff --git a/SWSDBSchemeUpgradeTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/SWSDBSchemeUpgradeTool/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 28eef7d0345f6c92cf74aced1335a477fef4b344..88c5aa17224a10db4b110e47c4639d2624209b92 100644 GIT binary patch delta 224 zcmaDNa#v)6w1l0DRm{to9WVCJeztaL%*%y4pU++wV_;x8@u0*+AASjMJkmWf5|%in v-{I6c`2?ehL?{l8n?;$#86{kB$+|KJurj(#p2m?Nk%U7H(BYfaIc*sMprUY( delta 231 zcmcaB@(fq`Ybi>Iz@PHOVReG(JB`6Yeu$#=;}TH%&| vhg0x=WkZvv}FVU5xPlU diff --git a/newFront/c#前端/DI-Electrical/ViewModels/ConfigViewModel.cs b/newFront/c#前端/DI-Electrical/ViewModels/ConfigViewModel.cs index 07afadc1..7d2da8e9 100644 --- a/newFront/c#前端/DI-Electrical/ViewModels/ConfigViewModel.cs +++ b/newFront/c#前端/DI-Electrical/ViewModels/ConfigViewModel.cs @@ -69,9 +69,9 @@ namespace DI_Electrical.ViewModels MessageBox.Show("本地文件目录不存在。"); return; } - var data = _configService.parser.ReadFile(_configService.path); + //var data = _configService.parser.ReadFile(_configService.path); - _configService._httpService.Init(address, port); + //_configService._httpService.Init(address, port); IsBusy = true; BusyContent = "保存中..."; var testRes = await _LoginService.Login("1", "11"); @@ -85,10 +85,17 @@ namespace DI_Electrical.ViewModels { address = address.Replace("https://", "").Replace("http://", ""); } - data["Profile"]["Address"] = address; - data["Profile"]["Port"] = port.ToString(); - data["Profile"]["Directory"] = _directory; - _configService.parser.WriteFile(_configService.path, data); + //data["Profile"]["Address"] = address; + //data["Profile"]["Port"] = port.ToString(); + //data["Profile"]["Directory"] = _directory; + //_configService.parser.WriteFile(_configService.path, data); + + //IniHelper.WriteValueFromIniFile("Profile", "strIPAddress", address); + //IniHelper.WriteValueFromIniFile("Profile", "nPort", port.ToString()); + //IniHelper.WriteValueFromIniFile("Profile", "strLocalWorkDir", _directory); + _configService.Save("Profile", "strIPAddress", address); + _configService.Save("Profile", "nPort", port.ToString()); + _configService.Save("Profile", "strLocalWorkDir", _directory); GlobalObject.isConfigIniCreateBySys = false; GlobalObject.SetLocalFileDirectory(_directory); diff --git a/newFront/c#前端/DI-Electrical/ViewModels/LoginViewModel.cs b/newFront/c#前端/DI-Electrical/ViewModels/LoginViewModel.cs index fe30495a..c9610ede 100644 --- a/newFront/c#前端/DI-Electrical/ViewModels/LoginViewModel.cs +++ b/newFront/c#前端/DI-Electrical/ViewModels/LoginViewModel.cs @@ -72,9 +72,9 @@ namespace DI_Electrical.ViewModels Command_Config = new DelegateCommand(onConfig); containerProvider = container; if (GlobalObject.isConfigIniCreateBySys) - { - var config= container.Resolve(); - config.ShowDialog(); + { + var config = container.Resolve(); + config.ShowDialog(); } UserName = _configService.Read(nameof(ConfigIni.UserName)); @@ -91,14 +91,14 @@ namespace DI_Electrical.ViewModels { sPASSWORD = GlobalObject.userInfo.userPs; } - curServer = "当前服务器: " + _configService.Read(nameof(ConfigIni.Address)) + ":" + _configService.Read(nameof(ConfigIni.Port)); + curServer = "当前服务器: " + _configService.Read("strIPAddress") + ":" + _configService.Read("nPort"); } public void onConfig(object o) { var config = containerProvider.Resolve(); config.ShowDialog(); - curServer = "当前服务器: " + _configService.Read(nameof(ConfigIni.Address)) + ":" + _configService.Read(nameof(ConfigIni.Port)); + curServer = "当前服务器: " + _configService.Read("strIPAddress") + ":" + _configService.Read("nPort"); } public override async void ExecuteOKCommandAsync(object obj) @@ -116,7 +116,7 @@ namespace DI_Electrical.ViewModels else { IsBusy = true; BusyContent = "登录中..."; - var res = await _Service.Login(UserName, Userpass); + var res = await _Service.Login(UserName, Userpass); IsBusy = false; if (string.IsNullOrEmpty(res)) { diff --git a/newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.dll b/newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.dll deleted file mode 100644 index d19e920fe8f8f14a9fed80b5c1b1731ca526159f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28672 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 T<>XiA|0yN>f2IG0J@7vPT+0Cb diff --git a/newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.xml b/newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.xml deleted file mode 100644 index 7d5e96bc..00000000 --- a/newFront/c#前端/SWS.CAD.Base/bin/Debug/INIFileParser.xml +++ /dev/null @@ -1,1181 +0,0 @@ - - - - INIFileParser - - - - - Asserts that a strings has no blank spaces. - - The string to be checked. - - - - - Represents an INI data parser for files. - - - - - Ctor - - - - - Ctor - - - - - - Implements reading ini data from a file. - - - Uses codification for the file. - - - Path to the file - - - - - Implements reading ini data from a file. - - - Path to the file - - - File's encoding. - - - - - Saves INI data to a file. - - - Creats an ASCII encoded file by default. - - - Path to the file. - - - IniData to be saved as an INI file. - - - - - Writes INI data to a text file. - - - Path to the file. - - - IniData to be saved as an INI file. - - - Specifies the encoding used to create the file. - - - - - Represents all data from an INI file - - - - - Represents all sections from an INI file - - - - - Initializes an empty IniData instance. - - - - - Initializes a new IniData instance using a previous - . - - - object containing the - data with the sections of the file - - - - - Configuration used to write an ini file with the proper - delimiter characters and data. - - - If the instance was created by a parser, - this instance is a copy of the used - by the parser (i.e. different objects instances) - If this instance is created programatically without using a parser, this - property returns an instance of - - - - - Global sections. Contains key/value pairs which are not - enclosed in any section (i.e. they are defined at the beginning - of the file, before any section. - - - - - Gets the instance - with the specified section name. - - - - - Gets or sets all the - for this IniData instance. - - - - - Used to mark the separation between the section name and the key name - when using . - - - Defaults to '.'. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - See property for more information. - - - - - Deletes all comments in all sections and key values - - - - - Merges the other iniData into this one by overwriting existing values. - Comments get appended. - - - IniData instance to merge into this. - If it is null this operation does nothing. - - - - - Attempts to retrieve a key, using a single string combining section and - key name. - - - The section and key name to retrieve, separated by . - - If key contains no separator, it is treated as a key in the section. - - Key may contain no more than one separator character. - - - If true is returned, is set to the value retrieved. Otherwise, is set - to an empty string. - - - True if key was found, otherwise false. - - - key contained multiple separators. - - - - - Retrieves a key using a single input string combining section and key name. - - - The section and key name to retrieve, separated by . - - If key contains no separator, it is treated as a key in the section. - - Key may contain no more than one separator character. - - - The key's value if it was found, otherwise null. - - - key contained multiple separators. - - - - - Merge the sections into this by overwriting this sections. - - - - - Merges the given global values into this globals by overwriting existing values. - - - - - Information associated to a key from an INI file. - Includes both the value and the comments associated to the key. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - from a previous instance of . - - - Data is deeply copied - - - The instance of the class - used to create the new instance. - - - - - Gets or sets the comment list associated to this key. - - - - - Gets or sets the value associated to this key. - - - - - Gets or sets the name of the key. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Represents a collection of Keydata. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class with a given - search comparer - - - Search comparer used to find the key by name in the collection - - - - - Initializes a new instance of the class - from a previous instance of . - - - Data from the original KeyDataCollection instance is deeply copied - - - The instance of the class - used to create the new instance. - - - - - Gets or sets the value of a concrete key. - - - If we try to assign the value of a key which doesn't exists, - a new key is added with the name and the value is assigned to it. - - - Name of the key - - - The string with key's value or null if the key was not found. - - - - - Return the number of keys in the collection - - - - - - Adds a new key to the collection - - - KeyData instance. - - - true if the key was added false if a key with the same name already exist - in the collection - - - - - Adds a new key with the specified name and value to the collection - - - Name of the new key to be added. - - - Value associated to the key. - - - true if the key was added false if a key with the same name already exist - in the collection. - - - - - Clears all comments of this section - - - - - Gets if a specifyed key name exists in the collection. - - Key name to search - true if a key with the specified name exists in the collectoin - false otherwise - - - - Retrieves the data for a specified key given its name - - Name of the key to retrieve. - - A instance holding - the key information or null if the key wasn't found. - - - - - Deletes all keys in this collection. - - - - - Deletes a previously existing key, including its associated data. - - The key to be removed. - - true if a key with the specified name was removed - false otherwise. - - - - - Sets the key data associated to a specified key. - - The new for the key. - - - - Allows iteration througt the collection. - - A strong-typed IEnumerator - - - - Implementation needed - - A weak-typed IEnumerator. - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Collection of KeyData for a given section - - - - - Information associated to a section in a INI File - Includes both the value and the comments associated to the key. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - from a previous instance of . - - - Data is deeply copied - - - The instance of the class - used to create the new instance. - - - Search comparer. - - - - - Deletes all comments in this section and key/value pairs - - - - - Deletes all the key-value pairs in this section. - - - - - Merges otherSection into this, adding new keys if they don't exists - or overwriting values if the key already exists. - Comments get appended. - - - Comments are also merged but they are always added, not overwritten. - - - - - - Gets or sets the name of the section. - - - The name of the section - - - - - Gets or sets the comment list associated to this section. - - - A list of strings. - - - - - Gets or sets the keys associated to this section. - - - A collection of KeyData objects. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Represents a collection of SectionData. - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - - StringComparer used when accessing section names - - - - - Initializes a new instance of the class - from a previous instance of . - - - Data is deeply copied - - - The instance of the class - used to create the new instance. - - - - Returns the number of SectionData elements in the collection - - - - - Gets the key data associated to a specified section name. - - An instance of as class - holding the key data from the current parsed INI data, or a null - value if the section doesn't exist. - - - - Creates a new section with empty data. - - - If a section with the same name exists, this operation has no effect. - - Name of the section to be created - true if the a new section with the specified name was added, - false otherwise - If the section name is not valid. - - - - Adds a new SectionData instance to the collection - - Data. - - - - Removes all entries from this collection - - - - - Gets if a section with a specified name exists in the collection. - - Name of the section to search - - true if a section with the specified name exists in the - collection false otherwise - - - - - Returns the section data from a specify section given its name. - - Name of the section. - - An instance of a class - holding the section data for the currently INI data - - - - - Sets the section data for given a section name. - - - The new instance. - - - - - - - true if the section with the specified name was removed, - false otherwise - - - - Returns an enumerator that iterates through the collection. - - - A that can be used to iterate through the collection. - - - - - Returns an enumerator that iterates through a collection. - - - An object that can be used to iterate through the collection. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - - - - Data associated to this section - - - - - Configuration used to write an ini file with the proper - delimiter characters and data. - - - If the instance was created by a parser, - this instance is a copy of the used - by the parser (i.e. different objects instances) - If this instance is created programatically without using a parser, this - property returns an instance of - - - - - Formats a IniData structure to an string - - - - - Produces an string given - - The data to string. - Ini data. - - - - Configuration used by this formatter when converting IniData - to an string - - - - - Represents all data from an INI file exactly as the - class, but searching for sections and keys names is done with - a case insensitive search. - - - - - Initializes an empty IniData instance. - - - - - Initializes a new IniData instance using a previous - . - - - object containing the - data with the sections of the file - - - - - Copies an instance of the class - - Original - - - - Defines data for a Parser configuration object. - - With a configuration object you can redefine how the parser - will detect special items in the ini file by defining new regex - (e.g. you can redefine the comment regex so it just treat text as - a comment iff the comment caracter is the first in the line) - or changing the set of characters used to define elements in - the ini file (e.g. change the 'comment' caracter from ';' to '#') - You can also define how the parser should treat errors, or how liberal - or conservative should it be when parsing files with "strange" formats. - - - - Default values used if an instance of - is created without specifying a configuration. - - - By default the various delimiters for the data are setted: - ';' for one-line comments - '[' ']' for delimiting a section - '=' for linking key / value pairs - - An example of well formed data with the default values: - - ;section comment
- [section] ; section comment
-
- ; key comment
- key = value ;key comment
-
- ;key2 comment
- key2 = value
-
-
-
-
- - - Copy ctor. - - - Original instance to be copied. - - - - - Sets the char that defines the start of a section name. - - - Defaults to character '[' - - - - - Sets the char that defines the end of a section name. - - - Defaults to character ']' - - - - - Retrieving section / keys by name is done with a case-insensitive - search. - - - Defaults to false (case sensitive search) - - - - - Sets the char that defines the start of a comment. - A comment spans from the comment character to the end of the line. - - - Defaults to character ';' - - - - - Sets the string that defines the start of a comment. - A comment spans from the mirst matching comment string - to the end of the line. - - - Defaults to string ";" - - - - - Gets or sets the string to use as new line string when formating an IniData structure using a - IIniDataFormatter. Parsing an ini-file accepts any new line character (Unix/windows) - - - This allows to write a file with unix new line characters on windows (and vice versa) - - Defaults to value Environment.NewLine - - - - Sets the char that defines a value assigned to a key - - - Defaults to character '=' - - - - - Sets the string around KeyValuesAssignmentChar - - - Defaults to string ' ' - - - - - Allows having keys in the file that don't belong to any section. - i.e. allows defining keys before defining a section. - If set to false and keys without a section are defined, - the will stop with an error. - - - Defaults to true. - - - - - If set to false and the finds duplicate keys in a - section the parser will stop with an error. - If set to true, duplicated keys are allowed in the file. The value - of the duplicate key will be the last value asigned to the key in the file. - - - Defaults to false. - - - - - Only used if is also true - If set to true when the parser finds a duplicate key, it overrites - the previous value, so the key will always contain the value of the - last key readed in the file - If set to false the first readed value is preserved, so the key will - always contain the value of the first key readed in the file - - - Defaults to false. - - - - - Gets or sets a value indicating whether duplicate keys are concatenate - together by . - - - Defaults to false. - - - - - If true the instance will thrown an exception - if an error is found. - If false the parser will just stop execution and return a null value. - - - Defaults to true. - - - - - If set to false and the finds a duplicate section - the parser will stop with an error. - If set to true, duplicated sections are allowed in the file, but only a - element will be created in the - collection. - - - Defaults to false. - - - - - If set to false, the stop with a error if you try - to access a section that was not created previously and the parser will stop with an error. - If set to true, inexistents sections are created, always returning a valid - element. - - - Defaults to false. - - - - - Creates a new object that is a copy of the current instance. - - - A new object that is a copy of this instance. - - 2 - - - - - Responsible for parsing an string from an ini file, and creating - an structure. - - - - - Ctor - - - The parser uses a by default - - - - - Ctor - - - Parser's instance. - - - - - Configuration that defines the behaviour and constraints - that the parser must follow. - - - - - True is the parsing operation encounter any problem - - - - - Returns the list of errors found while parsing the ini file. - - - If the configuration option ThrowExceptionOnError is false it can contain one element - for each problem found while parsing; otherwise it will only contain the very same - exception that was raised. - - - - - Parses a string containing valid ini data - - - String with data - - - An instance with the data contained in - the correctly parsed an structured. - - - Thrown if the data could not be parsed - - - - - Checks if a given string contains a comment. - - - String with a line to be checked. - - - true if any substring from s is a comment, false otherwise. - - - - - Checks if a given string represents a section delimiter. - - - The string to be checked. - - - true if the string represents a section, false otherwise. - - - - - Checks if a given string represents a key / value pair. - - - The string to be checked. - - - true if the string represents a key / value pair, false otherwise. - - - - - Removes a comment from a string if exist, and returns the string without - the comment substring. - - - The string we want to remove the comments from. - - - The string s without comments. - - - - - Processes one line and parses the data found in that line - (section or key/value pair who may or may not have comments) - - The string with the line to process - - - - Proccess a string which contains an ini section. - - - The string to be processed - - - - - Processes a string containing an ini key/value pair. - - - The string to be processed - - - - - Extracts the key portion of a string containing a key/value pair.. - - - The string to be processed, which contains a key/value pair - - - The name of the extracted key. - - - - - Extracts the value portion of a string containing a key/value pair.. - - - The string to be processed, which contains a key/value pair - - - The name of the extracted value. - - - - - Abstract Method that decides what to do in case we are trying to add a duplicated key to a section - - - - - Adds a key to a concrete instance, checking - if duplicate keys are allowed in the configuration - - - Key name - - - Key's value - - - collection where the key should be inserted - - - Name of the section where the is contained. - Used only for logging purposes. - - - - - Temp list of comments - - - - - Tmp var with the name of the seccion which is being process - - - - - Represents an INI data parser for streams. - - - - - This instance will handle ini data parsing and writing - - - - - Ctor - - - - - Ctor - - - - - - Reads data in INI format from a stream. - - Reader stream. - - And instance with the readed ini data parsed. - - - Thrown if is null. - - - - - Writes the ini data to a stream. - - A write stream where the ini data will be stored - An instance. - - Thrown if is null. - - - - - Writes the ini data to a stream. - - A write stream where the ini data will be stored - An instance. - Formaterr instance that controls how the ini data is transformed to a string - - Thrown if is null. - - - - - Represents an INI data parser for strings. - - - - This class is deprecated and kept for backwards compatibility. - It's just a wrapper around class. - Please, replace your code. - - - - - This instance will handle ini data parsing and writing - - - - - Ctor - - - - - Ctor - - - - - - Parses a string containing data formatted as an INI file. - - The string containing the data. - - A new instance with the data parsed from the string. - - - - - Creates a string from the INI data. - - An instance. - - A formatted string with the contents of the - instance object. - - - - - Represents an error ococcurred while parsing data - - -
-
diff --git a/newFront/c#前端/SWS.CAD/SWS.CAD.csproj.user b/newFront/c#前端/SWS.CAD/SWS.CAD.csproj.user index 9d7dd50e..baf72ccc 100644 --- a/newFront/c#前端/SWS.CAD/SWS.CAD.csproj.user +++ b/newFront/c#前端/SWS.CAD/SWS.CAD.csproj.user @@ -5,6 +5,6 @@ D:\Program Files\KunHeng\KunHengCAD V21 zh_CN\kunhengcad.exe - ShowAllFiles + ProjectFiles \ No newline at end of file diff --git a/newFront/c#前端/SWS.CAD/ViewModels/ConfigViewModel.cs b/newFront/c#前端/SWS.CAD/ViewModels/ConfigViewModel.cs index 184e0c69..06b2c33c 100644 --- a/newFront/c#前端/SWS.CAD/ViewModels/ConfigViewModel.cs +++ b/newFront/c#前端/SWS.CAD/ViewModels/ConfigViewModel.cs @@ -70,7 +70,6 @@ namespace SWS.CAD.ViewModels Application.ShowAlertDialog("本地文件目录不存在。"); return; } - var data = _configService.parser.ReadFile(_configService.path); _configService._httpService.Init(address, port); IsBusy = true; @@ -85,10 +84,14 @@ namespace SWS.CAD.ViewModels { address = address.Replace("https://", "").Replace("http://", ""); } - data["Profile"]["Address"] = address; - data["Profile"]["Port"] = port.ToString(); - data["Profile"]["Directory"] = _directory; - _configService.parser.WriteFile(_configService.path, data); + //var data = _configService.parser.ReadFile(_configService.path); + //data["Profile"]["Address"] = address; + //data["Profile"]["Port"] = port.ToString(); + //data["Profile"]["Directory"] = _directory; + //_configService.parser.WriteFile(_configService.path, data); + _configService.Save("Profile", "strIPAddress", address); + _configService.Save("Profile", "nPort", port.ToString()); + _configService.Save("Profile", "strLocalWorkDir", _directory); GlobalObject.isConfigIniCreateBySys = false; GlobalObject.SetLocalFileDirectory(_directory); diff --git a/newFront/c#前端/SWS.CAD/ViewModels/LoginViewModel.cs b/newFront/c#前端/SWS.CAD/ViewModels/LoginViewModel.cs index 70478749..3abf8b69 100644 --- a/newFront/c#前端/SWS.CAD/ViewModels/LoginViewModel.cs +++ b/newFront/c#前端/SWS.CAD/ViewModels/LoginViewModel.cs @@ -92,7 +92,7 @@ namespace SWS.CAD.ViewModels { sPASSWORD = GlobalObject.userInfo.userPs; } - curServer = "当前服务器: " + _configService.Read(nameof(ConfigIni.Address)) + ":" + _configService.Read(nameof(ConfigIni.Port)); + curServer = "当前服务器: " + _configService.Read("strIPAddress") + ":" + _configService.Read("nPort"); } public override async void ExecuteOKCommandAsync(object obj) { diff --git a/newFront/c#前端/SWS.CAD/Views/Style/CustomStyles.xaml b/newFront/c#前端/SWS.CAD/Views/Style/CustomStyles.xaml index 05ccc353..223f6291 100644 --- a/newFront/c#前端/SWS.CAD/Views/Style/CustomStyles.xaml +++ b/newFront/c#前端/SWS.CAD/Views/Style/CustomStyles.xaml @@ -1455,10 +1455,9 @@ - + - + diff --git a/newFront/c#前端/SWS.Commons/GlobalObject.cs b/newFront/c#前端/SWS.Commons/GlobalObject.cs index 98d8e17e..274ac651 100644 --- a/newFront/c#前端/SWS.Commons/GlobalObject.cs +++ b/newFront/c#前端/SWS.Commons/GlobalObject.cs @@ -154,10 +154,11 @@ namespace SWS.Commons { if (string.IsNullOrEmpty(_LocalFileDirectory)) { - string path = configPath; - FileIniDataParser parser = new FileIniDataParser(); - var data = parser.ReadFile(path); - _LocalFileDirectory = data["Profile"]["strLocalWorkDir"]; + //string path = configPath; + //FileIniDataParser parser = new FileIniDataParser(); + //var data = parser.ReadFile(path); + //_LocalFileDirectory = data["Profile"]["strLocalWorkDir"]; + _LocalFileDirectory = IniHelper.ReadValueFromIniFile("Profile", "strLocalWorkDir"); return _LocalFileDirectory; } else diff --git a/newFront/c#前端/SWS.Commons/Helper/IniHelper.cs b/newFront/c#前端/SWS.Commons/Helper/IniHelper.cs new file mode 100644 index 00000000..aab824ef --- /dev/null +++ b/newFront/c#前端/SWS.Commons/Helper/IniHelper.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace SWS.Commons +{ + public static class IniHelper + { + [DllImport("kernel32", CharSet = CharSet.Unicode)] + private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); + [DllImport("kernel32", CharSet = CharSet.Unicode)] + private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); + + /// + ///读取ini文件数据 + /// + /// 段 + /// 键名 + /// 默认值 + /// 文件路径 + /// 读出内容 + public static string ReadValueFromIniFile(string Section, string Key, string def=null, string filePath= null) + { + if (def == null) + { def = ""; } + if (filePath == null) + { + filePath = GlobalObject.configPath; + } + StringBuilder temp = new StringBuilder(4096); + int i = GetPrivateProfileString(Section, Key, def, temp, 4096, filePath); + return temp.ToString(); + } + + /// + /// 写入数据到ini文件 + /// + /// 段 + /// 键名 + /// 键值 + /// 文件路径 + public static void WriteValueFromIniFile(string Section, string Key, string Value, string filePath = null) + { + if (filePath == null) + { + filePath = GlobalObject.configPath; + } + WritePrivateProfileString(Section, Key, Value, filePath); + } + } +} diff --git a/newFront/c#前端/SWS.Commons/Helper/LoggerHelper.cs b/newFront/c#前端/SWS.Commons/Helper/LoggerHelper.cs index 4079da72..fde9743d 100644 --- a/newFront/c#前端/SWS.Commons/Helper/LoggerHelper.cs +++ b/newFront/c#前端/SWS.Commons/Helper/LoggerHelper.cs @@ -24,6 +24,8 @@ namespace SWS.Commons string dllPath = codeBase.Replace("file:///", ""); dllPath = Path.GetDirectoryName(dllPath); logPath = Path.Combine(dllPath, "Logs\\"); + if (!Directory.Exists(logPath)) + { Directory.CreateDirectory(logPath); } var configFile = new FileInfo(Path.Combine(dllPath, "log4net.config")); log4net.Config.XmlConfigurator.ConfigureAndWatch(configFile); } diff --git a/newFront/c#前端/SWS.Commons/SWS.Commons.csproj b/newFront/c#前端/SWS.Commons/SWS.Commons.csproj index 64cae859..a025facf 100644 --- a/newFront/c#前端/SWS.Commons/SWS.Commons.csproj +++ b/newFront/c#前端/SWS.Commons/SWS.Commons.csproj @@ -110,6 +110,7 @@ + diff --git a/newFront/c#前端/SWS.Commons/SWS.Commons.csproj.user b/newFront/c#前端/SWS.Commons/SWS.Commons.csproj.user index a607660d..0b246432 100644 --- a/newFront/c#前端/SWS.Commons/SWS.Commons.csproj.user +++ b/newFront/c#前端/SWS.Commons/SWS.Commons.csproj.user @@ -1,6 +1,6 @@ - ShowAllFiles + ProjectFiles \ No newline at end of file diff --git a/newFront/c#前端/SWS.Electrical/GlobalObj.cs b/newFront/c#前端/SWS.Electrical/GlobalObj.cs index 7e9f6642..33f5af5c 100644 --- a/newFront/c#前端/SWS.Electrical/GlobalObj.cs +++ b/newFront/c#前端/SWS.Electrical/GlobalObj.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using System.Net; using System.Net.Http; @@ -11,6 +12,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using IniParser; +using IniParser.Model; using Newtonsoft.Json; using Prism.Ioc; using SWS.Commons; @@ -41,17 +43,29 @@ namespace SWS.Electrical { try { - var data = configIni.ReadFile(GlobalObject.configPath); - string token = data["LoginInfo"]["LoginToken"]; - string loginkey = data["LoginInfo"]["LoginMark"]; - string curProjId = data["LoginInfo"]["CurProjId"]; - LocalWorkDir= data["Profile"]["strLocalWorkDir"]; - string address = data["Profile"]["strIPAddress"]; - string port = data["Profile"]["nPort"]; - string dbType = data["Profile"]["nConType"]; + //var parser = new FileIniDataParser(); + //string[] lines = File.ReadAllLines(GlobalObject.configPath); + //IniData data = parser.Parser.Parse(File.ReadAllText(GlobalObject.configPath)); + //var data = configIni.ReadFile(GlobalObject.configPath); + //string token = data["LoginInfo"]["LoginToken"]; + //string loginkey = data["LoginInfo"]["LoginMark"]; + //string curProjId = data["LoginInfo"]["CurProjId"]; + //LocalWorkDir= data["Profile"]["strLocalWorkDir"]; + //string address = data["Profile"]["strIPAddress"]; + //string port = data["Profile"]["nPort"]; + //string dbType = data["Profile"]["nConType"]; + //string domain= data["Profile"]["strDomainName"]; + string token = IniHelper.ReadValueFromIniFile("LoginInfo", "LoginToken"); + string loginkey = IniHelper.ReadValueFromIniFile("LoginInfo", "LoginMark"); + string curProjId = IniHelper.ReadValueFromIniFile("LoginInfo", "CurProjId"); + LocalWorkDir = IniHelper.ReadValueFromIniFile("Profile", "strLocalWorkDir"); + string address = IniHelper.ReadValueFromIniFile("Profile", "strIPAddress"); + string port = IniHelper.ReadValueFromIniFile("Profile", "nPort"); + string dbType = IniHelper.ReadValueFromIniFile("Profile", "nConType"); + string domain = IniHelper.ReadValueFromIniFile("Profile", "strDomainName"); if (dbType == "1") { - string strDomain = data["Profile"]["strDomainName"]; + string strDomain = domain; GlobalObject.client = new HttpClient() { BaseAddress = new Uri($"{strDomain}/api/"), diff --git a/newFront/c#前端/SWS.Electrical/SWS.Electrical.csproj b/newFront/c#前端/SWS.Electrical/SWS.Electrical.csproj index 088f77c2..49271b7a 100644 --- a/newFront/c#前端/SWS.Electrical/SWS.Electrical.csproj +++ b/newFront/c#前端/SWS.Electrical/SWS.Electrical.csproj @@ -153,6 +153,7 @@ + diff --git a/newFront/c#前端/SWS.Electrical/ViewModels/DialogAutoArrangeLayoutViewModel.cs b/newFront/c#前端/SWS.Electrical/ViewModels/DialogAutoArrangeLayoutViewModel.cs index 1a86e4f3..28e9954f 100644 --- a/newFront/c#前端/SWS.Electrical/ViewModels/DialogAutoArrangeLayoutViewModel.cs +++ b/newFront/c#前端/SWS.Electrical/ViewModels/DialogAutoArrangeLayoutViewModel.cs @@ -130,6 +130,7 @@ namespace SWS.Electrical.ViewModels if (value != this._selectRange) { this._selectRange = value; + RangeChange(value); RaisePropertyChanged(nameof(selectRange)); } } @@ -167,6 +168,22 @@ namespace SWS.Electrical.ViewModels } } } + private ObservableCollection _listValue; + /// + /// 输入值 列表 + /// + public ObservableCollection listValue + { + get { return this._listValue; } + set + { + if (value != this._listValue) + { + this._listValue = value; + RaisePropertyChanged(nameof(listValue)); + } + } + } private string _inputValue = ""; /// /// 输入值 @@ -195,11 +212,15 @@ namespace SWS.Electrical.ViewModels EnginedataService _ServiceEnginedata; ObjectTypeService _ServiceObjectType; ProjectSettingsService _ServiceProjectSettings; + DataItemService _ServiceDataItem; List listTagNumberSucc = new List(); private bool isSearch = false;//是否正在查询 private bool isDrawing = false;//是否正在画图 private string dwgName = string.Empty; private List listLibraryTagName = new List();//元件图纸上的位号属性名称, + private List listDeck=new List();//甲板号值列表 + private List listArea = new List();//区域值列表 + private List listSystem = new List();//所属系统值列表 public DialogAutoArrangeLayoutViewModel() { Command_StartDrawing = new DelegateCommand(onStartDrawing); @@ -215,6 +236,7 @@ namespace SWS.Electrical.ViewModels _ServiceEnginedata = GlobalObject.container.Resolve(); _ServiceObjectType = GlobalObject.container.Resolve(); _ServiceProjectSettings = GlobalObject.container.Resolve(); + _ServiceDataItem= GlobalObject.container.Resolve(); listDrawings = new ObservableCollection(); listBasePoint = new ObservableCollection(); listMsg = new ObservableCollection(); @@ -223,7 +245,6 @@ namespace SWS.Electrical.ViewModels list.Add(new KeyValueModel { Key = "区域", Value = "区域" }); list.Add(new KeyValueModel { Key = "所属系统", Value = "所属系统" }); listRange = new ObservableCollection(list); - selectRange = listRange[0]; listOperator = new ObservableCollection() { new KeyValueModel { Key = "等于", Value = "=" } }; @@ -243,7 +264,33 @@ namespace SWS.Electrical.ViewModels { } - + private List GetChildNodes(TreeModel treeModel) + { + List listModel = new List(); + if (treeModel.ChildNodes != null && treeModel.ChildNodes.Any()) + { + foreach (var item in treeModel.ChildNodes) + { + if (item.NodeType == "1") + { + listModel.Add(item); + } + else + { + var list = GetChildNodes(item); + if (list.Any()) + { + listModel.AddRange(list); + } + } + } + return listModel; + } + else + { + return listModel; + } + } public async void OnDialogOpened(IDialogParameters parameters) { try @@ -259,8 +306,19 @@ namespace SWS.Electrical.ViewModels if (item.NodeType == "1") { listDrawings.Add(new DtoDrawing() { DrawingFileID = item.ID, DrawingFileName = item.Text }); - ec_drawing_file dwgFile = JsonConvert.DeserializeObject(model.NodeExtData.ToString()); - + } + else + { + if (item.Text == "封面、目录、设计说明" || item.Text == "材料表") + { continue; } + var list = GetChildNodes(item); + if (list.Any()) + { + foreach (var dto in list) + { + listDrawings.Add(new DtoDrawing() { DrawingFileID = dto.ID, DrawingFileName = dto.Text }); + } + } } } } @@ -289,14 +347,24 @@ namespace SWS.Electrical.ViewModels if (item.NodeType == "1") { listDrawings.Add(new DtoDrawing() { DrawingFileID = item.ID, DrawingFileName = item.Text }); - ec_drawing_file dwgFile = JsonConvert.DeserializeObject(model.NodeExtData.ToString()); - + } + else + { + if (item.Text == "封面、目录、设计说明" || item.Text == "材料表") + { continue; } + var list = GetChildNodes(item); + if (list.Any()) + { + foreach (var dto in list) + { + listDrawings.Add(new DtoDrawing() { DrawingFileID = dto.ID, DrawingFileName = dto.Text }); + } + } } } } } AddMsg($"布置图列表加载完成!"); - } var settingModel = await _ServiceProjectSettings.GetEntity("布置图图例显示位号名称"); if (settingModel == null) @@ -304,16 +372,48 @@ namespace SWS.Electrical.ViewModels listLibraryTagName.Add("位号");//默认 } else { listLibraryTagName = settingModel.SettingValue.Split(',').ToList(); } - + //区域下拉框对应值列表 + var listDetail = await _ServiceDataItem.GetDetails("Area"); + if (listDetail != null && listDetail.Any()) + { + foreach (var item in listDetail) + { listArea.Add(new KeyValueModel() { Key=item.DataItemName, Value=item.DataItemName }); } + } + //甲板号下拉框对应值列表 + listDetail = await _ServiceDataItem.GetDetails("甲板号"); + if (listDetail != null && listDetail.Any()) + { + foreach (var item in listDetail) + { listDeck.Add(new KeyValueModel() { Key = item.DataItemName, Value = item.DataItemName }); } + } + //所属系统下拉框对应值列表 + listDetail = await _ServiceDataItem.GetDetails("Be_DrawingSystem"); + if (listDetail != null && listDetail.Any()) + { + foreach (var item in listDetail) + { listSystem.Add(new KeyValueModel() { Key = item.DataItemName, Value = item.DataItemName }); } + } + selectRange = listRange[0]; } catch (Exception ex) { MessageBox.Show("DialogOpened异常:" + ex.Message); } - //selectRange = listRange[2]; - //inputValue = "声力电话"; } - + /// + /// 下拉值列表绑定 + /// + /// + private void RangeChange(KeyValueModel model) + { + inputValue = ""; + if (model.Value == "甲板号") + { listValue = new ObservableCollection(listDeck); } + else if (model.Value == "区域") + { listValue = new ObservableCollection(listArea); } + else if (model.Value == "所属系统") + { listValue = new ObservableCollection(listSystem); } + } /// /// 获取基点信息 /// diff --git a/newFront/c#前端/SWS.Electrical/Views/DialogAutoArrangeLayout.xaml b/newFront/c#前端/SWS.Electrical/Views/DialogAutoArrangeLayout.xaml index 31ec28f3..f466f2f8 100644 --- a/newFront/c#前端/SWS.Electrical/Views/DialogAutoArrangeLayout.xaml +++ b/newFront/c#前端/SWS.Electrical/Views/DialogAutoArrangeLayout.xaml @@ -178,13 +178,22 @@ FontSize="16" ItemsSource="{Binding listOperator}" SelectedItem="{Binding selectOperator, Mode=TwoWay}" /> - - + // 此代码由工具生成。 @@ -85,7 +85,7 @@ namespace SWS.Electrical.Views { #line hidden - #line 211 "..\..\..\Views\DialogAutoArrangeLayout.xaml" + #line 219 "..\..\..\Views\DialogAutoArrangeLayout.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.DataGrid dgTag; diff --git a/newFront/c#前端/SWS.Electrical/obj/Debug/Views/DialogAutoArrangeLayout.g.i.cs b/newFront/c#前端/SWS.Electrical/obj/Debug/Views/DialogAutoArrangeLayout.g.i.cs index 48c6c684..d70c25de 100644 --- a/newFront/c#前端/SWS.Electrical/obj/Debug/Views/DialogAutoArrangeLayout.g.i.cs +++ b/newFront/c#前端/SWS.Electrical/obj/Debug/Views/DialogAutoArrangeLayout.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "8006F31A06196293D0E58F4239B97FC4F768BCF414C1B4C2472A1C22D26CF0B1" +#pragma checksum "..\..\..\Views\DialogAutoArrangeLayout.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "55992553F782D436B236E9D0626B49AE48376927B5906F253898CDC4189B1D22" //------------------------------------------------------------------------------ // // 此代码由工具生成。 @@ -85,7 +85,7 @@ namespace SWS.Electrical.Views { #line hidden - #line 211 "..\..\..\Views\DialogAutoArrangeLayout.xaml" + #line 220 "..\..\..\Views\DialogAutoArrangeLayout.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal System.Windows.Controls.DataGrid dgTag; diff --git a/newFront/c#前端/SWS.Electrical/配置说明.docx b/newFront/c#前端/SWS.Electrical/配置说明.docx new file mode 100644 index 0000000000000000000000000000000000000000..71cbefd5c2486862dae3adc9e4e287be244ad009 GIT binary patch literal 74693 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 G3gkZ{LG=Ov literal 0 HcmV?d00001 diff --git a/newFront/c#前端/SWS.Service/ConfigService.cs b/newFront/c#前端/SWS.Service/ConfigService.cs index 7c2c292f..4d2b4110 100644 --- a/newFront/c#前端/SWS.Service/ConfigService.cs +++ b/newFront/c#前端/SWS.Service/ConfigService.cs @@ -2,6 +2,7 @@ using SWS.Commons; using System; using System.IO; +using static System.Collections.Specialized.BitVector32; namespace SWS.Service { @@ -16,13 +17,12 @@ namespace SWS.Service void SetDefaultConfigValue() { if (!File.Exists(path)) - {//默认值 + { + //默认值 var data = parser.Parser.Parse(""); data["Profile"]["strIPAddress"] = "1.117.161.11"; data["Profile"]["nPort"] = "8080"; string userProfilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - - data["Profile"]["strLocalWorkDir"] = $"{userProfilePath}\\AppData\\Roaming\\BricsCAD Electrical"; Directory.CreateDirectory(Path.GetDirectoryName(path)); parser.WriteFile(path, data); @@ -40,17 +40,21 @@ namespace SWS.Service string address; int port; string locDrawingPath; - Read(out address, out port,out locDrawingPath); + Read(out address, out port, out locDrawingPath); _httpService.Init(address, port); - } + } public void Read(out string address, out int port, out string directory) { - var data = parser.ReadFile(path); - address = data["Profile"]["strIPAddress"]; - port = int.Parse(data["Profile"]["nPort"]); - directory = data["Profile"]["strLocalWorkDir"]; + //var data = parser.ReadFile(path); + //address = data["Profile"]["strIPAddress"]; + //port = int.Parse(data["Profile"]["nPort"]); + //directory = data["Profile"]["strLocalWorkDir"]; + + address = IniHelper.ReadValueFromIniFile("Profile", "strIPAddress"); + port = int.Parse(IniHelper.ReadValueFromIniFile("Profile", "nPort")); + directory = IniHelper.ReadValueFromIniFile("Profile", "strLocalWorkDir"); } - + /// /// 查询某个 /// @@ -58,8 +62,11 @@ namespace SWS.Service /// public string Read(string keyName) { - var data = parser.ReadFile(path); - return data["Profile"][keyName]; + //var data = parser.ReadFile(path); + //return data["Profile"][keyName]; + + var data = IniHelper.ReadValueFromIniFile("Profile", keyName); + return data; } /// /// 查询某个 @@ -67,14 +74,17 @@ namespace SWS.Service /// 节点 /// key名称 /// - public string Read(string session,string keyName) + public string Read(string session, string keyName) { try - { - var data = parser.ReadFile(path); - return data[session][keyName]; + { + //var data = parser.ReadFile(path); + //return data[session][keyName]; + + var data = IniHelper.ReadValueFromIniFile(session, keyName); + return data; } - catch + catch { return null; } @@ -86,9 +96,10 @@ namespace SWS.Service /// public void Save(string keyName, string value) { - var data = parser.ReadFile(path); - data["Profile"][keyName] = value; - parser.WriteFile(path, data); + //var data = parser.ReadFile(path); + //data["Profile"][keyName] = value; + //parser.WriteFile(path, data); + IniHelper.WriteValueFromIniFile("Profile", keyName, value); } /// /// 保存某个值 @@ -98,9 +109,11 @@ namespace SWS.Service /// 值 public void Save(string session, string keyName, string value) { - var data = parser.ReadFile(path); - data[session][keyName] = value; - parser.WriteFile(path, data); + //var data = parser.ReadFile(path); + //data[session][keyName] = value; + //parser.WriteFile(path, data); + + IniHelper.WriteValueFromIniFile(session, keyName, value); } } } diff --git a/newFront/c#前端/SWS.WPF/Style/CustomStyles.xaml b/newFront/c#前端/SWS.WPF/Style/CustomStyles.xaml index 8e4af90a..583627d5 100644 --- a/newFront/c#前端/SWS.WPF/Style/CustomStyles.xaml +++ b/newFront/c#前端/SWS.WPF/Style/CustomStyles.xaml @@ -1,10 +1,10 @@  @@ -579,7 +579,7 @@ - +