浏览代码

Merge branch 'master' of http://dev.dp.sagacloud.cn:8886/r/Revit/SAGA.MBI

mengxiangge 6 年之前
父节点
当前提交
472a8b5af7
共有 92 个文件被更改,包括 1362 次插入394 次删除
  1. 二进制
      MBI/Dlls/FirmLibDll/FWindSoft.Wpf.dll
  2. 二进制
      MBI/Dlls/FirmLibDll/FWindSoft.Wpf.pdb
  3. 二进制
      MBI/Dlls/FirmLibDll/FWindSoft.dll
  4. 二进制
      MBI/Dlls/FirmLibDll/FWindSoft.pdb
  5. 2 2
      MBI/FirmLib/Com.FirmLib.UI/BllCommon/AssetSelector.cs
  6. 3 0
      MBI/FirmLib/Com.FirmLib.UI/Com.FirmLib.UI.csproj
  7. 63 0
      MBI/FirmLib/Com.FirmLib.UI/Common/SingleInstance.cs
  8. 33 0
      MBI/FirmLib/Com.FirmLib.UI/Common/TryCatchWrapper.cs
  9. 48 0
      MBI/FirmLib/Com.FirmLib.UI/Extension/MessageTipExtension.cs
  10. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/Model/InsuerUtils.cs
  11. 3 3
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerAssetSelector.cs
  12. 2 2
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerEditor.cs
  13. 67 0
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerInfo.cs
  14. 2 2
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsurancePolicyEditor.cs
  15. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmPolicyEnsure.cs
  16. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmPolicySaveEnsure.cs
  17. 2 2
      MBI/FirmLib/Com.FirmLib.UI/Insuer/VmSimplePolicyEditor.cs
  18. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerAssetSelector.xaml.cs
  19. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerBaseInfo.xaml.cs
  20. 13 2
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerInfo.xaml
  21. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerInfo.xaml.cs
  22. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerProjectInfo.xaml.cs
  23. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsurancePolicyEditor.xaml.cs
  24. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicyEnsure.xaml.cs
  25. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicySaveEnsure.xaml.cs
  26. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicySelector.xaml.cs
  27. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Insuer/WinSimplePolicyEditor.xaml.cs
  28. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmAddProductType.cs
  29. 3 3
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerAssetSelector.cs
  30. 66 0
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerInfo.cs
  31. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerSaveEnsure.cs
  32. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmUpdateProductType.cs
  33. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinAddLossProductType.xaml.cs
  34. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinAddProductType.xaml.cs
  35. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerAssetSelector.xaml.cs
  36. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerBaseInfo.xaml.cs
  37. 14 2
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerInfo.xaml
  38. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerInfo.xaml.cs
  39. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerProjectAsset.xaml.cs
  40. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerSaveEnsure.xaml.cs
  41. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinManitainerProjectInfo.xaml.cs
  42. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinUpdateProductType.xaml.cs
  43. 7 2
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmBrandEditor.cs
  44. 77 3
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmManufactureInfo.cs
  45. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmProductType.cs
  46. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinBrandEditor.xaml.cs
  47. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureBaseInfo.xaml.cs
  48. 29 16
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureInfo.xaml
  49. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureInfo.xaml.cs
  50. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufacturerEditor.xaml.cs
  51. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductEditor.xaml.cs
  52. 2 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductList.xaml.cs
  53. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductType.xaml.cs
  54. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProjectAssetList.xaml.cs
  55. 1 1
      MBI/FirmLib/Com.FirmLib.UI/NavigationManager/FirmLibPost.cs
  56. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmMultiProductTypeSelector.cs
  57. 71 0
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerInfo.cs
  58. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerProjectContract.cs
  59. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerProjectInfo.cs
  60. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSingleProductTypeSelector.cs
  61. 43 3
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSupplyAssetCreater.cs
  62. 3 3
      MBI/FirmLib/Com.FirmLib.UI/Seller/VmSupplyAssetSelector.cs
  63. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinAddLossProductType.xaml.cs
  64. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinMultiProductTypeSelector.xaml.cs
  65. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerBaseInfo.xaml.cs
  66. 14 2
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerInfo.xaml
  67. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerInfo.xaml.cs
  68. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerProjectContract.xaml.cs
  69. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerProjectInfo.xaml.cs
  70. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSingleProductTypeSelector.xaml.cs
  71. 2 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyAssetCreater.xaml.cs
  72. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyAssetSelector.xaml.cs
  73. 1 1
      MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyContractNoSelector.xaml.cs
  74. 150 71
      MBI/FirmLib/Com.FirmLib/BaseHttpBll.cs
  75. 4 2
      MBI/FirmLib/Com.FirmLib/Bll/EquipmentFamilyBll.cs
  76. 4 2
      MBI/FirmLib/Com.FirmLib/Bll/EquipmentInfoPointBll.cs
  77. 4 2
      MBI/FirmLib/Com.FirmLib/Bll/FileBll.cs
  78. 2 17
      MBI/FirmLib/Com.FirmLib/Bll/MaintainerBll.cs
  79. 12 59
      MBI/FirmLib/Com.FirmLib/Bll/ManufacturerBll.cs
  80. 12 61
      MBI/FirmLib/Com.FirmLib/Bll/ProductBll.cs
  81. 1 22
      MBI/FirmLib/Com.FirmLib/Bll/ProductTypeBll.cs
  82. 2 1
      MBI/FirmLib/Com.FirmLib/Bll/ProjectBll.cs
  83. 2 0
      MBI/FirmLib/Com.FirmLib/Com.FirmLib.csproj
  84. 29 0
      MBI/FirmLib/Com.FirmLib/RequestInfo.cs
  85. 116 0
      MBI/FirmLib/Com.FirmLib/ResponseRelation.cs
  86. 3 35
      MBI/SAGA.GplotRelationComputerManage/ReadSpaceCommand.cs
  87. 5 0
      MBI/SAGA.GplotRelationComputerManage/SAGA.GplotRelationComputerManage.csproj
  88. 238 0
      MBI/SAGA.GplotRelationComputerManage/SpaceRelation/FloorSpaceItems.cs
  89. 0 1
      MBI/SAGA.GplotRelationComputerManage/SpaceRelation/SpaceComputerContext.cs
  90. 3 0
      MBI/SAGA.GplotRelationComputerManage/SpaceRelation/SpaceComputerManager.cs
  91. 105 0
      MBI/SAGA.MBI/Html5Command.cs
  92. 55 26
      MBI/SAGA.RevitFirmLib/Command.cs

二进制
MBI/Dlls/FirmLibDll/FWindSoft.Wpf.dll


二进制
MBI/Dlls/FirmLibDll/FWindSoft.Wpf.pdb


二进制
MBI/Dlls/FirmLibDll/FWindSoft.dll


二进制
MBI/Dlls/FirmLibDll/FWindSoft.pdb


+ 2 - 2
MBI/FirmLib/Com.FirmLib.UI/BllCommon/AssetSelector.cs

@@ -107,7 +107,7 @@ namespace Com.FirmLib.UI.BllCommon
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanSearchCommand(object parameter)
@@ -132,7 +132,7 @@ namespace Com.FirmLib.UI.BllCommon
             }
             catch (Exception ex)
             {
-                MessageTip.Show(ex.Message);
+              MessageTipEx.Show(ex);
             }
         }
         public bool CanPageIndexChangedCommand(object parameter)

+ 3 - 0
MBI/FirmLib/Com.FirmLib.UI/Com.FirmLib.UI.csproj

@@ -106,6 +106,8 @@
     <Compile Include="Common\Enums.cs" />
     <Compile Include="Common\IdNameItem.cs" />
     <Compile Include="Common\InfoPointTemplateManager.cs" />
+    <Compile Include="Common\TryCatchWrapper.cs" />
+    <Compile Include="Extension\MessageTipExtension.cs" />
     <Compile Include="Common\Model\AssetShowItem.cs" />
     <Compile Include="Common\Model\VenderItem.cs" />
     <Compile Include="Common\Model\VenderProjectParameter.cs" />
@@ -297,6 +299,7 @@
     <Compile Include="Seller\WinSupplyContractNoSelector.xaml.cs">
       <DependentUpon>WinSupplyContractNoSelector.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Common\SingleInstance.cs" />
     <Compile Include="WinFirmMain.xaml.cs">
       <DependentUpon>WinFirmMain.xaml</DependentUpon>
     </Compile>

+ 63 - 0
MBI/FirmLib/Com.FirmLib.UI/Common/SingleInstance.cs

@@ -0,0 +1,63 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:SingleInstance
+ * 作者:xulisong
+ * 创建时间: 2018/12/21 9:01:34
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using FWindSoft.Wpf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace Com.FirmLib.UI
+{
+    public class WindowSingleInstance<T> where T:Window
+    {
+        private readonly Func<T> m_CreateInstance;
+        public WindowSingleInstance()
+        {
+            m_CreateInstance = CreateInstance;
+        }
+        public WindowSingleInstance(Func<T> createInstance)
+        {
+            m_CreateInstance = createInstance;
+        }
+
+        protected T CreateInstance()
+        {
+            Type type = typeof(T);
+            ConstructorInfo  construct = type.GetConstructor(Type.EmptyTypes);
+            if (construct == null)
+                return default(T);
+            return (T)construct.Invoke(null);
+        }
+        protected T m_Target;
+        /// <summary>
+        /// 目标信息
+        /// </summary>
+        public virtual T Target
+        {
+            get
+            {
+                if (m_Target == null||m_Target.IsDisposed())
+                {
+                    if (m_CreateInstance!=null)
+                    {
+                        m_Target = m_CreateInstance();
+                    }                  
+                }
+                else
+                {
+                    m_Target.Visibility = Visibility.Visible;
+                    m_Target.Activate();
+                }
+                return m_Target;
+            }
+        }      
+    }  
+}

+ 33 - 0
MBI/FirmLib/Com.FirmLib.UI/Common/TryCatchWrapper.cs

@@ -0,0 +1,33 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:TryCatchWrapper
+ * 作者:xulisong
+ * 创建时间: 2018/12/20 11:35:30
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Com.FirmLib.UI
+{
+    /// <summary>
+    /// 异常处理包装器
+    /// </summary>
+    public class TryCatchWrapper
+    {
+        public static void Handled(Action action)
+        {
+            try
+            {
+                action?.Invoke();
+            }
+            catch (Exception e)
+            {
+                MessageTipEx.Show(e);
+            }
+        }
+    }
+}

+ 48 - 0
MBI/FirmLib/Com.FirmLib.UI/Extension/MessageTipExtension.cs

@@ -0,0 +1,48 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:MessageTipExtension
+ * 作者:xulisong
+ * 创建时间: 2018/12/19 14:01:42
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using FWindSoft;
+using FWindSoft.Wpf;
+
+namespace Com.FirmLib.UI
+{
+    public class MessageTipEx
+    {
+        public static void Show(Window owner, Exception ex)
+        {
+            string result = ex.Message;
+
+            #region 异常详细信息
+            #if DEBUG
+            StringBuilder builder = new StringBuilder();
+            builder.Append(ex.Message);
+            builder.Append(Environment.NewLine);
+            builder.Append(ex.StackTrace.ToString());
+            result = builder.ToString(); 
+            #endif
+            #endregion
+
+            if (ex is HttpApiException httpEx)
+            {
+                result = httpEx.ToString();
+            }
+
+            MessageTip.Show(owner,result,"错误提示");
+        }
+
+        public static void Show(Exception ex)
+        {
+            Show(null, ex);
+        }
+    }
+}

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/Model/InsuerUtils.cs

@@ -54,7 +54,7 @@ namespace Com.FirmLib.UI.Insuer.Model
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.StackTrace.ToString());
+                MessageTipEx.Show(ex);
             }
 
         }

+ 3 - 3
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerAssetSelector.cs

@@ -145,7 +145,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)
@@ -179,7 +179,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
 
         }
@@ -214,7 +214,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanTabChangedCommand(object parameter)

+ 2 - 2
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerEditor.cs

