Browse Source

模板设计器本地化支持

loki.wu 2 years ago
parent
commit
28f14a3f0e

+ 1 - 1
fis/App.axaml.cs

@@ -37,7 +37,7 @@ namespace fis
             try
             {
                 var manager = AppManager.Get<ISecondaryWindowManager>();
-                await manager.ShowWindowByTypeAsync(WindowType.Measure, "http://" + ShellConfig.Instance.AppHost+ "/index.html?page=measure&platformHost="+ ShellConfig.Instance.LocalApiHost, new System.Collections.Generic.Dictionary<string, string>(),false);
+                await manager.ShowWindowByTypeAsync(WindowType.Measure, new System.Collections.Generic.Dictionary<string, string>(),false);
             }
             catch (Exception ex) {
                 Logger.WriteShellLog("App initSlaveWindowsAsync ex :" + ex.ToString());

+ 6 - 2
fis/Handlers/ZipHandler.cs

@@ -8,6 +8,7 @@ namespace fis.Win.Handlers
 {
     internal class ZipHandler : IHostHandler, IDisposable
     {
+        private readonly string _fileName = string.Empty;
         private readonly ZipArchive _archive;
         private bool _disposed;
 
@@ -16,6 +17,10 @@ namespace fis.Win.Handlers
         public ZipHandler(string host, string zipFile)
         {
             Host = host;
+            if (File.Exists(zipFile))
+            {
+                _fileName = Path.GetFileNameWithoutExtension(zipFile);
+            }
             _archive = ZipFile.Open(zipFile, ZipArchiveMode.Read);
         }
 
@@ -33,7 +38,7 @@ namespace fis.Win.Handlers
                 {
                     text = text.Substring(1);
                 }
-                string path2 = "flyinsono/" +  text;
+                string path2 = _fileName + "/" +  text;
                 var entry = _archive.Entries.FirstOrDefault(x => x.FullName == path2);
                 if(entry != null)
                 {
@@ -54,7 +59,6 @@ namespace fis.Win.Handlers
             catch
             {
             }
-
             return null;
         }
 

+ 3 - 3
fis/IPlatformService.cs

@@ -41,7 +41,7 @@ namespace fis
         /// <param name="reportCode"></param>
         /// <param name="recordCode"></param>
         /// <returns></returns>
-        bool OpenReportEdit(string token, string patientCode, string reportCode, string recordCode, string referralRecordCode);
+        Task<bool> OpenReportEdit(string token, string patientCode, string reportCode, string recordCode, string referralRecordCode);
 
         /// <summary>
         /// 打开报告预览
@@ -51,13 +51,13 @@ namespace fis
         /// <param name="reportCode"></param>
         /// <param name="recordCode"></param>
         /// <returns></returns>
-        bool OpenReportPreview(string token, string reportCode, string recordCode);
+        Task<bool> OpenReportPreview(string token, string reportCode, string recordCode);
 
         /// <summary>
         /// 打开报告模板设计器
         /// </summary>
         /// <returns></returns>
-        bool OpenReportDesigner(string templateId, string name, string type, string token);
+        Task<bool> OpenReportDesigner(string templateId, string name, string type, string token,string content);
 
         /// <summary>
         /// 保存报告模板

+ 2 - 0
fis/Managers/AppManager.cs

@@ -6,6 +6,7 @@ using System.Collections.Concurrent;
 using System.Data;
 using System.Linq;
 using fis.Win.Utilities;
+using fis.Win.Managers;
 
 namespace fis.Managers
 {
@@ -90,6 +91,7 @@ namespace fis.Managers
             RegisterManager<IFileStorageManager>(new FileStorageManager());
             RegisterManager<ISecondaryWindowManager>(new SecondaryWindowManager());
             RegisterManager<IWindowStateManager>(new WindowStateManager());
+            RegisterManager<IReportTemplateCacheManager>(new ReportTemplateCacheManager());
             RegisterManager<IUltra3DManager>(new Ultra3DManager());
             _initialized = true;
         }

+ 8 - 4
fis/Managers/BrowserManager.cs

@@ -171,7 +171,7 @@ namespace fis.Managers
                 throw new NotSupportedException($"Platform {Environment.OSVersion.Platform} is not suppoorted.");
             }
             _requestHandler = new HostRequestHandler();
-            var appHandler = new FileSystemHostHandler(ShellConfig.Instance.AppHost, ShellConfig.Instance.AppResourcePath);
+            //var appHandler = new FileSystemHostHandler(ShellConfig.Instance.AppHost, ShellConfig.Instance.AppResourcePath);
             //从Zip创建Handler
             //Zip路径:ShellConfig.Instance.AppResourcePath + "flyinsono.zip", 即 软件目录\App\flyinsono\flyinsono.zip
             //Zip包内容结构:
@@ -183,11 +183,15 @@ namespace fis.Managers
             //      -index.html
             //      -flutter.js
             //      -.....
-            //var appHandler = new ZipHandler(ShellConfig.Instance.AppHost, Path.Combine(ShellConfig.Instance.AppResourcePath, "flyinsono.zip"));
-            var resourceHandler = new FileSystemHostHandler(ShellConfig.Instance.LocalResourceHost, ShellConfig.Instance.LocalResourcePath);
+            var appHandler = new ZipHandler(ShellConfig.Instance.AppHost, Path.Combine(ShellConfig.Instance.AppResourcePath, "flyinsono.zip"));
+            var designerFile = Path.Combine(ShellConfig.Instance.AppResourcePath, "designer.zip");
+            if (File.Exists(designerFile)) 
+            {
+                var designerHandler = new ZipHandler(ShellConfig.Instance.ReportDesignerHost, designerFile);
+                _requestHandler.RegisterHostHandler(designerHandler);
+            }
             var platformHandler = new JsonRpcHandler<IPlatformService>(ShellConfig.Instance.LocalApiHost, _platformService);
             _requestHandler.RegisterHostHandler(appHandler);
-            _requestHandler.RegisterHostHandler(resourceHandler);
             _requestHandler.RegisterHostHandler(platformHandler);
         }
 

+ 1 - 1
fis/Managers/Interfaces/ISecondaryWindowManager.cs

@@ -25,6 +25,6 @@ namespace fis.Managers.Interfaces
         /// <param name="host"></param>
         /// <param name="keyValuePairs"></param>
         /// <returns></returns>
-        Task ShowWindowByTypeAsync(WindowType windowType, string host, Dictionary<string, string> keyValuePairs, bool isShowWindow = true);
+        Task ShowWindowByTypeAsync(WindowType windowType,Dictionary<string, string> keyValuePairs, bool isShowWindow = true);
     }
 }