@@ -89,7 +89,7 @@ namespace Com.FirmLib.UI.Insuer
             }
             catch (Exception e)
             {
-                MessageTip.Show(this.GetWindow(), e.Message);
+               MessageTipEx.Show(this.GetWindow(), e);
             }
         }
         public bool CanAddCommand(object parameter)
@@ -114,7 +114,7 @@ namespace Com.FirmLib.UI.Insuer
             }
             catch (Exception e)
             {
-                MessageTip.Show(this.GetWindow(), e.Message);
+               MessageTipEx.Show(this.GetWindow(), e);
             }
         }
         public bool CanAddAndManageCommand(object parameter)

+ 67 - 0
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsuerInfo.cs

@@ -12,6 +12,7 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Windows;
 using Com.FirmLib.Bll;
@@ -23,6 +24,7 @@ using FWindSoft.DataFramework;
 using FWindSoft.MVVM;
 using FWindSoft.Wpf;
 using FWindSoft.SystemExtensions;
+using FWindSoft.Tools;
 
 namespace Com.FirmLib.UI.Insuer
 {
@@ -152,7 +154,57 @@ namespace Com.FirmLib.UI.Insuer
         {
             return true;
         }
+        /// <summary>
+        /// 刷新动画
+        /// </summary>
+        /// <param name="parameter"></param>
+        [Command]
+        public void RefreshCommand(object parameter)
+        {
+            var item = parameter as ProjectRelationShowItem;
+            if (item != null)
+            {
+                item.IsLoading = true;
+                TaskUtil.StartSTATask((obj) =>
+              {
+                  var useItem = obj as ProjectRelationShowItem;
+                  if (useItem == null)
+                      return;
+                  try
+                  {
+                      BllFactory<ProjectBll>.Instance.ProjectSync(useItem.ProjectId);
+                      Thread.Sleep(3000);//立即执行偶尔导致连接取消
+                      var projects = BllFactory<InsuerBll>.Instance.GetProjectItems(Id);
+                      foreach (var project in projects)
+                      {
+                          if (project.Id == useItem.ProjectId)
+                          {
+                              useItem.AssetCount = (int)project.TotalCount.ToDouble();
+                              useItem.InsurancePolicyCount = (int)project.ContractCount.ToDouble();
+                          }
+
+                      }
+                  }
+                  catch (Exception ex)
+                  {
+                      MessageTipEx.Show(ex);
+                  }
 
+                  finally
+                  {
+
+                      useItem.IsLoading = false;
+                  }
+              }, item);
+
+            }
+
+
+        }
+        public bool CanRefreshCommand(object parameter)
+        {
+            return true;
+        }
         #endregion
 
         #region 公开方法
@@ -289,5 +341,20 @@ namespace Com.FirmLib.UI.Insuer
                 RaisePropertyChanged(() => this.AssetCount);
             }
         }
+
+
+        private bool m_IsLoading;
+        /// <summary>
+        /// 加载数据
+        /// </summary>
+        public bool IsLoading
+        {
+            get { return this.m_IsLoading; }
+            set
+            {
+                this.m_IsLoading = value;
+                RaisePropertyChanged(nameof(this.IsLoading));
+            }
+        }
     }
 }

+ 2 - 2
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmInsurancePolicyEditor.cs

@@ -285,7 +285,7 @@ namespace Com.FirmLib.UI.Insuer
             }
             catch (Exception e)
             {
-                MessageTip.Show(e.ToString());
+               MessageTipEx.Show(this.GetWindow(), e);
             }
         }
         public bool CanUploadCommand(object parameter)
@@ -339,7 +339,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception e)
             {
 
-                MessageTip.Show(e.ToString());
+                MessageTipEx.Show(this.GetWindow(), e);
             }
         }
         public bool CanSaveCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmPolicyEnsure.cs

@@ -98,7 +98,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmPolicySaveEnsure.cs

@@ -119,7 +119,7 @@ namespace Com.FirmLib.UI.Insuer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)

+ 2 - 2
MBI/FirmLib/Com.FirmLib.UI/Insuer/VmSimplePolicyEditor.cs

@@ -140,7 +140,7 @@ namespace Com.FirmLib.UI.Insuer
             }
             catch (Exception e)
             {
-                MessageTip.Show(e.ToString());
+               MessageTipEx.Show(this.GetWindow(), e);
             }
         }
         public bool CanUploadCommand(object parameter)
@@ -196,7 +196,7 @@ namespace Com.FirmLib.UI.Insuer
             }
             catch (Exception ex)
             {
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerAssetSelector.xaml.cs

@@ -34,7 +34,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+             TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerBaseInfo.xaml.cs

@@ -35,7 +35,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 13 - 2
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerInfo.xaml

@@ -62,14 +62,25 @@
                             <Setter Property="Template">
                                 <Setter.Value>
                                     <ControlTemplate TargetType="{x:Type ListBoxItem}">
-                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
+                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5" fw:MaskOptions.IsManualHide="true" fw:MaskOptions.IsShow="{Binding IsLoading}">
+                                               <fw:MaskOptions.MaskTemplate>
+                                            <ControlTemplate>
+                                                <Border Background="Gray" Opacity="0.5">
+                                                    <ProgressBar  VerticalAlignment="Center" Margin="5" IsIndeterminate="True"></ProgressBar>
+                                                </Border>
+                                            </ControlTemplate>
+                                        </fw:MaskOptions.MaskTemplate>
                                             <Grid Width="150" Height="80" >
                                                 <Grid.RowDefinitions>
                                                     <RowDefinition></RowDefinition>
                                                     <RowDefinition Height="Auto"></RowDefinition>
                                                 </Grid.RowDefinitions>
                                                 <StackPanel Orientation="Vertical" Grid.Row="0">
-                                                    <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                    <Grid>
+                                                         <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                         <Button  HorizontalAlignment="Right" VerticalAlignment="Center" Content="刷新" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.RefreshCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
+                                                    </Grid>
+                                                  
                                                     <StackPanel Orientation="Horizontal">
                                                         <TextBlock Margin="5,0,5,0"  Text="涉及的保单:"  />
                                                         <TextBlock Margin="5,0,5,0" x:Name="TXTN" Text="{Binding InsurancePolicyCount}" TextDecorations="Underline"/>

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerInfo.xaml.cs

@@ -39,7 +39,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载醒目信息
             this.Title = this.m_Vm.Name;
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsuerProjectInfo.xaml.cs

@@ -52,7 +52,7 @@ namespace Com.FirmLib.UI.Insuer
                     this.Title = string.Format("{0}", currentParameter.Project.Name);
                 }
             }
-            this.m_Vm.Init(parameter);
+             TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
 
        

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinInsurancePolicyEditor.xaml.cs

@@ -45,7 +45,7 @@ namespace Com.FirmLib.UI.Insuer
             {
                 this.Title = "修改保单";            
             }
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicyEnsure.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicySaveEnsure.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinPolicySelector.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Insuer/WinSimplePolicyEditor.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Insuer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmAddProductType.cs

@@ -139,7 +139,7 @@ namespace Com.FirmLib.UI.Maintainer
             catch (Exception ex)
             {
 
-                MessageTip.Show(this.GetWindow(), ex.ToString());
+              MessageTipEx.Show(this.GetWindow(), ex);
             }
         }
         #endregion

+ 3 - 3
MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerAssetSelector.cs

@@ -144,7 +144,7 @@ namespace Com.FirmLib.UI.Maintainer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)
@@ -178,7 +178,7 @@ namespace Com.FirmLib.UI.Maintainer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
 
         }
@@ -213,7 +213,7 @@ namespace Com.FirmLib.UI.Maintainer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
         }
         public bool CanTabChangedCommand(object parameter)

+ 66 - 0
MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerInfo.cs

@@ -12,6 +12,7 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Windows;
 using Com.FirmLib.Bll;
@@ -21,6 +22,7 @@ using Com.FirmLib.UI.Maintainer.Mode;
 using FWindSoft.Data;
 using FWindSoft.DataFramework;
 using FWindSoft.MVVM;
+using FWindSoft.Tools;
 using FWindSoft.Wpf;
 
 namespace Com.FirmLib.UI.Maintainer
@@ -281,7 +283,56 @@ namespace Com.FirmLib.UI.Maintainer
         {
             return true;
         }
+        /// <summary>
+        /// 刷新动画
+        /// </summary>
+        /// <param name="parameter"></param>
+        [Command]
+        public void RefreshCommand(object parameter)
+        {
+            var item = parameter as ProjectMaintainerAssetItem;
+            if (item != null)
+            {
+                item.IsLoading = true;
+               TaskUtil.StartSTATask((obj) =>
+              {
+                  var useItem = obj as ProjectMaintainerAssetItem;
+                  if (useItem == null)
+                      return;
+                  try
+                  {
+                      BllFactory<ProjectBll>.Instance.ProjectSync(useItem.ProjectId);
+                      Thread.Sleep(3000);//立即执行偶尔导致连接取消
+                      var projects = BllFactory<MaintainerBll>.Instance.GetProjectItems(Id);
+                      foreach (var project in projects)
+                      {
+                          if (project.Id == useItem.ProjectId)
+                          {
+                              useItem.ValidityAssetCount = project.TotalCount;
+                              useItem.NearOutDateAssetCount = project.NearlyExpireCount;
+                          }
+                      }
+                  }
+                  catch (Exception ex)
+                  {
+                      MessageTipEx.Show(ex);
+                  }
+
+                  finally
+                  {
+
+                      useItem.IsLoading = false;
+                  }
+              }, item);
+
+            }
 
+
+        }
+        public bool CanRefreshCommand(object parameter)
+        {
+            return true;
+        }
         #endregion
 
         #region 公开方法
@@ -492,6 +543,21 @@ namespace Com.FirmLib.UI.Maintainer
             }
         }
 
+
+        private bool m_IsLoading;
+        /// <summary>
+        /// 加载数据
+        /// </summary>
+        public bool IsLoading
+        {
+            get { return this.m_IsLoading; }
+            set
+            {
+                this.m_IsLoading = value;
+                RaisePropertyChanged(nameof(this.IsLoading));
+            }
+        }
+
     }
 
     /// <summary>

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmMaintainerSaveEnsure.cs

@@ -118,7 +118,7 @@ namespace Com.FirmLib.UI.Maintainer
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/VmUpdateProductType.cs

@@ -127,7 +127,7 @@ namespace Com.FirmLib.UI.Maintainer
             }
             catch (Exception ex)
             {
-                MessageTip.Show(this.GetWindow(), ex.ToString());
+                MessageTipEx.Show(this.GetWindow(), ex);
             }
 
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinAddLossProductType.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinAddProductType.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+          TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerAssetSelector.xaml.cs

@@ -34,7 +34,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerBaseInfo.xaml.cs

@@ -35,7 +35,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+             TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 14 - 2
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerInfo.xaml

@@ -176,14 +176,26 @@
                             <Setter Property="Template">
                                 <Setter.Value>
                                     <ControlTemplate TargetType="{x:Type ListBoxItem}">
-                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
+                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5" fw:MaskOptions.IsManualHide="true" fw:MaskOptions.IsShow="{Binding IsLoading}">
+<fw:MaskOptions.MaskTemplate>
+                                            <ControlTemplate>
+                                                <Border Background="Gray" Opacity="0.5">
+                                                    <ProgressBar  VerticalAlignment="Center" Margin="5" IsIndeterminate="True"></ProgressBar>
+                                                </Border>
+                                            </ControlTemplate>
+                                        </fw:MaskOptions.MaskTemplate>
+
                                             <Grid Width="170" Height="80" >
                                                 <Grid.RowDefinitions>
                                                     <RowDefinition></RowDefinition>
                                                     <RowDefinition Height="Auto"></RowDefinition>
                                                 </Grid.RowDefinitions>
                                                 <StackPanel Orientation="Vertical" Grid.Row="0">
-                                                    <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                    <Grid>
+                                                          <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                          <Button  HorizontalAlignment="Right" VerticalAlignment="Center" Content="刷新" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.RefreshCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
+                                                    </Grid>
+                                                  
                                                     <StackPanel Orientation="Horizontal">
                                                         <TextBlock Margin="5,0,5,0"  Text="维护合同有效期内的资产:"  />
                                                         <TextBlock Margin="5,0,5,0" x:Name="TXTN" Text="{Binding ValidityAssetCount}" TextDecorations="Underline"/>

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerInfo.xaml.cs

@@ -39,7 +39,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载醒目信息
             this.Title = this.m_Vm.Name;
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerProjectAsset.xaml.cs

@@ -37,7 +37,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载项目信息
         }
         #region 界面关联事件

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinMaintainerSaveEnsure.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinManitainerProjectInfo.xaml.cs

@@ -38,7 +38,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载项目信息
             this.Title = this.m_Vm.ProjectName;
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Maintainer/WinUpdateProductType.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Maintainer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 7 - 2
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmBrandEditor.cs

@@ -211,8 +211,13 @@ namespace Com.FirmLib.UI.Manufacturer
             var result = MessageTip.Show(this.GetWindow(), "是否要删除", "提示", MessageBoxButton.YesNo);
             if (result == MessageBoxResult.Yes)
             {
-                BllFactory<BrandBll>.Instance.Delete(new BrandItem() { Id = BrandId });
-                return true;
+                bool flag=BllFactory<BrandBll>.Instance.Delete(new BrandItem() { Id = BrandId });
+                if (!flag)
+                {
+                    MessageTip.Show(this.GetWindow(), "删除失败");
+                }
+
+                return flag;
             }
             return false;
         }

+ 77 - 3
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmManufactureInfo.cs

@@ -11,6 +11,8 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
 using System.Windows;
 using Com.FirmLib.Bll;
 using Com.FirmLib.Entity;
@@ -19,6 +21,7 @@ using Com.FirmLib.UI.Manufacturer.Model;
 using FWindSoft.Data;
 using FWindSoft.DataFramework;
 using FWindSoft.MVVM;
+using FWindSoft.Tools;
 using FWindSoft.Wpf;
 
 namespace Com.FirmLib.UI.Manufacturer
@@ -267,14 +270,19 @@ namespace Com.FirmLib.UI.Manufacturer
                 var result = MessageTip.Show(this.GetWindow(), "是否要删除", "提示", MessageBoxButton.YesNo);
                 if (result == MessageBoxResult.Yes)
                 {
-                    BllFactory<ProductBll>.Instance.Delete(new ProductItem() { Id = item.ProductId });
+                    var flag=BllFactory<ProductBll>.Instance.Delete(new ProductItem() { Id = item.ProductId });
+                    if (!flag)
+                    {
+                        MessageTip.Show(this.GetWindow(), "删除失败");
+                    }
+
                     LoadProdutItems(CurrentSelectedBrand.Id);//或者用下面的方式
                    // ProductItems.Remove(item);
                 }
             }
             catch (Exception ex)
             {
-                MessageTip.Show(this.GetWindow(), ex.StackTrace?.ToString());
+              MessageTipEx.Show(this.GetWindow(), ex);
             }
         }
         public bool CanDeleteCommand(object parameter)
@@ -407,6 +415,57 @@ namespace Com.FirmLib.UI.Manufacturer
             return true;
         }
 
+
+        /// <summary>
+        /// 刷新动画
+        /// </summary>
+        /// <param name="parameter"></param>
+        [Command]
+        public void RefreshCommand(object parameter)
+        {
+            var item = parameter as ProjectAssetShowItem;
+            if (item != null)
+            {
+                item.IsLoading = true;          
+                TaskUtil.StartSTATask((obj) =>
+                {
+                    var useItem = obj as ProjectAssetShowItem;
+                    if (useItem == null)
+                        return;
+                    try
+                    {
+                        BllFactory<ProjectBll>.Instance.ProjectSync(useItem.ProjectId);
+                        Thread.Sleep(3000);//立即执行偶尔导致连接取消
+                        var projectAssetItems = BllFactory<ManufacturerBll>.Instance.GetProjectItems(Id);
+                        foreach (var dataItem in projectAssetItems)
+                        {
+                            if (dataItem.Id == useItem.ProjectId)
+                            {
+                                useItem.AssetCount = dataItem.TotalCount.ToString();
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        MessageTipEx.Show(ex);
+                    }
+
+                    finally
+                    {
+
+                        useItem.IsLoading = false;
+                    }
+                }, item);
+            
+            }
+
+           
+        }
+        public bool CanRefreshCommand(object parameter)
+        {
+            return true;
+        }
+
         #endregion
         #region 单条修改模块
         public bool UpdateManufacture()
@@ -474,7 +533,7 @@ namespace Com.FirmLib.UI.Manufacturer
         }
 
         /// <summary>
-        /// 加载目资产信息
+        /// 加载目资产信息
         /// </summary>
         /// <param name="manufactureId"></param>
         private void LoadProjectAssetItems(string manufactureId)
@@ -664,5 +723,20 @@ namespace Com.FirmLib.UI.Manufacturer
                 RaisePropertyChanged(() => this.AssetCount);
             }
         }
+
+
+        private bool m_IsLoading;
+        /// <summary>
+        /// 是否在加载
+        /// </summary>
+        public bool IsLoading
+        {
+            get { return this.m_IsLoading; }
+            set
+            {
+                this.m_IsLoading = value;
+                RaisePropertyChanged(nameof(this.IsLoading));
+            }
+        }
     }
 }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/VmProductType.cs

@@ -213,7 +213,7 @@ namespace Com.FirmLib.UI.Manufacturer
             catch (Exception e)
             {
 
-                MessageTip.Show(this.GetWindow(), e.Message.ToString());
+                MessageTipEx.Show(this.GetWindow(), e);
             }
            
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinBrandEditor.xaml.cs

@@ -56,7 +56,7 @@ namespace Com.FirmLib.UI.Manufacturer
                 btnAddProduct.Visibility = Visibility.Collapsed;
                 stackDelete.Visibility = Visibility.Visible;
             }
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureBaseInfo.xaml.cs

@@ -36,7 +36,7 @@ namespace Com.FirmLib.UI.Manufacturer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 29 - 16
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureInfo.xaml

@@ -48,7 +48,7 @@
                                  Command="{x:Static bllCommon:EditCommands.SingleUpdate}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}">
                 </fw:TextBoxEditor>
                 <!--<Button Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.ButtonKey}}"  Height="23"  Margin="10"  fw:ButtonOptions.Icon="../Images/修改.jpg" Padding="0"/>-->
-                
+
             </StackPanel>
             <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right">
                 <Button Command="{Binding Commands.AddBranchCommand}" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.ButtonKey}}"  Height="23"  Margin="10" Content="添加品牌"/>
@@ -62,9 +62,9 @@
                 </ItemsPanelTemplate>
             </ListBox.ItemsPanel>
             <ListBox.ItemContainerStyle>
-                
+
                 <Style TargetType="{x:Type ListBoxItem}">
-                  
+
                     <Setter Property="Template">
                         <Setter.Value>
                             <ControlTemplate TargetType="{x:Type ListBoxItem}">
@@ -113,7 +113,7 @@
                                 <MenuItem Header="删除" Command="{Binding Data.Commands.DeleteCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding }"></MenuItem>
                             </ContextMenu>
                         </Setter.Value>
-                      
+
                     </Setter>
                     <Setter Property="Height" Value="30"></Setter>
                     <Style.Triggers>
@@ -136,7 +136,7 @@
                                 <Button IsEnabled="False" Command="{Binding Data.Commands.ManageTypeCommand,Source={StaticResource ResourceKey=DATA} }" CommandParameter="{Binding}" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}"   Content="管理常见问题" HorizontalAlignment="Left" Padding="5,0,5,0"/>
                                 <Button Command="{Binding Data.Commands.ManageTypeCommand,Source={StaticResource ResourceKey=DATA} }" CommandParameter="{Binding}" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}"   Content="管理型号" HorizontalAlignment="Left" Padding="5,0,5,0"/>
                             </StackPanel>
-                          
+
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
 
@@ -166,14 +166,27 @@
                         <Setter Property="Template">
                             <Setter.Value>
                                 <ControlTemplate TargetType="{x:Type ListBoxItem}">
-                                    <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
+                                    <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5" fw:MaskOptions.IsManualHide="true" fw:MaskOptions.IsShow="{Binding IsLoading}">
+                                        <fw:MaskOptions.MaskTemplate>
+                                            <ControlTemplate>
+                                                <Border Background="Gray" Opacity="0.5">
+                                                    <ProgressBar  VerticalAlignment="Center" Margin="5" IsIndeterminate="True"></ProgressBar>
+                                                </Border>
+                                            </ControlTemplate>
+                                        </fw:MaskOptions.MaskTemplate>
+
                                         <Grid Width="150" Height="80" >
                                             <Grid.RowDefinitions>
                                                 <RowDefinition></RowDefinition>
                                                 <RowDefinition Height="Auto"></RowDefinition>
                                             </Grid.RowDefinitions>
                                             <StackPanel Orientation="Vertical" Grid.Row="0">
-                                                <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                <Grid>
+                                                   
+                                                    <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                     <Button  HorizontalAlignment="Right" VerticalAlignment="Center" Content="刷新" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.RefreshCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
+                                                </Grid>
+
                                                 <StackPanel Orientation="Horizontal">
                                                     <TextBlock Margin="5,0,5,0"  Text="涉及资产:"  />
                                                     <TextBlock Margin="5,0,5,0" x:Name="TXTN" Text="{Binding AssetCount}" TextDecorations="Underline"/>
@@ -183,7 +196,7 @@
                                             <Button Grid.Row="1" Grid.Column="0" x:Name="BTNU" HorizontalAlignment="Right" Content="资产清单" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.GoAssetCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
                                         </Grid>
                                     </Border>
-                                 
+
                                 </ControlTemplate>
                             </Setter.Value>
                         </Setter>
@@ -193,7 +206,7 @@
         </GroupBox>
 
         <GroupBox MaxHeight="170" Grid.Row="4" Grid.Column="0"  Margin="0,10,0,0" Header="供应该厂家产品的所有供应商"  Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.GroupBoxKey}}">
-              <ListBox ItemsSource="{Binding SellerItems}" BorderThickness="0"  ScrollViewer.HorizontalScrollBarVisibility="Auto" Margin="-5,0,-5,0">
+            <ListBox ItemsSource="{Binding SellerItems}" BorderThickness="0"  ScrollViewer.HorizontalScrollBarVisibility="Auto" Margin="-5,0,-5,0">
                 <ListBox.ItemsPanel >
                     <ItemsPanelTemplate>
                         <WrapPanel Orientation="Horizontal"  Width="{Binding Path=Width,RelativeSource={RelativeSource AncestorType=ListBox}}"/>
@@ -212,13 +225,13 @@
                                             </Grid.RowDefinitions>
                                             <StackPanel Orientation="Vertical" Grid.Row="0">
                                                 <TextBlock Margin="5,0,5,0"  FontSize="20" Text="{Binding VenderName}"></TextBlock>
-                                                 <TextBlock Margin="5,0,5,0" Text="{Binding WebSite}"></TextBlock>
+                                                <TextBlock Margin="5,0,5,0" Text="{Binding WebSite}"></TextBlock>
                                                 <StackPanel Orientation="Horizontal">
                                                     <TextBlock Margin="5,0,5,0"  Text="供应名录中涉及我的品牌:"  />
                                                     <TextBlock Margin="2,0,2,0"  Text="{Binding BrandCount}" TextDecorations="Underline"/>
                                                     <TextBlock Margin="2,0,2,0"  Text="个" />
                                                 </StackPanel>
-                                                 <StackPanel Orientation="Horizontal">
+                                                <StackPanel Orientation="Horizontal">
                                                     <TextBlock Margin="5,0,5,0"  Text="涉及产品:"  />
                                                     <TextBlock Margin="2,0,2,0"  Text="{Binding ProductCount}" TextDecorations="Underline"/>
                                                     <TextBlock Margin="2,0,2,0"  Text="个" />