+ 3 - 3
fis/Managers/SecondaryWindowManager.cs

@@ -26,11 +26,11 @@ namespace fis.Managers
         /// </summary>
         public bool IsVisible { get; private set; } = false;
 
-        public async Task ShowWindowByTypeAsync(WindowType windowType, string host, Dictionary<string, string> keyValuePairs,bool isShowWindow = true) 
+        public async Task ShowWindowByTypeAsync(WindowType windowType, Dictionary<string, string> keyValuePairs,bool isShowWindow = true) 
         {
             if (SlaveWindow != null)
             {
-                await SlaveWindow.ChangeContentViewAsync(host, keyValuePairs, windowType);
+                await SlaveWindow.ChangeContentViewAsync(keyValuePairs, windowType);
                 IsVisible = true;
             }
             else 
@@ -40,7 +40,7 @@ namespace fis.Managers
                 {
                     SlaveWindow = new SlaveWindow();
                     SlaveWindow.Closed += SlaveWindow_Closed;
-                    SlaveWindow.InitParameters(host, keyValuePairs);
+                    SlaveWindow.InitParameters(keyValuePairs);
                     if (SlaveWindow.Screens.ScreenCount > 1)
                     {
                         var screen = SlaveWindow.Screens.All.FirstOrDefault(x => !x.Primary);

+ 1 - 1
fis/Managers/ThemeManager.cs

@@ -17,7 +17,7 @@ namespace fis.Managers
         {
             try
             {
-                string workSpace = Path.Combine(ShellConfig.Instance.LocalResourcePath, "themes");
+                string workSpace = Path.Combine(ShellConfig.Instance.AppResourcePath, "Resources", "themes");
                 if (!Directory.Exists(workSpace))
                 {
                     Directory.CreateDirectory(workSpace);

+ 10 - 8
fis/PlatformService.cs

@@ -63,7 +63,7 @@ namespace fis
             dictionary.Add("remedicalCode", remedicalCode);
             dictionary.Add("recordCode", recordCode);
             var manager = AppManager.Get<ISecondaryWindowManager>();
-            await manager.ShowWindowByTypeAsync(WindowType.Measure,"http://" + ShellConfig.Instance.AppHost + "/#/measure/measure_home", dictionary);
+            await manager.ShowWindowByTypeAsync(WindowType.Measure, dictionary);
             return true;
         }
 
@@ -75,7 +75,7 @@ namespace fis
         /// <param name="reportCode"></param>
         /// <param name="recordCode"></param>
         /// <returns></returns>
-        public bool OpenReportEdit(string token, string patientCode, string reportCode, string recordCode,string referralRecordCode) {
+        public async Task<bool> OpenReportEdit(string token, string patientCode, string reportCode, string recordCode,string referralRecordCode) {
             var dictionary = new Dictionary<string, string>();
             dictionary.Add("token", token);
             dictionary.Add("patientCode", patientCode);
@@ -83,7 +83,7 @@ namespace fis
             dictionary.Add("recordCode", recordCode);
             dictionary.Add("referralRecordCode", referralRecordCode);
             var manager = AppManager.Get<ISecondaryWindowManager>();
-            manager.ShowWindowByTypeAsync(WindowType.ReportEdit, "http://" + ShellConfig.Instance.AppHost + "/#/remedical/report/report_edit", dictionary).GetAwaiter().GetResult();
+            await manager.ShowWindowByTypeAsync(WindowType.ReportEdit,  dictionary);
             return true;
         }
 
@@ -94,14 +94,14 @@ namespace fis
         /// <param name="reportCode"></param>
         /// <param name="recordCode"></param>
         /// <returns></returns>
-        public bool OpenReportPreview(string token, string reportCode, string recordCode)
+        public async Task<bool> OpenReportPreview(string token, string reportCode, string recordCode)
         {
             var dictionary = new Dictionary<string, string>();
             dictionary.Add("token", token);
             dictionary.Add("reportCode", reportCode);
             dictionary.Add("recordCode", recordCode);
             var manager = AppManager.Get<ISecondaryWindowManager>();
-            manager.ShowWindowByTypeAsync(WindowType.ReportEdit, "http://" + ShellConfig.Instance.AppHost + "/#/remedical/report/report_edit", dictionary).GetAwaiter().GetResult();
+            await manager.ShowWindowByTypeAsync(WindowType.ReportEdit, dictionary);
             return true;
         }
 
@@ -109,15 +109,17 @@ namespace fis
         /// 打开报告设计器
         /// </summary>
         /// <returns></returns>
-        public bool OpenReportDesigner(string templateId, string name, string type, string token)
+        public async Task<bool> OpenReportDesigner(string templateId, string name, string type, string token,string json)
         {
-            var manager = AppManager.Get<ISecondaryWindowManager>();
+            var secondWindowManager = AppManager.Get<ISecondaryWindowManager>();
+            var reportTemplateCacheManager = AppManager.Get<IReportTemplateCacheManager>();
             var dictionary = new Dictionary<string, string>();
             dictionary.Add("templateId", templateId);
             dictionary.Add("templateName", name);
             dictionary.Add("templateType", type);
             dictionary.Add("token", token);
-            manager.ShowWindowByTypeAsync(WindowType.TemplateDesigner,"", dictionary);
+            reportTemplateCacheManager.SetTemplateJson(templateId, json);
+            await secondWindowManager.ShowWindowByTypeAsync(WindowType.TemplateDesigner, dictionary);
             return true;
         }
 

+ 5 - 6
fis/ShellConfig.cs

@@ -16,18 +16,17 @@ namespace fis
         //Gets or sets the app host which is the web App's access url
         public string AppHost { get; set; } = "app.fis.plus";
         
+        /// <summary>
+        /// 模板设计器地址
+        /// </summary>
+        public string ReportDesignerHost { get; set; } = "designer.fis.plus";
+
         //Gets or sets the App resource path, which stores the web content and its resources.
         public string AppResourcePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App", "flyinsono");
 
         //Gets or sets the api host for local call, usually provider platform apis.
         public string LocalApiHost { get; set; } = "platform.fis.plus";
 
-        //Gets or sets the resource host for local application resources, eg. icons, images, audios and videos.
-        public string LocalResourceHost { get; set; } = "resource.fis.plus";
-
-        //Gets or sets the resource path for local application resources, eg. icons, images, audios and videos.
-        public string LocalResourcePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources");
-
         private static ShellConfig Load()
         {
             var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ShellConfig.json");

+ 10 - 5
fis/SlaveWindow.axaml.cs

@@ -59,7 +59,7 @@ namespace fis
         /// </summary>
         /// <param name="host"></param>
         /// <param name="dictionary"></param>
-        public void InitParameters(string host, Dictionary<string, string> dictionary)
+        public void InitParameters(Dictionary<string, string> dictionary)
         {
             var parameter = "";
             var index = 0;
@@ -72,12 +72,17 @@ namespace fis
                 }
                 index++;
             }
+            string url;
             //Make cross domain work.
             if (parameter.Length > 0)
             {
-                var url = "http://" + ShellConfig.Instance.AppHost + "/index.html?page=measure&" + parameter;
-                BrowserManager.SlaveBrowser.Address = url;
+                url = "http://" + ShellConfig.Instance.AppHost + "/index.html?page=measure&" + parameter;
             }
+            else 
+            {
+                url = "http://" + ShellConfig.Instance.AppHost + "/index.html?page=measure";
+            }
+            BrowserManager.SlaveBrowser.Address = url;
             WindowStartupLocation = WindowStartupLocation.Manual;
             Position = new PixelPoint();
             WindowState = WindowState.Maximized;
@@ -88,7 +93,7 @@ namespace fis
         /// </summary>
         /// <param name="host"></param>
         /// <param name="keyValuePairs"></param>
-        internal async Task ChangeContentViewAsync(string host, Dictionary<string, string> keyValuePairs, WindowType windowType)
+        internal async Task ChangeContentViewAsync(Dictionary<string, string> keyValuePairs, WindowType windowType)
         {
             TargetMethodName targetMethodName;
             var arguments = new List<string>();
@@ -110,7 +115,7 @@ namespace fis
                 Show();
             });
             ///窗口在hidden变成show的时候容易卡死,加个Sleep能缓解这种情况
-            Thread.Sleep(600);
+            Thread.Sleep(200);
             if (windowType == WindowType.TemplateDesigner) {
                 targetMethodName = TargetMethodName.OpenReportDesignerPage;
             }

+ 6 - 0
fis/Utilities/FisBrowserScriptObject.cs

@@ -69,6 +69,12 @@ namespace fis.Utilities
             _fisBrowser.ExcuteJS(TargetMethodName.SaveReportTemplate, args);
         }
 
+        public string GetTemplateInfoByCode(string code) 
+        {
+            var templateManager = AppManager.Get<IReportTemplateCacheManager>();
+            return templateManager.GetTemplateByCode(code);
+        }
+
         /// <summary>
         /// 开始拖拽Window
         /// </summary>