@@ -227,7 +240,7 @@
                                             <Button Grid.Row="1" Grid.Column="0" x:Name="BTNU" HorizontalAlignment="Right" Content="查看供应名录" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.ScanRefTypesCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
                                         </Grid>
                                     </Border>
-                                 
+
                                 </ControlTemplate>
                             </Setter.Value>
                         </Setter>
@@ -237,7 +250,7 @@
         </GroupBox>
 
         <GroupBox MaxHeight="170" Grid.Row="5" Grid.Column="0"  Margin="0,10,0,0" Header="维修该厂家产品的所有维修商"  Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.GroupBoxKey}}">
-           <ListBox ItemsSource="{Binding MaintainerItems}" BorderThickness="0"  ScrollViewer.HorizontalScrollBarVisibility="Auto" Margin="-5,0,-5,0">
+            <ListBox ItemsSource="{Binding MaintainerItems}" BorderThickness="0"  ScrollViewer.HorizontalScrollBarVisibility="Auto" Margin="-5,0,-5,0">
                 <ListBox.ItemsPanel >
                     <ItemsPanelTemplate>
                         <WrapPanel Orientation="Horizontal"  Width="{Binding Path=Width,RelativeSource={RelativeSource AncestorType=ListBox}}"/>
@@ -248,7 +261,7 @@
                         <Setter Property="Template">
                             <Setter.Value>
                                 <ControlTemplate TargetType="{x:Type ListBoxItem}">
-                                  <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
+                                    <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
                                         <Grid Width="180" Height="110" >
                                             <Grid.RowDefinitions>
                                                 <RowDefinition></RowDefinition>
@@ -256,13 +269,13 @@
                                             </Grid.RowDefinitions>
                                             <StackPanel Orientation="Vertical" Grid.Row="0">
                                                 <TextBlock Margin="5,0,5,0"  FontSize="20" Text="{Binding VenderName}"></TextBlock>
-                                                 <TextBlock Margin="5,0,5,0" Text="{Binding WebSite}"></TextBlock>
+                                                <TextBlock Margin="5,0,5,0" Text="{Binding WebSite}"></TextBlock>
                                                 <StackPanel Orientation="Horizontal">
                                                     <TextBlock Margin="5,0,5,0"  Text="维修名录中涉及我的品牌:"  />
                                                     <TextBlock Margin="2,0,2,0"  Text="{Binding BrandCount}" TextDecorations="Underline"/>
                                                     <TextBlock Margin="2,0,2,0"  Text="个" />
                                                 </StackPanel>
-                                                 <StackPanel Orientation="Horizontal">
+                                                <StackPanel Orientation="Horizontal">
                                                     <TextBlock Margin="5,0,5,0"  Text="涉及产品:"  />
                                                     <TextBlock Margin="2,0,2,0"  Text="{Binding ProductCount}" TextDecorations="Underline"/>
                                                     <TextBlock Margin="2,0,2,0"  Text="个" />

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufactureInfo.xaml.cs

@@ -41,7 +41,7 @@ namespace Com.FirmLib.UI.Manufacturer
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载醒目信息
             this.Title = this.m_Vm.ManufactureName;
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinManufacturerEditor.xaml.cs

@@ -44,7 +44,7 @@ namespace Com.FirmLib.UI.Manufacturer
             {
                 this.Title = "编辑生产厂商";
             }
-            this.m_Vm.Init(parameter);
+             TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductEditor.xaml.cs

@@ -36,7 +36,7 @@ namespace Com.FirmLib.UI.Manufacturer
 
         protected override void LoadData(LoadParameter parameter)
         {
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 2 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductList.xaml.cs

@@ -35,7 +35,8 @@ namespace Com.FirmLib.UI.Manufacturer
         }
         protected override void LoadData(LoadParameter parameter)
         {
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
+            //this.m_Vm.Init(parameter);
         }
     }
 }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProductType.xaml.cs

@@ -37,7 +37,7 @@ namespace Com.FirmLib.UI.Manufacturer
 
         protected override void LoadData(LoadParameter parameter)
         {
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             this.Title = string.Format("[{0}-{1}]{2}", this.m_Vm.Brand.Name, this.m_Vm.Product.Name, "型号");
 
             var columns = DataGrid.CreateColumns(this.m_Vm.RefDefinitions, "Parameters", InfoPointTemplateParse.CreateTemplateManager());

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Manufacturer/WinProjectAssetList.xaml.cs

@@ -48,7 +48,7 @@ namespace Com.FirmLib.UI.Manufacturer
                     this.Title = string.Format("{0}资产清单", currentParameter.ProjectLocalName);
                 }
             }
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
        
         #region 界面关联事件

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/NavigationManager/FirmLibPost.cs

@@ -61,7 +61,7 @@ namespace Com.FirmLib.UI
             catch (Exception e)
             {
 
-                MessageTip.Show(e.Message);
+               MessageTipEx.Show( e);
             }
             if (win != null)
             {

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/VmMultiProductTypeSelector.cs

@@ -144,7 +144,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(this.GetWindow(), ex.ToString());
+               MessageTipEx.Show(this.GetWindow(), ex);
             }
         }
         #endregion

+ 71 - 0
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerInfo.cs

@@ -12,16 +12,19 @@ using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using System.Windows;
 using Com.FirmLib.Bll;
 using Com.FirmLib.Entity;
 using Com.FirmLib.UI.Common;
+using Com.FirmLib.UI.Maintainer;
 using Com.FirmLib.UI.Manufacturer.Model;
 using Com.FirmLib.UI.Seller.Model;
 using FWindSoft.Data;
 using FWindSoft.DataFramework;
 using FWindSoft.MVVM;
+using FWindSoft.Tools;
 using FWindSoft.Wpf;
 
 namespace Com.FirmLib.UI.Seller
@@ -235,6 +238,59 @@ namespace Com.FirmLib.UI.Seller
         {
             return true;
         }
+
+        /// <summary>
+        /// 刷新动画
+        /// </summary>
+        /// <param name="parameter"></param>
+        [Command]
+        public void RefreshCommand(object parameter)
+        {
+            var item = parameter as ProjectRelationShowItem;
+            if (item != null)
+            {
+                item.IsLoading = true;
+                TaskUtil.StartSTATask((obj) =>
+               {
+                   var useItem = obj as ProjectRelationShowItem;
+                   if (useItem == null)
+                       return;
+                   try
+                   {
+                       BllFactory<ProjectBll>.Instance.ProjectSync(useItem.ProjectId);
+                       Thread.Sleep(3000);//立即执行偶尔导致连接取消
+                       var projects = BllFactory<SellerBll>.Instance.GetProjectItems(Id);
+                       foreach (var project in projects)
+                       {
+                           if (project.Id == useItem.ProjectId)
+                           {
+                               useItem.ContractCount = project.ContractCount;
+                               useItem.AssetCount = project.TotalCount;
+                           }
+                       }
+                   }
+                   catch (Exception ex)
+                   {
+                       MessageTipEx.Show(ex);
+                   }
+
+                   finally
+                   {
+
+                       useItem.IsLoading = false;
+                   }
+
+
+               }, item);
+
+            }
+
+
+        }
+        public bool CanRefreshCommand(object parameter)
+        {
+            return true;
+        }
         #endregion
 
         #region 公开方法
@@ -475,5 +531,20 @@ namespace Com.FirmLib.UI.Seller
                 RaisePropertyChanged(() => this.AssetCount);
             }
         }
+
+
+        private bool m_IsLoading;
+        /// <summary>
+        /// 是否加载
+        /// </summary>
+        public bool IsLoading
+        {
+            get { return this.m_IsLoading; }
+            set
+            {
+                this.m_IsLoading = value;
+                RaisePropertyChanged(nameof(this.IsLoading));
+            }
+        }
     }
 }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerProjectContract.cs

@@ -342,7 +342,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanSelectContractNo(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSellerProjectInfo.cs

@@ -191,7 +191,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+              MessageTipEx.Show(ex);
             }
         }
         public bool CanSelectContractCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSingleProductTypeSelector.cs

@@ -115,7 +115,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
         }
         public bool CanOkCommand(object parameter)

+ 43 - 3
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSupplyAssetCreater.cs

@@ -11,6 +11,7 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
+using System.Text;
 using System.Windows;
 using Com.FirmLib.Bll;
 using Com.FirmLib.Entity;
@@ -105,6 +106,7 @@ namespace Com.FirmLib.UI.Seller
             set
             {
                 this.m_CurrentProductType = value;
+                AttachLocalName(value);
                 RaisePropertyChanged(nameof(this.CurrentProductType));
             }
         }
@@ -148,7 +150,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanSelectProductType(object parameter)
@@ -171,7 +173,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.ToString());
+              MessageTipEx.Show(ex);
             }
         }
         public bool CanCreateAssetItem(object parameter)
@@ -202,12 +204,50 @@ namespace Com.FirmLib.UI.Seller
             }
             else
             {
+                string localName = GetLocalName(CurrentProductType);            
+                for (int i = 0; i < currentCount; i++)
+                {
+                    var dataItem = this.AssetItems[i];
+                    if (dataItem != null && string.IsNullOrWhiteSpace(dataItem.LocalName))
+                    {
+                        dataItem.LocalName = localName ?? string.Empty;
+                    }
+                }
                 for (int i = currentCount; i < uiCount; i++)
+                {                    
+                    this.AssetItems.Add(new AssetShowItem() { LocalName =localName,ProductionDate=DateTime.Today.ToString("yyyyMMdd") });
+                }
+            }
+        }
+
+        private void AttachLocalName(ProductTypeShowItem product)
+        {
+            if (product == null)
+                return;
+             string localName = GetLocalName(product);       
+            for (int i = 0; i < this.AssetItems.Count; i++)
+            {
+                var dataItem = this.AssetItems[i];
+                if (dataItem != null && string.IsNullOrWhiteSpace(dataItem.LocalName))
                 {
-                    this.AssetItems.Add(new AssetShowItem() { LocalName = i.ToString(),ProductionDate=DateTime.Today.ToString("yyyyMMdd") });
+                    dataItem.LocalName = localName ?? string.Empty;
                 }
             }
         }
+
+        private string GetLocalName(ProductTypeShowItem product)
+        {
+            string localName = string.Empty;
+            if (product != null)
+            {
+                StringBuilder builder = new StringBuilder();
+                string famiy = EquipmentFamilyManager.GetFamilyName(CurrentProductType.FamilyCode);
+                builder.Append($"{CurrentProductType.ProductName}({famiy}){CurrentProductType.ProductTypeName}");
+                localName = builder.ToString();
+            }
+            return localName;
+        }
+
         /// <summary>
         /// 整理显示对象数据
         /// </summary>

+ 3 - 3
MBI/FirmLib/Com.FirmLib.UI/Seller/VmSupplyAssetSelector.cs

@@ -138,7 +138,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
         }
         public bool CanEnsureCommand(object parameter)
@@ -173,7 +173,7 @@ namespace Com.FirmLib.UI.Seller
             catch (Exception ex)
             {
 
-                MessageTip.Show(ex.Message);
+               MessageTipEx.Show(ex);
             }
 
         }
@@ -207,7 +207,7 @@ namespace Com.FirmLib.UI.Seller
             }
             catch (Exception ex)
             {
-                MessageTip.Show(ex.Message);
+                MessageTipEx.Show(ex);
             }
         }
         public bool CanTabChangedCommand(object parameter)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinAddLossProductType.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinMultiProductTypeSelector.xaml.cs

@@ -36,7 +36,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerBaseInfo.xaml.cs

@@ -35,7 +35,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 14 - 2
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerInfo.xaml

@@ -210,14 +210,26 @@
                             <Setter Property="Template">
                                 <Setter.Value>
                                     <ControlTemplate TargetType="{x:Type ListBoxItem}">
-                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5">
+                                        <Border BorderThickness="1"  BorderBrush="Black" Margin="5" Padding="5" fw:MaskOptions.IsManualHide="true" fw:MaskOptions.IsShow="{Binding IsLoading}">
+<fw:MaskOptions.MaskTemplate>
+                                            <ControlTemplate>
+                                                <Border Background="Gray" Opacity="0.5">
+                                                    <ProgressBar  VerticalAlignment="Center" Margin="5" IsIndeterminate="True"></ProgressBar>
+                                                </Border>
+                                            </ControlTemplate>
+                                        </fw:MaskOptions.MaskTemplate>
+
                                             <Grid Width="150" Height="80" >
                                                 <Grid.RowDefinitions>
                                                     <RowDefinition></RowDefinition>
                                                     <RowDefinition Height="Auto"></RowDefinition>
                                                 </Grid.RowDefinitions>
                                                 <StackPanel Orientation="Vertical" Grid.Row="0">
-                                                    <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                    <Grid>
+                                                        <TextBlock Margin="5,0,5,0" Name="TxtName" FontSize="20" Text="{Binding ProjectLocalName}"></TextBlock>
+                                                         <Button  HorizontalAlignment="Right" VerticalAlignment="Center" Content="刷新" Style="{StaticResource ResourceKey={x:Static uc:CommonStyles.LinkButtonKey}}" Command="{Binding Data.Commands.RefreshCommand,Source={StaticResource ResourceKey=DATA}}" CommandParameter="{Binding}" ></Button>
+                                                    </Grid>
+                                                 
                                                     <StackPanel Orientation="Horizontal">
                                                         <TextBlock Margin="5,0,5,0"  Text="涉及供应合同:"  />
                                                         <TextBlock Margin="5,0,5,0" x:Name="TXTN" Text="{Binding ContractCount}" TextDecorations="Underline"/>

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerInfo.xaml.cs

@@ -41,7 +41,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             this.Title = this.m_Vm.Name;
         }
         #region 界面关联事件

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerProjectContract.xaml.cs

@@ -40,7 +40,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSellerProjectInfo.xaml.cs

@@ -38,7 +38,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化列表数据
-            m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
             //加载醒目信息
             this.Title = this.m_Vm.ProjectName;
         }

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSingleProductTypeSelector.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 2 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyAssetCreater.xaml.cs

@@ -9,6 +9,7 @@
 
 using System;
 using System.Windows;
+using System.Windows.Controls;
 using FWindSoft.Wpf;
 
 namespace Com.FirmLib.UI.Seller
@@ -33,7 +34,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+            TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyAssetSelector.xaml.cs

@@ -34,7 +34,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+           TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 1 - 1
MBI/FirmLib/Com.FirmLib.UI/Seller/WinSupplyContractNoSelector.xaml.cs

@@ -33,7 +33,7 @@ namespace Com.FirmLib.UI.Seller
         protected override void LoadData(LoadParameter parameter)
         {
             //初始化数据
-            this.m_Vm.Init(parameter);
+             TryCatchWrapper.Handled(() => this.m_Vm.Init(parameter));
         }
         #region 界面关联事件
         private void btnOK_Click(object sender, RoutedEventArgs e)

+ 150 - 71
MBI/FirmLib/Com.FirmLib/BaseHttpBll.cs

@@ -7,6 +7,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Com.FirmLib.Common;
 using FirmHttpDao;
+using FWindSoft;
 using FWindSoft.Net.Http;
 using Newtonsoft.Json.Linq;
 
@@ -19,12 +20,16 @@ namespace Com.FirmLib
     {
         protected string m_ExtensionUri;
         protected HttpClient m_HttpClient;
+
         #region 错误机制
+
         /// <summary>
         /// 当前错误信息
         /// </summary>
         public string ErrorMessage { get; set; }
+
         #endregion
+
         #region 地址信息相关
 
         /// <summary>
@@ -35,6 +40,7 @@ namespace Com.FirmLib
         {
             return BllHttpSetting.Instance.EndUri;
         }
+
         /// <summary>
         /// 获取创建组
         /// </summary>
@@ -43,6 +49,7 @@ namespace Com.FirmLib
         {
             return BllHttpSetting.Instance.InsertKey();
         }
+
         /// <summary>
         /// 获取删除组
         /// </summary>
@@ -51,6 +58,7 @@ namespace Com.FirmLib
         {
             return BllHttpSetting.Instance.DeleteKey();
         }
+
         /// <summary>
         /// 获取更新组
         /// </summary>
@@ -59,6 +67,7 @@ namespace Com.FirmLib
         {
             return BllHttpSetting.Instance.UpdateKey();
         }
+
         /// <summary>
         /// 获取查询组
         /// </summary>
@@ -67,7 +76,9 @@ namespace Com.FirmLib
         {
             return BllHttpSetting.Instance.SearchKey();
         }
+
         #endregion
+
         public BaseHttpBll(string extensionUri)
         {
             Init(extensionUri);
@@ -78,35 +89,12 @@ namespace Com.FirmLib
             this.m_ExtensionUri = extensionUri;
         }
 
-        protected static void HandlerError(HttpResponseMessage responseMessage)
-        {
-            if (responseMessage.StatusCode != HttpStatusCode.OK)
-            {
-                StringBuilder builder = new StringBuilder();
-                builder.Append(string.Format("StatusCode:{0}", (int)responseMessage.StatusCode));
-                builder.AppendLine();
-                builder.Append(string.Format("Url:{0}", responseMessage.RequestMessage.RequestUri));
-                //var content = responseMessage.RequestMessage.Content;
-                //var input = content.ReadAsStringAsync();
-               
-                //builder.Append(string.Format("input:{0}", input.Result));
-                throw new ApplicationException(builder.ToString());
-            }
-               
-        }
-        protected void HandlerError(Task<HttpResponseMessage> result)
-        {
-            try
-            {
-                HandlerError(result.Result);
 
-            }
-            catch (Exception ex)
-            {
+        //protected void HandlerError(Task<HttpResponseMessage> result)
+        //{
+        //    HandlerError(result.Result);
+        //}
 
-                //throw new ApplicationException(string.Format("失败:{0}", ex.InnerException));
-            }
-        }
         protected virtual HttpClient CreateHttpClient()
         {
             //if (m_HttpClient != null)
@@ -114,6 +102,7 @@ namespace Com.FirmLib
             //return m_HttpClient = HttpClientManager.CreateClient();// new HttpClient() { BaseAddress = new Uri(GetEndUri()) };
             return HttpClientManager.CreateClient();
         }
+
         /// <summary>
         /// 获取操作的api
         /// </summary>
@@ -123,86 +112,176 @@ namespace Com.FirmLib
             return this.BaseEndUri() + this.m_ExtensionUri;
         }
 
+        #region 捕获业务处理返回消息
+
+        protected void CatchErrorMessage(JObject jobject)
+        {
+            PostResult p = PostResult.CreatePostResult(jobject);
+            this.ErrorMessage = p.ResultMessage;
+        }
+
+        #endregion
+
         #region 基础命令封装
 
-        public Task<HttpResponseMessage> PostJsonAsync(Uri requeUri, JObject jobject)
+        public string PostJsonAsync(Uri requeUri, JObject jobject)
         {
-            var client = CreateHttpClient();
-            return  client.PostJosnAsync(requeUri, jobject);
+            RequestInfo request = new RequestInfo(requeUri.ToString(), jobject);
+            try
+            {
+                #region 发送请求
+                var client = CreateHttpClient();
+                var response = client.PostJosnAsync(requeUri, jobject);
+                #endregion
+                return HandlerTaskResponse(response,request);
+            }
+            catch (Exception e)
+            {
+                throw;
+            }        
         }
-        public Task<HttpResponseMessage> PostJsonAdd(JObject jobject)
+
+        public string PostJsonAdd(JObject jobject)
         {
-            
-            return PostJsonAsync(new Uri(GetEndUri()+CreateKey(),UriKind.RelativeOrAbsolute) , jobject);
+            return PostJsonAsync(new Uri(GetEndUri() + CreateKey(), UriKind.RelativeOrAbsolute), jobject);
         }
-        public Task<HttpResponseMessage> PostJsonUpdate( JObject jobject)
+
+        public string PostJsonUpdate(JObject jobject)
         {
             return PostJsonAsync(new Uri(GetEndUri() + UpdateKey(), UriKind.RelativeOrAbsolute), jobject);
         }
-        public Task<HttpResponseMessage> PostJsonDelete(JObject jobject)
+
+        public string PostJsonDelete(JObject jobject)
         {
             return PostJsonAsync(new Uri(GetEndUri() + DeleteKey(), UriKind.RelativeOrAbsolute), jobject);
         }
-        public Task<HttpResponseMessage> PostJsonQuery( JObject jobject)
+
+        public string PostJsonQuery(JObject jobject)
         {
             return PostJsonAsync(new Uri(GetEndUri() + QueryKey(), UriKind.RelativeOrAbsolute), jobject);
         }
-        public Task<HttpResponseMessage> PostJsonQuery()
+
+        public string PostJsonQuery()
         {
             return PostJsonAsync(new Uri(GetEndUri() + QueryKey(), UriKind.RelativeOrAbsolute), new JObject());
         }
+
+        #endregion
+
+
+        #region 业务结果处理
+        /// <summary>
+        /// 业务结果处理
+        /// </summary>
+        /// <param name="responseResult"></param>
+        /// <param name="success"></param>
+        /// <param name="fail"></param>
+        /// <returns></returns>
+        public static bool HandlerResult(string responseResult, Action<JObject> success, Action<JObject> fail)
+        {
+            JObject result = JObject.Parse(responseResult);
+            PostResult p = PostResult.CreatePostResult(result);
+            if (p.IsSuccess)
+            {
+                success?.Invoke(result);
+                return true;
+            }
+
+            fail?.Invoke(result);
+            return false;
+        }
+
+        public static bool HandlerResult(string responseResult, Action<JObject> success)
+        {
+            return HandlerResult(responseResult, success, null);
+        }
+
+        public static bool HandlerResult(string responseResult)
+        {
+            return HandlerResult(responseResult, null, null);
+        }
+
         #endregion
 
 
-        #region 静态关联方法
-        public static bool HandlerResult(Task<HttpResponseMessage> taskResponse,Action<JObject> success,Action<JObject> fail)
+
+        #region 网络异常错误处理
+
+        /// <summary>
+        /// 处理错误返回消息
+        /// </summary>
+        /// <param name="responseMessage"></param>
+        /// <param name="requestInfo"></param>
+        public static void HandlerError(HttpResponseMessage responseMessage, RequestInfo requestInfo)
+        {
+            if (responseMessage.StatusCode != HttpStatusCode.OK)
+            {
+                StringBuilder builder = new StringBuilder();
+                builder.Append(string.Format("StatusCode:{0}", (int) responseMessage.StatusCode));
+                builder.AppendLine();
+                builder.Append(string.Format("Url:{0}", responseMessage.RequestMessage.RequestUri));
+                HttpApiException httpEx = new HttpApiException(builder.ToString());
+                if (requestInfo != null)
+                {
+                    httpEx.RequestUrl = requestInfo.Head;
+                    httpEx.RequestContent = requestInfo.Content;
+                }
+
+                throw httpEx;
+            }
+
+        }
+
+        /// <summary>
+        /// 处理返回消息任务
+        /// </summary>
+        /// <param name="ts"></param>
+        /// <param name="requestInfo"></param>
+        /// <returns></returns>
+        public static string HandlerTaskResponse(Task<HttpResponseMessage> ts, RequestInfo requestInfo)
         {
             try
             {
-                if (taskResponse.Result.IsSuccessStatusCode)
+                var responseResult = ts.Result;
+                if (responseResult.IsSuccessStatusCode)
                 {
-                    var strContent = taskResponse.Result.Content.ReadAsStringAsync();
-                    JObject result = JObject.Parse(strContent.Result);
-                    PostResult p = PostResult.CreatePostResult(result);
-                    if (p.IsSuccess)
-                    {
-                        success?.Invoke(result);
-                        return true;
-                    }
-                    fail?.Invoke(result);
-                    return false;
+                    var strContent = responseResult.Content.ReadAsStringAsync();
+                    return strContent.Result;
                 }
-                HandlerError(taskResponse.Result);
-                return false;
+                else
+                {
+                    HandlerError(responseResult, requestInfo);
+                }
+
+                return string.Empty;
             }
-            catch(Exception e)
+            catch (Exception e)
             {
-                var resultE = e.InnerException;
-                var temp = e.GetBaseException();     
-                if (temp != null)
+                #region 异常处理
+                var useE = e;
+                while (useE.InnerException != null)
+                {
+                    useE = useE.InnerException;
+                }
+
+                HttpApiException httpEx = new HttpApiException(useE.Message, useE);
+                var info = requestInfo;
+                if (info != null)
                 {
-                    resultE = temp.InnerException??temp;
+                    httpEx.RequestUrl = info.Head;
+                    httpEx.RequestContent = info.Content;
                 }
-                //HttpClientManager.Clear();
-                throw resultE;
-                //return false;
+
+                throw httpEx;
+
+                #endregion
             }
             finally
             {
 
-                //taskResponse.Result.Dispose();
             }
-           
-        }     
-        public static bool HandlerResult(Task<HttpResponseMessage> taskResponse, Action<JObject> success)
-        {
-           return HandlerResult(taskResponse, success, null);
-        }
-        public static bool HandlerResult(Task<HttpResponseMessage> taskResponse)
-        {
-            return HandlerResult(taskResponse, null, null);
+            return string.Empty;
         }
         #endregion
-
     }
 }

+ 4 - 2
MBI/FirmLib/Com.FirmLib/Bll/EquipmentFamilyBll.cs

@@ -35,8 +35,10 @@ namespace Com.FirmLib.Bll
             var items = new List<EquipmentFamilyItem>();
             string tempUrlExtension = @"/dict/query/equipment_family";
             var client = CreateHttpClient();
-            var result = client.GetAsync(new Uri(GetEndUri() + tempUrlExtension, UriKind.RelativeOrAbsolute));
-             HandlerResult(result, (jo) =>
+            var useUri = GetEndUri() + tempUrlExtension;
+            var result = client.GetAsync(new Uri(useUri, UriKind.RelativeOrAbsolute));
+             var stringResult = HandlerTaskResponse(result, new RequestInfo(useUri));
+             HandlerResult(stringResult, (jo) =>
              {
                  var listStr = jo["Content"].ToString();
                  items = JsonConvert.DeserializeObject<List<EquipmentFamilyItem>>(listStr);

+ 4 - 2
MBI/FirmLib/Com.FirmLib/Bll/EquipmentInfoPointBll.cs

@@ -44,7 +44,8 @@ namespace Com.FirmLib.Bll
             jObject.Add("is_all", "1");
             HttpClient client = HttpClientManager.CreateClient();
             var result = client.PostJosnAsync(new Uri(url, UriKind.RelativeOrAbsolute), jObject);
-            var flag = HandlerResult(result, 
+            var stringResult = HandlerTaskResponse(result, new RequestInfo(url,jObject));
+            var flag = HandlerResult(stringResult, 
                 (jo) => {
                     var content = jo["Content"];
                     foreach (JObject subj in content)
@@ -83,7 +84,8 @@ namespace Com.FirmLib.Bll
 
             HttpClient client = HttpClientManager.CreateClient();
             var result = client.GetAsync(new Uri(url, UriKind.RelativeOrAbsolute));
-            var flag = HandlerResult(result,
+             var stringResult = HandlerTaskResponse(result, new RequestInfo(url));
+            var flag = HandlerResult(stringResult,
                 (jo) => {
                     var content = jo["Content"];
                     foreach (JObject subj in content)

+ 4 - 2
MBI/FirmLib/Com.FirmLib/Bll/FileBll.cs

@@ -80,7 +80,8 @@ namespace Com.FirmLib.Bll
             using (MemoryStream stream = new MemoryStream(bytes))
             {
                 var result = client.PostAsync(new Uri(builder.ToString(), UriKind.RelativeOrAbsolute), new StreamContent(stream));
-                flag = HandlerResult(result, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
+                  var stringResult = HandlerTaskResponse(result, new RequestInfo(builder.ToString()));
+                flag = HandlerResult(stringResult, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
             }
 
 
@@ -139,7 +140,8 @@ namespace Com.FirmLib.Bll
             using (MemoryStream stream = new MemoryStream(bytes))
             {
                 var result = client.PostAsync(new Uri(builder.ToString(), UriKind.RelativeOrAbsolute), new StreamContent(stream));
-                flag = HandlerResult(result, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
+                var stringResult = HandlerTaskResponse(result, new RequestInfo(builder.ToString()));
+                flag = HandlerResult(stringResult, null, (jo) => { this.ErrorMessage = jo["ResultMsg"].ToString(); });
             }
 
 

+ 2 - 17
MBI/FirmLib/Com.FirmLib/Bll/MaintainerBll.cs

@@ -30,23 +30,8 @@ namespace Com.FirmLib.Bll
             JObject jObject = new JObject();
             jObject.Add("name", item.Name);
             jObject.Add("website", item.Website);
-            var postResult = PostJsonAdd(jObject);
-            //HandlerResult(result, (jo) => { item.Id = jo["id"].ToString(); });
-            if (postResult.Result.IsSuccessStatusCode)
-            {
-                var strContent = postResult.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    item.Id = result["id"].ToString();
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(postResult.Result);
-            return false;
+            var result = PostJsonAdd(jObject);
+            return HandlerResult(result, (jo) => { item.Id = jo["id"].ToString(); }, jo => CatchErrorMessage(jo));   
         }
 
         /// <summary>

+ 12 - 59
MBI/FirmLib/Com.FirmLib/Bll/ManufacturerBll.cs

@@ -25,22 +25,8 @@ namespace Com.FirmLib.Bll
             JObject jObject=new JObject();
             jObject.Add("name",item.Name);
             //jObject.Add("url", "www.saaa.cn");//假的
-            var postResult = PostJsonAdd(jObject);              
-            if (postResult.Result.IsSuccessStatusCode)
-            {
-                var strContent = postResult.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    item.Id = result["id"].ToString();
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(postResult.Result);
-            return false;
+            var result = PostJsonAdd(jObject);       
+            return HandlerResult(result, (jo) => { item.Id = jo["id"].ToString(); }, jo => CatchErrorMessage(jo));               
         }
 
         /// <summary>
@@ -79,21 +65,8 @@ namespace Com.FirmLib.Bll
             JObject jObject = new JObject();
             jObject.Add("venderId", item.Id);
             jObject.Add("name", item.Name);
-            var reault = PostJsonUpdate(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(reault.Result);
-            return false;
+            var result = PostJsonUpdate(jObject);
+            return HandlerResult(result, null, jo => CatchErrorMessage(jo));          
         }
 
         /// <summary>
@@ -105,21 +78,8 @@ namespace Com.FirmLib.Bll
         {
             JObject jObject = new JObject();
             jObject.Add("venderId", id);
-            var reault = PostJsonDelete(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(reault.Result);
-            return false;
+            var result = PostJsonDelete(jObject);
+            return HandlerResult(result, null, jo => CatchErrorMessage(jo));       
         }
 
 
@@ -134,20 +94,13 @@ namespace Com.FirmLib.Bll
             List<ProjectItem> items = new List<ProjectItem>();
             JObject jObject = new JObject();
             jObject.Add("venderId", manufacturerId);
-            var reault = PostJsonAsync(new Uri(GetEndUri() + uri, UriKind.RelativeOrAbsolute), jObject);
-            if ( reault.Result.IsSuccessStatusCode)
+            var result = PostJsonAsync(new Uri(GetEndUri() + uri, UriKind.RelativeOrAbsolute), jObject);
+             HandlerResult(result, (jo) =>
             {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    var listStr = result["content"].ToString();
-                    return JsonConvert.DeserializeObject<List<ProjectItem>>(listStr);
-                }
-                return items;
-            }
-            HandlerError(reault);
+                var listStr = jo["content"].ToString();
+                items= JsonConvert.DeserializeObject<List<ProjectItem>>(listStr);
+            }, jo => CatchErrorMessage(jo));
+
             return items;
         }
 

+ 12 - 61
MBI/FirmLib/Com.FirmLib/Bll/ProductBll.cs

@@ -31,22 +31,8 @@ namespace Com.FirmLib.Bll
             jObject.Add("brandId", item.BrandId);
             jObject.Add("name", item.Name);
             jObject.Add("eqFamily", item.FamilyCode);
-            var reault = PostJsonAdd(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    item.Id = result["id"].ToString();
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(reault.Result);
-            return false;
+            var result = PostJsonAdd(jObject);
+            return HandlerResult(result, (jo) => { item.Id = jo["id"].ToString(); }, jo => CatchErrorMessage(jo));        
         }
 
         /// <summary>
@@ -60,20 +46,12 @@ namespace Com.FirmLib.Bll
             JObject jObject = new JObject ();
             jObject.Add("brandId", brandId);
             jObject.Add("orderDesc", true);
-            var reault = PostJsonQuery(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    var listStr = result["content"].ToString();
-                    return JsonConvert.DeserializeObject<List<ProductItem>>(listStr);
-                }
-                return items;
-            }
-            HandlerError(reault);
+            var result = PostJsonQuery(jObject);
+             HandlerResult(result, (jo) =>
+             {
+                 var listStr = jo["content"].ToString();
+                 items=JsonConvert.DeserializeObject<List<ProductItem>>(listStr);
+             }, jo => CatchErrorMessage(jo));        
             return items;
         }
         /// <summary>
@@ -89,21 +67,8 @@ namespace Com.FirmLib.Bll
             jObject.Add("venderId", item.ManufacturerId);
             jObject.Add("name", item.Name);
             jObject.Add("eqFamily", item.FamilyCode);
-            var reault = PostJsonUpdate(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-            HandlerError(reault.Result);
-            return false;
+            var result = PostJsonUpdate(jObject);
+            return HandlerResult(result,null,jo => CatchErrorMessage(jo));              
         }
 
         /// <summary>
@@ -117,22 +82,8 @@ namespace Com.FirmLib.Bll
             jObject.Add("productId", item.Id);
             jObject.Add("brandId", item.Id);
             jObject.Add("venderId", item.ManufacturerId);
-            var reault = PostJsonDelete(jObject);
-            if (reault.Result.IsSuccessStatusCode)
-            {
-                var strContent = reault.Result.Content.ReadAsStringAsync();
-                JObject result = JObject.Parse(strContent.Result);
-                PostResult p = PostResult.CreatePostResult(result);
-                if (p.IsSuccess)
-                {
-                    return true;
-                }
-                ErrorMessage = p.ResultMessage;
-                return false;
-            }
-           
-            HandlerError(reault.Result);
-            return false;
+            var result = PostJsonDelete(jObject);
+            return HandlerResult(result,null,jo => CatchErrorMessage(jo));               
         }
     }
 }

+ 1 - 22
MBI/FirmLib/Com.FirmLib/Bll/ProductTypeBll.cs

@@ -93,27 +93,6 @@ namespace Com.FirmLib.Bll
             var result = PostJsonDelete(jObject);
             return HandlerResult(result, null, (jo) => { this.ErrorMessage = jo["resultMsg"].ToString(); });
         }
-        /// <summary>
-        /// 获取产品类型相关联厂商品牌信息
-        /// </summary>
-        /// <param name="productTypeId">查找类型的关联信息</param>
-        /// <returns></returns>
-        public ProductTypeDetailItem GetProductTypeVender(string productTypeId)
-        {
-            List<ProductTypeDetailItem> items = new List<ProductTypeDetailItem>();
-            JObject jObject = new JObject();
-            JArray jArray = new JArray();
-            jArray.Add(productTypeId);
-            jObject.Add("specificationId", jArray);
-            string tempUrlExtension = @"/query_vender";
-            var client = CreateHttpClient();
-            var result = client.PostJosnAsync(new Uri(GetEndUri() + tempUrlExtension, UriKind.RelativeOrAbsolute),jObject);
-            HandlerResult(result, (jo) =>
-            {
-                var listStr = jo["content"]?.ToString()??string.Empty;
-                items = JsonConvert.DeserializeObject<List<ProductTypeDetailItem>>(listStr);
-            });
-            return items.FirstOrDefault(); 
-        }
+      
     }
 }

+ 2 - 1
MBI/FirmLib/Com.FirmLib/Bll/ProjectBll.cs

@@ -86,7 +86,8 @@ namespace Com.FirmLib.Bll
             var items = new List<PlatformProjectItem>();
             HttpClient client = HttpClientManager.CreateClient();
             var result = client.GetAsync(new Uri(url, UriKind.RelativeOrAbsolute));
-            HandlerResult(result, (jo) =>
+            var stringResult = HandlerTaskResponse(result, new RequestInfo(url));
+            HandlerResult(stringResult, (jo) =>
             {
                 var listStr = jo["Content"].ToString();
                 items = JsonConvert.DeserializeObject<List<PlatformProjectItem>>(listStr);

+ 2 - 0
MBI/FirmLib/Com.FirmLib/Com.FirmLib.csproj

@@ -123,6 +123,8 @@
     <Compile Include="FileUrlValidate.cs" />
     <Compile Include="HttpClientManager.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RequestInfo.cs" />
+    <Compile Include="ResponseRelation.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config">

+ 29 - 0
MBI/FirmLib/Com.FirmLib/RequestInfo.cs

@@ -0,0 +1,29 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:RequestInfo
+ * 作者:xulisong
+ * 创建时间: 2018/12/19 14:54:53
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Com.FirmLib
+{
+    public class RequestInfo
+    {
+        public RequestInfo(string head)
+        {
+            this.Head = head;
+        }
+        public RequestInfo(string head,object content):this(head)
+        {
+            this.Content = content;
+        }
+        public string Head { get; set; }
+        public object Content { get; set; }
+    }
+}

+ 116 - 0
MBI/FirmLib/Com.FirmLib/ResponseRelation.cs

@@ -0,0 +1,116 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:ResponseRelation
+ * 作者:xulisong
+ * 创建时间: 2018/12/19 17:25:01
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using System.Timers;
+
+namespace Com.FirmLib
+{
+    public class ResponseRelationManager
+    {
+        public readonly static ResponseRelationManager Current = new ResponseRelationManager();
+        /// <summary>
+        /// 枷锁对象
+        /// </summary>
+        private List<ResponseRelation> Data { get; set; }
+        public ResponseRelationManager()
+        {
+            Data = new List<ResponseRelation>();
+        }
+        private bool IsClearing { get; set; }
+        public void ClearNoAlived()
+        {
+            if (IsClearing)
+                return;
+            lock (this)
+            {
+                try
+                {
+                    IsClearing = true;
+                    for (int i = Data.Count - 1; i > -1; i--)
+                    {
+                        var relation = Data[i];
+                        if (relation == null)
+                            continue;
+                        if (!relation.Key.TryGetTarget(out Task<HttpResponseMessage> reference) || reference == null)
+                        {
+                            Data.RemoveAt(i);
+                        }
+                    }
+                }
+                finally
+                {
+                     IsClearing = false;
+                }
+            }     
+        }
+
+        public void Add(Task<HttpResponseMessage> tr, RequestInfo requestInfo)
+        {
+            try
+            {
+                lock (this)
+                {
+                    Data.Add(new ResponseRelation(tr, requestInfo));
+                }
+
+                if (Data.Count > 5)
+                {
+                    Task.Run(() => { ClearNoAlived(); });
+
+                }
+            }
+            catch (Exception)
+            {
+
+            }
+        }
+
+        public RequestInfo GetValue(Task<HttpResponseMessage> tr)
+        {
+            try
+            {
+                RequestInfo result = null;
+                for (int i = Data.Count - 1; i > -1; i--)
+                {
+                    var relation = Data[i];
+                    if (!relation.Key.TryGetTarget(out Task<HttpResponseMessage> reference) || reference == null)
+                    {
+                        Data.RemoveAt(i);
+                    }
+                    else if (reference == tr)
+                    {
+                        result = relation.Value;
+                    }
+                }
+                return result;
+            }
+            catch (Exception)
+            {
+
+            }
+            return null;
+        }
+    }
+
+    public class ResponseRelation
+    {
+       
+        public ResponseRelation(Task<HttpResponseMessage> tr, RequestInfo requestInfo)
+        {
+            Key = new WeakReference<Task<HttpResponseMessage>>(tr);
+            Value = requestInfo;
+        }
+        public WeakReference<Task<HttpResponseMessage>> Key { get;private set; }
+        public RequestInfo Value { get;private set; }
+    }
+}

+ 3 - 35
MBI/SAGA.GplotRelationComputerManage/ReadSpaceCommand.cs

@@ -4,7 +4,6 @@ using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Text.RegularExpressions;
-using System.Threading;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Mechanical;
 using Newtonsoft.Json.Linq;
@@ -102,8 +101,7 @@ namespace SAGA.GplotRelationComputerManage
                 if (File.Exists(fileInfo))
                 {
                     var uiApp = ExternalDataWrapper.Current.UiApp.Application;
-                    var doc = uiApp.OpenDocumentFile(fileInfo);
-    
+                    var doc = uiApp.OpenDocumentFile(fileInfo);   
                     ComputerSpace(doc);
                 }
             }
@@ -180,8 +178,7 @@ namespace SAGA.GplotRelationComputerManage
                 if (jo != null)
                 {
                     localName = GetValue(jo, "RoomLocalName");
-                    spaceType=GetValue(jo, "RoomFuncType");
-                  
+                    spaceType=GetValue(jo, "RoomFuncType");                
                 }
                
                 sgSpace = new SgSpace()
@@ -354,7 +351,6 @@ namespace SAGA.GplotRelationComputerManage
             var datas = eleDatas.ToDictionary(t => t.Key, t => t.ToList()).ToList();
             for (int i = datas.Count - 1; i >= 0; i--)
             {
-                i = Math.Min(datas.Count-1, i);
                 var d1 = datas[i];
                 var e1 = d1.Value.FirstOrDefault().EdgeElement;
 
@@ -443,7 +439,6 @@ namespace SAGA.GplotRelationComputerManage
 
             return Line.CreateBound(startPoint, endPoint);
         }
-
         /// <summary>
         /// 判断当前两个空间是否有门窗
         /// </summary>
@@ -478,34 +473,7 @@ namespace SAGA.GplotRelationComputerManage
             return spaceRelated;
         }
 
-        /// <summary>
-        /// 判断当前两个空间是否有门窗
-        /// </summary>
-        /// <param name="wall"></param>
-        /// <param name="curve1"></param>
-        /// <param name="curve2"></param>
-        /// <returns></returns>
-        private FamilyInstance JudgeIsHaveDoor(Element wall, Curve curve1, Curve curve2)
-        {
-            var wallId = wall.Id;
-            var wallWidth = (wall as Wall)?.WallType.Width;
-
-            var z = curve1.StartPoint().Z;
-
-            var doors = m_doors.Where(t => t.Host.Id.IsEqual(wallId));
-
-            Predicate<XYZ> isHost = (point) =>
-            {
-                point = point.NewZ(z);
-                //向两个线上做投影
-                var point1 = curve1.GetProjectPt(point, false);
-                var point2 = curve2.GetProjectPt(point, false);
-                //定位点到两个投影的必须小于墙厚
-                return (point - point1).GetLength() < wallWidth && (point - point2).GetLength() < wallWidth;
-            };
-
-            return doors.FirstOrDefault(t => isHost(t.GetLocationPoint()));
-        }
+       
 
 
         /// <summary>

+ 5 - 0
MBI/SAGA.GplotRelationComputerManage/SAGA.GplotRelationComputerManage.csproj

@@ -30,6 +30,10 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="FWindSoft, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Dlls\FirmLibDll\FWindSoft.dll</HintPath>
+    </Reference>
     <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\Dlls\Newtonsoft.Json.dll</HintPath>
@@ -104,6 +108,7 @@
     <Compile Include="RevitSystemParse\Handler\SystemParseSetting.cs" />
     <Compile Include="RevitSystemParse\StartElementsManager.cs" />
     <Compile Include="SpaceEdgeInfo.cs" />
+    <Compile Include="SpaceRelation\FloorSpaceItems.cs" />
     <Compile Include="SpaceRelation\SpaceComputerContext.cs" />
     <Compile Include="SpaceRelation\SpaceComputerHandler.cs" />
     <Compile Include="SpaceRelation\SpaceComputerManager.cs" />

+ 238 - 0
MBI/SAGA.GplotRelationComputerManage/SpaceRelation/FloorSpaceItems.cs

@@ -0,0 +1,238 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:FloorSpaceItems
+ * 作者:xulisong
+ * 创建时间: 2018/12/21 14:41:27
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using FWindSoft.Data;
+using SAGA.DotNetUtils.Extend;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.GplotRelationComputerManage.SpaceRelation
+{
+    /// <summary>
+    ///模型解析对应的楼层空间数据
+    /// </summary>
+    public  class FloorSpaceItems
+    {
+        #region 构造函数
+        /// <summary>
+        /// 初始化解析类
+        /// </summary>
+        /// <param name="doc"></param>
+        public FloorSpaceItems(Document doc)
+        {
+            Document = doc;
+            Doors = new List<FamilyInstance>();
+            Windows = new List<FamilyInstance>();
+            Spaces = new List<Space>();
+        } 
+        #endregion
+
+        #region 属性相关
+        /// <summary>
+        /// 关联模型信息
+        /// </summary>
+        public Document Document { get; private set; }
+        /// <summary>
+        /// 关联门信息
+        /// </summary>
+        public List<FamilyInstance> Doors { get; private set; }
+        /// <summary>
+        /// 关联窗体信息
+        /// </summary>
+        public List<FamilyInstance> Windows { get; private set; }
+        /// <summary>
+        /// 关联空间信息
+        /// </summary>
+        public List<Space> Spaces { get; private set; } 
+        #endregion
+
+        /// <summary>
+        /// 解析
+        /// </summary>
+        public void Parse()
+        {
+            var doc = Document;
+            Doors = doc.GetElements<FamilyInstance>(BuiltInCategory.OST_Doors);
+            Windows = doc.GetElements<FamilyInstance>(BuiltInCategory.OST_Windows);
+            Spaces = doc.GetElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>().ToList();
+            //展开空间关系数据
+            var flatSpaceItems = FlatSpaceEdges(Spaces);
+            var groupSpaces = flatSpaceItems.GroupBy(t => t.EdgeElement.Id.IntegerValue).ToList();
+            var relation = CalcCombineRelations(groupSpaces.ToList().Select(g=>g.Key).ToList());
+        }
+
+        #region 展开空间与边界的关联关系
+        /// <summary>
+        /// 展开空间与边的关系
+        /// </summary>
+        /// <param name="spaces"></param>
+        /// <returns></returns>
+        private List<SpaceEdgeInfo> FlatSpaceEdges(List<Space> spaces)
+        {
+            var lSpaces = new List<SpaceEdgeInfo>();
+            Document doc = Document;
+            foreach (var space in spaces)
+            {
+                IList<IList<BoundarySegment>> segments = space.GetBoundarySegments(new SpatialElementBoundaryOptions());
+                foreach (IList<BoundarySegment> boundarySegments in segments)
+                {
+                    foreach (var segment in boundarySegments)
+                    {
+                        //去除不能构成边的元素
+                        if (segment.ElementId.IntegerValue != -1)
+                        {
+                            Curve wallLine = null;
+                            var elem = doc.GetElement(segment.ElementId);
+                            var type = typeof(object);
+                            //这里只处理墙和分隔符,跨长度处理
+                            #region 增加关系对象
+                            if (elem is Wall wall)
+                            {
+                                wallLine = wall.Location.GetCurve();
+                                type = typeof(Wall);
+                            }
+                            else if (elem is ModelCurve modelCurve)
+                            {
+                                wallLine = modelCurve.GetCurve();
+                                type = typeof(ModelCurve);
+                            }
+                            else
+                            {
+                                continue;
+                            }
+                            Curve segCurve1 = segment.GetCurve();
+                            lSpaces.Add(new SpaceEdgeInfo()
+                            {
+                                Space = space,
+                                Edge = wallLine,
+                                SegEdge = segCurve1,
+                                EdgeElement = elem,
+                                EType = type
+                            });
+                            #endregion
+                        }
+                    }
+                }
+            }
+            return lSpaces;
+        } 
+        #endregion
+
+        #region 构件合并整合
+        /*
+        * 1、合并间距较小的构件看成一个构件关系
+        * 2、可合并构件关系为两两关系,且关系不支持传递。如a->b,b->c 不能推导出 a->c
+         * 3、在计算空间关系时,动态关联上相关id去计算空间关系
+        */
+        /// <summary>
+        /// 计算可合并关联
+        /// </summary>
+        /// <param name="ids"></param>
+        private BinaryRelationCollection<int> CalcCombineRelations(List<int> ids)
+        {
+            BinaryRelationCollection<int> relations = new BinaryRelationCollection<int>(false);
+            if (!ids.Any() || ids.Count < 2)
+                return relations;
+            var doc = Document;
+            FilteredElementCollector collectors =
+                new FilteredElementCollector(doc, ids.Select(id => new ElementId(id)).ToList());
+            var calcElements = collectors.ToElements();
+            Dictionary<int, ElementGraphicItem> tempItems = new Dictionary<int, ElementGraphicItem>();
+            for (int i = 0; i < calcElements.Count; i++)
+            {
+                var outElement = calcElements[i];
+                var outItem = GetGraphicItem(tempItems, outElement);
+                if (outItem == null)
+                {
+                    continue;
+                }
+                #region 内部循环
+                for (int j = i + 1; j < calcElements.Count; j++)
+                {
+                    var inElement = calcElements[j];
+                    var inItem = GetGraphicItem(tempItems, inElement);
+                    if (inItem == null)
+                    {
+                        continue;
+                    }
+                    if (outItem.Location.IsParallel(inItem.Location)) //平行
+                    {
+                        //间距小于两个厚度之和的一半
+                        var basePoint = outItem.Location.StartPoint();
+                        var project = inItem.Location.GetProjectPt(basePoint);
+                        var length = (basePoint - project).GetLength();
+                        if (((outItem.Width + inItem.Width) / 2.0d).IsThanEq(length))
+                        {
+                            relations.Add(new BinaryRelationItem<int>(outElement.Id.IntegerValue,
+                                outElement.Id.IntegerValue));
+                        }
+                    }
+                    #endregion
+                }
+            }
+
+            return relations;
+        }
+
+        private ElementGraphicItem GetGraphicItem(Dictionary<int, ElementGraphicItem> dic, Element ele)
+        {
+            if (dic.TryGetValue(ele.Id.IntegerValue, out ElementGraphicItem item))
+            {
+                return item;
+            }
+
+            item = ElementGraphicItem.CreateItem(ele);
+            if (item != null)
+            {
+                dic[ele.Id.IntegerValue] = item;
+            }
+            return item;
+        }
+
+        /// <summary>
+        /// 元素集合条目【内部算法使用】
+        /// </summary>
+        private class ElementGraphicItem
+        {
+            /// <summary>
+            /// 位置
+            /// </summary>
+            public Line Location { get; set; }
+            /// <summary>
+            /// 宽度
+            /// </summary>
+            public double Width { get; set; }
+            /// <summary>
+            /// 创建几何使用Item.
+            /// </summary>
+            /// <param name="element"></param>
+            /// <returns></returns>
+            public static ElementGraphicItem CreateItem(Element element)
+            {
+                double width = 0;
+                if (element is Wall wall)
+                {
+                    width = wall.WallType.GetParameterDouble(BuiltInParameter.WALL_ATTR_WIDTH_PARAM);
+                }
+
+                Line line= element.GetLocationCurve().GetLine();
+                if (line != null)
+                {
+                    return new ElementGraphicItem() {Width = width, Location = line};
+                }
+                return null;
+            }
+        }
+
+        #endregion
+    }
+}

+ 0 - 1
MBI/SAGA.GplotRelationComputerManage/SpaceRelation/SpaceComputerContext.cs

@@ -45,7 +45,6 @@ namespace SAGA.GplotRelationComputerManage
             m_Rooms.TryGetValue(bimId, out RoomItem resultItem);
             return resultItem;
         }
-
         #endregion
     }
 }

+ 3 - 0
MBI/SAGA.GplotRelationComputerManage/SpaceRelation/SpaceComputerManager.cs

@@ -13,6 +13,9 @@ using System.Threading.Tasks;
 
 namespace SAGA.GplotRelationComputerManage
 {
+    /*
+     * 记录一些在控件计算和显示中,一些配置类的问题
+     */
     /// <summary>
     /// 空间计算管理
     /// </summary>

+ 105 - 0
MBI/SAGA.MBI/Html5Command.cs

@@ -326,4 +326,109 @@ namespace SAGA.MBI
             return true;
         }
     }
+
+    /// <summary>
+    /// 资产管理
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    [Journaling(JournalingMode.UsingCommandData)]
+    public class AssetManagerCommand : ExternalCommand
+    {
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            try
+            {
+                //http://192.168.20.86:8091/#/assetsList?projId=Pj1101080001&secret=123
+                string url = $"{MBIConst.Html5ScanLocalHost}assetsList?projId={MBIControl.ProjectCur.Id}&secret={MBIConst.ProjectSecret}";
+                var win = WinBrowser.Instance;
+                win.Show(url, "资产管理");
+                win.Height = 854;
+                win.Width = 1530;
+                win.Left = 320;
+                win.Top = 190;
+            }
+            catch (Exception e)
+            {
+                MessageShow.Show(e);
+                return Result.Cancelled;
+            }
+            return Result.Succeeded;
+        }
+
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+    }
+
+    /// <summary>
+    /// 设备管理
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    [Journaling(JournalingMode.UsingCommandData)]
+    public class EquipmentManagerCommand : ExternalCommand
+    {
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            try
+            {
+                //http://192.168.20.86:8091/#/deviceList?projId=Pj1101080001&secret=123
+                string url = $"{MBIConst.Html5ScanLocalHost}deviceList?projId={MBIControl.ProjectCur.Id}&secret={MBIConst.ProjectSecret}";
+                var win = WinBrowser.Instance;
+                win.Show(url, "资产管理");
+                win.Height = 854;
+                win.Width = 1530;
+                win.Left = 320;
+                win.Top = 190;
+            }
+            catch (Exception e)
+            {
+                MessageShow.Show(e);
+                return Result.Cancelled;
+            }
+            return Result.Succeeded;
+        }
+
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+    }
+
+    /// <summary>
+    /// 系统管理
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    [Regeneration(RegenerationOption.Manual)]
+    [Journaling(JournalingMode.UsingCommandData)]
+    public class SystemManagerCommand : ExternalCommand
+    {
+        public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            try
+            {
+                //http://192.168.20.86:8091/#/systemList?projId=Pj1101080001&secret=123
+                string url = $"{MBIConst.Html5ScanLocalHost}systemList?projId={MBIControl.ProjectCur.Id}&secret={MBIConst.ProjectSecret}";
+                var win = WinBrowser.Instance;
+                win.Show(url, "资产管理");
+                win.Height = 854;
+                win.Width = 1530;
+                win.Left = 320;
+                win.Top = 190;
+            }
+            catch (Exception e)
+            {
+                MessageShow.Show(e);
+                return Result.Cancelled;
+            }
+            return Result.Succeeded;
+        }
+
+        public override bool IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories)
+        {
+            return true;
+        }
+    }
 }

+ 55 - 26
MBI/SAGA.RevitFirmLib/Command.cs

@@ -5,15 +5,9 @@
  * ==============================================================================*/
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text.RegularExpressions;
 using System.Windows;
 using Autodesk.Revit.Attributes;
 using Autodesk.Revit.DB;
-using Autodesk.Revit.DB.ExtensibleStorage;
-using Autodesk.Revit.DB.Mechanical;
 using Autodesk.Revit.UI;
 using Com.FirmLib.UI;
 using Com.FirmLib.UI.Insuer;
@@ -22,23 +16,36 @@ using Com.FirmLib.UI.Manufacturer;
 using Com.FirmLib.UI.Seller;
 using SAGA.RevitUtils;
 using SAGA.RevitUtils.Extends;
-using SAGA.RevitUtils.Windows;
 namespace SAGA.RevitFirmLib
 {
+    public class SingleWindowCommand: ExternalCommand
+    {
+        //只在命令里单例,可能其他地方不单例
+        
+    }
+
     /// <summary>
     /// 生产厂商
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class ManufactureCommand : ExternalCommand, IExternalCommandAvailability
+    public class ManufactureCommand : SingleWindowCommand
     {
+        private static WindowSingleInstance<Window> m_WindowManager;
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-                WinFirmMain main = new WinFirmMain(new WinManufactureBaseInfo());
-                main.Title += "--生产商管理";
-                main.ShowDialog();
+                if (m_WindowManager == null)
+                {
+                    m_WindowManager = new WindowSingleInstance<Window>(() =>
+                    {
+                        WinFirmMain window = new WinFirmMain(new WinManufactureBaseInfo());
+                        window.Title += "--生产商管理";
+                        return window;
+                    });
+                }
+               m_WindowManager.Target?.Show();            
             }
             catch (Exception e)
             {
@@ -60,16 +67,23 @@ namespace SAGA.RevitFirmLib
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class SellerCommand : ExternalCommand, IExternalCommandAvailability
+    public class SellerCommand : SingleWindowCommand
     {
+         private static WindowSingleInstance<Window> m_WindowManager;
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-
-                WinFirmMain main = new WinFirmMain(new WinSellerBaseInfo());
-                main.Title += "--供应商管理";
-                main.ShowDialog();
+                if (m_WindowManager == null)
+                {
+                    m_WindowManager = new WindowSingleInstance<Window>(() =>
+                    {
+                        WinFirmMain window =  new WinFirmMain(new WinSellerBaseInfo());
+                        window.Title +=  "--供应商管理";;
+                        return window;
+                    });
+                }
+                m_WindowManager.Target?.Show();
             }
             catch (Exception e)
             {
@@ -89,20 +103,27 @@ namespace SAGA.RevitFirmLib
 
 
     /// <summary>
-    /// 维修
+    /// 维修商
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class MaintainerCommand : ExternalCommand//, IExternalCommandAvailability
+    public class MaintainerCommand : SingleWindowCommand
     {
+          private static WindowSingleInstance<Window> m_WindowManager;
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-
-                WinFirmMain main = new WinFirmMain(new WinMaintainerBaseInfo());
-                main.Title += "--维修商管理";
-                main.ShowDialog();
+                if (m_WindowManager == null)
+                {
+                    m_WindowManager = new WindowSingleInstance<Window>(() =>
+                    {
+                        WinFirmMain window = new WinFirmMain(new WinMaintainerBaseInfo());
+                        window.Title += "--维修商管理"; ;
+                        return window;
+                    });
+                }
+                m_WindowManager.Target?.Show();           
             }
             catch (Exception e)
             {
@@ -123,15 +144,23 @@ namespace SAGA.RevitFirmLib
     /// </summary>
     [Transaction(TransactionMode.Manual)]
     [Regeneration(RegenerationOption.Manual)]
-    public class InsuerCommand : ExternalCommand//, IExternalCommandAvailability
+    public class InsuerCommand : SingleWindowCommand
     {
+          private static WindowSingleInstance<Window> m_WindowManager;
         public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
         {
             try
             {
-                WinFirmMain main = new WinFirmMain(new WinInsuerBaseInfo());
-                main.Title += "--保险商管理";
-                main.ShowDialog();
+                if (m_WindowManager == null)
+                {
+                    m_WindowManager = new WindowSingleInstance<Window>(() =>
+                    {
+                        WinFirmMain window = new WinFirmMain(new WinInsuerBaseInfo());
+                        window.Title += "--保险商管理"; ;
+                        return window;
+                    });
+                }
+                m_WindowManager.Target?.Show();               
             }
             catch (Exception e)
             {