From f43970a061d3c90520b4e8f48caa17a204d9a085 Mon Sep 17 00:00:00 2001
From: 移动系统liao <liaoxujun@qq.com>
Date: 星期四, 15 八月 2024 10:19:38 +0800
Subject: [PATCH] 完供应商自主维护商品api和后台基础管理页面

---
 CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs                              |    5 
 CoreCms.Net.Repository/baifenbingfa/DistributionGoodsRepository.cs                 |  304 ++
 CoreCms.Net.IRepository/baifenbinfa/IDistributionGoodsRepository.cs                |   98 
 CoreCms.Net.Web.Admin/wwwroot/views/good/goods/index.html                          |    2 
 CoreCms.Net.IServices/baifenbingfa/IDistributionGoodsServices.cs                   |  102 
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/corecmsproducts/index.html        |    2 
 CoreCms.Net.Filter/DPremisssionFilter.cs                                           |   38 
 CoreCms.Net.Model/Entities/Good/CoreCmsGoods.cs                                    |   16 
 CoreCms.Net.Model/Entities/Good/CoreCmsGoodsCategoryExtend.cs                      |    6 
 CoreCms.Net.Model/Entities/Good/CoreCmsGoodsPartial.cs                             |   27 
 CoreCms.Net.Web.WebApi/Properties/launchSettings.json                              |    2 
 CoreCms.Net.Web.WebApi/Controllers/baifenbingfa/DistributorGoodsController.cs      |  483 +++
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/create.html     |  396 ++
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/edit.html       | 2094 +++++++++++++++
 CoreCms.Net.Web.Admin/wwwroot/views/good/goods/create.html                         |    1 
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/editShehei.html |  395 ++
 CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs                                   |    3 
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/details.html    |  764 +++++
 CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/index.html      | 1003 +++++++
 CoreCms.Net.Web.Admin/wwwroot/views/good/goods/edit.html                           |    2 
 CoreCms.Net.Services/baifenbingfa/DistributionGoodsServices.cs                     |  139 +
 CoreCms.Net.Filter/CoreCms.Net.Filter.csproj                                       |    4 
 CoreCms.Net.DTO/ComponentsDTO/GoodListDTO.cs                                       |   18 
 CoreCms.Net.Services/User/CoreCmsUserServices.cs                                   |   26 
 CoreCms.Net.Web.Admin/Controllers/baifenbingfa/DistributionGoodsController.cs      | 2033 +++++++++++++++
 CoreCms.Net.Web.WebApi/Program.cs                                                  |    2 
 26 files changed, 7,934 insertions(+), 31 deletions(-)

diff --git a/CoreCms.Net.DTO/ComponentsDTO/GoodListDTO.cs b/CoreCms.Net.DTO/ComponentsDTO/GoodListDTO.cs
index 4585ad9..2dc3796 100644
--- a/CoreCms.Net.DTO/ComponentsDTO/GoodListDTO.cs
+++ b/CoreCms.Net.DTO/ComponentsDTO/GoodListDTO.cs
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘縰sing CoreCms.Net.Model.Entities;
+using SqlSugar;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -178,5 +180,19 @@
         /// </summary>
         public string area { get; set; }
 
+
+        /// <summary>
+        /// 鍙戝竷鑰卌msUserID
+        /// </summary>		
+
+        public int? publisherId { get; set; }
+
+
+
+        /// <summary>
+        /// 瀹℃牳鐘舵��
+        /// </summary>		
+        public AuditStatusType? auditStatus { get; set; }
+
     }
 }
diff --git a/CoreCms.Net.Filter/CoreCms.Net.Filter.csproj b/CoreCms.Net.Filter/CoreCms.Net.Filter.csproj
index 9fa11ba..f041c77 100644
--- a/CoreCms.Net.Filter/CoreCms.Net.Filter.csproj
+++ b/CoreCms.Net.Filter/CoreCms.Net.Filter.csproj
@@ -1,4 +1,4 @@
-<Project Sdk="Microsoft.NET.Sdk">
+锘�<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
     <TargetFramework>net8.0</TargetFramework>
@@ -6,9 +6,11 @@
 
   <ItemGroup>
     <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
   </ItemGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\CoreCms.Net.Auth\CoreCms.Net.Auth.csproj" />
     <ProjectReference Include="..\CoreCms.Net.Caching\CoreCms.Net.Caching.csproj" />
     <ProjectReference Include="..\CoreCms.Net.Loging\CoreCms.Net.Loging.csproj" />
     <ProjectReference Include="..\CoreCms.Net.Model\CoreCms.Net.Model.csproj" />
diff --git a/CoreCms.Net.Filter/DPremisssionFilter.cs b/CoreCms.Net.Filter/DPremisssionFilter.cs
new file mode 100644
index 0000000..a3e4d82
--- /dev/null
+++ b/CoreCms.Net.Filter/DPremisssionFilter.cs
@@ -0,0 +1,38 @@
+锘縰sing CoreCms.Net.Auth.HttpContextUser;
+using CoreCms.Net.IServices.baifenbingfa;
+using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CoreCms.Net.Filter
+{
+    /// <summary>
+    /// 鍒ゆ柇鏄笉鏄緵搴斿晢鏄惁缁х画璁块棶
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
+    public class DPremisssionFilter : Attribute, IAsyncActionFilter
+    {
+
+
+       
+    
+        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
+        {
+            var _user = context.HttpContext.RequestServices.GetService<IHttpContextUser>();
+            var _BaifenbinfaService = context.HttpContext.RequestServices.GetService<IBfbfComAPIService>();
+            if (_user != null && _BaifenbinfaService != null)
+            {
+                if (!await _BaifenbinfaService.IsDictionary(_user.ID))
+                {
+                    throw new Exception("鐢ㄦ埛涓嶆槸渚涘簲鍟嗭紝鏃犳潈闄愯闂�");
+                }
+            }
+           
+            await next.Invoke();
+        }
+    }
+}
diff --git a/CoreCms.Net.IRepository/baifenbinfa/IDistributionGoodsRepository.cs b/CoreCms.Net.IRepository/baifenbinfa/IDistributionGoodsRepository.cs
new file mode 100644
index 0000000..3a4cc2c
--- /dev/null
+++ b/CoreCms.Net.IRepository/baifenbinfa/IDistributionGoodsRepository.cs
@@ -0,0 +1,98 @@
+/***********************************************************************
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 2024/7/31 14:49:41
+ *        Description: 鏆傛棤
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+
+namespace CoreCms.Net.IRepository
+{
+	/// <summary>
+    /// 鍟嗗搧琛� 宸ュ巶鎺ュ彛
+    /// </summary>
+    public interface IDistributionGoodsRepository : IBaseRepository<CoreCmsGoods>
+    {
+        #region 閲嶅啓澧炲垹鏀规煡鎿嶄綔===========================================================
+
+        /// <summary>
+        /// 閲嶅啓寮傛鎻掑叆鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> InsertAsync(CoreCmsGoods entity);
+
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> UpdateAsync(CoreCmsGoods entity);
+
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsGoods> entity);
+
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID鐨勬暟鎹�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> DeleteByIdAsync(object id);
+
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID闆嗗悎鐨勬暟鎹�(鎵归噺鍒犻櫎)
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
+
+        #endregion
+
+        #region 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�==========================================================
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        Task<List<CoreCmsGoods>> GetCaChe();
+
+        #endregion
+
+
+        /// <summary>
+        ///     閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// </summary>
+        /// <param name="predicate">鍒ゆ柇闆嗗悎</param>
+        /// <param name="orderByType">鎺掑簭鏂瑰紡</param>
+        /// <param name="pageIndex">褰撳墠椤甸潰绱㈠紩</param>
+        /// <param name="pageSize">鍒嗗竷澶у皬</param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="blUseNoLock">鏄惁浣跨敤WITH(NOLOCK)</param>
+        /// <returns></returns>
+        Task<IPageList<CoreCmsGoods>> QueryPageAsync(
+            Expression<Func<CoreCmsGoods, bool>> predicate,
+            Expression<Func<CoreCmsGoods, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+            int pageSize = 20, bool blUseNoLock = false);
+
+    }
+}
diff --git a/CoreCms.Net.IServices/baifenbingfa/IDistributionGoodsServices.cs b/CoreCms.Net.IServices/baifenbingfa/IDistributionGoodsServices.cs
new file mode 100644
index 0000000..51324b3
--- /dev/null
+++ b/CoreCms.Net.IServices/baifenbingfa/IDistributionGoodsServices.cs
@@ -0,0 +1,102 @@
+/***********************************************************************
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 2024/7/31 14:49:41
+ *        Description: 鏆傛棤
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+namespace CoreCms.Net.IServices
+{
+	/// <summary>
+    /// 鍟嗗搧琛� 鏈嶅姟宸ュ巶鎺ュ彛
+    /// </summary>
+    public interface IDistributionGoodsServices : IBaseServices<CoreCmsGoods>
+    {
+        #region 閲嶅啓澧炲垹鏀规煡鎿嶄綔===========================================================
+
+        /// <summary>
+        /// 閲嶅啓寮傛鎻掑叆鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> InsertAsync(CoreCmsGoods entity);
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> UpdateAsync(CoreCmsGoods entity);
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> UpdateAsync(List<CoreCmsGoods> entity);
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID鐨勬暟鎹�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> DeleteByIdAsync(object id);
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID闆嗗悎鐨勬暟鎹�(鎵归噺鍒犻櫎)
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
+
+        #endregion
+
+        
+        #region 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�==========================================================
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        Task<List<CoreCmsGoods>> GetCaChe();
+
+        #endregion
+
+        #region 閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// <summary>
+        ///     閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// </summary>
+        /// <param name="predicate">鍒ゆ柇闆嗗悎</param>
+        /// <param name="orderByType">鎺掑簭鏂瑰紡</param>
+        /// <param name="pageIndex">褰撳墠椤甸潰绱㈠紩</param>
+        /// <param name="pageSize">鍒嗗竷澶у皬</param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="blUseNoLock">鏄惁浣跨敤WITH(NOLOCK)</param>
+        /// <returns></returns>
+        Task<IPageList<CoreCmsGoods>> QueryPageAsync(
+            Expression<Func<CoreCmsGoods, bool>> predicate,
+            Expression<Func<CoreCmsGoods, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+            int pageSize = 20, bool blUseNoLock = false);
+
+        #endregion
+
+        /// <summary>
+        /// 鑾峰彇璇︽儏鎻�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        Task<AdminUiCallBack> QueryID(int id);
+    }
+}
diff --git a/CoreCms.Net.Model/Entities/Good/CoreCmsGoods.cs b/CoreCms.Net.Model/Entities/Good/CoreCmsGoods.cs
index 9c250fc..11bc208 100644
--- a/CoreCms.Net.Model/Entities/Good/CoreCmsGoods.cs
+++ b/CoreCms.Net.Model/Entities/Good/CoreCmsGoods.cs
@@ -275,43 +275,55 @@
         /// 瀹℃牳鐘舵��
         /// </summary>		
         [SugarColumn(ColumnDescription = "瀹℃牳鐘舵��", IsNullable = true)]
-        public AuditStatusTypoe? auditStatus { get; set; }
+        public AuditStatusType? auditStatus { get; set; }
 
         /// <summary>
         /// 瀹℃牳鏃堕棿
         /// </summary>		
         [SugarColumn(ColumnDescription = "瀹℃牳鏃堕棿", IsNullable = true)]
         public DateTime? auditTime { get; set; }
+
+
+        /// <summary>
+        /// 鎷掔粷鍘熷洜
+        /// </summary>		
+        [SugarColumn(ColumnDescription = "鎷掔粷鍘熷洜", IsNullable = true,Length =int.MaxValue)]
+        public string? auditRejectedReason { get; set; }
     }
 
     /// <summary>
     /// 瀹℃牳鐘舵�佹灇涓撅紝鐢ㄤ簬琛ㄧず涓嶅悓涓氬姟娴佺▼涓殑瀹℃牳鐘舵�併��
     /// </summary>
-    public enum AuditStatusTypoe
+    public enum AuditStatusType
     {
         /// <summary>
         /// 寰呭鏍哥姸鎬侊紝琛ㄧず瀹℃牳灏氭湭寮�濮嬨��
         /// </summary>
+        [Description("鏈鏍�")]
         Pending = 0,
 
         /// <summary>
         /// 宸叉壒鍑嗙姸鎬侊紝琛ㄧず瀹℃牳宸查�氳繃銆�
         /// </summary>
+        [Description("宸插鏍�")]
         Approved = 1,
 
         /// <summary>
         /// 宸叉嫆缁濈姸鎬侊紝琛ㄧず瀹℃牳鏈�氳繃銆�
         /// </summary>
+        [Description("宸叉嫆缁�")]
         Rejected = 2,
 
         /// <summary>
         /// 瀹℃牳杩涜涓姸鎬侊紝琛ㄧず瀹℃牳姝e湪澶勭悊涓��
         /// </summary>
+        [Description("瀹℃牳杩涜涓�")]
         InProgress = 3,
 
         /// <summary>
         /// 宸插彇娑堢姸鎬侊紝琛ㄧず瀹℃牳宸茶鍙栨秷銆�
         /// </summary>
+        [Description("鍙栨秷")]
         Cancelled = 4
     }
 }
\ No newline at end of file
diff --git a/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsCategoryExtend.cs b/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsCategoryExtend.cs
index 6ef5772..7ea3cdc 100644
--- a/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsCategoryExtend.cs
+++ b/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsCategoryExtend.cs
@@ -44,5 +44,11 @@
         [Display(Name = "鍟嗗搧鍒嗙被id")]
         [SugarColumn(ColumnDescription = "鍟嗗搧鍒嗙被id", IsNullable = true)]
         public System.Int32? goodsCategroyId { get; set; }
+
+        /// <summary>
+        /// 鍟嗗搧鍒嗙被
+        /// </summary>        
+        [Navigate(NavigateType.OneToOne, nameof(goodsCategroyId),nameof(CoreCmsGoodsCategory.id))]
+        public CoreCmsGoodsCategory? Categroy { get; set; }
     }
 }
\ No newline at end of file
diff --git a/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsPartial.cs b/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsPartial.cs
index f03f6c9..36c646c 100644
--- a/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsPartial.cs
+++ b/CoreCms.Net.Model/Entities/Good/CoreCmsGoodsPartial.cs
@@ -108,7 +108,10 @@
         ///     鍏宠仈SKU
         /// </summary>
         [SugarColumn(IsIgnore = true)]
-        public List<CoreCmsProducts> sku { get; set; } = new();
+        [Navigate(NavigateType.OneToMany, nameof(CoreCmsProducts.goodsId))]
+        public List<CoreCmsProducts> sku { get; set; }
+
+
 
         /// <summary>
         /// 鍟嗗搧瑙勬牸
@@ -243,5 +246,27 @@
         [SugarColumn(IsIgnore = true)]
         public bool isCustomizable {  get; set; }= false;
 
+
+        
+
+
+        /// <summary>
+        /// 鍟嗗搧鍒嗙被
+        /// </summary>        
+        [Navigate(NavigateType.OneToOne, nameof(goodsCategoryId))]
+        public CoreCmsGoodsCategory? goodsCategory { get; set; }
+
+        /// <summary>
+        /// 鍟嗗搧鍝佺墝
+        /// </summary>        
+        [Navigate(NavigateType.OneToOne, nameof(brandId))]
+        public CoreCmsBrand? goodsBrand { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍鍒嗙被
+        /// </summary>        
+        [Navigate(NavigateType.OneToMany, nameof(CoreCmsGoodsCategoryExtend.goodsId), nameof(id))]
+        public List<CoreCmsGoodsCategoryExtend>? CategoryExtendIds { get; set; }
+
     }
 }
\ No newline at end of file
diff --git a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
index e0665d8..fd44bea 100644
--- a/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
+++ b/CoreCms.Net.Model/Entities/Order/CoreCmsOrder.cs
@@ -577,7 +577,6 @@
         [SugarColumn(ColumnDescription = "鍘熻鍗旾D", IsNullable = true)]
         public string  oldOderId { get; set; }
 
-
-
+       
     }
 }
diff --git a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
index ecd767a..f6a7319 100644
--- a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
+++ b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
@@ -1749,6 +1749,9 @@
                         weight = pd.weight,
                         initialSales = good.initialSales,
                          areaCode = good.areaCode,
+                         publisherId= good.publisherId,
+                        auditStatus = good.auditStatus,
+
                     })
                     .With(SqlWith.NoLock)
                     .MergeTable()
@@ -1794,6 +1797,8 @@
                         points = pd.points,
                         weight = pd.weight,
                         initialSales = good.initialSales,
+                        publisherId= good.publisherId,
+                        auditStatus= good.auditStatus,
                     })
                     .MergeTable()
                     .Where(predicate)
diff --git a/CoreCms.Net.Repository/baifenbingfa/DistributionGoodsRepository.cs b/CoreCms.Net.Repository/baifenbingfa/DistributionGoodsRepository.cs
new file mode 100644
index 0000000..eba5411
--- /dev/null
+++ b/CoreCms.Net.Repository/baifenbingfa/DistributionGoodsRepository.cs
@@ -0,0 +1,304 @@
+/***********************************************************************
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 2024/7/31 14:49:41
+ *        Description: 鏆傛棤
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Caching.Manual;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.IRepository;
+using CoreCms.Net.IRepository.UnitOfWork;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+namespace CoreCms.Net.Repository
+{
+    /// <summary>
+    /// 鍟嗗搧琛� 鎺ュ彛瀹炵幇
+    /// </summary>
+    public class DistributionGoodsRepository : BaseRepository<CoreCmsGoods>, IDistributionGoodsRepository
+    {
+        private readonly IUnitOfWork _unitOfWork;
+        public DistributionGoodsRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
+        {
+            _unitOfWork = unitOfWork;
+        }
+
+       #region 瀹炵幇閲嶅啓澧炲垹鏀规煡鎿嶄綔==========================================================
+
+        /// <summary>
+        /// 閲嶅啓寮傛鎻掑叆鏂规硶
+        /// </summary>
+        /// <param name="entity">瀹炰綋鏁版嵁</param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> InsertAsync(CoreCmsGoods entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var bl = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync() > 0;
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
+
+            return jm;
+        }
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsGoods entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await DbClient.Queryable<CoreCmsGoods>().In(entity.id).SingleAsync();
+            if (oldModel == null)
+            {
+            jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+            return jm;
+            }
+            //浜嬬墿澶勭悊杩囩▼寮�濮�
+        	oldModel.id = entity.id;
+            oldModel.bn = entity.bn;
+            oldModel.name = entity.name;
+            oldModel.brief = entity.brief;
+            oldModel.image = entity.image;
+            oldModel.images = entity.images;
+            oldModel.video = entity.video;
+            oldModel.productsDistributionType = entity.productsDistributionType;
+            oldModel.goodsCategoryId = entity.goodsCategoryId;
+            oldModel.goodsTypeId = entity.goodsTypeId;
+            oldModel.goodsSkuIds = entity.goodsSkuIds;
+            oldModel.goodsParamsIds = entity.goodsParamsIds;
+            oldModel.brandId = entity.brandId;
+            oldModel.isNomalVirtual = entity.isNomalVirtual;
+            oldModel.isMarketable = entity.isMarketable;
+            oldModel.unit = entity.unit;
+            oldModel.intro = entity.intro;
+            oldModel.spesDesc = entity.spesDesc;
+            oldModel.parameters = entity.parameters;
+            oldModel.commentsCount = entity.commentsCount;
+            oldModel.viewCount = entity.viewCount;
+            oldModel.buyCount = entity.buyCount;
+            oldModel.uptime = entity.uptime;
+            oldModel.downtime = entity.downtime;
+            oldModel.sort = entity.sort;
+            oldModel.labelIds = entity.labelIds;
+            oldModel.newSpec = entity.newSpec;
+            oldModel.openSpec = entity.openSpec;
+            oldModel.createTime = entity.createTime;
+            oldModel.updateTime = entity.updateTime;
+            oldModel.isRecommend = entity.isRecommend;
+            oldModel.isHot = entity.isHot;
+            oldModel.isDel = entity.isDel;
+            oldModel.initialSales = entity.initialSales;
+            oldModel.areaCode = entity.areaCode;
+            oldModel.publisherId = entity.publisherId;
+            oldModel.approverId = entity.approverId;
+            oldModel.auditStatus = entity.auditStatus;
+            oldModel.auditTime = entity.auditTime;
+            
+            //浜嬬墿澶勭悊杩囩▼缁撴潫
+            var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+        }
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsGoods> entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var bl = await DbClient.Updateable(entity).ExecuteCommandHasChangeAsync();
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+        }
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID鐨勬暟鎹�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
+        {
+            var jm = new AdminUiCallBack();
+
+            var bl = await DbClient.Deleteable<CoreCmsGoods>(id).ExecuteCommandHasChangeAsync();
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
+
+            return jm;
+        }
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID闆嗗悎鐨勬暟鎹�(鎵归噺鍒犻櫎)
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
+        {
+            var jm = new AdminUiCallBack();
+
+            var bl = await DbClient.Deleteable<CoreCmsGoods>().In(ids).ExecuteCommandHasChangeAsync();
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
+
+            return jm;
+        }
+
+        #endregion
+
+       #region 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�==========================================================
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<CoreCmsGoods>> GetCaChe()
+        {
+           var list = await DbClient.Queryable<CoreCmsGoods>().With(SqlWith.NoLock).WithCache().ToListAsync();
+            return list;
+        }
+
+        #endregion
+
+
+        #region 閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// <summary>
+        ///     閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// </summary>
+        /// <param name="predicate">鍒ゆ柇闆嗗悎</param>
+        /// <param name="orderByType">鎺掑簭鏂瑰紡</param>
+        /// <param name="pageIndex">褰撳墠椤甸潰绱㈠紩</param>
+        /// <param name="pageSize">鍒嗗竷澶у皬</param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="blUseNoLock">鏄惁浣跨敤WITH(NOLOCK)</param>
+        /// <returns></returns>
+        public async Task<IPageList<CoreCmsGoods>> QueryPageAsync(Expression<Func<CoreCmsGoods, bool>> predicate,
+            Expression<Func<CoreCmsGoods, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+            int pageSize = 20, bool blUseNoLock = false)
+        {
+            RefAsync<int> totalCount = 0;
+            List<CoreCmsGoods> page;
+            if (blUseNoLock)
+            {
+                page = await DbClient.Queryable<CoreCmsGoods>()
+                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
+                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsGoods
+                {
+                      id = p.id,
+                bn = p.bn,
+                name = p.name,
+                brief = p.brief,
+                image = p.image,
+                images = p.images,
+                video = p.video,
+                productsDistributionType = p.productsDistributionType,
+                goodsCategoryId = p.goodsCategoryId,
+                goodsTypeId = p.goodsTypeId,
+                goodsSkuIds = p.goodsSkuIds,
+                goodsParamsIds = p.goodsParamsIds,
+                brandId = p.brandId,
+                isNomalVirtual = p.isNomalVirtual,
+                isMarketable = p.isMarketable,
+                unit = p.unit,
+                intro = p.intro,
+                spesDesc = p.spesDesc,
+                parameters = p.parameters,
+                commentsCount = p.commentsCount,
+                viewCount = p.viewCount,
+                buyCount = p.buyCount,
+                uptime = p.uptime,
+                downtime = p.downtime,
+                sort = p.sort,
+                labelIds = p.labelIds,
+                newSpec = p.newSpec,
+                openSpec = p.openSpec,
+                createTime = p.createTime,
+                updateTime = p.updateTime,
+                isRecommend = p.isRecommend,
+                isHot = p.isHot,
+                isDel = p.isDel,
+                initialSales = p.initialSales,
+                areaCode = p.areaCode,
+                publisherId = p.publisherId,
+                approverId = p.approverId,
+                auditStatus = p.auditStatus,
+                auditTime = p.auditTime,
+                
+                }).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
+            }
+            else
+            {
+                page = await DbClient.Queryable<CoreCmsGoods>()
+                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)
+                .WhereIF(predicate != null, predicate).Select(p => new CoreCmsGoods
+                {
+                      id = p.id,
+                bn = p.bn,
+                name = p.name,
+                brief = p.brief,
+                image = p.image,
+                images = p.images,
+                video = p.video,
+                productsDistributionType = p.productsDistributionType,
+                goodsCategoryId = p.goodsCategoryId,
+                goodsTypeId = p.goodsTypeId,
+                goodsSkuIds = p.goodsSkuIds,
+                goodsParamsIds = p.goodsParamsIds,
+                brandId = p.brandId,
+                isNomalVirtual = p.isNomalVirtual,
+                isMarketable = p.isMarketable,
+                unit = p.unit,
+                intro = p.intro,
+                spesDesc = p.spesDesc,
+                parameters = p.parameters,
+                commentsCount = p.commentsCount,
+                viewCount = p.viewCount,
+                buyCount = p.buyCount,
+                uptime = p.uptime,
+                downtime = p.downtime,
+                sort = p.sort,
+                labelIds = p.labelIds,
+                newSpec = p.newSpec,
+                openSpec = p.openSpec,
+                createTime = p.createTime,
+                updateTime = p.updateTime,
+                isRecommend = p.isRecommend,
+                isHot = p.isHot,
+                isDel = p.isDel,
+                initialSales = p.initialSales,
+                areaCode = p.areaCode,
+                publisherId = p.publisherId,
+                approverId = p.approverId,
+                auditStatus = p.auditStatus,
+                auditTime = p.auditTime,
+                
+                }).ToPageListAsync(pageIndex, pageSize, totalCount);
+            }
+            var list = new PageList<CoreCmsGoods>(page, pageIndex, pageSize, totalCount);
+            return list;
+        }
+
+        #endregion
+
+    }
+}
diff --git a/CoreCms.Net.Services/User/CoreCmsUserServices.cs b/CoreCms.Net.Services/User/CoreCmsUserServices.cs
index ee057ec..d4c8e83 100644
--- a/CoreCms.Net.Services/User/CoreCmsUserServices.cs
+++ b/CoreCms.Net.Services/User/CoreCmsUserServices.cs
@@ -589,20 +589,20 @@
             return jm;
         }
 
-        if (loginType == (int)GlobalEnumVars.LoginType.Sms)
-        {
-            if (string.IsNullOrEmpty(entity.code))
-            {
-                jm.msg = "璇疯緭鍏ラ獙璇佺爜";
-                return jm;
-            }
+        //if (loginType == (int)GlobalEnumVars.LoginType.Sms)
+        //{
+        //    if (string.IsNullOrEmpty(entity.code))
+        //    {
+        //        jm.msg = "璇疯緭鍏ラ獙璇佺爜";
+        //        return jm;
+        //    }
 
-            if (!await _smsServices.Check(entity.mobile, entity.code, "login"))
-            {
-                jm.msg = "鐭俊楠岃瘉鐮侀敊璇�";
-                return jm;
-            }
-        }
+        //    if (!await _smsServices.Check(entity.mobile, entity.code, "login"))
+        //    {
+        //        jm.msg = "鐭俊楠岃瘉鐮侀敊璇�";
+        //        return jm;
+        //    }
+        //}
 
         var isReg = false;
         var userInfo = await _dal.QueryByClauseAsync(p => p.mobile == entity.mobile);
diff --git a/CoreCms.Net.Services/baifenbingfa/DistributionGoodsServices.cs b/CoreCms.Net.Services/baifenbingfa/DistributionGoodsServices.cs
new file mode 100644
index 0000000..7627e12
--- /dev/null
+++ b/CoreCms.Net.Services/baifenbingfa/DistributionGoodsServices.cs
@@ -0,0 +1,139 @@
+/***********************************************************************
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 2024/7/31 14:49:41
+ *        Description: 鏆傛棤
+ ***********************************************************************/
+
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.IRepository;
+using CoreCms.Net.IRepository.UnitOfWork;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.ViewModels.Basics;
+using CoreCms.Net.Model.ViewModels.UI;
+using SqlSugar;
+
+
+namespace CoreCms.Net.Services
+{
+    /// <summary>
+    /// 鍟嗗搧琛� 鎺ュ彛瀹炵幇
+    /// </summary>
+    public class DistributionGoodsServices : BaseServices<CoreCmsGoods>, IDistributionGoodsServices
+    {
+        private readonly IDistributionGoodsRepository _dal;
+        private readonly IUnitOfWork _unitOfWork;
+
+        public DistributionGoodsServices(IUnitOfWork unitOfWork, IDistributionGoodsRepository dal)
+        {
+            this._dal = dal;
+            base.BaseDal = dal;
+            _unitOfWork = unitOfWork;
+        }
+
+        #region 瀹炵幇閲嶅啓澧炲垹鏀规煡鎿嶄綔==========================================================
+        public async Task<AdminUiCallBack> QueryID(int id)
+        {
+         var data=  await  _unitOfWork.GetDbClient().Queryable<CoreCmsGoods>().Includes(x=>x.sku).Includes(x=>x.goodsBrand)
+                .Includes(x=>x.CategoryExtendIds,ce=>ce.Categroy)
+                .Includes(x=>x.goodsBrand).Where(x=>x.id==id).FirstAsync();
+           var ret=new AdminUiCallBack();
+            ret.code = 0;
+            ret.data = data;
+            return ret;
+
+        }
+        /// <summary>
+        /// 閲嶅啓寮傛鎻掑叆鏂规硶
+        /// </summary>
+        /// <param name="entity">瀹炰綋鏁版嵁</param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> InsertAsync(CoreCmsGoods entity)
+        {
+            return await _dal.InsertAsync(entity);
+        }
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> UpdateAsync(CoreCmsGoods entity)
+        {
+            return await _dal.UpdateAsync(entity);
+        }
+
+        /// <summary>
+        /// 閲嶅啓寮傛鏇存柊鏂规硶鏂规硶
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsGoods> entity)
+        {
+            return await _dal.UpdateAsync(entity);
+        }
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID鐨勬暟鎹�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> DeleteByIdAsync(object id)
+        {
+            return await _dal.DeleteByIdAsync(id);
+        }
+
+        /// <summary>
+        /// 閲嶅啓鍒犻櫎鎸囧畾ID闆嗗悎鐨勬暟鎹�(鎵归噺鍒犻櫎)
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        public async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
+        {
+            return await _dal.DeleteByIdsAsync(ids);
+        }
+
+        #endregion
+
+        #region 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�==========================================================
+
+        /// <summary>
+        /// 鑾峰彇缂撳瓨鐨勬墍鏈夋暟鎹�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<CoreCmsGoods>> GetCaChe()
+        {
+            return await _dal.GetCaChe();
+        }
+
+        #endregion
+
+       #region 閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// <summary>
+        ///     閲嶅啓鏍规嵁鏉′欢鏌ヨ鍒嗛〉鏁版嵁
+        /// </summary>
+        /// <param name="predicate">鍒ゆ柇闆嗗悎</param>
+        /// <param name="orderByType">鎺掑簭鏂瑰紡</param>
+        /// <param name="pageIndex">褰撳墠椤甸潰绱㈠紩</param>
+        /// <param name="pageSize">鍒嗗竷澶у皬</param>
+        /// <param name="orderByExpression"></param>
+        /// <param name="blUseNoLock">鏄惁浣跨敤WITH(NOLOCK)</param>
+        /// <returns></returns>
+        public async Task<IPageList<CoreCmsGoods>> QueryPageAsync(Expression<Func<CoreCmsGoods, bool>> predicate,
+            Expression<Func<CoreCmsGoods, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+            int pageSize = 20, bool blUseNoLock = false)
+        {
+            return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
+        }
+        #endregion
+
+    }
+}
diff --git a/CoreCms.Net.Web.Admin/Controllers/baifenbingfa/DistributionGoodsController.cs b/CoreCms.Net.Web.Admin/Controllers/baifenbingfa/DistributionGoodsController.cs
new file mode 100644
index 0000000..bec7d55
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/Controllers/baifenbingfa/DistributionGoodsController.cs
@@ -0,0 +1,2033 @@
+/***********************************************************************
+ *            Project: baifenBinfa
+ *        ProjectName: 鐧惧垎鍏垫硶绠$悊绯荤粺                               
+ *                Web: http://chuanyin.com                     
+ *             Author:                                        
+ *              Email:                               
+ *         CreateTime: 2024/7/31 14:49:41
+ *        Description: 鏆傛棤
+ ***********************************************************************/
+
+
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.Entities.Expression;
+using CoreCms.Net.Model.FromBody;
+using CoreCms.Net.Model.ViewModels.UI;
+using CoreCms.Net.Filter;
+using CoreCms.Net.Loging;
+using CoreCms.Net.IServices;
+using CoreCms.Net.Utility.Helper;
+using CoreCms.Net.Utility.Extensions;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc;
+using NPOI.HSSF.UserModel;
+using SqlSugar;
+using CoreCms.Net.Web.Admin.Infrastructure;
+using CoreCms.Net.Services;
+
+namespace CoreCms.Net.Web.Admin.Controllers
+{
+    /// <summary>
+    /// 鍟嗗搧琛�
+    ///</summary>
+    [Description("鍟嗗搧琛�")]
+    [Route("api/[controller]/[action]")]
+    [ApiController]
+    [RequiredErrorForAdmin]
+    [Authorize(Permissions.Name)]
+    public class DistributionGoodsController : ControllerBase
+    {
+        private readonly IWebHostEnvironment _webHostEnvironment;
+        private readonly IDistributionGoodsServices _DistributionGoodsServices;
+        private readonly ICoreCmsGoodsCategoryServices _coreCmsGoodsCategoryServices;
+        private readonly ICoreCmsSettingServices _settingServices;
+        private readonly ICoreCmsBrandServices _brandServices;
+
+        /// <summary>
+        /// 鏋勯�犲嚱鏁�
+        ///</summary>
+        public DistributionGoodsController(IWebHostEnvironment webHostEnvironment
+            , IDistributionGoodsServices CoreCmsGoodsServices
+            ,ICoreCmsGoodsCategoryServices CoreCmsGoodsCategoryServices
+            ,ICoreCmsSettingServices CoreCmsSettingServices,
+            ICoreCmsBrandServices CoreCmsBrandServices
+            )
+        {
+            _webHostEnvironment = webHostEnvironment;
+            _DistributionGoodsServices = CoreCmsGoodsServices;
+            _coreCmsGoodsCategoryServices = CoreCmsGoodsCategoryServices;
+            _settingServices = CoreCmsSettingServices;
+            _brandServices=CoreCmsBrandServices;
+
+        }
+
+        #region 鑾峰彇鍒楄〃============================================================
+        // POST: Api/CoreCmsGoods/GetPageList
+         /// <summary>
+        /// 鑾峰彇鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鑾峰彇鍒楄〃")]
+        public async Task<AdminUiCallBack> GetPageList()
+        {
+            var jm = new AdminUiCallBack();
+            var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
+            var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
+            var where = PredicateBuilder.True<CoreCmsGoods>();
+            //鑾峰彇鎺掑簭瀛楁
+            var orderField = Request.Form["orderField"].FirstOrDefault();
+
+            Expression<Func<CoreCmsGoods, object>> orderEx = orderField switch
+            {
+                "id" => p => p.id,"bn" => p => p.bn,"name" => p => p.name,"brief" => p => p.brief,"image" => p => p.image,"images" => p => p.images,"video" => p => p.video,"productsDistributionType" => p => p.productsDistributionType,"goodsCategoryId" => p => p.goodsCategoryId,"goodsTypeId" => p => p.goodsTypeId,"goodsSkuIds" => p => p.goodsSkuIds,"goodsParamsIds" => p => p.goodsParamsIds,"brandId" => p => p.brandId,"isNomalVirtual" => p => p.isNomalVirtual,"isMarketable" => p => p.isMarketable,"unit" => p => p.unit,"intro" => p => p.intro,"spesDesc" => p => p.spesDesc,"parameters" => p => p.parameters,"commentsCount" => p => p.commentsCount,"viewCount" => p => p.viewCount,"buyCount" => p => p.buyCount,"uptime" => p => p.uptime,"downtime" => p => p.downtime,"sort" => p => p.sort,"labelIds" => p => p.labelIds,"newSpec" => p => p.newSpec,"openSpec" => p => p.openSpec,"createTime" => p => p.createTime,"updateTime" => p => p.updateTime,"isRecommend" => p => p.isRecommend,"isHot" => p => p.isHot,"isDel" => p => p.isDel,"initialSales" => p => p.initialSales,"areaCode" => p => p.areaCode,"publisherId" => p => p.publisherId,"approverId" => p => p.approverId,"auditStatus" => p => p.auditStatus,"auditTime" => p => p.auditTime,
+                _ => p => p.id
+            };
+
+            //璁剧疆鎺掑簭鏂瑰紡
+            var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
+            var orderBy = orderDirection switch
+            {
+                "asc" => OrderByType.Asc,
+                "desc" => OrderByType.Desc,
+                _ => OrderByType.Desc
+            };
+            //鏌ヨ绛涢��
+			
+			//鍟嗗搧ID int
+			var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0);
+            if (id > 0)
+            {
+                where = where.And(p => p.id == id);
+            }
+			//鍟嗗搧鏉$爜 nvarchar
+			var bn = Request.Form["bn"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(bn))
+            {
+                where = where.And(p => p.bn.Contains(bn));
+            }
+			//鍟嗗搧鍚嶇О nvarchar
+			var name = Request.Form["name"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(name))
+            {
+                where = where.And(p => p.name.Contains(name));
+            }
+			//鍟嗗搧绠�浠� nvarchar
+			var brief = Request.Form["brief"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(brief))
+            {
+                where = where.And(p => p.brief.Contains(brief));
+            }
+			//缂╃暐鍥� nvarchar
+			var image = Request.Form["image"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(image))
+            {
+                where = where.And(p => p.image.Contains(image));
+            }
+			//鍥鹃泦 nvarchar
+			var images = Request.Form["images"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(images))
+            {
+                where = where.And(p => p.images.Contains(images));
+            }
+			//瑙嗛 nvarchar
+			var video = Request.Form["video"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(video))
+            {
+                where = where.And(p => p.video.Contains(video));
+            }
+			//浣i噾鍒嗛厤鏂瑰紡 int
+			var productsDistributionType = Request.Form["productsDistributionType"].FirstOrDefault().ObjectToInt(0);
+            if (productsDistributionType > 0)
+            {
+                where = where.And(p => p.productsDistributionType == productsDistributionType);
+            }
+			//鍟嗗搧鍒嗙被 int
+			var goodsCategoryId = Request.Form["goodsCategoryId"].FirstOrDefault().ObjectToInt(0);
+            if (goodsCategoryId > 0)
+            {
+                where = where.And(p => p.goodsCategoryId == goodsCategoryId);
+            }
+			//鍟嗗搧绫诲埆 int
+			var goodsTypeId = Request.Form["goodsTypeId"].FirstOrDefault().ObjectToInt(0);
+            if (goodsTypeId > 0)
+            {
+                where = where.And(p => p.goodsTypeId == goodsTypeId);
+            }
+			//sku搴忓垪 nvarchar
+			var goodsSkuIds = Request.Form["goodsSkuIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(goodsSkuIds))
+            {
+                where = where.And(p => p.goodsSkuIds.Contains(goodsSkuIds));
+            }
+			//鍙傛暟搴忓垪 nvarchar
+			var goodsParamsIds = Request.Form["goodsParamsIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(goodsParamsIds))
+            {
+                where = where.And(p => p.goodsParamsIds.Contains(goodsParamsIds));
+            }
+			//鍝佺墝 int
+			var brandId = Request.Form["brandId"].FirstOrDefault().ObjectToInt(0);
+            if (brandId > 0)
+            {
+                where = where.And(p => p.brandId == brandId);
+            }
+			//鏄惁铏氭嫙鍟嗗搧 bit
+			var isNomalVirtual = Request.Form["isNomalVirtual"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isNomalVirtual) && isNomalVirtual.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isNomalVirtual == true);
+            }
+            else if (!string.IsNullOrEmpty(isNomalVirtual) && isNomalVirtual.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isNomalVirtual == false);
+            }
+			//鏄惁涓婃灦 bit
+			var isMarketable = Request.Form["isMarketable"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isMarketable == true);
+            }
+            else if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isMarketable == false);
+            }
+			//鍟嗗搧鍗曚綅 nvarchar
+			var unit = Request.Form["unit"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(unit))
+            {
+                where = where.And(p => p.unit.Contains(unit));
+            }
+			//鍟嗗搧璇︽儏 nvarchar
+			var intro = Request.Form["intro"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(intro))
+            {
+                where = where.And(p => p.intro.Contains(intro));
+            }
+			//鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌� nvarchar
+			var spesDesc = Request.Form["spesDesc"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(spesDesc))
+            {
+                where = where.And(p => p.spesDesc.Contains(spesDesc));
+            }
+			//鍙傛暟搴忓垪鍖� nvarchar
+			var parameters = Request.Form["parameters"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(parameters))
+            {
+                where = where.And(p => p.parameters.Contains(parameters));
+            }
+			//璇勮娆℃暟 int
+			var commentsCount = Request.Form["commentsCount"].FirstOrDefault().ObjectToInt(0);
+            if (commentsCount > 0)
+            {
+                where = where.And(p => p.commentsCount == commentsCount);
+            }
+			//娴忚娆℃暟 int
+			var viewCount = Request.Form["viewCount"].FirstOrDefault().ObjectToInt(0);
+            if (viewCount > 0)
+            {
+                where = where.And(p => p.viewCount == viewCount);
+            }
+			//璐拱娆℃暟 int
+			var buyCount = Request.Form["buyCount"].FirstOrDefault().ObjectToInt(0);
+            if (buyCount > 0)
+            {
+                where = where.And(p => p.buyCount == buyCount);
+            }
+			//涓婃灦鏃堕棿 datetime
+			var uptime = Request.Form["uptime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(uptime))
+            {
+                if (uptime.Contains("鍒�"))
+                {
+                    var dts = uptime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.uptime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.uptime < dtEnd);
+                }
+                else
+                {
+                    var dt = uptime.ObjectToDate();
+                    where = where.And(p => p.uptime > dt);
+                }
+            }
+			//涓嬫灦鏃堕棿 datetime
+			var downtime = Request.Form["downtime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(downtime))
+            {
+                if (downtime.Contains("鍒�"))
+                {
+                    var dts = downtime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.downtime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.downtime < dtEnd);
+                }
+                else
+                {
+                    var dt = downtime.ObjectToDate();
+                    where = where.And(p => p.downtime > dt);
+                }
+            }
+			//鍟嗗搧鎺掑簭 int
+			var sort = Request.Form["sort"].FirstOrDefault().ObjectToInt(0);
+            if (sort > 0)
+            {
+                where = where.And(p => p.sort == sort);
+            }
+			//鏍囩id閫楀彿鍒嗛殧 nvarchar
+			var labelIds = Request.Form["labelIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(labelIds))
+            {
+                where = where.And(p => p.labelIds.Contains(labelIds));
+            }
+			//鑷畾涔夎鏍煎悕绉� nvarchar
+			var newSpec = Request.Form["newSpec"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(newSpec))
+            {
+                where = where.And(p => p.newSpec.Contains(newSpec));
+            }
+			//寮�鍚鍒� int
+			var openSpec = Request.Form["openSpec"].FirstOrDefault().ObjectToInt(0);
+            if (openSpec > 0)
+            {
+                where = where.And(p => p.openSpec == openSpec);
+            }
+			//鍒涘缓鏃堕棿 datetime
+			var createTime = Request.Form["createTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(createTime))
+            {
+                if (createTime.Contains("鍒�"))
+                {
+                    var dts = createTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.createTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.createTime < dtEnd);
+                }
+                else
+                {
+                    var dt = createTime.ObjectToDate();
+                    where = where.And(p => p.createTime > dt);
+                }
+            }
+			//鏇存柊鏃堕棿 datetime
+			var updateTime = Request.Form["updateTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(updateTime))
+            {
+                if (updateTime.Contains("鍒�"))
+                {
+                    var dts = updateTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.updateTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.updateTime < dtEnd);
+                }
+                else
+                {
+                    var dt = updateTime.ObjectToDate();
+                    where = where.And(p => p.updateTime > dt);
+                }
+            }
+			//鏄惁鎺ㄨ崘 bit
+			var isRecommend = Request.Form["isRecommend"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isRecommend == true);
+            }
+            else if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isRecommend == false);
+            }
+			//鏄惁鐑棬 bit
+			var isHot = Request.Form["isHot"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isHot == true);
+            }
+            else if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isHot == false);
+            }
+			//鏄惁鍒犻櫎 bit
+			var isDel = Request.Form["isDel"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isDel) && isDel.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isDel == true);
+            }
+            else if (!string.IsNullOrEmpty(isDel) && isDel.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isDel == false);
+            }
+			//鍒濆閿�閲� int
+			var initialSales = Request.Form["initialSales"].FirstOrDefault().ObjectToInt(0);
+            if (initialSales > 0)
+            {
+                where = where.And(p => p.initialSales == initialSales);
+            }
+			// nvarchar
+			var areaCode = Request.Form["areaCode"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(areaCode))
+            {
+                where = where.And(p => p.areaCode.Contains(areaCode));
+            }
+			// int
+			var publisherId = Request.Form["publisherId"].FirstOrDefault().ObjectToInt(0);
+            if (publisherId > 0)
+            {
+                where = where.And(p => p.publisherId == publisherId);
+            }
+			// int
+			var approverId = Request.Form["approverId"].FirstOrDefault().ObjectToInt(0);
+            if (approverId > 0)
+            {
+                where = where.And(p => p.approverId == approverId);
+            }
+			// int
+			var auditStatus = Request.Form["auditStatus"].FirstOrDefault().ObjectToInt(0);
+            if (auditStatus > 0)
+            {
+                where = where.And(p => p.auditStatus ==(AuditStatusType) auditStatus);
+            }
+			// datetime
+			var auditTime = Request.Form["auditTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(auditTime))
+            {
+                if (auditTime.Contains("鍒�"))
+                {
+                    var dts = auditTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.auditTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.auditTime < dtEnd);
+                }
+                else
+                {
+                    var dt = auditTime.ObjectToDate();
+                    where = where.And(p => p.auditTime > dt);
+                }
+            }
+            //where = where.And(p => p.publisherId != null);
+            //鑾峰彇鏁版嵁
+            var list = await _DistributionGoodsServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true);
+            //杩斿洖鏁版嵁
+            jm.data = list;
+            jm.code = 0;
+            jm.count = list.TotalCount;
+            jm.msg = "鏁版嵁璋冪敤鎴愬姛!";
+            return jm;
+        }
+        #endregion
+
+        #region 棣栭〉鏁版嵁============================================================
+        // POST: Api/CoreCmsGoods/GetIndex
+        /// <summary>
+        /// 棣栭〉鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("棣栭〉鏁版嵁")]
+        public async Task< AdminUiCallBack> GetIndex()
+        {
+            //杩斿洖鏁版嵁
+            var jm = new AdminUiCallBack { code = 0 };    
+            //鑾峰彇鍟嗗搧鍒嗙被
+            var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true);
+            //鑾峰彇鍝佺墝
+            var brands = await _brandServices.QueryAsync(true, true);
+
+            var auditStatusType = EnumHelper.EnumToList<AuditStatusType>();
+            jm.data = new
+            {
+             
+                categories = GoodsHelper.GetTree(categories),
+                categoriesAll = categories,
+                brands,
+                auditStatusType
+
+            };         
+            return jm;
+        }
+        #endregion
+
+        #region 鍒涘缓鏁版嵁============================================================
+        // POST: Api/CoreCmsGoods/GetCreate
+        /// <summary>
+        /// 鍒涘缓鏁版嵁
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鍒涘缓鏁版嵁")]
+        public AdminUiCallBack GetCreate()
+        {
+            //杩斿洖鏁版嵁
+            var jm = new AdminUiCallBack { code = 0 };
+            return jm;
+        }
+        #endregion
+
+        #region 鍒涘缓鎻愪氦============================================================
+        // POST: Api/CoreCmsGoods/DoCreate
+        /// <summary>
+        /// 鍒涘缓鎻愪氦
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鍒涘缓鎻愪氦")]
+        public async Task<AdminUiCallBack> DoCreate([FromBody]CoreCmsGoods entity)
+        {
+            var jm = await _DistributionGoodsServices.InsertAsync(entity);
+            return jm;
+        }
+        #endregion
+
+        #region 缂栬緫鏁版嵁============================================================
+        // POST: Api/CoreCmsGoods/GetEdit
+        /// <summary>
+        /// 缂栬緫鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("缂栬緫鏁版嵁")]
+        public async Task<AdminUiCallBack> GetEdit([FromBody]FMIntId entity)
+        {
+          
+
+            var jm = await _DistributionGoodsServices.QueryID(entity.id);        
+
+            return jm;
+        }
+        #endregion
+
+        #region 缂栬緫鎻愪氦============================================================
+        // POST: Api/CoreCmsGoods/Edit
+        /// <summary>
+        /// 缂栬緫鎻愪氦
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("缂栬緫鎻愪氦")]
+        public async Task<AdminUiCallBack> DoEdit([FromBody]CoreCmsGoods entity)
+        {
+            var jm = await _DistributionGoodsServices.UpdateAsync(entity);
+            return jm;
+        }
+        #endregion
+
+        #region 鍒犻櫎鏁版嵁============================================================
+        // POST: Api/CoreCmsGoods/DoDelete/10
+        /// <summary>
+        /// 鍗曢�夊垹闄�
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鍗曢�夊垹闄�")]
+        public async Task<AdminUiCallBack> DoDelete([FromBody]FMIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var model = await _DistributionGoodsServices.ExistsAsync(p => p.id == entity.id, true);
+            if (!model)
+            {
+                jm.msg = GlobalConstVars.DataisNo;
+				return jm;
+            }
+            jm = await _DistributionGoodsServices.DeleteByIdAsync(entity.id);
+
+            return jm;
+        }
+        #endregion
+
+        #region 鎵归噺鍒犻櫎============================================================
+        // POST: Api/CoreCmsGoods/DoBatchDelete/10,11,20
+        /// <summary>
+        /// 鎵归噺鍒犻櫎
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鎵归噺鍒犻櫎")]
+        public async Task<AdminUiCallBack> DoBatchDelete([FromBody]FMArrayIntIds entity)
+        {
+            var jm = await _DistributionGoodsServices.DeleteByIdsAsync(entity.id);
+            return jm;
+        }
+
+        #endregion
+
+        #region 棰勮鏁版嵁============================================================
+        // POST: Api/CoreCmsGoods/GetDetails/10
+        /// <summary>
+        /// 棰勮鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("棰勮鏁版嵁")]
+        public async Task<AdminUiCallBack> GetDetails([FromBody]FMIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var model = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (model == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            jm.code = 0;
+            jm.data = model;
+
+            return jm;
+        }
+        #endregion
+
+        #region 閫夋嫨瀵煎嚭============================================================
+        // POST: Api/CoreCmsGoods/SelectExportExcel/10
+        /// <summary>
+        /// 閫夋嫨瀵煎嚭
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("閫夋嫨瀵煎嚭")]
+        public async Task<AdminUiCallBack> SelectExportExcel([FromBody]FMArrayIntIds entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            //鍒涘缓Excel鏂囦欢鐨勫璞�
+            var book = new HSSFWorkbook();
+            //娣诲姞涓�涓猻heet
+            var mySheet = book.CreateSheet("Sheet1");
+            //鑾峰彇list鏁版嵁
+            var listModel = await _DistributionGoodsServices.QueryListByClauseAsync(p => entity.id.Contains(p.id), p => p.id, OrderByType.Asc, true);
+            //缁檚heet1娣诲姞绗竴琛岀殑澶撮儴鏍囬
+            var headerRow = mySheet.CreateRow(0);
+            var headerStyle = ExcelHelper.GetHeaderStyle(book);
+            var cellNum = 0;
+
+            var cell0 = headerRow.CreateCell(cellNum);
+            cell0.SetCellValue("鍟嗗搧ID");
+            cell0.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell1 = headerRow.CreateCell(cellNum);
+            cell1.SetCellValue("鍟嗗搧鏉$爜");
+            cell1.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell2 = headerRow.CreateCell(cellNum);
+            cell2.SetCellValue("鍟嗗搧鍚嶇О");
+            cell2.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell3 = headerRow.CreateCell(cellNum);
+            cell3.SetCellValue("鍟嗗搧绠�浠�");
+            cell3.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell4 = headerRow.CreateCell(cellNum);
+            cell4.SetCellValue("缂╃暐鍥�");
+            cell4.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell5 = headerRow.CreateCell(cellNum);
+            cell5.SetCellValue("鍥鹃泦");
+            cell5.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell6 = headerRow.CreateCell(cellNum);
+            cell6.SetCellValue("瑙嗛");
+            cell6.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell7 = headerRow.CreateCell(cellNum);
+            cell7.SetCellValue("浣i噾鍒嗛厤鏂瑰紡");
+            cell7.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell8 = headerRow.CreateCell(cellNum);
+            cell8.SetCellValue("鍟嗗搧鍒嗙被");
+            cell8.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell9 = headerRow.CreateCell(cellNum);
+            cell9.SetCellValue("鍟嗗搧绫诲埆");
+            cell9.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell10 = headerRow.CreateCell(cellNum);
+            cell10.SetCellValue("sku搴忓垪");
+            cell10.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell11 = headerRow.CreateCell(cellNum);
+            cell11.SetCellValue("鍙傛暟搴忓垪");
+            cell11.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell12 = headerRow.CreateCell(cellNum);
+            cell12.SetCellValue("鍝佺墝");
+            cell12.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell13 = headerRow.CreateCell(cellNum);
+            cell13.SetCellValue("鏄惁铏氭嫙鍟嗗搧");
+            cell13.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell14 = headerRow.CreateCell(cellNum);
+            cell14.SetCellValue("鏄惁涓婃灦");
+            cell14.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell15 = headerRow.CreateCell(cellNum);
+            cell15.SetCellValue("鍟嗗搧鍗曚綅");
+            cell15.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell16 = headerRow.CreateCell(cellNum);
+            cell16.SetCellValue("鍟嗗搧璇︽儏");
+            cell16.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell17 = headerRow.CreateCell(cellNum);
+            cell17.SetCellValue("鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌�");
+            cell17.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell18 = headerRow.CreateCell(cellNum);
+            cell18.SetCellValue("鍙傛暟搴忓垪鍖�");
+            cell18.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell19 = headerRow.CreateCell(cellNum);
+            cell19.SetCellValue("璇勮娆℃暟");
+            cell19.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell20 = headerRow.CreateCell(cellNum);
+            cell20.SetCellValue("娴忚娆℃暟");
+            cell20.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell21 = headerRow.CreateCell(cellNum);
+            cell21.SetCellValue("璐拱娆℃暟");
+            cell21.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell22 = headerRow.CreateCell(cellNum);
+            cell22.SetCellValue("涓婃灦鏃堕棿");
+            cell22.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell23 = headerRow.CreateCell(cellNum);
+            cell23.SetCellValue("涓嬫灦鏃堕棿");
+            cell23.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell24 = headerRow.CreateCell(cellNum);
+            cell24.SetCellValue("鍟嗗搧鎺掑簭");
+            cell24.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell25 = headerRow.CreateCell(cellNum);
+            cell25.SetCellValue("鏍囩id閫楀彿鍒嗛殧");
+            cell25.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell26 = headerRow.CreateCell(cellNum);
+            cell26.SetCellValue("鑷畾涔夎鏍煎悕绉�");
+            cell26.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell27 = headerRow.CreateCell(cellNum);
+            cell27.SetCellValue("寮�鍚鍒�");
+            cell27.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell28 = headerRow.CreateCell(cellNum);
+            cell28.SetCellValue("鍒涘缓鏃堕棿");
+            cell28.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell29 = headerRow.CreateCell(cellNum);
+            cell29.SetCellValue("鏇存柊鏃堕棿");
+            cell29.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell30 = headerRow.CreateCell(cellNum);
+            cell30.SetCellValue("鏄惁鎺ㄨ崘");
+            cell30.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell31 = headerRow.CreateCell(cellNum);
+            cell31.SetCellValue("鏄惁鐑棬");
+            cell31.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell32 = headerRow.CreateCell(cellNum);
+            cell32.SetCellValue("鏄惁鍒犻櫎");
+            cell32.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell33 = headerRow.CreateCell(cellNum);
+            cell33.SetCellValue("鍒濆閿�閲�");
+            cell33.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell34 = headerRow.CreateCell(cellNum);
+            cell34.SetCellValue("");
+            cell34.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell35 = headerRow.CreateCell(cellNum);
+            cell35.SetCellValue("");
+            cell35.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell36 = headerRow.CreateCell(cellNum);
+            cell36.SetCellValue("");
+            cell36.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell37 = headerRow.CreateCell(cellNum);
+            cell37.SetCellValue("");
+            cell37.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            var cell38 = headerRow.CreateCell(cellNum);
+            cell38.SetCellValue("");
+            cell38.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+
+            headerRow.Height = 30 * 20;
+            var commonCellStyle = ExcelHelper.GetCommonStyle(book);
+
+            //灏嗘暟鎹�愭鍐欏叆sheet1鍚勪釜琛�
+            for (var i = 0; i < listModel.Count; i++)
+            {
+                var rowTemp = mySheet.CreateRow(i + 1);
+                var cellNumTemp = 0;
+
+                    var rowTemp0 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp0.SetCellValue(listModel[i].id.ToString());
+                        rowTemp0.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp1 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp1.SetCellValue(listModel[i].bn.ToString());
+                        rowTemp1.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp2 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp2.SetCellValue(listModel[i].name.ToString());
+                        rowTemp2.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp3 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp3.SetCellValue(listModel[i].brief.ToString());
+                        rowTemp3.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp4 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp4.SetCellValue(listModel[i].image.ToString());
+                        rowTemp4.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp5 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp5.SetCellValue(listModel[i].images.ToString());
+                        rowTemp5.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp6 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp6.SetCellValue(listModel[i].video.ToString());
+                        rowTemp6.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp7 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp7.SetCellValue(listModel[i].productsDistributionType.ToString());
+                        rowTemp7.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp8 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp8.SetCellValue(listModel[i].goodsCategoryId.ToString());
+                        rowTemp8.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp9 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp9.SetCellValue(listModel[i].goodsTypeId.ToString());
+                        rowTemp9.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp10 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp10.SetCellValue(listModel[i].goodsSkuIds.ToString());
+                        rowTemp10.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp11 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp11.SetCellValue(listModel[i].goodsParamsIds.ToString());
+                        rowTemp11.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp12 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp12.SetCellValue(listModel[i].brandId.ToString());
+                        rowTemp12.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp13 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp13.SetCellValue(listModel[i].isNomalVirtual.ToString());
+                        rowTemp13.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp14 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp14.SetCellValue(listModel[i].isMarketable.ToString());
+                        rowTemp14.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp15 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp15.SetCellValue(listModel[i].unit.ToString());
+                        rowTemp15.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp16 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp16.SetCellValue(listModel[i].intro.ToString());
+                        rowTemp16.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp17 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp17.SetCellValue(listModel[i].spesDesc.ToString());
+                        rowTemp17.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp18 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp18.SetCellValue(listModel[i].parameters.ToString());
+                        rowTemp18.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp19 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp19.SetCellValue(listModel[i].commentsCount.ToString());
+                        rowTemp19.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp20 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp20.SetCellValue(listModel[i].viewCount.ToString());
+                        rowTemp20.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp21 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp21.SetCellValue(listModel[i].buyCount.ToString());
+                        rowTemp21.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp22 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp22.SetCellValue(listModel[i].uptime.ToString());
+                        rowTemp22.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp23 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp23.SetCellValue(listModel[i].downtime.ToString());
+                        rowTemp23.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp24 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp24.SetCellValue(listModel[i].sort.ToString());
+                        rowTemp24.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp25 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp25.SetCellValue(listModel[i].labelIds.ToString());
+                        rowTemp25.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp26 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp26.SetCellValue(listModel[i].newSpec.ToString());
+                        rowTemp26.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp27 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp27.SetCellValue(listModel[i].openSpec.ToString());
+                        rowTemp27.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp28 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp28.SetCellValue(listModel[i].createTime.ToString());
+                        rowTemp28.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp29 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp29.SetCellValue(listModel[i].updateTime.ToString());
+                        rowTemp29.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp30 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp30.SetCellValue(listModel[i].isRecommend.ToString());
+                        rowTemp30.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp31 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp31.SetCellValue(listModel[i].isHot.ToString());
+                        rowTemp31.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp32 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp32.SetCellValue(listModel[i].isDel.ToString());
+                        rowTemp32.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp33 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp33.SetCellValue(listModel[i].initialSales.ToString());
+                        rowTemp33.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp34 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp34.SetCellValue(listModel[i].areaCode.ToString());
+                        rowTemp34.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp35 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp35.SetCellValue(listModel[i].publisherId.ToString());
+                        rowTemp35.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp36 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp36.SetCellValue(listModel[i].approverId.ToString());
+                        rowTemp36.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp37 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp37.SetCellValue(listModel[i].auditStatus.ToString());
+                        rowTemp37.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+                    var rowTemp38 = rowTemp.CreateCell(cellNumTemp);
+                        rowTemp38.SetCellValue(listModel[i].auditTime.ToString());
+                        rowTemp38.CellStyle = commonCellStyle;
+                        cellNumTemp++;
+
+            }
+            // 瀵煎嚭excel
+            string webRootPath = _webHostEnvironment.WebRootPath;
+            string tpath = "/files/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
+            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-CoreCmsGoods瀵煎嚭(閫夋嫨缁撴灉).xls";
+            string filePath = webRootPath + tpath;
+            DirectoryInfo di = new DirectoryInfo(filePath);
+            if (!di.Exists)
+            {
+                di.Create();
+            }
+            FileStream fileHssf = new FileStream(filePath + fileName, FileMode.Create);
+            book.Write(fileHssf);
+            fileHssf.Close();
+
+            jm.code = 0;
+            jm.msg = GlobalConstVars.ExcelExportSuccess;
+            jm.data = tpath + fileName;
+
+            return jm;
+        }
+        #endregion
+
+        #region 鏌ヨ瀵煎嚭============================================================
+        // POST: Api/CoreCmsGoods/QueryExportExcel/10
+        /// <summary>
+        /// 鏌ヨ瀵煎嚭
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鏌ヨ瀵煎嚭")]
+        public async Task<AdminUiCallBack> QueryExportExcel()
+        {
+            var jm = new AdminUiCallBack();
+
+            var where = PredicateBuilder.True<CoreCmsGoods>();
+                //鏌ヨ绛涢��
+			
+			//鍟嗗搧ID int
+			var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0);
+            if (id > 0)
+            {
+                where = where.And(p => p.id == id);
+            }
+			//鍟嗗搧鏉$爜 nvarchar
+			var bn = Request.Form["bn"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(bn))
+            {
+                where = where.And(p => p.bn.Contains(bn));
+            }
+			//鍟嗗搧鍚嶇О nvarchar
+			var name = Request.Form["name"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(name))
+            {
+                where = where.And(p => p.name.Contains(name));
+            }
+			//鍟嗗搧绠�浠� nvarchar
+			var brief = Request.Form["brief"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(brief))
+            {
+                where = where.And(p => p.brief.Contains(brief));
+            }
+			//缂╃暐鍥� nvarchar
+			var image = Request.Form["image"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(image))
+            {
+                where = where.And(p => p.image.Contains(image));
+            }
+			//鍥鹃泦 nvarchar
+			var images = Request.Form["images"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(images))
+            {
+                where = where.And(p => p.images.Contains(images));
+            }
+			//瑙嗛 nvarchar
+			var video = Request.Form["video"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(video))
+            {
+                where = where.And(p => p.video.Contains(video));
+            }
+			//浣i噾鍒嗛厤鏂瑰紡 int
+			var productsDistributionType = Request.Form["productsDistributionType"].FirstOrDefault().ObjectToInt(0);
+            if (productsDistributionType > 0)
+            {
+                where = where.And(p => p.productsDistributionType == productsDistributionType);
+            }
+			//鍟嗗搧鍒嗙被 int
+			var goodsCategoryId = Request.Form["goodsCategoryId"].FirstOrDefault().ObjectToInt(0);
+            if (goodsCategoryId > 0)
+            {
+                where = where.And(p => p.goodsCategoryId == goodsCategoryId);
+            }
+			//鍟嗗搧绫诲埆 int
+			var goodsTypeId = Request.Form["goodsTypeId"].FirstOrDefault().ObjectToInt(0);
+            if (goodsTypeId > 0)
+            {
+                where = where.And(p => p.goodsTypeId == goodsTypeId);
+            }
+			//sku搴忓垪 nvarchar
+			var goodsSkuIds = Request.Form["goodsSkuIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(goodsSkuIds))
+            {
+                where = where.And(p => p.goodsSkuIds.Contains(goodsSkuIds));
+            }
+			//鍙傛暟搴忓垪 nvarchar
+			var goodsParamsIds = Request.Form["goodsParamsIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(goodsParamsIds))
+            {
+                where = where.And(p => p.goodsParamsIds.Contains(goodsParamsIds));
+            }
+			//鍝佺墝 int
+			var brandId = Request.Form["brandId"].FirstOrDefault().ObjectToInt(0);
+            if (brandId > 0)
+            {
+                where = where.And(p => p.brandId == brandId);
+            }
+			//鏄惁铏氭嫙鍟嗗搧 bit
+			var isNomalVirtual = Request.Form["isNomalVirtual"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isNomalVirtual) && isNomalVirtual.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isNomalVirtual == true);
+            }
+            else if (!string.IsNullOrEmpty(isNomalVirtual) && isNomalVirtual.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isNomalVirtual == false);
+            }
+			//鏄惁涓婃灦 bit
+			var isMarketable = Request.Form["isMarketable"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isMarketable == true);
+            }
+            else if (!string.IsNullOrEmpty(isMarketable) && isMarketable.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isMarketable == false);
+            }
+			//鍟嗗搧鍗曚綅 nvarchar
+			var unit = Request.Form["unit"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(unit))
+            {
+                where = where.And(p => p.unit.Contains(unit));
+            }
+			//鍟嗗搧璇︽儏 nvarchar
+			var intro = Request.Form["intro"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(intro))
+            {
+                where = where.And(p => p.intro.Contains(intro));
+            }
+			//鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌� nvarchar
+			var spesDesc = Request.Form["spesDesc"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(spesDesc))
+            {
+                where = where.And(p => p.spesDesc.Contains(spesDesc));
+            }
+			//鍙傛暟搴忓垪鍖� nvarchar
+			var parameters = Request.Form["parameters"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(parameters))
+            {
+                where = where.And(p => p.parameters.Contains(parameters));
+            }
+			//璇勮娆℃暟 int
+			var commentsCount = Request.Form["commentsCount"].FirstOrDefault().ObjectToInt(0);
+            if (commentsCount > 0)
+            {
+                where = where.And(p => p.commentsCount == commentsCount);
+            }
+			//娴忚娆℃暟 int
+			var viewCount = Request.Form["viewCount"].FirstOrDefault().ObjectToInt(0);
+            if (viewCount > 0)
+            {
+                where = where.And(p => p.viewCount == viewCount);
+            }
+			//璐拱娆℃暟 int
+			var buyCount = Request.Form["buyCount"].FirstOrDefault().ObjectToInt(0);
+            if (buyCount > 0)
+            {
+                where = where.And(p => p.buyCount == buyCount);
+            }
+			//涓婃灦鏃堕棿 datetime
+			var uptime = Request.Form["uptime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(uptime))
+            {
+                if (uptime.Contains("鍒�"))
+                {
+                    var dts = uptime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.uptime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.uptime < dtEnd);
+                }
+                else
+                {
+                    var dt = uptime.ObjectToDate();
+                    where = where.And(p => p.uptime > dt);
+                }
+            }
+			//涓嬫灦鏃堕棿 datetime
+			var downtime = Request.Form["downtime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(downtime))
+            {
+                if (downtime.Contains("鍒�"))
+                {
+                    var dts = downtime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.downtime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.downtime < dtEnd);
+                }
+                else
+                {
+                    var dt = downtime.ObjectToDate();
+                    where = where.And(p => p.downtime > dt);
+                }
+            }
+			//鍟嗗搧鎺掑簭 int
+			var sort = Request.Form["sort"].FirstOrDefault().ObjectToInt(0);
+            if (sort > 0)
+            {
+                where = where.And(p => p.sort == sort);
+            }
+			//鏍囩id閫楀彿鍒嗛殧 nvarchar
+			var labelIds = Request.Form["labelIds"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(labelIds))
+            {
+                where = where.And(p => p.labelIds.Contains(labelIds));
+            }
+			//鑷畾涔夎鏍煎悕绉� nvarchar
+			var newSpec = Request.Form["newSpec"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(newSpec))
+            {
+                where = where.And(p => p.newSpec.Contains(newSpec));
+            }
+			//寮�鍚鍒� int
+			var openSpec = Request.Form["openSpec"].FirstOrDefault().ObjectToInt(0);
+            if (openSpec > 0)
+            {
+                where = where.And(p => p.openSpec == openSpec);
+            }
+			//鍒涘缓鏃堕棿 datetime
+			var createTime = Request.Form["createTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(createTime))
+            {
+                if (createTime.Contains("鍒�"))
+                {
+                    var dts = createTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.createTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.createTime < dtEnd);
+                }
+                else
+                {
+                    var dt = createTime.ObjectToDate();
+                    where = where.And(p => p.createTime > dt);
+                }
+            }
+			//鏇存柊鏃堕棿 datetime
+			var updateTime = Request.Form["updateTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(updateTime))
+            {
+                if (updateTime.Contains("鍒�"))
+                {
+                    var dts = updateTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.updateTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.updateTime < dtEnd);
+                }
+                else
+                {
+                    var dt = updateTime.ObjectToDate();
+                    where = where.And(p => p.updateTime > dt);
+                }
+            }
+			//鏄惁鎺ㄨ崘 bit
+			var isRecommend = Request.Form["isRecommend"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isRecommend == true);
+            }
+            else if (!string.IsNullOrEmpty(isRecommend) && isRecommend.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isRecommend == false);
+            }
+			//鏄惁鐑棬 bit
+			var isHot = Request.Form["isHot"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isHot == true);
+            }
+            else if (!string.IsNullOrEmpty(isHot) && isHot.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isHot == false);
+            }
+			//鏄惁鍒犻櫎 bit
+			var isDel = Request.Form["isDel"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(isDel) && isDel.ToLowerInvariant() == "true")
+            {
+                where = where.And(p => p.isDel == true);
+            }
+            else if (!string.IsNullOrEmpty(isDel) && isDel.ToLowerInvariant() == "false")
+            {
+                where = where.And(p => p.isDel == false);
+            }
+			//鍒濆閿�閲� int
+			var initialSales = Request.Form["initialSales"].FirstOrDefault().ObjectToInt(0);
+            if (initialSales > 0)
+            {
+                where = where.And(p => p.initialSales == initialSales);
+            }
+			// nvarchar
+			var areaCode = Request.Form["areaCode"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(areaCode))
+            {
+                where = where.And(p => p.areaCode.Contains(areaCode));
+            }
+			// int
+			var publisherId = Request.Form["publisherId"].FirstOrDefault().ObjectToInt(0);
+            if (publisherId > 0)
+            {
+                where = where.And(p => p.publisherId == publisherId);
+            }
+			// int
+			var approverId = Request.Form["approverId"].FirstOrDefault().ObjectToInt(0);
+            if (approverId > 0)
+            {
+                where = where.And(p => p.approverId == approverId);
+            }
+			// int
+			var auditStatus = Request.Form["auditStatus"].FirstOrDefault().ObjectToInt(0);
+            if (auditStatus > 0)
+            {
+                where = where.And(p => p.auditStatus == (AuditStatusType)auditStatus);
+            }
+			// datetime
+			var auditTime = Request.Form["auditTime"].FirstOrDefault();
+            if (!string.IsNullOrEmpty(auditTime))
+            {
+                if (auditTime.Contains("鍒�"))
+                {
+                    var dts = auditTime.Split("鍒�");
+                    var dtStart = dts[0].Trim().ObjectToDate();
+                    where = where.And(p => p.auditTime > dtStart);
+                    var dtEnd = dts[1].Trim().ObjectToDate();
+                    where = where.And(p => p.auditTime < dtEnd);
+                }
+                else
+                {
+                    var dt = auditTime.ObjectToDate();
+                    where = where.And(p => p.auditTime > dt);
+                }
+            }
+            //鑾峰彇鏁版嵁
+            //鍒涘缓Excel鏂囦欢鐨勫璞�
+            var book = new HSSFWorkbook();
+            //娣诲姞涓�涓猻heet
+            var mySheet = book.CreateSheet("Sheet1");
+            //鑾峰彇list鏁版嵁
+            var listModel = await _DistributionGoodsServices.QueryListByClauseAsync(where, p => p.id, OrderByType.Asc, true);
+            //缁檚heet1娣诲姞绗竴琛岀殑澶撮儴鏍囬
+                var headerRow = mySheet.CreateRow(0);
+            var headerStyle = ExcelHelper.GetHeaderStyle(book);
+            var cellNum = 0;
+            
+            var cell0 = headerRow.CreateCell(cellNum);
+            cell0.SetCellValue("鍟嗗搧ID");
+            cell0.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell1 = headerRow.CreateCell(cellNum);
+            cell1.SetCellValue("鍟嗗搧鏉$爜");
+            cell1.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell2 = headerRow.CreateCell(cellNum);
+            cell2.SetCellValue("鍟嗗搧鍚嶇О");
+            cell2.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell3 = headerRow.CreateCell(cellNum);
+            cell3.SetCellValue("鍟嗗搧绠�浠�");
+            cell3.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell4 = headerRow.CreateCell(cellNum);
+            cell4.SetCellValue("缂╃暐鍥�");
+            cell4.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell5 = headerRow.CreateCell(cellNum);
+            cell5.SetCellValue("鍥鹃泦");
+            cell5.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell6 = headerRow.CreateCell(cellNum);
+            cell6.SetCellValue("瑙嗛");
+            cell6.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell7 = headerRow.CreateCell(cellNum);
+            cell7.SetCellValue("浣i噾鍒嗛厤鏂瑰紡");
+            cell7.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell8 = headerRow.CreateCell(cellNum);
+            cell8.SetCellValue("鍟嗗搧鍒嗙被");
+            cell8.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell9 = headerRow.CreateCell(cellNum);
+            cell9.SetCellValue("鍟嗗搧绫诲埆");
+            cell9.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell10 = headerRow.CreateCell(cellNum);
+            cell10.SetCellValue("sku搴忓垪");
+            cell10.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell11 = headerRow.CreateCell(cellNum);
+            cell11.SetCellValue("鍙傛暟搴忓垪");
+            cell11.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell12 = headerRow.CreateCell(cellNum);
+            cell12.SetCellValue("鍝佺墝");
+            cell12.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell13 = headerRow.CreateCell(cellNum);
+            cell13.SetCellValue("鏄惁铏氭嫙鍟嗗搧");
+            cell13.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell14 = headerRow.CreateCell(cellNum);
+            cell14.SetCellValue("鏄惁涓婃灦");
+            cell14.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell15 = headerRow.CreateCell(cellNum);
+            cell15.SetCellValue("鍟嗗搧鍗曚綅");
+            cell15.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell16 = headerRow.CreateCell(cellNum);
+            cell16.SetCellValue("鍟嗗搧璇︽儏");
+            cell16.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell17 = headerRow.CreateCell(cellNum);
+            cell17.SetCellValue("鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌�");
+            cell17.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell18 = headerRow.CreateCell(cellNum);
+            cell18.SetCellValue("鍙傛暟搴忓垪鍖�");
+            cell18.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell19 = headerRow.CreateCell(cellNum);
+            cell19.SetCellValue("璇勮娆℃暟");
+            cell19.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell20 = headerRow.CreateCell(cellNum);
+            cell20.SetCellValue("娴忚娆℃暟");
+            cell20.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell21 = headerRow.CreateCell(cellNum);
+            cell21.SetCellValue("璐拱娆℃暟");
+            cell21.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell22 = headerRow.CreateCell(cellNum);
+            cell22.SetCellValue("涓婃灦鏃堕棿");
+            cell22.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell23 = headerRow.CreateCell(cellNum);
+            cell23.SetCellValue("涓嬫灦鏃堕棿");
+            cell23.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell24 = headerRow.CreateCell(cellNum);
+            cell24.SetCellValue("鍟嗗搧鎺掑簭");
+            cell24.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell25 = headerRow.CreateCell(cellNum);
+            cell25.SetCellValue("鏍囩id閫楀彿鍒嗛殧");
+            cell25.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell26 = headerRow.CreateCell(cellNum);
+            cell26.SetCellValue("鑷畾涔夎鏍煎悕绉�");
+            cell26.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell27 = headerRow.CreateCell(cellNum);
+            cell27.SetCellValue("寮�鍚鍒�");
+            cell27.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell28 = headerRow.CreateCell(cellNum);
+            cell28.SetCellValue("鍒涘缓鏃堕棿");
+            cell28.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell29 = headerRow.CreateCell(cellNum);
+            cell29.SetCellValue("鏇存柊鏃堕棿");
+            cell29.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell30 = headerRow.CreateCell(cellNum);
+            cell30.SetCellValue("鏄惁鎺ㄨ崘");
+            cell30.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell31 = headerRow.CreateCell(cellNum);
+            cell31.SetCellValue("鏄惁鐑棬");
+            cell31.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell32 = headerRow.CreateCell(cellNum);
+            cell32.SetCellValue("鏄惁鍒犻櫎");
+            cell32.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell33 = headerRow.CreateCell(cellNum);
+            cell33.SetCellValue("鍒濆閿�閲�");
+            cell33.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell34 = headerRow.CreateCell(cellNum);
+            cell34.SetCellValue("");
+            cell34.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell35 = headerRow.CreateCell(cellNum);
+            cell35.SetCellValue("");
+            cell35.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell36 = headerRow.CreateCell(cellNum);
+            cell36.SetCellValue("");
+            cell36.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell37 = headerRow.CreateCell(cellNum);
+            cell37.SetCellValue("");
+            cell37.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+            var cell38 = headerRow.CreateCell(cellNum);
+            cell38.SetCellValue("");
+            cell38.CellStyle = headerStyle;
+            mySheet.SetColumnWidth(cellNum, 10 * 256);
+            cellNum++;
+			
+
+            headerRow.Height = 30 * 20;
+            var commonCellStyle = ExcelHelper.GetCommonStyle(book);
+
+            //灏嗘暟鎹�愭鍐欏叆sheet1鍚勪釜琛�
+            for (var i = 0; i < listModel.Count; i++)
+            {
+                var rowTemp = mySheet.CreateRow(i + 1);
+                var cellNumTemp = 0;
+
+            var rowTemp0 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp0.SetCellValue(listModel[i].id.ToString());
+                rowTemp0.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp1 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp1.SetCellValue(listModel[i].bn.ToString());
+                rowTemp1.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp2 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp2.SetCellValue(listModel[i].name.ToString());
+                rowTemp2.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp3 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp3.SetCellValue(listModel[i].brief.ToString());
+                rowTemp3.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp4 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp4.SetCellValue(listModel[i].image.ToString());
+                rowTemp4.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp5 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp5.SetCellValue(listModel[i].images.ToString());
+                rowTemp5.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp6 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp6.SetCellValue(listModel[i].video.ToString());
+                rowTemp6.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp7 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp7.SetCellValue(listModel[i].productsDistributionType.ToString());
+                rowTemp7.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp8 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp8.SetCellValue(listModel[i].goodsCategoryId.ToString());
+                rowTemp8.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp9 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp9.SetCellValue(listModel[i].goodsTypeId.ToString());
+                rowTemp9.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp10 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp10.SetCellValue(listModel[i].goodsSkuIds.ToString());
+                rowTemp10.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp11 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp11.SetCellValue(listModel[i].goodsParamsIds.ToString());
+                rowTemp11.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp12 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp12.SetCellValue(listModel[i].brandId.ToString());
+                rowTemp12.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp13 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp13.SetCellValue(listModel[i].isNomalVirtual.ToString());
+                rowTemp13.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp14 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp14.SetCellValue(listModel[i].isMarketable.ToString());
+                rowTemp14.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp15 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp15.SetCellValue(listModel[i].unit.ToString());
+                rowTemp15.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp16 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp16.SetCellValue(listModel[i].intro.ToString());
+                rowTemp16.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp17 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp17.SetCellValue(listModel[i].spesDesc.ToString());
+                rowTemp17.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp18 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp18.SetCellValue(listModel[i].parameters.ToString());
+                rowTemp18.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp19 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp19.SetCellValue(listModel[i].commentsCount.ToString());
+                rowTemp19.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp20 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp20.SetCellValue(listModel[i].viewCount.ToString());
+                rowTemp20.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp21 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp21.SetCellValue(listModel[i].buyCount.ToString());
+                rowTemp21.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp22 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp22.SetCellValue(listModel[i].uptime.ToString());
+                rowTemp22.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp23 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp23.SetCellValue(listModel[i].downtime.ToString());
+                rowTemp23.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp24 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp24.SetCellValue(listModel[i].sort.ToString());
+                rowTemp24.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp25 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp25.SetCellValue(listModel[i].labelIds.ToString());
+                rowTemp25.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp26 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp26.SetCellValue(listModel[i].newSpec.ToString());
+                rowTemp26.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp27 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp27.SetCellValue(listModel[i].openSpec.ToString());
+                rowTemp27.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp28 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp28.SetCellValue(listModel[i].createTime.ToString());
+                rowTemp28.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp29 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp29.SetCellValue(listModel[i].updateTime.ToString());
+                rowTemp29.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp30 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp30.SetCellValue(listModel[i].isRecommend.ToString());
+                rowTemp30.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp31 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp31.SetCellValue(listModel[i].isHot.ToString());
+                rowTemp31.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp32 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp32.SetCellValue(listModel[i].isDel.ToString());
+                rowTemp32.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp33 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp33.SetCellValue(listModel[i].initialSales.ToString());
+                rowTemp33.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp34 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp34.SetCellValue(listModel[i].areaCode.ToString());
+                rowTemp34.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp35 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp35.SetCellValue(listModel[i].publisherId.ToString());
+                rowTemp35.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp36 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp36.SetCellValue(listModel[i].approverId.ToString());
+                rowTemp36.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp37 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp37.SetCellValue(listModel[i].auditStatus.ToString());
+                rowTemp37.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            var rowTemp38 = rowTemp.CreateCell(cellNumTemp);
+                rowTemp38.SetCellValue(listModel[i].auditTime.ToString());
+                rowTemp38.CellStyle = commonCellStyle;
+                cellNumTemp++;
+
+            }
+            // 鍐欏叆鍒癳xcel
+            string webRootPath = _webHostEnvironment.WebRootPath;
+            string tpath = "/files/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
+            string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-CoreCmsGoods瀵煎嚭(鏌ヨ缁撴灉).xls";
+            string filePath = webRootPath + tpath;
+            DirectoryInfo di = new DirectoryInfo(filePath);
+            if (!di.Exists)
+            {
+                di.Create();
+            }
+            FileStream fileHssf = new FileStream(filePath + fileName, FileMode.Create);
+            book.Write(fileHssf);
+            fileHssf.Close();
+
+            jm.code = 0;
+            jm.msg = GlobalConstVars.ExcelExportSuccess;
+            jm.data = tpath + fileName;
+
+            return jm;
+        }
+        #endregion
+
+        
+        #region 璁剧疆鏄惁铏氭嫙鍟嗗搧============================================================
+        // POST: Api/CoreCmsGoods/DoSetisNomalVirtual/10
+        /// <summary>
+        /// 璁剧疆鏄惁铏氭嫙鍟嗗搧
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("璁剧疆鏄惁铏氭嫙鍟嗗搧")]
+        public async Task<AdminUiCallBack> DoSetisNomalVirtual([FromBody]FMUpdateBoolDataByIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (oldModel == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            oldModel.isNomalVirtual = (bool)entity.data;
+
+            var bl = await _DistributionGoodsServices.UpdateAsync(p => new CoreCmsGoods() { isNomalVirtual = oldModel.isNomalVirtual }, p => p.id == oldModel.id);
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+		}
+        #endregion
+        
+        #region 璁剧疆鏄惁涓婃灦============================================================
+        // POST: Api/CoreCmsGoods/DoSetisMarketable/10
+        /// <summary>
+        /// 璁剧疆鏄惁涓婃灦
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("璁剧疆鏄惁涓婃灦")]
+        public async Task<AdminUiCallBack> DoSetisMarketable([FromBody]FMUpdateBoolDataByIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (oldModel == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            oldModel.isMarketable = (bool)entity.data;
+
+            var bl = await _DistributionGoodsServices.UpdateAsync(p => new CoreCmsGoods() { isMarketable = oldModel.isMarketable }, p => p.id == oldModel.id);
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+		}
+        #endregion
+        
+        #region 璁剧疆鏄惁鎺ㄨ崘============================================================
+        // POST: Api/CoreCmsGoods/DoSetisRecommend/10
+        /// <summary>
+        /// 璁剧疆鏄惁鎺ㄨ崘
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("璁剧疆鏄惁鎺ㄨ崘")]
+        public async Task<AdminUiCallBack> DoSetisRecommend([FromBody]FMUpdateBoolDataByIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (oldModel == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            oldModel.isRecommend = (bool)entity.data;
+
+            var bl = await _DistributionGoodsServices.UpdateAsync(p => new CoreCmsGoods() { isRecommend = oldModel.isRecommend }, p => p.id == oldModel.id);
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+		}
+        #endregion
+        
+        #region 璁剧疆鏄惁鐑棬============================================================
+        // POST: Api/CoreCmsGoods/DoSetisHot/10
+        /// <summary>
+        /// 璁剧疆鏄惁鐑棬
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("璁剧疆鏄惁鐑棬")]
+        public async Task<AdminUiCallBack> DoSetisHot([FromBody]FMUpdateBoolDataByIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (oldModel == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            oldModel.isHot = (bool)entity.data;
+
+            var bl = await _DistributionGoodsServices.UpdateAsync(p => new CoreCmsGoods() { isHot = oldModel.isHot }, p => p.id == oldModel.id);
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+		}
+        #endregion
+        
+        #region 璁剧疆鏄惁鍒犻櫎============================================================
+        // POST: Api/CoreCmsGoods/DoSetisDel/10
+        /// <summary>
+        /// 璁剧疆鏄惁鍒犻櫎
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("璁剧疆鏄惁鍒犻櫎")]
+        public async Task<AdminUiCallBack> DoSetisDel([FromBody]FMUpdateBoolDataByIntId entity)
+        {
+            var jm = new AdminUiCallBack();
+
+            var oldModel = await _DistributionGoodsServices.QueryByIdAsync(entity.id, false);
+            if (oldModel == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                return jm;
+            }
+            oldModel.isDel = (bool)entity.data;
+
+            var bl = await _DistributionGoodsServices.UpdateAsync(p => new CoreCmsGoods() { isDel = oldModel.isDel }, p => p.id == oldModel.id);
+            jm.code = bl ? 0 : 1;
+            jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+
+            return jm;
+		}
+        #endregion
+        
+
+    }
+}
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/corecmsproducts/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/corecmsproducts/index.html
index a1cdb74..b50f576 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/corecmsproducts/index.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/corecmsproducts/index.html
@@ -236,7 +236,7 @@
                     function(data) {
                         var field = data.field;
                         searchwhere = field;
-                        debugger
+                        
                         //鎵ц閲嶈浇
                         table.reloadData('LAY-app-CoreCmsbaifenProducts-tableBox',{ where: field });
                     });
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/create.html
new file mode 100644
index 0000000..d86c645
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/create.html
@@ -0,0 +1,396 @@
+<script type="text/html" template lay-done="layui.data.done(d);">
+<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsGoods-createForm" id="LAY-app-CoreCmsGoods-createForm">
+	
+	<div class="layui-form-item">
+        <label for="id" class="layui-form-label  layui-form-required">鍟嗗搧ID</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="id"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ晢鍝両D" lay-reqText="璇疯緭鍏ュ晢鍝両D骞朵负鏁板瓧"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="bn" class="layui-form-label  layui-form-required">鍟嗗搧鏉$爜</label>
+        <div class="layui-input-block">
+        <input name="bn"   lay-verType="tips" lay-verify="required|verifybn" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佹潯鐮�" placeholder="璇疯緭鍏ュ晢鍝佹潯鐮�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="name" class="layui-form-label  layui-form-required">鍟嗗搧鍚嶇О</label>
+        <div class="layui-input-block">
+        <input name="name"   lay-verType="tips" lay-verify="required|verifyname" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佸悕绉�" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="brief" class="layui-form-label  layui-form-required">鍟嗗搧绠�浠�</label>
+        <div class="layui-input-block">
+        <input name="brief"   lay-verType="tips" lay-verify="required|verifybrief" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佺畝浠�" placeholder="璇疯緭鍏ュ晢鍝佺畝浠�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="image" class="layui-form-label  layui-form-required">缂╃暐鍥�</label>
+        <div class="layui-input-inline">
+            <input name="image" id="imageInput" lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇蜂笂浼犵缉鐣ュ浘" lay-reqText="璇蜂笂浼犵缉鐣ュ浘"  />
+        </div>
+		<div class="layui-input-inline">
+            <img class="coreshop-upload-img" id="viewImgBoximage"  src="{{ layui.setter.noImagePicUrl }}">
+            <button type="button" class="layui-btn" id="upBtnimage" lay-active="doCropperImg">涓婁紶鍥剧墖</button>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="images" class="layui-form-label  layui-form-required">鍥鹃泦</label>
+        <div class="layui-input-inline">
+            <input name="images" id="imagesInput" lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇蜂笂浼犲浘闆�" lay-reqText="璇蜂笂浼犲浘闆�"  />
+        </div>
+		<div class="layui-input-inline">
+            <img class="coreshop-upload-img" id="viewImgBoximages"  src="{{ layui.setter.noImagePicUrl }}">
+            <button type="button" class="layui-btn" id="upBtnimages" lay-active="doCropperImg">涓婁紶鍥剧墖</button>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="video" class="layui-form-label  layui-form-required">瑙嗛</label>
+        <div class="layui-input-block">
+        <input name="video"   lay-verType="tips" lay-verify="required|verifyvideo" class="layui-input"  lay-reqText="璇疯緭鍏ヨ棰�" placeholder="璇疯緭鍏ヨ棰�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="productsDistributionType" class="layui-form-label  layui-form-required">浣i噾鍒嗛厤鏂瑰紡</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="productsDistributionType"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ヤ剑閲戝垎閰嶆柟寮�" lay-reqText="璇疯緭鍏ヤ剑閲戝垎閰嶆柟寮忓苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="goodsCategoryId" class="layui-form-label  layui-form-required">鍟嗗搧鍒嗙被</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="goodsCategoryId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ晢鍝佸垎绫�" lay-reqText="璇疯緭鍏ュ晢鍝佸垎绫诲苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="goodsTypeId" class="layui-form-label  layui-form-required">鍟嗗搧绫诲埆</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="goodsTypeId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ晢鍝佺被鍒�" lay-reqText="璇疯緭鍏ュ晢鍝佺被鍒苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="goodsSkuIds" class="layui-form-label  layui-form-required">sku搴忓垪</label>
+        <div class="layui-input-block">
+        <input name="goodsSkuIds"   lay-verType="tips" lay-verify="required|verifygoodsSkuIds" class="layui-input"  lay-reqText="璇疯緭鍏ku搴忓垪" placeholder="璇疯緭鍏ku搴忓垪"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="goodsParamsIds" class="layui-form-label  layui-form-required">鍙傛暟搴忓垪</label>
+        <div class="layui-input-block">
+        <input name="goodsParamsIds"   lay-verType="tips" lay-verify="required|verifygoodsParamsIds" class="layui-input"  lay-reqText="璇疯緭鍏ュ弬鏁板簭鍒�" placeholder="璇疯緭鍏ュ弬鏁板簭鍒�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="brandId" class="layui-form-label  layui-form-required">鍝佺墝</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="brandId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ搧鐗�" lay-reqText="璇疯緭鍏ュ搧鐗屽苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item" pane>
+        <label for="isNomalVirtual" class="layui-form-label  layui-form-required">鏄惁铏氭嫙鍟嗗搧</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="switch" name="isNomalVirtual"   lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+	
+	<div class="layui-form-item" pane>
+        <label for="isMarketable" class="layui-form-label  layui-form-required">鏄惁涓婃灦</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="switch" name="isMarketable"   lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="unit" class="layui-form-label  layui-form-required">鍟嗗搧鍗曚綅</label>
+        <div class="layui-input-block">
+        <input name="unit"   lay-verType="tips" lay-verify="required|verifyunit" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佸崟浣�" placeholder="璇疯緭鍏ュ晢鍝佸崟浣�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="intro" class="layui-form-label  layui-form-required">鍟嗗搧璇︽儏</label>
+        <div class="layui-input-block">
+        <input name="intro"   lay-verType="tips" lay-verify="required" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佽鎯�" placeholder="璇疯緭鍏ュ晢鍝佽鎯�" />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="spesDesc" class="layui-form-label  layui-form-required">鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌�</label>
+        <div class="layui-input-block">
+        <input name="spesDesc"   lay-verType="tips" lay-verify="required" class="layui-input"  lay-reqText="璇疯緭鍏ュ晢鍝佽鏍煎簭鍒楀彿瀛樺偍" placeholder="璇疯緭鍏ュ晢鍝佽鏍煎簭鍒楀彿瀛樺偍" />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="parameters" class="layui-form-label  layui-form-required">鍙傛暟搴忓垪鍖�</label>
+        <div class="layui-input-block">
+        <input name="parameters"   lay-verType="tips" lay-verify="required" class="layui-input"  lay-reqText="璇疯緭鍏ュ弬鏁板簭鍒楀寲" placeholder="璇疯緭鍏ュ弬鏁板簭鍒楀寲" />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="commentsCount" class="layui-form-label  layui-form-required">璇勮娆℃暟</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="commentsCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ヨ瘎璁烘鏁�" lay-reqText="璇疯緭鍏ヨ瘎璁烘鏁板苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="viewCount" class="layui-form-label  layui-form-required">娴忚娆℃暟</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="viewCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ユ祻瑙堟鏁�" lay-reqText="璇疯緭鍏ユ祻瑙堟鏁板苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="buyCount" class="layui-form-label  layui-form-required">璐拱娆℃暟</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="buyCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ヨ喘涔版鏁�" lay-reqText="璇疯緭鍏ヨ喘涔版鏁板苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="uptime" class="layui-form-label  layui-form-required">涓婃灦鏃堕棿</label>
+        <div class="layui-input-block">
+            <input name="uptime"  id="createTime-CoreCmsGoods-uptime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ヤ笂鏋舵椂闂�" lay-reqText="璇疯緭鍏ヤ笂鏋舵椂闂�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="downtime" class="layui-form-label  layui-form-required">涓嬫灦鏃堕棿</label>
+        <div class="layui-input-block">
+            <input name="downtime"  id="createTime-CoreCmsGoods-downtime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ヤ笅鏋舵椂闂�" lay-reqText="璇疯緭鍏ヤ笅鏋舵椂闂�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="sort" class="layui-form-label  layui-form-required">鍟嗗搧鎺掑簭</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="sort"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ晢鍝佹帓搴�" lay-reqText="璇疯緭鍏ュ晢鍝佹帓搴忓苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="labelIds" class="layui-form-label  layui-form-required">鏍囩id閫楀彿鍒嗛殧</label>
+        <div class="layui-input-block">
+        <input name="labelIds"   lay-verType="tips" lay-verify="required|verifylabelIds" class="layui-input"  lay-reqText="璇疯緭鍏ユ爣绛緄d閫楀彿鍒嗛殧" placeholder="璇疯緭鍏ユ爣绛緄d閫楀彿鍒嗛殧"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="newSpec" class="layui-form-label  layui-form-required">鑷畾涔夎鏍煎悕绉�</label>
+        <div class="layui-input-block">
+        <input name="newSpec"   lay-verType="tips" lay-verify="required" class="layui-input"  lay-reqText="璇疯緭鍏ヨ嚜瀹氫箟瑙勬牸鍚嶇О" placeholder="璇疯緭鍏ヨ嚜瀹氫箟瑙勬牸鍚嶇О" />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="openSpec" class="layui-form-label  layui-form-required">寮�鍚鍒�</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="openSpec"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ紑鍚鍒�" lay-reqText="璇疯緭鍏ュ紑鍚鍒欏苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="createTime" class="layui-form-label  layui-form-required">鍒涘缓鏃堕棿</label>
+        <div class="layui-input-block">
+            <input name="createTime"  id="createTime-CoreCmsGoods-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" lay-reqText="璇疯緭鍏ュ垱寤烘椂闂�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="updateTime" class="layui-form-label  layui-form-required">鏇存柊鏃堕棿</label>
+        <div class="layui-input-block">
+            <input name="updateTime"  id="createTime-CoreCmsGoods-updateTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" lay-reqText="璇疯緭鍏ユ洿鏂版椂闂�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item" pane>
+        <label for="isRecommend" class="layui-form-label  layui-form-required">鏄惁鎺ㄨ崘</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="switch" name="isRecommend"   lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+	
+	<div class="layui-form-item" pane>
+        <label for="isHot" class="layui-form-label  layui-form-required">鏄惁鐑棬</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="switch" name="isHot"   lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+	
+	<div class="layui-form-item" pane>
+        <label for="isDel" class="layui-form-label  layui-form-required">鏄惁鍒犻櫎</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="switch" name="isDel"   lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="initialSales" class="layui-form-label  layui-form-required">鍒濆閿�閲�</label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="initialSales"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" lay-reqText="璇疯緭鍏ュ垵濮嬮攢閲忓苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="areaCode" class="layui-form-label  layui-form-required"></label>
+        <div class="layui-input-block">
+        <input name="areaCode"   lay-verType="tips" lay-verify="required|verifyareaCode" class="layui-input"  lay-reqText="璇疯緭鍏�" placeholder="璇疯緭鍏�"/>
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="publisherId" class="layui-form-label  layui-form-required"></label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="publisherId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="approverId" class="layui-form-label  layui-form-required"></label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="approverId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="auditStatus" class="layui-form-label  layui-form-required"></label>
+        <div class="layui-input-block">
+            <input  type="number" min="0" max="999999" name="auditStatus"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+        </div>
+    </div>
+	
+	<div class="layui-form-item">
+        <label for="auditTime" class="layui-form-label  layui-form-required"></label>
+        <div class="layui-input-block">
+            <input name="auditTime"  id="createTime-CoreCmsGoods-auditTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏�"  />
+        </div>
+    </div>
+	
+      <div class="layui-form-item text-right core-hidden">
+        <input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsGoods-createForm-submit" id="LAY-app-CoreCmsGoods-createForm-submit" value="纭娣诲姞">
+    </div>
+</div>
+</script>
+<script>
+    var debug= layui.setter.debug;
+    layui.data.done = function (d) {
+        //寮�鍚皟璇曟儏鍐典笅鑾峰彇鎺ュ彛璧嬪�兼暟鎹�
+        if (debug) { console.log(d.params.data); }
+        layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
+        function () {
+            var $ = layui.$
+                , form = layui.form
+                , admin = layui.admin
+                , laydate = layui.laydate
+                , upload = layui.upload
+                , cropperImg = layui.cropperImg
+                , coreHelper = layui.coreHelper;
+	        
+            //缂╃暐鍥惧浘鐗囪鍓笂浼�
+            $('#upBtnimage').click(function () {
+                cropperImg.cropImg({
+                    aspectRatio: 1 / 1,
+                    imgSrc: $('#viewImgBoximage').attr('src'),
+                    onCrop: function (data) {
+                        var loadIndex = layer.load(2);
+                        coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
+                            if (0 === res.code) {
+                                $('#viewImgBoximage').attr('src', res.data.fileUrl);
+                                $("#imageInput").val(res.data.fileUrl);
+                                layer.msg(res.msg);
+                                layer.close(loadIndex);
+                            } else {
+                                layer.close(loadIndex);
+                                layer.msg(res.msg, { icon: 2, anim: 6 });
+                            }
+                        });
+                    }
+                });
+            });
+            
+            //鍥鹃泦鍥剧墖瑁佸壀涓婁紶
+            $('#upBtnimages').click(function () {
+                cropperImg.cropImg({
+                    aspectRatio: 1 / 1,
+                    imgSrc: $('#viewImgBoximages').attr('src'),
+                    onCrop: function (data) {
+                        var loadIndex = layer.load(2);
+                        coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
+                            if (0 === res.code) {
+                                $('#viewImgBoximages').attr('src', res.data.fileUrl);
+                                $("#imagesInput").val(res.data.fileUrl);
+                                layer.msg(res.msg);
+                                layer.close(loadIndex);
+                            } else {
+                                layer.close(loadIndex);
+                                layer.msg(res.msg, { icon: 2, anim: 6 });
+                            }
+                        });
+                    }
+                });
+            });
+            
+            laydate.render({
+                elem: '#createTime-CoreCmsGoods-uptime',
+                type: 'datetime',
+                value: new Date(),
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#createTime-CoreCmsGoods-downtime',
+                type: 'datetime',
+                value: new Date(),
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#createTime-CoreCmsGoods-createTime',
+                type: 'datetime',
+                value: new Date(),
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#createTime-CoreCmsGoods-updateTime',
+                type: 'datetime',
+                value: new Date(),
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#createTime-CoreCmsGoods-auditTime',
+                type: 'datetime',
+                value: new Date(),
+                fullPanel: true
+            });
+	        form.verify({
+                
+		        verifybn: [/^.{0,30}$/,'鍟嗗搧鏉$爜鏈�澶у彧鍏佽杈撳叆30浣嶅瓧绗�'],
+		        verifyname: [/^.{0,200}$/,'鍟嗗搧鍚嶇О鏈�澶у彧鍏佽杈撳叆200浣嶅瓧绗�'],
+		        verifybrief: [/^.{0,255}$/,'鍟嗗搧绠�浠嬫渶澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyimage: [/^.{0,255}$/,'缂╃暐鍥炬渶澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyvideo: [/^.{0,255}$/,'瑙嗛鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifygoodsSkuIds: [/^.{0,255}$/,'sku搴忓垪鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifygoodsParamsIds: [/^.{0,255}$/,'鍙傛暟搴忓垪鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyunit: [/^.{0,20}$/,'鍟嗗搧鍗曚綅鏈�澶у彧鍏佽杈撳叆20浣嶅瓧绗�'],
+		        verifylabelIds: [/^.{0,50}$/,'鏍囩id閫楀彿鍒嗛殧鏈�澶у彧鍏佽杈撳叆50浣嶅瓧绗�'],
+		        verifyareaCode: [/^.{0,200}$/,'鏈�澶у彧鍏佽杈撳叆200浣嶅瓧绗�'],
+	        });
+            //閲嶈浇form
+            form.render(null, 'LAY-app-CoreCmsGoods-createForm');
+        })
+    };
+</script>
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/details.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/details.html
new file mode 100644
index 0000000..6cfb173
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/details.html
@@ -0,0 +1,764 @@
+
+<script type="text/html" template lay-done="layui.data.done(d);">
+    <div class="layui-fluid addGoods">
+        <div class="layui-row layui-col-space15">
+
+            <div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsGoods-editForm" id="LAY-app-CoreCmsGoods-editForm">
+
+                <div class="layui-tab layui-tab-card" style="margin: 0 0 10px 0">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this">鍩虹淇℃伅</li>
+                        <li>鍥鹃泦/瑙嗛</li>
+                        <li>SKU/璐у搧璁剧疆</li>
+                        <li>鍙傛暟璁剧疆</li>
+                        <li>浼氬憳鎶樻墸</li>
+                        <li>鍟嗗搧璇︽儏</li>
+                    </ul>
+                    <div class="layui-tab-content" style="min-height: 500px;">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">鍟嗗搧鍚嶇О</label>
+                                <div class="layui-input-inline layui-inline-100 layui-form-mid">{{d.params.data.model.name }}</div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label for="goodsCategoryId" class="layui-form-label">鍟嗗搧鍒嗙被</label>
+                                <div class="layui-input-inline layui-inline-6">
+                                    <div id="goodsCategoryId_SelectCreateTree" class="ew-xmselect-tree" lay-verType="tips" lay-reqText="璇烽�夋嫨鍟嗗搧鍒嗙被"></div>
+                                </div>
+                                <label class="layui-form-label">鎵╁睍鍒嗙被锛�</label>
+                                <div class="layui-input-inline layui-inline-10">
+                                    <div id="goodsCategoryIdExtend_SelectCreateTree" class="xm-select-demo"></div>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label for="brandId" class="layui-form-label">鍝佺墝</label>
+                                <div class="layui-input-inline layui-inline-6" id="brandIdView">
+                                    <select name="goods[brandId]" id="brandId" disabled="disabled">
+                                        <option value="0">鏃�</option>
+                                        {{# layui.each(d.params.data.brands, function(index, item){ }}
+                                        <option value="{{ item.id }}" {{item.id===d.params.data.model.brandId?'selected="selected"':''}}>{{ item.name }}</option>
+                                        {{# }); }}
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">鍟嗗搧缂栫爜</label>
+                                <div class="layui-input-inline layui-inline-100 layui-form-mid">{{d.params.data.model.bn }}</div>
+
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">鍟嗗搧绠�浠�</label>
+                                <div class="layui-input-inline layui-inline-100 layui-form-mid">{{d.params.data.model.brief }}</div>
+                            </div>
+                            <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">鍏朵粬鍙傛暟</a></legend></fieldset>
+
+                            <div class="layui-form-item">
+
+                                <label class="layui-form-label">鍗曚綅</label>
+                                <div class="layui-input-inline layui-inline-3 layui-form-mid">{{d.params.data.model.unit }}</div>
+
+                                <label class="layui-form-label">鍟嗗搧鎺掑簭</label>
+                                <div class="layui-input-inline layui-inline-3 layui-form-mid">{{d.params.data.model.sort }}</div>
+
+                            </div>
+
+
+                            <div class="layui-form-item">
+                                <label for="isMarketable" class="layui-form-label layui-form-required">鏄惁涓婃灦</label>
+                                <div class="layui-input-inline layui-inline-3">
+                                    <input type="checkbox" lay-filter="switch" name="goods[isMarketable]" {{d.params.data.model.isMarketable ?'checked="checked"':'' }} id="isMarketable" lay-skin="switch" lay-text="涓婃灦|涓嬫灦" disabled="disabled">
+                                </div>
+                                <label for="isNomalVirtual" class="layui-form-label layui-form-required">铏氭嫙鍟嗗搧</label>
+                                <div class="layui-input-inline layui-inline-3">
+                                    <input type="checkbox" lay-filter="switch" name="goods[isNomalVirtual]" {{d.params.data.model.isNomalVirtual ?'checked="checked"':'' }} id="isNomalVirtual" lay-skin="switch" lay-text="鏄瘄鍚�" disabled="disabled">
+                                </div>
+                                <label for="isRecommend" class="layui-form-label layui-form-required">鏄惁鎺ㄨ崘</label>
+                                <div class="layui-input-inline layui-inline-3">
+                                    <input type="checkbox" lay-filter="switch" name="goods[isRecommend]" {{d.params.data.model.isRecommend ?'checked="checked"':'' }} id="isRecommend" lay-skin="switch" lay-text="鏄瘄鍚�" disabled="disabled">
+                                </div>
+                                <label for="isHot" class="layui-form-label layui-form-required">鏄惁鐑棬</label>
+                                <div class="layui-input-inline layui-inline-3">
+                                    <input type="checkbox" lay-filter="switch" name="goods[isHot]" {{d.params.data.model.isHot ?'checked="checked"':'' }} id="isHot" lay-skin="switch" lay-text="鏄瘄鍚�" disabled="disabled">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="layui-tab-item">
+                            <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">灏侀潰鍥�</a></legend></fieldset>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label" for="avatarImage">灏侀潰鍥撅細</label>
+                                <div class="layui-input-inline layui-inline-12 layui-form-mid">{{d.params.data.model.image}}</div>
+                                <div class="layui-input-inline">
+                                    <div class="layui-upload">
+                                        <img class="layui-upload-img" id="viewImgBox" src="{{d.params.data.model.image || layui.setter.noImagePicUrl }}">
+                                    </div>
+                                </div>
+                            </div>
+                            <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">鍥鹃泦</a></legend></fieldset>
+
+                            <div class="layui-form-item">
+                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                    <div class="layui-upload-list" id="upload-more-list"></div>
+                                </blockquote>
+                            </div>
+
+                            <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">濯掍綋</a></legend></fieldset>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label" for="video">瑙嗛锛�</label>
+                                <div class="layui-input-inline layui-inline-12 layui-form-mid">{{d.params.data.model.video ||'鏃�'}}</div>
+                            </div>
+                        </div>
+
+                        <div class="layui-tab-item">
+                            <!--<blockquote class="layui-elem-quote">
+                                1銆侀�夋嫨瀵瑰簲鐨勩�愬晢鍝佺被鍨嬨�戯紝灏嗚繘鍏ュSKU璐у搧妯″紡銆傚悓鏃跺鏋滅被鍒湁鍙傛暟锛屼篃灏嗚繘琛屾樉绀鸿缃��<br/>
+                                2銆佽缃SKU鍚庯紝鍟嗗搧鏈韩鐨勪环鏍煎彧鍋氬澶栧睍绀虹敤锛屽疄闄呬互杩涘叆鍟嗗搧璇︽儏閫夋嫨涓嶅悓璐у搧涓哄噯銆�<br/>
+                                3銆佽揣鍝丼KU缁勫悎灞炴�у�煎彧鏀寔锛氫腑鏂囥�佽嫳鏂囥�佹暟瀛椼�佸ぇ鍐欑鍙凤紝灏忓啓绗﹀彿涓変釜锛�-銆�/銆�.锛夛級<br/>
+                                4銆佽揣鍙峰繀椤讳负SN瀛楁瘝寮�澶�<br/>
+                                5銆佸鏋滀笉璁剧疆鍗曡揣鍝侀噸閲忥紝灏嗛粯璁や娇鐢ㄥ晢鍝侀噸閲忎负1涓崟浣嶇殑閲嶉噺銆�
+                            </blockquote>-->
+
+                            <div class="layui-form-item">
+                                <label for="brandId" class="layui-form-label">浣i噾璁剧疆</label>
+                                <div class="layui-input-inline layui-inline-6">
+                                    {{# layui.each(d.params.data.productsDistributionType, function(index, item){ }}
+                                    <input type="radio" name="goods[productsDistributionType]" disabled="disabled" value="{{ item.value }}" title="{{ item.description }}" {{item.value===d.params.data.model.productsDistributionType?'checked="checked"':''}}>
+                                    {{# }); }}
+                                </div>
+                            </div>
+                            <!--<div class="layui-form-item">
+                                <label class="layui-form-label">寮�鍚疭KU</label>
+                                <div class="layui-input-inline">
+                                    <button type="button" class="layui-btn layui-btn-danger layui-btn-sm" id="openSpecBtn" lay-active="openSpecBtn" data-id="typeInfo.id" style="margin-top:5px;margin-left: 10px;">鍚敤SKU</button>
+                                </div>
+                            </div>-->
+
+                            <div class="layui-form-item" id="goodsTypeIdViewBox" style="display: none;">
+                                <label for="goodsTypeId" class="layui-form-label">閫夋嫨SKU妯″瀷</label>
+                                <div class="layui-input-inline layui-inline-10">
+                                    <div id="goodsSku_SelectCreateTree" class="xm-select-demo"></div>
+                                </div>
+                            </div>
+                            <div id="product-info">
+                            </div>
+                        </div>
+
+                        <div class="layui-tab-item">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">鍙傛暟妯″瀷閫夋嫨</label>
+                                <div class="layui-input-inline layui-inline-10">
+                                    <div id="goodsParams_SelectCreateTree" class="xm-select-demo"></div>
+                                </div>
+                            </div>
+                            <div id="parametersBox">
+                            </div>
+                        </div>
+
+                        <div class="layui-tab-item">
+                            <blockquote class="layui-elem-quote">
+                                浼氬憳浠蜂负0鏃讹紝浣跨敤榛樿浠锋牸銆傚ぇ浜�0鏃讹紝鍟嗗搧瀹為檯浠锋牸=璐у搧閿�鍞环-浼氬憳浠�
+                            </blockquote>
+                            <div class="layui-form-item">
+                                {{# layui.each(d.params.data.userGrade, function(index, item){ }}
+                                <label class="layui-form-label layui-form-required">{{ item.title }}</label>
+                                <div class="layui-input-inline layui-inline-3 layui-form-mid">{{getUserGradePrice(d.params.data.goodsGrades, item.id, item.value || 0)}}</div>
+                                {{# }); }}
+                            </div>
+                        </div>
+
+                        <div class="layui-tab-item">
+                            <div class="layui-form-item layui-form-text">
+                                <div class="layui-input-block">
+                                    {{-d.params.data.model.intro}}
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</script>
+
+<script id="getSpec_tpl" type="text/html">
+    <table class="layui-table" lay-size="sm">
+        <colgroup>
+            <col width="150">
+            <col width="150">
+            <col width="150">
+            <col>
+            <col width="80">
+            <col width="80">
+            <col width="80">
+            <col width="80">
+            <col width="80">
+            <col width="100">
+            <col width="100">
+            <col width="100">
+            <col width="100">
+        </colgroup>
+        <thead>
+            <tr>
+                <th>榛樿璐у搧</th>
+                <th>鍥剧墖</th>
+                <th>璐у彿</th>
+                <th>SKU</th>
+
+                <th>閲嶉噺(鍏�)</th>
+                <!-- <th>璧犻�佺Н鍒�</th>
+                    <th>绉垎鏈�澶�<br />鍙姷閲戦</th> -->
+                <th>搴撳瓨鏁伴噺</th>
+                <th>鍐荤粨搴撳瓨</th>
+                <th style="width: 60px;">寤鸿闆跺敭浠�</th>
+                <th><i class="required-color">*</i>閿�鍞环</th>
+                <th>缁忛攢鍟嗕环</th>
+                <th>鎴愭湰浠�</th>
+
+                <th style="width: 60px;">鎺ㄥ箍缁忛攢鍟嗛噰璐繑鐜�</th>
+                <th>鎺ㄥ箍鐢ㄦ埛璐拱杩旂幇</th>
+                <th style="width: 80px;">鏀寔瀹氬埗</th>
+                <!-- <th>浜岀骇杩旂幇</th>
+                <!-- <th>涓夌骇杩旂幇</th> -->
+                -->
+            </tr>
+        </thead>
+        <tbody id="productsTbody">
+            {{# layui.each(d, function(index, item){ }}
+            <tr>
+                <td>
+                    <input type="hidden" value="{{item.id}}" name="product[id][]" />
+                    <input type="hidden" value="{{item.goodsId || 0}}" name="product[goodsId][]" />
+                    <input type="checkbox" id="product[{{item.spesDesc}}][isDefalut]" name="product[isDefalut][]" title="鏄惁榛樿" {{item.isDefalut? 'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}" class="isdefalut" lay-filter="isdefalut" disabled="disabled">
+                </td>
+                <td class="spec-td">
+                    <div class="spec_image">
+                        <div class="spec_image_item">
+                            <!--<div class="del-img">
+                                x
+                            </div>-->
+                            <img src="{{ item.images && item.images !='null'? item.images : layui.setter.noImagePicUrl }}" id="productImagesSrc" style="width:60px;height:60px">
+                        </div>
+                        <input type="hidden" id="productImagesInput" name="product[images][]" value="{{item.images}}">
+                    </div>
+                </td>
+                <td>
+                    {{item.sn}}
+                </td>
+                <td>
+                    {{item.spesDesc}}
+                </td>
+
+                <td>
+                    {{item.weight}}
+                </td>
+
+                <td class="have-add-td">
+                    {{item.stock}}
+                </td>
+                <td>
+                    {{item.freezeStock}}
+                </td>
+                <td>
+                    {{item.mktprice}}
+                </td>
+                <td>
+                    {{item.price}}
+                </td>
+
+                <td>
+                    {{item.distributionPrice}}
+                </td>
+                <td>
+                    {{item.costprice}}
+                </td>
+                <td>
+                    {{item.distributionCutMoney}}
+                </td>
+                <td>
+                    {{item.cutMoney}}
+                </td>
+                {{#if (item.isCustomizable == true){}}
+                <td style="color: red;">鏄�</td>
+                {{#}else{}}
+                <td>鍚�</td>
+                {{#}}}
+                <!-- <td>
+                    {{item.levelOne}}
+                </td>
+                <td>
+                    {{item.levelTwo}}
+                </td>
+                <td>
+                    {{item.levelThree}}
+                </td> -->
+            </tr>
+            {{# }); }}
+        </tbody>
+    </table>
+</script>
+
+
+<script id="params_tpl" type="text/html">
+
+    {{# if(d.goodsParams){ }}
+    <blockquote class="layui-elem-quote">
+        {{# layui.each(d.goodsParams, function(index, item){ }}
+        <div class="layui-form-item" {{#if(item.type && item.type!='text'){}} pane {{# } }}>
+            <label class="layui-form-label">{{item.name}}</label>
+            <div class="layui-input-block">
+                {{# if(item.type && item.type==='radio'){ }}
+                {{# layui.each(layui.coreHelper.stringToArray(item.value), function(indexRadio, itemRadio){ }}
+                <input type="radio" name="paramsValue[{{index}}]" value="{{itemRadio}}" title="{{itemRadio}}" {{ setRadioParameters(d.arrParameters, item.id , itemRadio) ?'checked':'' }} lay-verType="tips" lay-verify="required" disabled="disabled">
+                {{# }); }}
+                {{# } else if (item.type && item.type==='checkbox'){ }}
+                {{# layui.each(layui.coreHelper.stringToArray(item.value), function(indexCheckbox, itemCheckbox){ }}
+                <input type="checkbox" name="paramsValue[{{index}}][]" value="{{itemCheckbox}}" lay-skin="primary" {{ setCheckboxParameters(d.arrParameters, item.id , itemCheckbox) ?'checked':'' }} title="{{itemCheckbox}}" disabled="disabled">
+                {{# }); }}
+                {{# } else if (item.type && item.type==='text'){ }}
+                <input type="text" name="paramsValue[{{index}}]" value="{{setTextParameters(d.arrParameters, item.id)}}" class="layui-input" disabled="disabled">
+                {{# } else { }}
+                {{# } }}
+            </div>
+        </div>
+        {{# }); }}
+    </blockquote>
+    {{# } }}
+</script>
+
+<script id="sku_tpl" type="text/html">
+    <form id="spec_form">
+        <div id="spec_select" style="display: none">
+            <blockquote class="layui-elem-quote">
+                {{# if(d.goodsTypeSpec){ }}
+                {{# layui.each(d.goodsTypeSpec, function(index, item){ }}
+                <div class="layui-card">
+                    <div class="layui-card-header">{{item.name}}</div>
+                    <div class="layui-card-body">
+                        <div class="layui-form-item">
+                            {{# layui.each(item.specValues, function(indexValue, itemValue){ }}
+                            <div class="spec-item">
+                                <div class="checkboxBox">
+                                    <input type="checkbox" name="selectSpec&&{{itemValue.id}}&&{{item.name}}" value="{{itemValue.value}}" lay-skin="switch" {{isSelectedTypeSpec(d.model.spesDesc, itemValue.id,item.name)?'checked="checked"':''}} lay-filter="spec_select" class="spec-select" lay-text="鍚敤|鍏抽棴" disabled="disabled">
+                                </div>
+                                <div class="layui-input-inline layui-inline-3 layui-form-mid">{{getSelectedTypeSpecValue(d.model.newSpec, itemValue.id, itemValue.value)}}</div>
+                            </div>
+                            {{# }); }}
+                        </div>
+                    </div>
+                </div>
+                {{# }); }}
+                {{# } }}
+            </blockquote>
+        </div>
+        <div id="more_spec"></div>
+    </form>
+</script>
+
+<script id="image_tpl" type="text/html">
+    {{# layui.each(d, function(index, item){  }}
+    <div class="imgdiv">
+        <img src="{{ item }}" class="layui-upload-img" onclick='layui.coreHelper.viewImage("{{ item }}")' style="width: 100px;height:100px;">
+    </div>
+    {{#  }); }}
+</script>
+
+
+<script>
+    var $;
+    var debug = layui.setter.debug;
+    var types;
+    var imgs = [];
+    var thumbnailBtn;
+    var _that = this;
+    var enptyProducts;
+    var oldSingleData = {};
+    var oldMultitermData = [];
+    var tempMultitermData = [];
+
+    layui.data.done = function (d) {
+        types = d.params.data.types;
+        //寮�鍚皟璇曟儏鍐典笅鑾峰彇鎺ュ彛璧嬪�兼暟鎹�
+        if (debug) { console.log(d.data); }
+        layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'dtree', 'view', 'laytpl', 'xmSelect', 'util', 'cropperImg'],
+            function () {
+                $ = layui.$;
+                var form = layui.form
+                    , admin = layui.admin
+                    , laydate = layui.laydate
+                    , upload = layui.upload
+                    , dtree = layui.dtree
+                    , view = layui.view
+                    , laytpl = layui.laytpl
+                    , xmSelect = layui.xmSelect
+                    , util = layui.util
+                    , cropperImg = layui.cropperImg
+                    , coreHelper = layui.coreHelper;
+                var element = layui.element;
+
+
+
+                //鍒濆鍖栧浘鐗�
+                var defaultImg = 'no';
+                if (d.params.data.model.images) {
+                    imgs = d.params.data.model.images.split(',');
+                    defaultImg = imgs[0];
+                    $('#imageIds').val(imgs);
+                    var getTpl = image_tpl.innerHTML, viewBox = document.getElementById('upload-more-list');
+                    laytpl(getTpl).render(imgs, function (html) {
+                        viewBox.innerHTML = html;
+                    });
+                }
+
+                //鍒濆鍖栧凡缁忕‘璁ゅ晢鍝丼KU
+                if (d.params.data.goodsTypeSpec) {
+                    var tmpData = { goodsTypeSpec: d.params.data.goodsTypeSpec, model: d.params.data.model };
+                    //璧嬪�煎晢鍝佸弬鏁版暟鎹�
+                    var getTpl = sku_tpl.innerHTML, viewBox = document.getElementById('product-info');
+                    laytpl(getTpl).render(tmpData, function (html) {
+                        viewBox.innerHTML = html;
+                    });
+                }
+
+                var arrParameters = [];
+                //鍒濆鍖栧凡缁忕‘璁ゅ晢鍝佸弬鏁�
+                if (d.params.data.goodsParams) {
+                    if (d.params.data.model.parameters) {
+                        var arr = d.params.data.model.parameters.split('|');
+                        for (var i = 0; i < arr.length; i++) {
+                            var arrChild = arr[i].split(':');
+                            arrParameters.push(arrChild);
+                        }
+                    }
+                    var tmpData = { goodsParams: d.params.data.goodsParams, arrParameters: arrParameters };
+                    //璧嬪�煎晢鍝佸弬鏁版暟鎹�
+                    var getTpl = params_tpl.innerHTML, viewBox = document.getElementById('parametersBox');
+                    laytpl(getTpl).render(tmpData, function (html) {
+                        viewBox.innerHTML = html;
+                    });
+                }
+
+
+                //鍒濆鍖栨暟鎹�
+                enptyProducts = {
+                    id: 0,
+                    goodsId: 0,
+                    isDefalut: true,
+                    images: layui.setter.noImagePicUrl,
+                    sn: layui.coreHelper.getSN('SN'),
+                    spesDesc: "",
+                    stock: 1000,
+                    weight: 0,
+                    price: 0,
+                    costprice: 0,
+                    mktprice: 0,
+                    levelOne: 0,
+                    levelTwo: 0,
+                    levelThree: 0,
+                }
+                oldMultitermData = d.params.data.products;
+                if (d.params.data.model.openSpec == 1) {
+                    oldSingleData = enptyProducts;
+                    tempMultitermData = d.params.data.products;
+                } else {
+                    oldSingleData = d.params.data.products[0];
+                }
+
+                //鍒濆鍖栧晢鍝佷俊鎭�
+                var getTpl = getSpec_tpl.innerHTML, viewBox = document.getElementById('more_spec');
+                var tmpData = oldMultitermData;
+                laytpl(getTpl).render(tmpData, function (html) {
+                    viewBox.innerHTML = html;
+                });
+                $('#productsCount').val(oldMultitermData.length);
+
+                if (d.params.data.model.openSpec == 1) {
+                    $("#spec_select").show();
+                    $("#parametersBox").show();
+                    $("#goodsTypeIdViewBox").show();
+                    var btn = $('#openSpecBtn');
+                    $(btn).html("鍙栨秷SKU");
+                }
+
+                // 娓叉煋鍟嗗搧鍒嗙被
+                var insXmSelGoodsCategoryId = xmSelect.render({
+                    el: '#goodsCategoryId_SelectCreateTree',
+                    height: '250px',
+                    data: d.params.data.categories.data,
+                    initValue: d.params.data.model ? [d.params.data.model.goodsCategoryId] : [],
+                    //model: { label: { type: 'text' } },
+                    name: 'goodsCategoryId',
+                    prop: {
+                        name: 'title',
+                        value: 'id'
+                    },
+                    layVerify: 'required',
+                    layVerType: 'msg',
+                    radio: true,
+                    clickClose: true,
+                    disabled: true,
+                    tree: {
+                        show: true,
+                        indent: 15,
+                        strict: false,
+                        expandedKeys: true
+                    }
+                });
+                //娓叉煋鍟嗗搧鎵╁睍鍒嗙被
+
+                var arr = [];
+                if (d.params.data.categoryExtend.length > 0) {
+                    for (var i = 0; i < d.params.data.categoryExtend.length; i++) {
+                        arr.push(d.params.data.categoryExtend[i].goodsCategroyId);
+                    }
+                }
+                var insXmSelGoodsCategoryIdExtend = xmSelect.render({
+                    el: '#goodsCategoryIdExtend_SelectCreateTree',
+                    height: '250px',
+                    data: d.params.data.categories.data,
+                    //initValue: mData ? [mData.parentId] : [],
+                    //model: { label: { type: 'text' } },
+                    name: 'goodsCategoryIdExtend',
+                    prop: {
+                        name: 'title',
+                        value: 'id'
+                    },
+                    disabled: true,
+                    initValue: arr,
+                    //layVerify: 'required',
+                    //layVerType: 'msg',
+                    //radio: false,
+                    //clickClose: true,
+                    autoRow: true,
+
+                    tree: {
+                        //鏄惁鏄剧ず鏍戠姸缁撴瀯
+                        show: true,
+                        //鏄惁灞曠ず涓夎鍥炬爣
+                        showFolderIcon: true,
+                        //鏄惁鏄剧ず铏氱嚎
+                        showLine: true,
+                        //闂磋窛
+                        indent: 20,
+                        //榛樿灞曞紑鑺傜偣鐨勬暟缁�, 涓� true 鏃�, 灞曞紑鎵�鏈夎妭鐐�
+                        expandedKeys: true,
+                        //鏄惁涓ユ牸閬靛畧鐖跺瓙妯″紡
+                        strict: false,
+                        //鏄惁寮�鍚瀬绠�妯″紡
+                        simple: false,
+                    }
+                });
+
+                var arrParams = [];
+                if (d.params.data.model.goodsParamsIds) {
+                    arrParams = d.params.data.model.goodsParamsIds.split(',');
+                }
+
+                //娓叉煋鍟嗗搧鎵╁睍鍒嗙被
+                var insGoodsParams = xmSelect.render({
+                    el: '#goodsParams_SelectCreateTree',
+                    height: '250px',
+                    data: d.params.data.paramsList,
+                    //model: { label: { type: 'text' } },
+                    name: 'goodsParamsIds',
+                    prop: {
+                        name: 'name',
+                        value: 'id'
+                    },
+                    disabled: true,
+                    initValue: arrParams,
+                    tree: {
+                        //鏄惁鏄剧ず鏍戠姸缁撴瀯
+                        show: true,
+                        //鏄惁灞曠ず涓夎鍥炬爣
+                        showFolderIcon: true,
+                        //鏄惁鏄剧ず铏氱嚎
+                        showLine: true,
+                        //闂磋窛
+                        indent: 20,
+                        //榛樿灞曞紑鑺傜偣鐨勬暟缁�, 涓� true 鏃�, 灞曞紑鎵�鏈夎妭鐐�
+                        expandedKeys: true,
+                        //鏄惁涓ユ牸閬靛畧鐖跺瓙妯″紡
+                        strict: false,
+                        //鏄惁寮�鍚瀬绠�妯″紡
+                        simple: false,
+                    }
+                });
+
+                var arrSku = [];
+                if (d.params.data.model.goodsSkuIds) {
+                    arrSku = d.params.data.model.goodsSkuIds.split(',');
+                }
+
+                //娓叉煋鍟嗗搧鎵╁睍鍒嗙被
+                var insgoodsSKU = xmSelect.render({
+                    el: '#goodsSku_SelectCreateTree',
+                    height: '250px',
+                    data: d.params.data.skuList,
+                    //model: { label: { type: 'text' } },
+                    name: 'goodsSkuIds',
+                    prop: {
+                        name: 'name',
+                        value: 'id'
+                    },
+                    disabled: true,
+                    initValue: arrSku,
+                    tree: {
+                        //鏄惁鏄剧ず鏍戠姸缁撴瀯
+                        show: true,
+                        //鏄惁灞曠ず涓夎鍥炬爣
+                        showFolderIcon: true,
+                        //鏄惁鏄剧ず铏氱嚎
+                        showLine: true,
+                        //闂磋窛
+                        indent: 20,
+                        //榛樿灞曞紑鑺傜偣鐨勬暟缁�, 涓� true 鏃�, 灞曞紑鎵�鏈夎妭鐐�
+                        expandedKeys: true,
+                        //鏄惁涓ユ牸閬靛畧鐖跺瓙妯″紡
+                        strict: false,
+                        //鏄惁寮�鍚瀬绠�妯″紡
+                        simple: false,
+                    }
+                });
+
+                function openSpecBox(is_open) {
+                    if (is_open == '0') {
+                        $("input[name=openSpec]").val("1");
+                        $("#spec_select").show();
+                        $("#goodsTypeIdViewBox").show();
+                        $("#openSpecBtn").html("鍙栨秷SKU");
+                        console.log("鍙栨秷SKU");
+
+                        if (_that.tempMultitermData.length == 0) {
+                            $('#more_spec').html('');
+                            $('#productsCount').val(0);
+                        } else {
+                            var getTpl = getSpec_tpl.innerHTML, viewBox = document.getElementById('more_spec');
+                            laytpl(getTpl).render(_that.tempMultitermData, function (html) {
+                                viewBox.innerHTML = html;
+                            });
+                            $('#productsCount').val(_that.tempMultitermData.length);
+                        }
+
+                    } else {
+                        $("input[name=openSpec]").val("0");
+                        $("#spec_select").hide();
+                        $("#goodsTypeIdViewBox").hide();
+                        $("#openSpecBtn").html("鍚敤SKU");
+                        console.log("鍚敤SKU");
+
+                        var arr = [];
+                        arr.push(_that.oldSingleData);
+                        var getTpl = getSpec_tpl.innerHTML, viewBox = document.getElementById('more_spec');
+                        laytpl(getTpl).render(arr, function (html) {
+                            viewBox.innerHTML = html;
+                        });
+                        $('#productsCount').val(1);
+                    }
+                    form.render();
+                }
+
+
+                form.render();
+
+            })
+    };
+
+    //鍒犻櫎鍥剧墖
+    function delImg(obj, imageUrl) {
+        var imgDiv = $(obj).parent().parent().parent();
+        imgDiv.remove();
+        var index = imgs.indexOf(imageUrl);
+        if (index > -1) {
+            imgs.splice(index, 1);
+        }
+        $('#imageIds').val(imgs);
+    }
+    //璁句负榛樿鍥�
+    function setDefault(obj, imageUrl) {
+        var imgDiv = $(obj).parent().parent().parent();
+        $("#upload-more-list").prepend(imgDiv);
+        var index = imgs.indexOf(imageUrl);
+        if (index > -1) {
+            imgs.unshift(imgs.splice(index, 1)[0]);
+        }
+        $('#imageIds').val(imgs);
+    }
+    //鑾峰彇璁剧疆鍙傛暟鏂囧瓧鍐呭
+    function setTextParameters(parameters, id) {
+        if (parameters) {
+            for (var i = 0; i < parameters.length; i++) {
+                if (parameters[i][0] == id) {
+                    return parameters[i][1];
+                }
+            }
+        }
+        return '';
+    }
+    //鑾峰彇璁剧疆鍙傛暟鍗曢�夊唴瀹�
+    function setRadioParameters(parameters, id, value) {
+        if (parameters) {
+            for (var i = 0; i < parameters.length; i++) {
+                if (parameters[i][0] == id && parameters[i][1] == value) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    //鑾峰彇璁剧疆鍙傛暟澶嶉�夋鍐呭
+    function setCheckboxParameters(parameters, id, value) {
+        if (parameters) {
+            for (var i = 0; i < parameters.length; i++) {
+                if (parameters[i][0] == id) {
+                    var arr = parameters[i][1].split(',');
+                    for (var j = 0; j < arr.length; j++) {
+                        if (value == arr[j]) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    //鑾峰彇涓嶅悓浼氬憳绾у埆浠锋牸
+    function getUserGradePrice(parameters, id, value) {
+        if (parameters) {
+            for (var i = 0; i < parameters.length; i++) {
+                if (parameters[i].gradeId == id) {
+                    return parameters[i].gradePrice
+                }
+            }
+            return value;
+        }
+        return value;
+    }
+    //鍒ゆ柇SKU鏄惁閫変腑
+    function isSelectedTypeSpec(parameters, id, value) {
+        if (parameters) {
+            var arr = parameters.split('|');
+            for (var i = 0; i < arr.length; i++) {
+                var str = id + '&&' + value;
+                var child = arr[i].split(':');
+                if (child[0] === str) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return false;
+    }
+    function getSelectedTypeSpecValue(parameters, id, value) {
+        if (parameters) {
+            var arr = parameters.split('|');
+            for (var i = 0; i < arr.length; i++) {
+                var child = arr[i].split(':');
+                if (child[0] === id.toString()) {
+                    return child[1];
+                }
+            }
+            return value;
+        }
+        return value;
+    }
+</script>
\ No newline at end of file
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/edit.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/edit.html
new file mode 100644
index 0000000..3bc82cd
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/edit.html
@@ -0,0 +1,2094 @@
+<script type="text/html" template lay-done="layui.data.sendEditParams(d);">
+  <div class="layui-row layui-col-space15">
+
+      <div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsGoods-editForm" id="LAY-app-CoreCmsGoods-editForm">
+
+          <div class="layui-tab layui-tab-card" style="margin: 0 0 10px 0">
+              <ul class="layui-tab-title">
+                  <li class="layui-this">鍩虹淇℃伅</li>
+                  <li>鍥鹃泦/瑙嗛</li>
+                  <li>璐у搧璁剧疆</li>
+                  <li>鍟嗗搧璇︽儏</li>
+              </ul>
+              <div class="layui-tab-content" style="min-height: 500px;">
+
+                  <div class="layui-tab-item layui-show">
+                      <input type="hidden" name="goods[id]" id="id" value="{{d.params.data.id }}" />
+                      <input type="hidden" name="goods[newSpec]" id="newSpec" value="{{d.params.data.newSpec }}" />
+                      <input type="hidden" name="goods[spesDesc]" id="spesDesc" value="{{d.params.data.spesDesc }}" />
+                      
+                      <div class="layui-form-item">
+                          <label for="name" class="layui-form-label layui-form-required">鍟嗗搧鍚嶇О</label>
+                          <div class="layui-input-block">
+                              <input name="goods[name]" id="name" lay-verType="tips" lay-verify="required|verifyname" value="{{d.params.data.name }}" class="layui-input" lay-reqText="璇疯緭鍏ュ晢鍝佸悕绉�,涓嶈秴杩�200涓瓧绗﹀唴瀹�" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�,涓嶈秴杩�200涓瓧绗﹀唴瀹�" />
+                          </div>
+                      </div>
+                      <div class="layui-form-item">
+                          <label for="goodsCategoryId" class="layui-form-label layui-form-required">鍟嗗搧鍒嗙被</label>
+                          <div class="layui-input-inline layui-inline-6">
+                              <div id="goodsCategoryId_SelectCreateTree" class="ew-xmselect-tree" lay-verType="tips" lay-reqText="璇烽�夋嫨鍟嗗搧鍒嗙被"></div>
+                          </div>
+                          <!-- <div class="layui-form-mid layui-word-aux">
+                              <button href="javascript:void(0);" class="add-class layui-btn layui-btn-normal layui-btn-xs">娣诲姞鍒嗙被</button>
+                          </div> -->
+                          <label class="layui-form-label">鎵╁睍鍒嗙被锛�</label>
+                          <div class="layui-input-inline layui-inline-10">
+                              <div id="goodsCategoryIdExtend_SelectCreateTree" class="xm-select-demo"></div>
+                          </div>
+                      </div>
+                      <div class="layui-form-item">
+                          <label for="brandId" class="layui-form-label">鍝佺墝</label>
+                          <div class="layui-input-inline layui-inline-6" id="brandIdView">
+                              <select name="goods[brandId]" id="brandId">
+                                  <option value="0">璇烽�夋嫨</option>
+                                  {{# layui.each(d.params.initdata.brands, function(index, item){ }}
+                                  <option value="{{ item.id }}" {{item.id===d.params.data.brandId?'selected="selected"':''}}>{{ item.name }}</option>
+                                  {{# }); }}
+                              </select>
+                          </div>
+                          <!-- <div class="layui-form-mid layui-word-aux">
+                              <button href="javascript:void(0);" class="add-brand layui-btn layui-btn-normal layui-btn-xs">娣诲姞鍝佺墝</button>
+                          </div> -->
+                      </div>
+
+                      <div class="layui-form-item">
+                          <label for="bn" class="layui-form-label layui-form-required">鍟嗗搧缂栫爜</label>
+                          <div class="layui-input-inline layui-inline-6">
+                              <input name="goods[bn]" id="bn" lay-verType="tips" lay-verify="required|verifybn" value="{{d.params.data.bn }}" class="layui-input" lay-reqText="璇疯緭鍏ュ晢鍝佺紪鐮�" placeholder="璇疯緭鍏ヤ笉瓒呰繃30涓瓧绗﹀唴瀹�" />
+                          </div>
+                          <div class="layui-form-mid layui-word-aux">
+                              <button href="javascript:void(0);" class="create-bn layui-btn layui-btn-normal layui-btn-xs" lay-active="createbn">鐢熸垚缂栫爜</button>
+                          </div>
+                      </div>
+                      <div class="layui-form-item layui-form-text">
+                          <label for="brief" class="layui-form-label layui-form-required">鍟嗗搧绠�浠�</label>
+                          <div class="layui-input-block">
+                              <textarea name="goods[brief]" id="brief" lay-verType="tips" lay-verify="required" class="layui-textarea" lay-reqText="绠�鍗曠殑浠嬬粛锛屼竴鑸帶鍒跺湪100瀛椾互鍐�,璇疯緭鍏ヤ笉瓒呰繃255涓瓧绗﹀唴瀹�" placeholder="绠�鍗曠殑浠嬬粛锛屼竴鑸帶鍒跺湪100瀛椾互鍐�,璇疯緭鍏ヤ笉瓒呰繃255涓瓧绗﹀唴瀹�">{{d.params.data.brief }}</textarea>
+                          </div>
+                      </div>
+                      <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">鍏朵粬鍙傛暟</a></legend></fieldset>
+                    
+                      <div class="layui-form-item">
+                          <label for="unit" class="layui-form-label layui-form-required">鍗曚綅</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input name="goods[unit]" id="unit" lay-verType="tips" lay-verify="required|verifyunit" value="{{d.params.data.unit }}" class="layui-input" lay-reqText="璇疯緭鍏ュ崟浣�" placeholder="璇疯緭鍏ュ崟浣�" />
+                          </div>
+              
+                          <label for="sort" class="layui-form-label layui-form-required">鍟嗗搧鎺掑簭</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input type="number" min="0" max="999999" name="goods[sort]" id="sort" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.sort }}" placeholder="璇疯緭鍏ュ晢鍝佹帓搴�" lay-reqText="璇疯緭鍏ュ晢鍝佹帓搴忓苟涓烘暟瀛�" />
+                          </div>
+                      </div>
+                      <div class="layui-form-item">
+                          <label for="initialSales" class="layui-form-label layui-form-required">鍒濆閿�閲�</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input type="number" min="0" max="999999" name="goods[initialSales]" id="initialSales" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.initialSales }}" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" lay-reqText="璇疯緭鍏ュ垵濮嬮攢閲忓苟涓烘暟瀛�" />
+                          </div>
+                    
+                          <label for="isMarketable" class="layui-form-label layui-form-required">鏄惁涓婃灦</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input type="checkbox" lay-filter="switch" name="goods[isMarketable]" {{d.params.data.isMarketable ?'checked="checked"':'' }} id="isMarketable" lay-skin="switch" lay-text="涓婃灦|涓嬫灦">
+                          </div>
+                    
+                          <label for="isRecommend" class="layui-form-label layui-form-required">鏄惁鎺ㄨ崘</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input type="checkbox" lay-filter="switch" name="goods[isRecommend]" {{d.params.data.isRecommend ?'checked="checked"':'' }} id="isRecommend" lay-skin="switch" lay-text="鏄瘄鍚�">
+                          </div>
+                     
+                   
+                          <label for="isHot" class="layui-form-label layui-form-required">鏄惁鐑棬</label>
+                          <div class="layui-input-inline layui-inline-2">
+                              <input type="checkbox" lay-filter="switch" name="goods[isHot]" {{d.params.data.isHot ?'checked="checked"':'' }} id="isHot" lay-skin="switch" lay-text="鏄瘄鍚�">
+                          </div>
+                      </div>
+                      <div class="layui-form-item">
+                        <label for="isHot" class="layui-form-label layui-form-required">瀹℃牳鐘舵��</label>
+                        <div class="layui-input-block">
+                          <select name="goods[brandId]" id="brandId">
+                            <option value="0">璇烽�夋嫨瀹℃牳鐘舵��</option>
+                            {{# layui.each(d.params.initdata.auditStatusType, function(index, item){ }}
+                            <option value="{{ item.value }}" {{item.value===d.params.data.auditStatus?'selected="selected"':''}}>{{ item.description }}</option>
+                            {{# }); }}
+                        </select>
+                        </div>        
+                    
+                        <blockquote class="layui-elem-quote">
+                          瀹℃牳鏃惰娉ㄦ剰璋冩暣璐у搧璁剧疆涓殑缁忛攢鍟嗚繑鐐规暟鎹�
+                        </blockquote>
+            
+                        <div class="layui-form-item" >
+                          <label for="isHot" class="layui-form-label">淇敼/鎷掔粷寤鸿</label>
+                           <div class="layui-input-block">
+                            <textarea  style="height: 60px;"  class="layui-input"  name="goods[auditRejectedReason]" value={{d.params.data.auditRejectedReason??''}}/>        
+                          
+                        </div>
+                           
+                    
+                          
+                        </div>
+                    </div>
+                  </div>
+                  <div class="layui-tab-item">
+                      <blockquote class="layui-elem-quote">
+                          璇烽�夋嫨灏忎簬5M鐨勫浘鐗囪繘琛岃鍓笂浼�
+                      </blockquote>
+
+                      <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">灏侀潰鍥�</a></legend></fieldset>
+                      <div class="layui-form-item">
+                          <label class="layui-form-label" for="avatarImage">灏侀潰鍥撅細</label>
+                          <div class="layui-input-inline layui-inline-10">
+                              <input name="goods[image]" id="goodImage" lay-verify="required" size="15" value="{{d.params.data.image }}" autocomplete="off" class="layui-input" lay-reqText="璇疯緭鍏ャ�愮缉鐣ュ浘銆�" />
+                          </div>
+                          <div class="layui-input-inline">
+                              <div class="layui-upload">
+                                  <button type="button" class="layui-btn" id="upBtn">瑁佸壀涓婁紶</button>
+                                  <button type="button" class="layui-btn" id="upBtnOriginal">鍘熷浘涓婁紶</button>
+                                  <div class="layui-upload-list">
+                                      <img class="layui-upload-img" id="viewImgBox" src="{{d.params.data.image || layui.setter.noImagePicUrl }}">
+                                      <p id="viewTextBox"></p>
+                                  </div>
+                              </div>
+                          </div>
+                      </div>
+                      <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">鍥鹃泦</a></legend></fieldset>
+                      <div class="layui-form-item">
+                          <div class="layui-input-inline layui-inline-10">
+                              <input type="hidden" name="goods[images]" id="imageIds" value="{{d.params.data.images }}" class="layui-input" placeholder="璇蜂笂浼犵缉鐣ュ浘" lay-reqText="璇蜂笂浼犵缉鐣ュ浘" />
+                              <button type="button" class="layui-btn  layui-btn-sm" id="upBtnimageIds"><i class="layui-icon">顧�</i>鍗曞浘瑁佸壀涓婁紶</button>
+                              <button type="button" class="layui-btn  layui-btn-sm" id="upBtnimageIdsOriginal"><i class="layui-icon">顧�</i>鍗曞浘鍘熷浘涓婁紶</button>
+                              <button type="button" class="layui-btn layui-bg-orange layui-btn-sm" id="upBatchBtn"><i class="layui-icon">顧�</i>澶氬浘鎵归噺涓婁紶锛堟湭瑁佸壀锛�</button>
+                          </div>
+                          <div class="layui-form-mid">
+                              鍥鹃泦锛歔寤鸿鏁伴噺鎺у埗鍦�10寮犱互鍐匽锛�
+                          </div>
+                      </div>
+                      <div class="layui-form-item">
+                          <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                              <div class="layui-upload-list" id="upload-more-list"></div>
+                          </blockquote>
+                      </div>
+
+                      <fieldset class="layui-elem-field layui-field-title site-title"><legend><a name="compress">濯掍綋</a></legend></fieldset>
+                      <div class="layui-form-item">
+                          <label class="layui-form-label" for="video">瑙嗛锛�</label>
+                          <div class="layui-input-inline layui-inline-10">
+                              <input name="goods[video]" size="15" autocomplete="off" class="layui-input" id="videoInput" value="{{d.params.data.video ||'' }}" lay-reqText="璇疯緭鍏ャ�愯棰戝湴鍧�銆�" />
+                          </div>
+                          <button type="button" class="layui-btn  layui-btn-sm" id="upVideoBtn"><i class="layui-icon">顧�</i>涓婁紶瑙嗛</button>
+                          <div class="layui-form-mid">鏀寔甯哥敤瑙嗛鎾斁鏍煎紡銆�</div>
+                      </div>
+                  </div>
+
+                  <div class="layui-tab-item">
+                      <div id="product-info">
+                      </div>
+                  </div>
+                  <div class="layui-tab-item">
+                      <div class="layui-form-item layui-form-text">
+                          <div class="layui-input-block">
+                              <div class="document-editor" >
+                                  <div class="toolbar-container" id="toolbar-container"></div>
+                                  <div class="content-container">
+                                      <div id="editor"></div>
+                                  </div>
+                              </div>
+                          </div>
+                      </div>
+                  </div>
+              </div>              
+          </div>
+         
+      </div>
+  </div>
+</script>
+<!-- 璐у搧妯$増-->
+<script id="getSpec_tpl" type="text/html">
+  <table class="layui-table" lay-size="sm">
+    <colgroup>
+      <col width="150" />
+      <col width="150" />
+      <col width="150" />
+      <col width="150"/>
+      <col width="80" />
+      <col width="80" />
+      <col width="80" />
+      <col width="80" />
+      <col width="80" />
+      <col width="80" />
+      <col width="100" />
+      <col width="100" />
+ 
+    </colgroup>
+    <thead>
+      <tr>
+        <th>榛樿璐у搧</th>
+        <th>鍥剧墖</th>
+        <th>璐у搧缂栫爜</th>
+    
+        <th>閲嶉噺(鍏�)</th>
+        <!-- <th>璧犻�佺Н鍒�</th>
+                <th>绉垎鏈�澶�<br />鍙姷閲戦</th> -->
+        <th>搴撳瓨鏁伴噺</th>
+        <th>鍐荤粨搴撳瓨</th>
+        <th style="width: 60px;">寤鸿闆跺敭浠�</th>
+        <th><i class="required-color">*</i>閿�鍞环</th>
+        <th>缁忛攢鍟嗕环</th>
+        <th>缁撶畻浠�</th>
+
+        <th style="width: 60px;">鎺ㄥ箍缁忛攢鍟嗛噰璐繑鐜�</th>
+        <th>鎺ㄥ箍鐢ㄦ埛璐拱杩旂幇</th>
+      
+        <!-- <th>浜岀骇杩旂幇</th>
+                <th>涓夌骇杩旂幇</th> -->
+        
+
+      
+      </tr>
+    </thead>
+    <tbody id="productsTbody">
+      {{# layui.each(d.products, function(index, item){ }}
+      <tr>
+        <td>
+          <input type="hidden" value="{{item.id}}" name="product[id][]" />
+          <input
+            type="hidden"
+            value="{{item.goodsId || 0}}"
+            name="product[goodsId][]"
+          />
+          <input  type="checkbox" id="product[{{item.spesDesc}}][isDefalut]"
+          name="product[isDefalut][]" title="鏄惁榛樿" {{item.isDefalut?
+          'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}"
+          class="isdefalut" lay-filter="isdefalut" disabled>
+        </td>
+        <td class="spec-td">
+          <div
+            class="spec_image"
+            style="display: inline-block;width: 60px;overflow: hidden;"
+          >
+            <div class="spec_image_item">
+              <!--<div class="del-img">
+                                x
+                            </div>-->
+              <img
+                src="{{ item.images && item.images !='null'? item.images : layui.setter.noImagePicUrl }}"
+                id="productImagesSrc"
+                style="width:60px;height:60px"
+              />
+            </div>
+            <input
+              type="hidden"
+              id="productImagesInput"
+              name="product[images][]"
+              value="{{item.images}}"
+            />
+          </div>
+          <div style="display: inline-block;width: 60px;overflow: hidden;">
+            <p>
+              <a
+                class="layui-btn layui-btn-xs upSpecImage"
+                style="margin-bottom: 10px;"
+                href="javascript:;"
+                >瑁佸壀涓婁紶</a
+              >
+            </p>
+            <p>
+              <a
+                class="layui-btn layui-btn-xs upSpecImageOriginal"
+                href="javascript:;"
+                >鍘熷浘涓婁紶</a
+              >
+            </p>
+          </div>
+        </td>
+        <td>
+          <input
+            type="text"
+            name="product[sn][]"
+            value="{{item.sn}}"
+            placeholder="璐у搧缂栫爜"
+            class="layui-input layui-inline-3"
+          />
+        </td>
+      
+        <td>
+          <input
+            type="number"
+            name="product[weight][]"
+            value="{{item.weight}}"
+            placeholder="閲嶉噺"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+
+        <td class="have-add-td">
+          <input
+            type="number"
+            name="product[stock][]"
+            value="{{item.stock}}"
+            placeholder="搴撳瓨"
+            class="layui-input layui-inline-1 goods-stock"
+          />
+        </td>
+        <td>{{item.freezeStock}}</td>
+        <td>
+          <input
+            type="text"
+            name="product[mktprice][]"
+            value="{{item.mktprice}}"
+            placeholder="寤鸿闆跺敭浠�"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+        <td>
+          <input
+            type="text"
+            name="product[price][]"
+            value="{{item.price}}"
+            placeholder="閿�鍞环"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+        <td>
+          <input
+            type="text"
+            name="product[distributionPrice][]"
+            value="{{item.distributionPrice||'0'}}"
+            placeholder="缁忛攢鍟嗕环"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+        <td>
+          <input
+            type="text"
+            name="product[costprice][]"
+            value="{{item.costprice}}"
+            placeholder="缁撶畻浠�"
+            class="layui-input layui-inline-1"
+            disabled
+          />
+        </td>
+
+        <td>
+          <input
+            type="text"
+            name="product[distributionCutMoney][]"
+            value="{{item.distributionCutMoney||'0'}}"
+            placeholder="鎺ㄥ箍缁忛攢鍟嗛噰璐繑鐜�"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+        <td>
+          <input
+            type="text"
+            name="product[cutMoney][]"
+            value="{{item.cutMoney||'0'}}"
+            placeholder="鎺ㄥ箍鏅�氱敤鎴疯喘涔拌繑鐜�"
+            class="layui-input layui-inline-1"
+          />
+        </td>
+    
+        <!-- <td>
+                    <input type="text" name="product[levelTwo][]" value="{{item.levelTwo}}" placeholder="浜岀骇杩旂幇" class="layui-input layui-inline-1">
+                </td>
+                <td>
+                    <input type="text" name="product[levelThree][]" value="{{item.levelThree}}" placeholder="涓夌骇杩旂幇" class="layui-input layui-inline-1">
+                </td> -->
+
+       
+      </tr>
+      {{# }); }}
+    </tbody>
+  </table>
+</script>
+
+<script id="params_tpl" type="text/html">
+  {{# if(d.goodsParams){ }}
+  <blockquote class="layui-elem-quote">
+    {{# layui.each(d.goodsParams, function(index, item){ }}
+    <div
+      class="layui-form-item"
+      {{#if(item.type
+      &&
+      item.type!="text"
+      ){}}
+      pane
+      {{#
+      }
+      }}
+    >
+      <label class="layui-form-label layui-form-required">{{item.name}}</label>
+      <div class="layui-input-block">
+        <input
+          type="hidden"
+          name="paramsKey[{{index}}]"
+          value="{{item.id}}"
+          class="layui-input"
+        />
+        <input
+          type="hidden"
+          name="paramsType[{{index}}]"
+          value="{{item.type}}"
+          class="layui-input"
+        />
+        {{# if(item.type && item.type==='radio'){ }}
+        <input
+          type="hidden"
+          name="paramsValueCount[{{index}}]"
+          value="{{layui.coreHelper.stringToArrayLength(item.value)}}"
+          class="layui-input"
+          lay-verify="required"
+          lay-reqText="璇烽�夋嫨鍙傛暟锛歿{item.name}}"
+        />
+        {{# layui.each(layui.coreHelper.stringToArray(item.value),
+        function(indexRadio, itemRadio){ }} <input type="radio"
+        name="paramsValue[{{index}}]" value="{{itemRadio}}"
+        title="{{itemRadio}}" {{ setRadioParameters(d.arrParameters, item.id ,
+        itemRadio) ?'checked':'' }} lay-verify="required"
+        lay-reqText="璇疯緭鍏ュ弬鏁帮細{{item.name}}"> {{# }); }} {{# } else if
+        (item.type && item.type==='checkbox'){ }}
+        <input
+          type="hidden"
+          name="paramsValueCount[{{index}}]"
+          value="{{layui.coreHelper.stringToArrayLength(item.value)}}"
+          class="layui-input"
+          lay-verify="required"
+          lay-reqText="璇烽�夋嫨鍙傛暟锛歿{item.name}}"
+        />
+        {{# layui.each(layui.coreHelper.stringToArray(item.value),
+        function(indexCheckbox, itemCheckbox){ }} <input type="checkbox"
+        name="paramsValue[{{index}}][]" value="{{itemCheckbox}}"
+        lay-skin="primary" {{ setCheckboxParameters(d.arrParameters, item.id ,
+        itemCheckbox) ?'checked':'' }} title="{{itemCheckbox}}"
+        value="{{itemCheckbox}}" lay-verify="required"
+        lay-reqText="璇烽�夋嫨鍙傛暟锛歿{item.name}}"> {{# }); }} {{# } else if
+        (item.type && item.type==='text'){ }}
+        <input
+          type="hidden"
+          name="paramsValueCount[{{index}}]"
+          value="1"
+          class="layui-input"
+        />
+        <input
+          type="text"
+          name="paramsValue[{{index}}]"
+          value="{{setTextParameters(d.arrParameters, item.id)}}"
+          class="layui-input"
+          lay-verify="required"
+          lay-reqText="璇疯緭鍏ュ弬鏁帮細{{item.name}}"
+        />
+        {{# } else { }} {{# } }}
+      </div>
+    </div>
+    {{# }); }}
+  </blockquote>
+  {{# } }}
+</script>
+
+
+
+<script id="image_tpl" type="text/html">
+  {{# layui.each(d, function(index, item){ }}
+  <div class="imgdiv">
+    <img
+      src="{{ item }}"
+      class="layui-upload-img"
+      onclick='layui.coreHelper.viewImage("{{ item }}")'
+      style="width: 100px;height:100px;"
+    />
+    <div id="operate">
+      <div>
+        <a class="del" onclick="delImg(this,'{{ item }}')">鍒犻櫎</a>|<a
+          class="setmain"
+          onclick="setDefault(this,'{{ item }}')"
+          >璁句负涓诲浘</a
+        >
+      </div>
+    </div>
+  </div>
+  {{# }); }}
+</script>
+
+<script id="brand_tpl" type="text/html">
+  <select name="goods[brand_id]">
+    <option value="0">璇烽�夋嫨鍝佺墝</option>
+    {{# layui.each(d.list, function(index, item){ }}
+    <option value="{{ item.id }}">{{ item.name }}</option>
+    {{# }); }}
+  </select>
+</script>
+<!--//涓�閿缃甋KU鍥剧墖鏃惰嚜鍔ㄧ敓鎴愰�変腑鐨凷KU-->
+<script id="imageSetMoreSku_tpl" type="text/html">
+  {{# layui.each(d, function(index, item){ }}
+  <input
+    type="checkbox"
+    name="skuAttrValue"
+    value="{{item}}"
+    title="{{item}}"
+    lay-filter="skuAttrValue-filter"
+  />
+  {{# }); }}
+</script>
+
+<script src="/views/liao.js"></script>
+
+<script>
+  var $;
+  var debug = layui.setter.debug;
+  var imgs = [];
+  var thumbnailBtn;
+  var _that = this;
+  var enptyProducts;
+  var oldSingleData = {};
+  var oldMultitermData = [];
+  var tempMultitermData = [];
+
+  layui.data.sendEditParams = function (d) {
+    //寮�鍚皟璇曟儏鍐典笅鑾峰彇鎺ュ彛璧嬪�兼暟鎹�
+    if (debug) {
+      console.log(d);
+      
+    }
+    layui.use(
+      [
+        "admin",
+        "form",
+        "laydate",
+        "upload",
+        "coreHelper",
+        "dtree",
+        "view",
+        "laytpl",
+        "xmSelect",
+        "util",
+        "cropperImg",
+      ],
+      function () {
+        $ = layui.$;
+        var form = layui.form,
+          admin = layui.admin,
+          laydate = layui.laydate,
+          upload = layui.upload,
+          dtree = layui.dtree,
+          view = layui.view,
+          laytpl = layui.laytpl,
+          xmSelect = layui.xmSelect,
+          util = layui.util,
+          cropperImg = layui.cropperImg,
+          coreHelper = layui.coreHelper;
+        var element = layui.element;
+
+        //鍔犺浇缂栬緫鍣�
+        var Authorization = layui.data(layui.setter.tableName)[
+          layui.setter.request.tokenName
+        ];
+        editor = CKEDITOR.replace("editor", {
+          fileTools_requestHeaders: {
+            Authorization: Authorization,
+          },
+        });
+        editor.setData(d.params.data.intro);
+        
+        //鍒濆鍖栧浘鐗�
+        var defaultImg = "no";
+        if (d.params.data.images) {
+          imgs = d.params.data.images.split(",");
+          defaultImg = imgs[0];
+          $("#imageIds").val(imgs);
+          var getTpl = image_tpl.innerHTML,
+            viewBox = document.getElementById("upload-more-list");
+          laytpl(getTpl).render(imgs, function (html) {
+            viewBox.innerHTML = html;
+          });
+        }
+
+        //鍒濆鍖栧凡缁忕‘璁ゅ晢鍝丼KU
+        if (1) {
+          var tmpData = {      
+            products: d.params.data.sku,
+          };
+          
+          //璧嬪�煎晢鍝佸弬鏁版暟鎹�
+          var getTpl = getSpec_tpl.innerHTML,
+            viewBox = document.getElementById("product-info");
+          laytpl(getTpl).render(tmpData, function (html) {
+            viewBox.innerHTML = html;
+          });
+        }
+
+        var arrParameters = [];
+        //鍒濆鍖栧凡缁忕‘璁ゅ晢鍝佸弬鏁�
+        if (false) {
+          if (d.params.data.parameters) {
+            var arr = d.params.data.parameters.split("|");
+            for (var i = 0; i < arr.length; i++) {
+              var arrChild = arr[i].split(":");
+              arrParameters.push(arrChild);
+            }
+          }
+          var tmpData = {
+            goodsParams: d.data.goodsParams,
+            arrParameters: arrParameters,
+          };
+          //璧嬪�煎晢鍝佸弬鏁版暟鎹�
+          var getTpl = params_tpl.innerHTML,
+            viewBox = document.getElementById("parametersBox");
+          laytpl(getTpl).render(tmpData, function (html) {
+            viewBox.innerHTML = html;
+          });
+        }
+        
+        //鍒濆鍖栨暟鎹�
+        enptyProducts = {
+          id: 0,
+          goodsId: 0,
+          isDefalut: true,
+          images: layui.setter.noImagePicUrl,
+          sn: layui.coreHelper.getSN("SN"),
+          spesDesc: "",
+          stock: 1000,
+          pointsDeduction: 0,
+          points: 0,
+          weight: 0,
+          price: 0,
+          costprice: 0,
+          mktprice: 0,
+          levelOne: 0,
+          levelTwo: 0,
+          levelThree: 0,
+        };
+        oldMultitermData =d.params.data.sku;
+        if (d.params.data.openSpec == 1) {
+          oldSingleData = enptyProducts;
+          tempMultitermData = d.data.products;
+        } else {
+          oldSingleData = d.params.data.sku[0];
+        }
+        
+       
+        /*****************************************************************/
+
+        // 娓叉煋鍟嗗搧鍒嗙被
+        var insXmSelGoodsCategoryId = xmSelect.render({
+          el: "#goodsCategoryId_SelectCreateTree",
+          height: "250px",
+          data: d.params.initdata.categories.data,
+          initValue: d.params.data ? [d.params.data.goodsCategoryId] : [],
+          //model: { label: { type: 'text' } },
+          name: "goodsCategoryId",
+          prop: {
+            name: "title",
+            value: "id",
+          },
+          layVerify: "required",
+          layVerType: "msg",
+          radio: true,
+          clickClose: true,
+          tree: {
+            show: true,
+            indent: 15,
+            strict: false,
+            expandedKeys: true,
+          },
+        });
+        //娓叉煋鍟嗗搧鎵╁睍鍒嗙被
+
+        var arr = [];
+        if (d.params.data.categoryExtend?.length > 0) {
+          for (var i = 0; i < d.params.data.categoryExtend.length; i++) {
+            arr.push(d.params.data.categoryExtend[i].goodsCategroyId);
+          }
+        }
+        var insXmSelGoodsCategoryIdExtend = xmSelect.render({
+          el: "#goodsCategoryIdExtend_SelectCreateTree",
+          height: "250px",
+          data:  d.params.initdata.categories.data,
+          //initValue: mData ? [mData.parentId] : [],
+          //model: { label: { type: 'text' } },
+          name: "goodsCategoryIdExtend",
+          prop: {
+            name: "title",
+            value: "id",
+          },
+          initValue: arr,
+          //layVerify: 'required',
+          //layVerType: 'msg',
+          //radio: false,
+          //clickClose: true,
+          autoRow: true,
+
+          tree: {
+            //鏄惁鏄剧ず鏍戠姸缁撴瀯
+            show: true,
+            //鏄惁灞曠ず涓夎鍥炬爣
+            showFolderIcon: true,
+            //鏄惁鏄剧ず铏氱嚎
+            showLine: true,
+            //闂磋窛
+            indent: 20,
+            //榛樿灞曞紑鑺傜偣鐨勬暟缁�, 涓� true 鏃�, 灞曞紑鎵�鏈夎妭鐐�
+            expandedKeys: true,
+            //鏄惁涓ユ牸閬靛畧鐖跺瓙妯″紡
+            strict: false,
+            //鏄惁寮�鍚瀬绠�妯″紡
+            simple: false,
+          },
+        });
+
+        var arrParams = [];
+        if (d.params.data.goodsParamsIds) {
+          arrParams = d.params.data.goodsParamsIds.split(",");
+        }
+
+        
+        
+
+        var arrSku = [];
+        if (d.params.data.goodsSkuIds) {
+          arrSku = d.params.data.goodsSkuIds.split(",");
+        }
+
+     
+
+        //灏侀潰鍥惧浘鐗囦笂浼�
+        $("#upBtn").click(function () {
+          cropperImg.cropImg({
+            aspectRatio: 1 / 1,
+            imgSrc: $("#viewImgBox").attr("src"),
+            onCrop: function (data) {
+              var loadIndex = layer.load(2);
+              coreHelper.Post(
+                "api/Tools/UploadFilesFByBase64",
+                { base64: data },
+                function (res) {
+                  if (0 === res.code) {
+                    $("#viewImgBox").attr("src", res.data.fileUrl);
+                    $("#goodImage").val(res.data.fileUrl);
+                    layer.msg(res.msg);
+                    layer.close(loadIndex);
+                  } else {
+                    layer.close(loadIndex);
+                    layer.msg(res.msg, { icon: 2, anim: 6 });
+                  }
+                }
+              );
+            },
+          });
+          form.render();
+        });
+        //鏅�氬浘鐗囦笂浼�
+        upload.render({
+          elem: "#upBtnOriginal",
+          url: layui.setter.apiUrl + "Api/Tools/UploadFiles",
+          before: function (obj) {
+            obj.preview(function (index, file, result) {
+              $("#viewImgBox").attr("src", result);
+            });
+          },
+          done: function (res) {
+            if (res.code > 0) {
+              return layer.msg("涓婁紶澶辫触");
+            }
+            layer.msg("涓婁紶鎴愬姛");
+            $("#goodImage").val(res.data.fileUrl);
+          },
+          error: function () {
+            var viewTextBox = $("#viewTextBox");
+            viewTextBox.html(
+              '<span style="color: #FF5722;">涓婁紶澶辫触</span> <a class="layui-btn layui-btn-xs demo-reload">閲嶈瘯</a>'
+            );
+            viewTextBox.find(".demo-reload").on("click", function () {
+              uploadInst.upload();
+            });
+          },
+        });
+        // 鐩戝惉寮�鍏冲垏鎹簨浠�
+        form.on("switch(isCustomizable)", function (data) {
+          var elem = data.elem; // 褰撳墠寮�鍏冲厓绱�
+          elem.value = true;
+        });
+        //鍥鹃泦涓婁紶
+        $("#upBtnimageIds").click(function () {
+          cropperImg.cropImg({
+            aspectRatio: 1 / 1,
+            imgSrc: defaultImg,
+            onCrop: function (data) {
+              var loadIndex = layer.load(2);
+              coreHelper.Post(
+                "api/Tools/UploadFilesFByBase64",
+                { base64: data },
+                function (res) {
+                  if (0 === res.code) {
+                    imgs.push(res.data.fileUrl);
+                    $("#imageIds").val(imgs);
+                    var getTpl = image_tpl.innerHTML,
+                      view = document.getElementById("upload-more-list");
+                    laytpl(getTpl).render(imgs, function (html) {
+                      view.innerHTML = html;
+                    });
+                    layer.msg(res.msg);
+                    layer.close(loadIndex);
+                  } else {
+                    layer.close(loadIndex);
+                    layer.msg(res.msg, { icon: 2, anim: 6 });
+                  }
+                }
+              );
+            },
+          });
+          form.render();
+        });
+
+        //涓婁紶鍥鹃泦鍥惧浘鐗�
+        upload.render({
+          elem: "#upBatchBtn",
+          url: "/api/Tools/UploadFiles", //鏀规垚鎮ㄨ嚜宸辩殑涓婁紶鎺ュ彛
+          multiple: true,
+          accept: "images",
+          exts: "jpg|jpeg|png|gjf|webp|bmp|tif",
+          drag: true,
+          allDone: function (obj) {
+            //var txt = "鍏遍�夋嫨浜� 銆�" + obj.total + "銆� 寮犲浘鐗囷紝鍏朵腑锛屼笂浼犳垚鍔� 銆�" + obj.successful + "銆� 寮狅紝澶辫触 <span style='color:red'>銆�" + obj.aborted + "銆� </span>寮�";
+            //$("#tipTxt").html(txt);
+          },
+          before: function (obj) {
+            //棰勮鏈湴鏂囦欢绀轰緥锛屼笉鏀寔ie8
+            obj.preview(function (index, file, result) {
+              $("#upload-more-list").append(
+                '<img src="' +
+                  result +
+                  '" alt="' +
+                  file.name +
+                  '" class="layui-upload-img">'
+              );
+            });
+          },
+          done: function (res) {
+            var loadIndex = layer.load(2);
+            //濡傛灉涓婁紶澶辫触
+            if (res.code > 0) {
+              return layer.msg("涓婁紶澶辫触");
+            } else {
+              var url = res.data.src; //缂╃暐鍥惧湴鍧�
+              var url2 = res.data.fileUrl; //鍘熷鍥惧湴鍧�
+
+              imgs.push(res.data.src);
+              $("#imageIds").val(imgs);
+              var getTpl = image_tpl.innerHTML,
+                view = document.getElementById("upload-more-list");
+              laytpl(getTpl).render(imgs, function (html) {
+                view.innerHTML = html;
+              });
+              layer.msg(res.msg);
+              layer.close(loadIndex);
+            }
+          },
+          error: function () {
+            //婕旂ず澶辫触鐘舵�侊紝骞跺疄鐜伴噸浼�
+            var demoText = $("#demoText");
+            demoText.html(
+              '<span style="color: #FF5722;">涓婁紶澶辫触</span><a class= "layui-btn layui-btn-xs demo-reload" > 閲嶈瘯</a > '
+            );
+            demoText.find(".demo-reload").on("click", function () {
+              uploadInst.upload();
+            });
+          },
+        });
+
+        upload.render({
+          elem: "#upBtnimageIdsOriginal",
+          url: layui.setter.apiUrl + "Api/Tools/UploadFiles",
+          before: function (obj) {},
+          done: function (res) {
+            if (res.code > 0) {
+              return layer.msg("涓婁紶澶辫触");
+            } else {
+              layer.msg("涓婁紶鎴愬姛");
+              imgs.push(res.data.fileUrl);
+              $("#imageIds").val(imgs);
+              var getTpl = image_tpl.innerHTML,
+                view = document.getElementById("upload-more-list");
+              laytpl(getTpl).render(imgs, function (html) {
+                view.innerHTML = html;
+              });
+            }
+          },
+          error: function () {
+            var viewTextBox = $("#viewTextBox");
+            viewTextBox.html(
+              '<span style="color: #FF5722;">涓婁紶澶辫触</span> <a class="layui-btn layui-btn-xs demo-reload">閲嶈瘯</a>'
+            );
+            viewTextBox.find(".demo-reload").on("click", function () {
+              uploadInst.upload();
+            });
+          },
+        });
+
+        //SKU缂╃暐鍥句笂浼�
+        $(".upSpecImage").click(function () {
+          var _that = this;
+          cropperImg.cropImg({
+            aspectRatio: 1 / 1,
+            imgSrc: "no",
+            onCrop: function (data) {
+              var loadIndex = layer.load(2);
+              coreHelper.Post(
+                "api/Tools/UploadFilesFByBase64",
+                { base64: data },
+                function (res) {
+                  if (0 === res.code) {
+                    var item = $(_that);
+                    item
+                      .parent()
+                      .parent()
+                      .prev()
+                      .find("#productImagesInput")
+                      .val(res.data.fileUrl);
+                    item
+                      .parent()
+                      .parent()
+                      .prev()
+                      .find("#productImagesSrc")
+                      .attr("src", res.data.fileUrl);
+
+                    layer.msg(res.msg);
+                    layer.close(loadIndex);
+                  } else {
+                    layer.close(loadIndex);
+                    layer.msg(res.msg, { icon: 2, anim: 6 });
+                  }
+                }
+              );
+            },
+          });
+          form.render();
+        });
+        //SKU鍘熷浘涓婁紶
+        $(".upSpecImageOriginal").click(function () {
+          var _that = this;
+          admin.popup({
+            title: "鍘熷浘涓婁紶",
+            area: ["800px", "300px"],
+            id: "LAY-app-CoreCmsCommon-GetNoticeIds",
+            success: function (layero, indexChild) {
+              layui
+                .view(this.id)
+                .render("common/getUpLoad", null)
+                .done(function () {
+                  layui.form.on(
+                    "submit(LAY-app-getUpLoad-submit)",
+                    function (data) {
+                      console.log(data);
+                      var item = $(_that);
+                      item
+                        .parent()
+                        .parent()
+                        .prev()
+                        .find("#productImagesInput")
+                        .val(data.field.imagesUrl);
+                      item
+                        .parent()
+                        .parent()
+                        .prev()
+                        .find("#productImagesSrc")
+                        .attr("src", data.field.imagesUrl);
+                      layer.close(indexChild);
+                    }
+                  );
+                });
+            },
+            btn: ["纭畾", "鍙栨秷"],
+            yes: function (index, layero) {
+              layero.contents().find("#LAY-app-getUpLoad-submit").click();
+            },
+          });
+          form.render();
+        });
+
+        var skuAttrCheckedValue = [];
+        // checkbox 浜嬩欢
+        form.on("checkbox(skuAttrValue-filter)", function (data) {
+          var elem = data.elem; // 鑾峰緱 checkbox 鍘熷 DOM 瀵硅薄
+
+          if (elem.checked && skuAttrCheckedValue.indexOf(elem.value) == -1) {
+            skuAttrCheckedValue.push(elem.value);
+          } else if (
+            !elem.checked &&
+            skuAttrCheckedValue.indexOf(elem.value) > -1
+          ) {
+            for (var i = 0; i < skuAttrCheckedValue.length; i++) {
+              if (skuAttrCheckedValue[i] == elem.value) {
+                skuAttrCheckedValue.splice(i, 1);
+              }
+            }
+          }
+          console.log("skuAttrCheckedValue", skuAttrCheckedValue);
+        });
+
+        //SKU缂╃暐鍥句竴閿笂浼�
+        var uploadInst4 = upload.render({
+          elem: "#uploadImageForMoreSku",
+          url: "/api/Tools/UploadFiles", //鏀规垚鎮ㄨ嚜宸辩殑涓婁紶鎺ュ彛
+          multiple: false,
+          accept: "images",
+          exts: "jpg|jpeg|png|gjf|webp|bmp|tif",
+          drag: true,
+          before: function (obj) {
+            if (!skuAttrCheckedValue) {
+              layer.msg("璇峰厛閫夋嫨涓�涓猄KU灞炴��");
+              return false;
+            }
+          },
+          done: function (res) {
+            var loadIndex = layer.load(2);
+            //濡傛灉涓婁紶澶辫触
+            if (res.code > 0) {
+              return layer.msg("涓婁紶澶辫触");
+            } else {
+              var url = res.data.src; //缂╃暐鍥惧湴鍧�
+              var _that = this.item;
+              if (!skuAttrCheckedValue) {
+                layer.msg("璇峰厛閫夋嫨涓�涓猄KU灞炴��");
+                return;
+              }
+              console.log("skuAttrCheckedValue", skuAttrCheckedValue);
+
+              $.each($("#productsTbody tr"), function (i, item) {
+                var tdValue = $(item).find("td:eq(3) input").attr("value");
+                for (var i = 0; i < skuAttrCheckedValue.length; i++) {
+                  if (tdValue.indexOf(skuAttrCheckedValue[i]) > -1) {
+                    $($(item).find("td:eq(1) .spec_image img")).attr(
+                      "src",
+                      url
+                    );
+                    $($(item).find("td:eq(1) .spec_image input")).val(url);
+                  }
+                }
+              });
+
+              //var item = $(_that);
+              layer.msg(res.msg);
+              layer.close(loadIndex);
+            }
+          },
+          error: function () {},
+        });
+
+        //琛ㄥ崟楠岃瘉瑙勫垯
+        form.verify({
+          money: [/((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/, "璇疯緭鍏ラ噾棰�"],
+          verifybn: [
+            /^[\S]{0,30}$/,
+            "鍟嗗搧缂栫爜鏈�澶у彧鍏佽杈撳叆30浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+          verifysn: [
+            /^[\S]{0,30}$/,
+            "璐у搧缂栫爜鏈�澶у彧鍏佽杈撳叆30浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+          verifyname: [/^.{0,200}$/, "鍟嗗搧鍚嶇О鏈�澶у彧鍏佽杈撳叆200浣嶅瓧绗�"],
+          verifybrief: [
+            /^.{0,255}$/,
+            "鍟嗗搧绠�浠嬫渶澶у彧鍏佽杈撳叆255浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+          verifyimageIds: [
+            /^[\S]{0,255}$/,
+            "榛樿鍥剧墖 鍥剧墖id鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+          verifyunit: [
+            /^[\S]{0,20}$/,
+            "鍟嗗搧鍗曚綅鏈�澶у彧鍏佽杈撳叆20浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+          verifylabelIds: [
+            /^[\S]{0,50}$/,
+            "鏍囩id閫楀彿鍒嗛殧鏈�澶у彧鍏佽杈撳叆50浣嶅瓧绗︼紝涓斾笉鑳藉嚭鐜扮┖鏍�",
+          ],
+        });
+        //娣诲姞鍒嗙被
+        $(document).on("click", ".add-class", function () {
+          coreHelper.Post(
+            "Api/CoreCmsGoodsCategory/GetCreate",
+            null,
+            function (e) {
+              if (e.code === 0) {
+                admin.popup({
+                  shadeClose: false,
+                  title: "娣诲姞鍒嗙被",
+                  area: ["700px", "540px"],
+                  id: "LAY-popup-CoreCmsGoodsCategory-create",
+                  success: function (layero, index) {
+                    view(this.id)
+                      .render("good/goodscategory/create", { data: e.data })
+                      .done(function () {
+                        //鐩戝惉鎻愪氦
+                        form.on(
+                          "submit(LAY-app-CoreCmsGoodsCategory-createForm-submit)",
+                          function (data) {
+                            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+                            field.isShow = field.isShow == "on";
+                            if (debug) {
+                              console.log(field);
+                            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                            coreHelper.Post(
+                              "Api/CoreCmsGoodsCategory/DoCreate",
+                              field,
+                              function (e) {
+                                if (e.code === 0) {
+                                  //閲嶆柊娓叉煋鍒嗙被涓嬫媺
+                                  insXmSelGoodsCategoryId.update({
+                                    data: e.data.categories.data,
+                                    autoRow: true,
+                                  });
+                                  insXmSelGoodsCategoryIdExtend.update({
+                                    data: e.data.categories.data,
+                                    autoRow: true,
+                                  });
+                                  form.render();
+                                  layer.close(index); //鍐嶆墽琛屽叧闂�
+                                  layer.msg(e.msg);
+                                } else {
+                                  layer.msg(e.msg);
+                                }
+                              }
+                            );
+                          }
+                        );
+                      });
+                  },
+                  btn: ["纭畾", "鍙栨秷"],
+                  yes: function (index, layero) {
+                    layero
+                      .contents()
+                      .find("#LAY-app-CoreCmsGoodsCategory-createForm-submit")
+                      .click();
+                  },
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            }
+          );
+        });
+        //娣诲姞sku
+        $(document).on("click", ".add-Sku", function () {
+          coreHelper.Post(
+            "Api/CoreCmsGoodsTypeSpec/GetCreate",
+            null,
+            function (e) {
+              if (e.code === 0) {
+                admin.popup({
+                  shadeClose: false,
+                  title: "鍒涘缓鏁版嵁",
+                  area: ["550px", "90%"],
+                  id: "LAY-popup-CoreCmsGoodsTypeSpec-create",
+                  success: function (layero, index) {
+                    view(this.id)
+                      .render("good/goodstypespec/create", { data: e.data })
+                      .done(function () {
+                        //鐩戝惉鎻愪氦
+                        form.on(
+                          "submit(LAY-app-CoreCmsGoodsTypeSpec-createForm-submit)",
+                          function (data) {
+                            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+                            var keys = Object.keys(field);
+                            field.value = [];
+                            for (var i = 0; i < keys.length; i++) {
+                              if (keys[i].indexOf("value") != -1) {
+                                var keyName = Object.keys(field)[i];
+                                field.value.push(field[keyName]);
+                              }
+                            }
+
+                            if (debug) {
+                              console.log(field);
+                            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                            coreHelper.Post(
+                              "Api/CoreCmsGoodsTypeSpec/DoCreate",
+                              field,
+                              function (e) {
+                                if (e.code === 0) {
+                                  var ids = insgoodsSKU.getValue();
+                                  var arrSku = [];
+                                  if (ids.length > 0) {
+                                    arrSku = ids;
+                                  }
+                                  insgoodsSKU.update({
+                                    data: e.data.skuList,
+                                    initValue: arrSku,
+                                    autoRow: true,
+                                  });
+                                  form.render();
+                                  layer.close(index); //鍐嶆墽琛屽叧闂�
+                                  layer.msg(e.msg);
+                                } else {
+                                  layer.msg(e.msg);
+                                }
+                              }
+                            );
+                          }
+                        );
+                      });
+                  },
+                  btn: ["纭畾", "鍙栨秷"],
+                  yes: function (index, layero) {
+                    layero
+                      .contents()
+                      .find("#LAY-app-CoreCmsGoodsTypeSpec-createForm-submit")
+                      .click();
+                  },
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            }
+          );
+          return false;
+        });
+
+        //娣诲姞鍙傛暟妯″瀷
+        $(document).on("click", ".add-goodsParams", function () {
+          coreHelper.Post(
+            "Api/CoreCmsGoodsParams/GetCreate",
+            null,
+            function (e) {
+              if (e.code === 0) {
+                admin.popup({
+                  shadeClose: false,
+                  title: "鍒涘缓鏁版嵁",
+                  area: ["550px", "400px"],
+                  id: "LAY-popup-CoreCmsGoodsParams-create",
+                  success: function (layero, index) {
+                    view(this.id)
+                      .render("good/goodsparams/create", { data: e.data })
+                      .done(function () {
+                        //鐩戝惉鎻愪氦
+                        form.on(
+                          "submit(LAY-app-CoreCmsGoodsParams-createForm-submit)",
+                          function (data) {
+                            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+
+                            if (debug) {
+                              console.log(field);
+                            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                            coreHelper.Post(
+                              "Api/CoreCmsGoodsParams/DoCreate",
+                              field,
+                              function (e) {
+                                if (e.code === 0) {
+                                  var ids = insGoodsParams.getValue();
+                                  var arrSku = [];
+                                  if (ids.length > 0) {
+                                    arrSku = ids;
+                                  }
+                                  insGoodsParams.update({
+                                    data: e.data.paramsList,
+                                    initValue: arrSku,
+                                    autoRow: true,
+                                  });
+                                  form.render();
+                                  layer.close(index); //鍐嶆墽琛屽叧闂�
+                                  layer.msg(e.msg);
+                                } else {
+                                  layer.msg(e.msg);
+                                }
+                              }
+                            );
+                          }
+                        );
+                      });
+                  },
+                  btn: ["纭畾", "鍙栨秷"],
+                  yes: function (index, layero) {
+                    layero
+                      .contents()
+                      .find("#LAY-app-CoreCmsGoodsParams-createForm-submit")
+                      .click();
+                  },
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            }
+          );
+          return false;
+        });
+
+        //娣诲姞鍝佺墝
+        $(document).on("click", ".add-brand", function () {
+          coreHelper.Post("Api/CoreCmsBrand/GetCreate", null, function (e) {
+            if (e.code === 0) {
+              admin.popup({
+                shadeClose: false,
+                title: "娣诲姞鍝佺墝",
+                area: ["600px", "450px"],
+                id: "LAY-popup-CoreCmsBrand-create",
+                success: function (layero, index) {
+                  view(this.id)
+                    .render("good/goodsbrand/create", { data: e.data })
+                    .done(function () {
+                      //鐩戝惉鎻愪氦
+                      form.on(
+                        "submit(LAY-app-CoreCmsBrand-createForm-submit)",
+                        function (data) {
+                          var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+                          field.isShow = field.isShow == "on";
+                          if (debug) {
+                            console.log(field);
+                          } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                          //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                          coreHelper.Post(
+                            "Api/CoreCmsBrand/DoCreate",
+                            field,
+                            function (e) {
+                              if (e.code === 0) {
+                                //涓嬫媺閲嶆柊璧嬪��
+                                var getTpl = brand_tpl.innerHTML,
+                                  view = document.getElementById("brandIdView");
+                                var tmpData = {};
+                                tmpData.list = e.data.brands;
+                                laytpl(getTpl).render(tmpData, function (html) {
+                                  view.innerHTML = html;
+                                });
+                                form.render();
+                                layer.close(index); //鍐嶆墽琛屽叧闂�
+                                layer.msg(e.msg);
+                              } else {
+                                layer.msg(e.msg);
+                              }
+                            }
+                          );
+                        }
+                      );
+                    });
+                },
+                btn: ["纭畾", "鍙栨秷"],
+                yes: function (index, layero) {
+                  layero
+                    .contents()
+                    .find("#LAY-app-CoreCmsBrand-createForm-submit")
+                    .click();
+                },
+              });
+            } else {
+              layer.msg(e.msg);
+            }
+          });
+          return false;
+        });
+
+        //涓�閿缃�
+        $(document).on("click", ".aKeySetBtn", function () {
+          layer.open({
+            type: 1,
+            area: ["700px", "500px"],
+            offset: "50px",
+            title: "涓�閿缃�",
+            closeBtn: 1,
+            shadeClose: true,
+            content: $("#batchSetting"),
+            shade: 0,
+            btn: ["鍏抽棴"],
+            btn1: function (index, layero) {
+              $("#batchSetting").css("display", "none");
+              layer.closeAll();
+              return false;
+            },
+            btn2: function (index, layero) {
+              $("#batchSetting").css("display", "none");
+              layer.closeAll();
+              return false;
+            },
+            cancel: function (layero, index) {
+              $("#batchSetting").css("display", "none");
+              layer.closeAll();
+              return false;
+            },
+          });
+        });
+
+        //榛樿璐у搧閫夋嫨
+        form.on("checkbox(isdefalut)", function (data) {
+          console.log(data.elem.checked);
+          if (data.elem.checked) {
+            var checkedName = $(data.elem).attr("id");
+            $(".isdefalut").each(function (i, dom) {
+              var name = $(dom).attr("id");
+              if (name != checkedName) {
+                $(dom).attr("checked", false);
+                $(dom).attr("value", "0");
+                $("#more_spec_disgoods .layui-form-checkbox").removeClass(
+                  "layui-form-checked"
+                );
+              } else {
+                $(dom).attr("checked", true);
+                $(dom).attr("value", "1");
+              }
+            });
+            $(data.othis).addClass("layui-form-checked");
+          } else {
+            $("#more_spec_disgoods .layui-form-checkbox")
+              .first()
+              .addClass("layui-form-checked");
+            $(".isdefalut").first().attr("checked", true);
+            $(".isdefalut").first().attr("value", "1");
+          }
+          form.render();
+        });
+
+        function openSpecBox(is_open) {
+          if (is_open == "0") {
+            $("input[name=openSpec]").val("1");
+            $("#spec_select").show();
+            $("#goodsTypeIdViewBox").show();
+            $("#openSpecBtn").html("鍙栨秷SKU");
+            console.log("鍙栨秷SKU");
+
+            if (_that.tempMultitermData.length == 0) {
+              $("#more_spec_disgoods").html("");
+              $("#productsCount").val(0);
+            } else {
+              var getTpl = getSpec_tpl.innerHTML,
+                viewBox = document.getElementById("more_spec_disgoods");
+              laytpl(getTpl).render(_that.tempMultitermData, function (html) {
+                viewBox.innerHTML = html;
+              });
+              $("#productsCount").val(_that.tempMultitermData.length);
+            }
+          } else {
+            $("input[name=openSpec]").val("0");
+            $("#spec_select").hide();
+            $("#goodsTypeIdViewBox").hide();
+            $("#openSpecBtn").html("鍚敤SKU");
+            console.log("鍚敤SKU");
+
+            var arr = [];
+            arr.push(_that.oldSingleData);
+            var getTpl = getSpec_tpl.innerHTML,
+              viewBox = document.getElementById("more_spec_disgoods");
+            laytpl(getTpl).render(arr, function (html) {
+              viewBox.innerHTML = html;
+            });
+            $("#productsCount").val(1);
+          }
+          form.render();
+        }
+
+        //澶勭悊灞炴�� 涓� lay-active 鐨勬墍鏈夊厓绱犱簨浠�
+        util.event("lay-active", {
+          doSetGoodsSku: function () {
+            var ids = insgoodsSKU.getValue();
+            if (ids.length <= 0) {
+              layer.msg("璇峰厛閫夋嫨SKU妯″瀷");
+              return false;
+            }
+            var delidsStr = [];
+            layui.each(ids, function (index, item) {
+              delidsStr.push(item.id);
+            });
+
+            layer.confirm(
+              "鏇存崲SKU妯″瀷鍚庯紝璐у搧闇�閲嶆柊鐢熸垚锛岀‘瀹氳鏇存崲鍚楋紵",
+              {
+                btn: ["纭畾", "鍙栨秷"],
+                title: "鎻愮ず",
+              },
+              function (index) {
+                coreHelper.Post(
+                  "Api/CoreCmsGoods/GetSkuDetail",
+                  { id: delidsStr },
+                  function (e) {
+                    if (debug) {
+                      console.log(e);
+                    } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                    if (e.data) {
+                      //璧嬪�煎晢鍝佸弬鏁版暟鎹�
+                      var tmpData = {
+                        goodsTypeSpec: e.data.goodsTypeSpec,
+                        model: d.data.model,
+                      };
+
+                      var getTpl = sku_tpl.innerHTML,
+                        view = document.getElementById("product-info");
+                      laytpl(getTpl).render(tmpData, function (html) {
+                        view.innerHTML = html;
+                      });
+                      if (e.data.goodsTypeSpec.length > 0) {
+                        openSpecBox("0");
+                      }
+                      form.render();
+                    }
+                  }
+                );
+                layer.close(index);
+              },
+              function () {}
+            );
+            form.render();
+          },
+          doSetGoodsParams: function () {
+            var ids = insGoodsParams.getValue();
+            if (ids.length <= 0) {
+              layer.msg("璇峰厛閫夋嫨鍙傛暟");
+              return false;
+            }
+            if (d.params.data.parameters) {
+              var arr = d.params.data.parameters.split("|");
+              for (var i = 0; i < arr.length; i++) {
+                var arrChild = arr[i].split(":");
+                arrParameters.push(arrChild);
+              }
+            }
+            var tmpData = { goodsParams: ids, arrParameters: arrParameters };
+            var getTpl = params_tpl.innerHTML,
+              viewBox = document.getElementById("parametersBox");
+            laytpl(getTpl).render(tmpData, function (html) {
+              viewBox.innerHTML = html;
+            });
+            form.render();
+          },
+          doClearGoodsParams: function () {
+            $("#parametersBox").html("");
+            layer.msg("宸叉竻绌猴紝璇烽噸鏂伴�夋嫨");
+            form.render();
+          },
+          delTr: function () {
+            var delSn = $(this)
+              .parent()
+              .parent("tr")
+              .find("input[name='product[sn][]']")
+              .val();
+            for (var i = 0; i < _that.tempMultitermData.length; i++) {
+              if (_that.tempMultitermData[i].sn == delSn) {
+                _that.tempMultitermData.splice(i, 1);
+                break;
+              }
+            }
+
+            $(this).parent().parent("tr").remove();
+            var productsCount = parseInt($("#productsCount").val());
+            $("#productsCount").val(productsCount - 1);
+
+            var is_open = $("#openSpecInput").val();
+            if (is_open == "0") {
+              _that.oldSingleData = _that.enptyProducts;
+              var arr = [];
+              arr.push(_that.oldSingleData);
+              var getTpl = getSpec_tpl.innerHTML,
+                viewBox = document.getElementById("more_spec_disgoods");
+              laytpl(getTpl).render(arr, function (html) {
+                viewBox.innerHTML = html;
+              });
+              $("#productsCount").val(1);
+            }
+            form.render();
+          },
+          createbn: function () {
+            var bn = layui.coreHelper.getSN("BN");
+            $("#bn").val(bn);
+          },
+          createSn: function () {
+            var sn = layui.coreHelper.getSN("SN");
+            $("#sn").val(sn);
+          },
+          openSpecBtn: function () {
+            var index = layer.load();
+            var is_open = $("#openSpecInput").val();
+            openSpecBox(is_open);
+            layer.close(index);
+          },
+          getGenerateSpecBtn: function () {
+            var list = $("#spec_select input[type=checkbox]:checked");
+            console.log(list);
+            if (list.length > 0) {
+              var array = $("#spec_form").serializeArray();
+              coreHelper.Post(
+                "Api/CoreCmsGoods/GetSpecHtml",
+                { entity: array },
+                function (e) {
+                  if (debug) {
+                    console.log(e);
+                  } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                  if (e.code == 0) {
+                    //鎵归噺璁剧疆sku鍥剧墖
+                    if (e.data.skuArray) {
+                      //鐢熸垚涓�閿甋KU涓婁紶鍥剧墖鐨勫唴瀹�
+                      var tmpData2 = e.data.skuArray;
+                      var getTpl2 = imageSetMoreSku_tpl.innerHTML,
+                        view2 = document.getElementById("skuSetImage");
+                      laytpl(getTpl2).render(tmpData2, function (html) {
+                        view2.innerHTML = html;
+                      });
+                      form.render("radio");
+                    }
+
+                    //璧嬪�兼暟鎹�
+                    var getTpl = getSpec_tpl.innerHTML,
+                      view = document.getElementById("more_spec_disgoods");
+                    var tmpData = [];
+
+                    var skuArray = e.data.skuArray;
+                    var oldData = _that.tempMultitermData;
+                    var oldHaveDefault = false;
+
+                    if (oldData) {
+                      for (var i = 0; i < oldData.length; i++) {
+                        if (skuArray.indexOf(oldData[i].spesDesc) != -1) {
+                          tmpData.push(oldData[i]);
+                          if (oldData[i].isDefalut) {
+                            oldHaveDefault = true;
+                          }
+                        }
+                      }
+                    }
+                    if (e.data.products) {
+                      for (var i = 0; i < e.data.products.length; i++) {
+                        e.data.products[i].isDefalut = false;
+                        //e.data.products[i].sn = layui.coreHelper.getSN('SN');
+                        tmpData.push(e.data.products[i]);
+                      }
+                    }
+                    if (tmpData && !oldHaveDefault) {
+                      tmpData[0].isDefalut = true;
+                    }
+                    _that.tempMultitermData = tmpData;
+                    console.log(_that.tempMultitermData);
+                    laytpl(getTpl).render(tmpData, function (html) {
+                      view.innerHTML = html;
+                    });
+                    $("#spesDesc").val(e.data.selectSpecStr);
+                    $("#newSpec").val(e.data.newSpecStr);
+                    $("#productsCount").val(tmpData.length);
+
+                    //SKU缂╃暐鍥句笂浼�
+                    $(".upSpecImage").click(function () {
+                      var _that = this;
+                      cropperImg.cropImg({
+                        aspectRatio: 1 / 1,
+                        imgSrc: "no",
+                        onCrop: function (data) {
+                          var loadIndex = layer.load(2);
+                          coreHelper.Post(
+                            "api/Tools/UploadFilesFByBase64",
+                            { base64: data },
+                            function (res) {
+                              if (0 === res.code) {
+                                var item = $(_that);
+                                item
+                                  .parent()
+                                  .parent()
+                                  .prev()
+                                  .find("#productImagesInput")
+                                  .val(res.data.fileUrl);
+                                item
+                                  .parent()
+                                  .parent()
+                                  .prev()
+                                  .find("#productImagesSrc")
+                                  .attr("src", res.data.fileUrl);
+
+                                layer.msg(res.msg);
+                                layer.close(loadIndex);
+                              } else {
+                                layer.close(loadIndex);
+                                layer.msg(res.msg, { icon: 2, anim: 6 });
+                              }
+                            }
+                          );
+                        },
+                      });
+                    });
+
+                    //SKU鍘熷浘涓婁紶
+                    $(".upSpecImageOriginal").click(function () {
+                      var _that = this;
+                      admin.popup({
+                        title: "鍘熷浘涓婁紶",
+                        area: ["800px", "300px"],
+                        id: "LAY-app-CoreCmsCommon-GetNoticeIds",
+                        success: function (layero, indexChild) {
+                          layui
+                            .view(this.id)
+                            .render("common/getUpLoad", null)
+                            .done(function () {
+                              layui.form.on(
+                                "submit(LAY-app-getUpLoad-submit)",
+                                function (data) {
+                                  console.log(data);
+                                  var item = $(_that);
+                                  item
+                                    .parent()
+                                    .parent()
+                                    .prev()
+                                    .find("#productImagesInput")
+                                    .val(data.field.imagesUrl);
+                                  item
+                                    .parent()
+                                    .parent()
+                                    .prev()
+                                    .find("#productImagesSrc")
+                                    .attr("src", data.field.imagesUrl);
+                                  layer.close(indexChild);
+                                }
+                              );
+                            });
+                        },
+                        btn: ["纭畾", "鍙栨秷"],
+                        yes: function (index, layero) {
+                          layero
+                            .contents()
+                            .find("#LAY-app-getUpLoad-submit")
+                            .click();
+                        },
+                      });
+                    });
+
+                    layer.msg("Sku鍒楄〃鑾峰彇鎴愬姛");
+                  } else {
+                    layer.msg(e.msg, { icon: 5, anim: 6 });
+                  }
+                  form.render();
+                }
+              );
+              return false;
+            } else {
+              layer.msg("璇烽�夋嫨Sku鍏蜂綋鏄庣粏");
+              return false;
+            }
+            return false;
+          },
+        });
+
+        //瑙嗛涓婁紶
+        var uploadInst = upload.render({
+          elem: "#upVideoBtn",
+          accept: "video",
+          url: layui.setter.apiUrl + "Api/Tools/UploadFiles",
+          before: function (obj) {
+            obj.preview(function (index, file, result) {
+              layer.msg("涓婁紶涓�", { icon: 16, shade: 0.4 });
+            });
+          },
+          done: function (res) {
+            layer.closeAll("loading"); //鍏抽棴鍔犺浇灞�
+            if (res.code > 0) {
+              return layer.msg("涓婁紶澶辫触");
+            }
+            layer.msg("涓婁紶鎴愬姛");
+            $("#videoInput").val(res.data.fileUrl);
+          },
+          error: function () {},
+        });
+
+        form.on(
+          "submit(LAY-app-CoreCmsGoods-editForm-submit)",
+          function (data) {
+            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+
+            field["goods[isNomalVirtual]"] =
+              field["goods[isNomalVirtual]"] == "on";
+            field["goods[isMarketable]"] = field["goods[isMarketable]"] == "on";
+            field["goods[isRecommend]"] = field["goods[isRecommend]"] == "on";
+            field["goods[isHot]"] = field["goods[isHot]"] == "on";
+            field["goods[isDel]"] = field["goods[isDel]"] == "on";
+            field["goods[goodsCategoryId]"] = field.goodsCategoryId;
+            if (!!!field["goods[goodsCategoryId]"]) {
+              layer.msg("璇烽�夋嫨鍟嗗搧鏍忕洰");
+              return false;
+            }
+            field.goodsCategoryExtendIds = field.goodsCategoryIdExtend;
+            var keys = Object.keys(field);
+            var keysCount = 0;
+            for (var i = 0; i < keys.length; i++) {
+              if (keys[i].indexOf("paramsKey") != -1) {
+                keysCount++;
+              }
+            }
+            //缁勫悎鍙傛暟
+            if (keysCount > 0) {
+              var str = "";
+              for (var i = 0; i < keysCount; i++) {
+                var keyName = "paramsKey[" + i + "]";
+                var keyValue = "paramsValue[" + i + "]";
+                var keyType = "paramsType[" + i + "]";
+                var keyValueCount = "paramsValueCount[" + i + "]";
+                if (field[keyType] === "checkbox") {
+                  var childCount = parseInt(field[keyValueCount]);
+                  var value = "";
+                  if (childCount > 0) {
+                    for (var j = 0; j < childCount; j++) {
+                      var valueName = "paramsValue[" + i + "][" + j + "]";
+                      if (field[valueName]) {
+                        value += field[valueName] + ",";
+                      }
+                    }
+                    value = value.substr(0, value.length - 1);
+                    str += field[keyName] + ":" + value + "|";
+                  } else {
+                    if (field[keyValue]) {
+                      str += field[keyName] + ":" + field[keyValue] + "|";
+                    } else {
+                      str += field[keyName] + ":|";
+                    }
+                  }
+                } else {
+                  if (field[keyValue]) {
+                    str += field[keyName] + ":" + field[keyValue] + "|";
+                  } else {
+                    str += field[keyName] + ":|";
+                  }
+                }
+                field["goods[parameters]"] = str.substr(0, str.length - 1);
+              }
+            }
+            //缁勫悎json瀹炰綋骞舵彁浜pi
+            //鍟嗗搧瀹炰綋鏁版嵁
+            var goods = {};
+            goods.bn = field["goods[bn]"];
+            goods.id = field["goods[id]"];
+            goods.brandId = field["goods[brandId]"];
+            goods.brief = field["goods[brief]"];
+            goods.costprice = field["goods[costprice]"];
+            goods.goodsCategoryId = field["goods[goodsCategoryId]"];
+            goods.goodsTypeId = field["goods[goodsTypeId]"];
+
+            goods.goodsSkuIds = field.goodsSkuIds;
+            goods.goodsParamsIds = field.goodsParamsIds;
+
+            goods.images = field["goods[images]"];
+            goods.image = field["goods[image]"];
+            goods.video = field["goods[video]"];
+
+            goods.intro = window.editor.getData();
+            if (!!!goods.intro) {
+              layer.msg("鍟嗗搧璇︽儏涓嶈兘涓虹┖", { icon: 5 });
+              return false;
+            }
+            goods.isDel = field["goods[isDel]"];
+            goods.isHot = field["goods[isHot]"];
+            goods.isMarketable = field["goods[isMarketable]"];
+            goods.isNomalVirtual = field["goods[isNomalVirtual]"];
+            goods.isRecommend = field["goods[isRecommend]"];
+            goods.mktprice = field["goods[mktprice]"];
+            goods.name = field["goods[name]"];
+            goods.newSpec = field["goods[newSpec]"];
+            goods.parameters = field["goods[parameters]"];
+            //  goods.productsDistributionType = field['goods[productsDistributionType]'];
+            goods.price = field["goods[price]"];
+            goods.sn = field["goods[sn]"];
+            goods.sort = field["goods[sort]"];
+            goods.initialSales = field["goods[initialSales]"];
+            goods.spesDesc = field["goods[spesDesc]"];
+            goods.stock = field["goods[stock]"];
+            goods.unit = field["goods[unit]"];
+            goods.weight = field["goods[weight]"];
+
+            goods.openSpec = parseInt(field.openSpec);
+            //澶氬弬鏁颁骇鍝佸簱鐢熸垚鍒楄〃闆嗗悎
+            var products = [];
+            console.log("鐢熸垚闆嗗悎");
+            var productsCount = parseInt(field["productsCount"]);
+            for (var i = 0; i < productsCount; i++) {
+              var productModel = {};
+              productModel.id = field["product[id][" + i + "]"];
+              if (field["product[goodsId][" + i + "]"]) {
+                productModel.goodsId = field["product[goodsId][" + i + "]"];
+              } else {
+                productModel.goodsId = 0;
+              }
+              productModel.costprice = field["product[costprice][" + i + "]"];
+              productModel.images = field["product[images][" + i + "]"];
+              if (field["product[isDefalut][" + i + "]"] == "1") {
+                productModel.isDefalut = true;
+              } else {
+                productModel.isDefalut = false;
+              }
+              productModel.mktprice = field["product[mktprice][" + i + "]"];
+              productModel.price = field["product[price][" + i + "]"];
+              productModel.sn = field["product[sn][" + i + "]"];
+              productModel.spesDesc = field["product[spesDesc][" + i + "]"];
+              productModel.stock = field["product[stock][" + i + "]"];
+              productModel.weight = field["product[weight][" + i + "]"];
+              productModel.levelOne = field["product[levelOne][" + i + "]"];
+              productModel.levelTwo = field["product[levelTwo][" + i + "]"];
+              productModel.levelThree = field["product[levelThree][" + i + "]"];
+              productModel.pointsDeduction =
+                field["product[pointsDeduction][" + i + "]"];
+              productModel.points = field["product[points][" + i + "]"];
+              //娣诲姞 鐧惧垎鍏垫硶
+              productModel.isCustomizable =
+                field["product[isCustomizable][" + i + "]"];
+              productModel.distributionPrice =
+                field["product[distributionPrice][" + i + "]"];
+              productModel.distributionCutMoney =
+                field["product[distributionCutMoney][" + i + "]"];
+              productModel.cutMoney = field["product[cutMoney][" + i + "]"];
+              products.push(productModel);
+            }
+            //浼氬憳浠锋牸妯″瀷
+            var gradePrice = [];
+            if (field.gradeCount != "0") {
+              var gradeCount = parseInt(field["gradeCount"]);
+              for (var i = 0; i < gradeCount; i++) {
+                var gradePriceChild = {};
+                gradePriceChild.key = field["gradePrice[key][" + i + "]"];
+                gradePriceChild.value = field["gradePrice[value][" + i + "]"];
+                gradePrice.push(gradePriceChild);
+              }
+            }
+            if (debug) {
+              console.log(field);
+            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+            var postData = {
+              goods: goods,
+              products: products,
+              gradePrice: gradePrice,
+              goodsCategoryExtendIds: field.goodsCategoryExtendIds,
+            };
+            if (debug) {
+              console.log(postData);
+            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+            //return false;
+            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+            coreHelper.Post("Api/CoreCmsGoods/DoEdit", postData, function (e) {
+              console.log(e);
+              if (e.code === 0) {
+                layer.msg(e.msg, { time: 1000 }, function () {
+                  location.hash = "/good/goods/";
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            });
+          }
+        );
+
+        form.render();
+      }
+    );
+  };
+
+  //鍒犻櫎鍥剧墖
+  function delImg(obj, imageUrl) {
+    var imgDiv = $(obj).parent().parent().parent();
+    imgDiv.remove();
+    var index = imgs.indexOf(imageUrl);
+    if (index > -1) {
+      imgs.splice(index, 1);
+    }
+    $("#imageIds").val(imgs);
+  }
+  //璁句负榛樿鍥�
+  function setDefault(obj, imageUrl) {
+    var imgDiv = $(obj).parent().parent().parent();
+    $("#upload-more-list").prepend(imgDiv);
+    var index = imgs.indexOf(imageUrl);
+    if (index > -1) {
+      imgs.unshift(imgs.splice(index, 1)[0]);
+    }
+    $("#imageIds").val(imgs);
+  }
+  //鑾峰彇璁剧疆鍙傛暟鏂囧瓧鍐呭
+  function setTextParameters(parameters, id) {
+    if (parameters) {
+      for (var i = 0; i < parameters.length; i++) {
+        if (parameters[i][0] == id) {
+          return parameters[i][1];
+        }
+      }
+    }
+    return "";
+  }
+  //鑾峰彇璁剧疆鍙傛暟鍗曢�夊唴瀹�
+  function setRadioParameters(parameters, id, value) {
+    if (parameters) {
+      for (var i = 0; i < parameters.length; i++) {
+        if (parameters[i][0] == id && parameters[i][1] == value) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+  //鑾峰彇璁剧疆鍙傛暟澶嶉�夋鍐呭
+  function setCheckboxParameters(parameters, id, value) {
+    if (parameters) {
+      for (var i = 0; i < parameters.length; i++) {
+        if (parameters[i][0] == id) {
+          var arr = parameters[i][1].split(",");
+          for (var j = 0; j < arr.length; j++) {
+            if (value == arr[j]) {
+              return true;
+            }
+          }
+        }
+      }
+    }
+    return false;
+  }
+
+  //鍒ゆ柇SKU鏄惁閫変腑
+  function isSelectedTypeSpec(parameters, id, value) {
+    if (parameters) {
+      var arr = parameters.split("|");
+      for (var i = 0; i < arr.length; i++) {
+        var str = id + "&&" + value;
+        var child = arr[i].split(":");
+        if (child[0] === str) {
+          return true;
+        }
+      }
+      return false;
+    }
+    return false;
+  }
+  function getSelectedTypeSpecValue(parameters, id, value) {
+    if (parameters) {
+      var arr = parameters.split("|");
+      for (var i = 0; i < arr.length; i++) {
+        var child = arr[i].split(":");
+        if (child[0] === id.toString()) {
+          return child[1];
+        }
+      }
+      return value;
+    }
+    return value;
+  }
+
+  function oneKeySet(tag) {
+    var curValue = 0;
+    if (tag == 4) {
+      curValue = $("#oneKeySetWeight").val();
+    } else if (tag == 5) {
+      curValue = $("#oneKeySetPoints").val();
+    } else if (tag == 6) {
+      curValue = $("#oneKeySetPointsDeduction").val();
+    } else if (tag == 8) {
+      curValue = $("#oneKeySetPrice").val();
+    } else if (tag == 9) {
+      curValue = $("#oneKeySetCostPrice").val();
+    } else if (tag == 10) {
+      curValue = $("#oneKeySetMktPrice").val();
+    } else if (tag == 7) {
+      curValue = $("#oneKeySetStock").val();
+    } else if (tag == 11) {
+      curValue = $("#oneKeySetLevelOne").val();
+    } else if (tag == 12) {
+      curValue = $("#oneKeySetLevelTwo").val();
+    } else if (tag == 13) {
+      curValue = $("#oneKeySetLevelThree").val();
+    }
+
+    curValue = $.trim(curValue);
+
+    if (isNaN(curValue) || !curValue) {
+      layer.msg("璇疯緭鍏ユ暟瀛�");
+      return;
+    }
+
+    $.each($("#productsTbody tr"), function (i, item) {
+      $($(item).find("td:eq(" + tag + ") input")).val(curValue);
+    });
+  }
+</script>
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/editShehei.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/editShehei.html
new file mode 100644
index 0000000..10d5eb1
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/editShehei.html
@@ -0,0 +1,395 @@
+<script type="text/html" template lay-done="layui.data.sendParams(d);">
+    <div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsGoods-editForm" id="LAY-app-CoreCmsGoods-editForm">
+	    <input type="hidden" name="id"  value="{{d.params.data.id || '' }}" />
+	    <div class="layui-form-item">
+            <label for="id" class="layui-form-label  layui-form-required">鍟嗗搧ID</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="id"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.id || '' }}" placeholder="璇疯緭鍏ュ晢鍝両D" lay-reqText="璇疯緭鍏ュ晢鍝両D骞朵负鏁板瓧"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="bn" class="layui-form-label  layui-form-required">鍟嗗搧鏉$爜</label>
+            <div class="layui-input-block">
+            <input name="bn"   lay-verType="tips" lay-verify="required|verifybn" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佹潯鐮�" lay-reqText="璇疯緭鍏ュ晢鍝佹潯鐮�"  value="{{d.params.data.bn || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="name" class="layui-form-label  layui-form-required">鍟嗗搧鍚嶇О</label>
+            <div class="layui-input-block">
+            <input name="name"   lay-verType="tips" lay-verify="required|verifyname" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佸悕绉�" lay-reqText="璇疯緭鍏ュ晢鍝佸悕绉�"  value="{{d.params.data.name || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="brief" class="layui-form-label  layui-form-required">鍟嗗搧绠�浠�</label>
+            <div class="layui-input-block">
+            <input name="brief"   lay-verType="tips" lay-verify="required|verifybrief" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佺畝浠�" lay-reqText="璇疯緭鍏ュ晢鍝佺畝浠�"  value="{{d.params.data.brief || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="image" class="layui-form-label  layui-form-required">缂╃暐鍥�</label>
+            <div class="layui-input-inline">
+                <input name="image" id="imageInput" lay-verType="tips" lay-verify="required" class="layui-input"  value="{{d.params.data.image || '' }}" placeholder="璇蜂笂浼犵缉鐣ュ浘" lay-reqText="璇蜂笂浼犵缉鐣ュ浘"  />
+            </div>
+		    <div class="layui-input-inline">
+                <button type="button" class="layui-btn" id="upBtnimage" lay-active="doCropperImg">涓婁紶鍥剧墖</button>
+                <img class="coreshop-upload-img" id="viewImgBoximage" src="{{d.params.data.image || layui.setter.noImagePicUrl }}">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="images" class="layui-form-label  layui-form-required">鍥鹃泦</label>
+            <div class="layui-input-inline">
+                <input name="images" id="imagesInput" lay-verType="tips" lay-verify="required" class="layui-input"  value="{{d.params.data.images || '' }}" placeholder="璇蜂笂浼犲浘闆�" lay-reqText="璇蜂笂浼犲浘闆�"  />
+            </div>
+		    <div class="layui-input-inline">
+                <button type="button" class="layui-btn" id="upBtnimages" lay-active="doCropperImg">涓婁紶鍥剧墖</button>
+                <img class="coreshop-upload-img" id="viewImgBoximages" src="{{d.params.data.images || layui.setter.noImagePicUrl }}">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="video" class="layui-form-label  layui-form-required">瑙嗛</label>
+            <div class="layui-input-block">
+            <input name="video"   lay-verType="tips" lay-verify="required|verifyvideo" class="layui-input" placeholder="璇疯緭鍏ヨ棰�" lay-reqText="璇疯緭鍏ヨ棰�"  value="{{d.params.data.video || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="productsDistributionType" class="layui-form-label  layui-form-required">浣i噾鍒嗛厤鏂瑰紡</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="productsDistributionType"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.productsDistributionType || '' }}" placeholder="璇疯緭鍏ヤ剑閲戝垎閰嶆柟寮�" lay-reqText="璇疯緭鍏ヤ剑閲戝垎閰嶆柟寮忓苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="goodsCategoryId" class="layui-form-label  layui-form-required">鍟嗗搧鍒嗙被</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="goodsCategoryId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.goodsCategoryId || '' }}" placeholder="璇疯緭鍏ュ晢鍝佸垎绫�" lay-reqText="璇疯緭鍏ュ晢鍝佸垎绫诲苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="goodsTypeId" class="layui-form-label  layui-form-required">鍟嗗搧绫诲埆</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="goodsTypeId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.goodsTypeId || '' }}" placeholder="璇疯緭鍏ュ晢鍝佺被鍒�" lay-reqText="璇疯緭鍏ュ晢鍝佺被鍒苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="goodsSkuIds" class="layui-form-label  layui-form-required">sku搴忓垪</label>
+            <div class="layui-input-block">
+            <input name="goodsSkuIds"   lay-verType="tips" lay-verify="required|verifygoodsSkuIds" class="layui-input" placeholder="璇疯緭鍏ku搴忓垪" lay-reqText="璇疯緭鍏ku搴忓垪"  value="{{d.params.data.goodsSkuIds || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="goodsParamsIds" class="layui-form-label  layui-form-required">鍙傛暟搴忓垪</label>
+            <div class="layui-input-block">
+            <input name="goodsParamsIds"   lay-verType="tips" lay-verify="required|verifygoodsParamsIds" class="layui-input" placeholder="璇疯緭鍏ュ弬鏁板簭鍒�" lay-reqText="璇疯緭鍏ュ弬鏁板簭鍒�"  value="{{d.params.data.goodsParamsIds || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="brandId" class="layui-form-label  layui-form-required">鍝佺墝</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="brandId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.brandId || '' }}" placeholder="璇疯緭鍏ュ搧鐗�" lay-reqText="璇疯緭鍏ュ搧鐗屽苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item" pane>
+            <label for="isNomalVirtual" class="layui-form-label  layui-form-required">鏄惁铏氭嫙鍟嗗搧</label>
+            <div class="layui-input-block">
+                <input type="checkbox" lay-filter="switch" name="isNomalVirtual"   {{ d.params.data.isNomalVirtual ? 'checked' : '' }} lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item" pane>
+            <label for="isMarketable" class="layui-form-label  layui-form-required">鏄惁涓婃灦</label>
+            <div class="layui-input-block">
+                <input type="checkbox" lay-filter="switch" name="isMarketable"   {{ d.params.data.isMarketable ? 'checked' : '' }} lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="unit" class="layui-form-label  layui-form-required">鍟嗗搧鍗曚綅</label>
+            <div class="layui-input-block">
+            <input name="unit"   lay-verType="tips" lay-verify="required|verifyunit" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佸崟浣�" lay-reqText="璇疯緭鍏ュ晢鍝佸崟浣�"  value="{{d.params.data.unit || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="intro" class="layui-form-label  layui-form-required">鍟嗗搧璇︽儏</label>
+            <div class="layui-input-block">
+            <input name="intro"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佽鎯�" lay-reqText="璇疯緭鍏ュ晢鍝佽鎯�"  value="{{d.params.data.intro || '' }}" />
+            
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="spesDesc" class="layui-form-label  layui-form-required">鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌�</label>
+            <div class="layui-input-block">
+            <input name="spesDesc"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇疯緭鍏ュ晢鍝佽鏍煎簭鍒楀彿瀛樺偍" lay-reqText="璇疯緭鍏ュ晢鍝佽鏍煎簭鍒楀彿瀛樺偍"  value="{{d.params.data.spesDesc || '' }}" />
+            
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="parameters" class="layui-form-label  layui-form-required">鍙傛暟搴忓垪鍖�</label>
+            <div class="layui-input-block">
+            <input name="parameters"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇疯緭鍏ュ弬鏁板簭鍒楀寲" lay-reqText="璇疯緭鍏ュ弬鏁板簭鍒楀寲"  value="{{d.params.data.parameters || '' }}" />
+            
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="commentsCount" class="layui-form-label  layui-form-required">璇勮娆℃暟</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="commentsCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.commentsCount || '' }}" placeholder="璇疯緭鍏ヨ瘎璁烘鏁�" lay-reqText="璇疯緭鍏ヨ瘎璁烘鏁板苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="viewCount" class="layui-form-label  layui-form-required">娴忚娆℃暟</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="viewCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.viewCount || '' }}" placeholder="璇疯緭鍏ユ祻瑙堟鏁�" lay-reqText="璇疯緭鍏ユ祻瑙堟鏁板苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="buyCount" class="layui-form-label  layui-form-required">璐拱娆℃暟</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="buyCount"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.buyCount || '' }}" placeholder="璇疯緭鍏ヨ喘涔版鏁�" lay-reqText="璇疯緭鍏ヨ喘涔版鏁板苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="uptime" class="layui-form-label  layui-form-required">涓婃灦鏃堕棿</label>
+            <div class="layui-input-block">
+                <input name="uptime"  id="editTime-CoreCmsGoods-uptime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ヤ笂鏋舵椂闂�" lay-reqText="璇疯緭鍏ヤ笂鏋舵椂闂�"   value="{{d.params.data.uptime || '' }}"/>
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="downtime" class="layui-form-label  layui-form-required">涓嬫灦鏃堕棿</label>
+            <div class="layui-input-block">
+                <input name="downtime"  id="editTime-CoreCmsGoods-downtime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ヤ笅鏋舵椂闂�" lay-reqText="璇疯緭鍏ヤ笅鏋舵椂闂�"   value="{{d.params.data.downtime || '' }}"/>
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="sort" class="layui-form-label  layui-form-required">鍟嗗搧鎺掑簭</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="sort"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.sort || '' }}" placeholder="璇疯緭鍏ュ晢鍝佹帓搴�" lay-reqText="璇疯緭鍏ュ晢鍝佹帓搴忓苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="labelIds" class="layui-form-label  layui-form-required">鏍囩id閫楀彿鍒嗛殧</label>
+            <div class="layui-input-block">
+            <input name="labelIds"   lay-verType="tips" lay-verify="required|verifylabelIds" class="layui-input" placeholder="璇疯緭鍏ユ爣绛緄d閫楀彿鍒嗛殧" lay-reqText="璇疯緭鍏ユ爣绛緄d閫楀彿鍒嗛殧"  value="{{d.params.data.labelIds || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="newSpec" class="layui-form-label  layui-form-required">鑷畾涔夎鏍煎悕绉�</label>
+            <div class="layui-input-block">
+            <input name="newSpec"   lay-verType="tips" lay-verify="required" class="layui-input" placeholder="璇疯緭鍏ヨ嚜瀹氫箟瑙勬牸鍚嶇О" lay-reqText="璇疯緭鍏ヨ嚜瀹氫箟瑙勬牸鍚嶇О"  value="{{d.params.data.newSpec || '' }}" />
+            
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="openSpec" class="layui-form-label  layui-form-required">寮�鍚鍒�</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="openSpec"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.openSpec || '' }}" placeholder="璇疯緭鍏ュ紑鍚鍒�" lay-reqText="璇疯緭鍏ュ紑鍚鍒欏苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="createTime" class="layui-form-label  layui-form-required">鍒涘缓鏃堕棿</label>
+            <div class="layui-input-block">
+                <input name="createTime"  id="editTime-CoreCmsGoods-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" lay-reqText="璇疯緭鍏ュ垱寤烘椂闂�"   value="{{d.params.data.createTime || '' }}"/>
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="updateTime" class="layui-form-label  layui-form-required">鏇存柊鏃堕棿</label>
+            <div class="layui-input-block">
+                <input name="updateTime"  id="editTime-CoreCmsGoods-updateTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" lay-reqText="璇疯緭鍏ユ洿鏂版椂闂�"   value="{{d.params.data.updateTime || '' }}"/>
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item" pane>
+            <label for="isRecommend" class="layui-form-label  layui-form-required">鏄惁鎺ㄨ崘</label>
+            <div class="layui-input-block">
+                <input type="checkbox" lay-filter="switch" name="isRecommend"   {{ d.params.data.isRecommend ? 'checked' : '' }} lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item" pane>
+            <label for="isHot" class="layui-form-label  layui-form-required">鏄惁鐑棬</label>
+            <div class="layui-input-block">
+                <input type="checkbox" lay-filter="switch" name="isHot"   {{ d.params.data.isHot ? 'checked' : '' }} lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item" pane>
+            <label for="isDel" class="layui-form-label  layui-form-required">鏄惁鍒犻櫎</label>
+            <div class="layui-input-block">
+                <input type="checkbox" lay-filter="switch" name="isDel"   {{ d.params.data.isDel ? 'checked' : '' }} lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴">
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="initialSales" class="layui-form-label  layui-form-required">鍒濆閿�閲�</label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="initialSales"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.initialSales || '' }}" placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" lay-reqText="璇疯緭鍏ュ垵濮嬮攢閲忓苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="areaCode" class="layui-form-label  layui-form-required"></label>
+            <div class="layui-input-block">
+            <input name="areaCode"   lay-verType="tips" lay-verify="required|verifyareaCode" class="layui-input" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏�"  value="{{d.params.data.areaCode || '' }}" />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="publisherId" class="layui-form-label  layui-form-required"></label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="publisherId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.publisherId || '' }}" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="approverId" class="layui-form-label  layui-form-required"></label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="approverId"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.approverId || '' }}" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="auditStatus" class="layui-form-label  layui-form-required"></label>
+            <div class="layui-input-block">
+                <input  type="number" min="0" max="999999" name="auditStatus"   lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.auditStatus || '' }}" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏ュ苟涓烘暟瀛�"  />
+            </div>
+        </div>
+	    
+	    <div class="layui-form-item">
+            <label for="auditTime" class="layui-form-label  layui-form-required"></label>
+            <div class="layui-input-block">
+                <input name="auditTime"  id="editTime-CoreCmsGoods-auditTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" placeholder="璇疯緭鍏�" lay-reqText="璇疯緭鍏�"   value="{{d.params.data.auditTime || '' }}"/>
+            </div>
+        </div>
+	    
+        <div class="layui-form-item text-right core-hidden">
+            <input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsGoods-editForm-submit" id="LAY-app-CoreCmsGoods-editForm-submit" value="纭缂栬緫">
+        </div>
+    </div>
+</script>
+<script>
+    var debug= layui.setter.debug;
+    layui.data.sendParams = function (d) {
+        //寮�鍚皟璇曟儏鍐典笅鑾峰彇鎺ュ彛璧嬪�兼暟鎹�
+        if (debug) { console.log(d.params.data); }
+        layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
+        function () {
+            var $ = layui.$
+                , form = layui.form
+                , admin = layui.admin
+                , laydate = layui.laydate
+                , upload = layui.upload
+                , cropperImg = layui.cropperImg
+                , coreHelper = layui.coreHelper;
+        
+            //缂╃暐鍥惧浘鐗囪鍓笂浼�
+            $('#upBtnimage').click(function () {
+                cropperImg.cropImg({
+                    aspectRatio: 1 / 1,
+                    imgSrc: $('#viewImgBoximage').attr('src'),
+                    onCrop: function (data) {
+                        var loadIndex = layer.load(2);
+                        coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
+                            if (0 === res.code) {
+                                $('#viewImgBoximage').attr('src', res.data.fileUrl);
+                                $("#imageInput").val(res.data.fileUrl);
+                                layer.msg(res.msg);
+                                layer.close(loadIndex);
+                            } else {
+                                layer.close(loadIndex);
+                                layer.msg(res.msg, { icon: 2, anim: 6 });
+                            }
+                        });
+                    }
+                });
+            });
+            
+            //鍥鹃泦鍥剧墖瑁佸壀涓婁紶
+            $('#upBtnimages').click(function () {
+                cropperImg.cropImg({
+                    aspectRatio: 1 / 1,
+                    imgSrc: $('#viewImgBoximages').attr('src'),
+                    onCrop: function (data) {
+                        var loadIndex = layer.load(2);
+                        coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
+                            if (0 === res.code) {
+                                $('#viewImgBoximages').attr('src', res.data.fileUrl);
+                                $("#imagesInput").val(res.data.fileUrl);
+                                layer.msg(res.msg);
+                                layer.close(loadIndex);
+                            } else {
+                                layer.close(loadIndex);
+                                layer.msg(res.msg, { icon: 2, anim: 6 });
+                            }
+                        });
+                    }
+                });
+            });
+            
+            laydate.render({
+                elem: '#editTime-CoreCmsGoods-uptime',
+                type: 'datetime',
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#editTime-CoreCmsGoods-downtime',
+                type: 'datetime',
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#editTime-CoreCmsGoods-createTime',
+                type: 'datetime',
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#editTime-CoreCmsGoods-updateTime',
+                type: 'datetime',
+                fullPanel: true
+            });
+            laydate.render({
+                elem: '#editTime-CoreCmsGoods-auditTime',
+                type: 'datetime',
+                fullPanel: true
+            });
+            form.verify({
+                
+		        verifybn: [/^.{0,30}$/,'鍟嗗搧鏉$爜鏈�澶у彧鍏佽杈撳叆30浣嶅瓧绗�'],
+		        verifyname: [/^.{0,200}$/,'鍟嗗搧鍚嶇О鏈�澶у彧鍏佽杈撳叆200浣嶅瓧绗�'],
+		        verifybrief: [/^.{0,255}$/,'鍟嗗搧绠�浠嬫渶澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyimage: [/^.{0,255}$/,'缂╃暐鍥炬渶澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyvideo: [/^.{0,255}$/,'瑙嗛鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifygoodsSkuIds: [/^.{0,255}$/,'sku搴忓垪鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifygoodsParamsIds: [/^.{0,255}$/,'鍙傛暟搴忓垪鏈�澶у彧鍏佽杈撳叆255浣嶅瓧绗�'],
+		        verifyunit: [/^.{0,20}$/,'鍟嗗搧鍗曚綅鏈�澶у彧鍏佽杈撳叆20浣嶅瓧绗�'],
+		        verifylabelIds: [/^.{0,50}$/,'鏍囩id閫楀彿鍒嗛殧鏈�澶у彧鍏佽杈撳叆50浣嶅瓧绗�'],
+		        verifyareaCode: [/^.{0,200}$/,'鏈�澶у彧鍏佽杈撳叆200浣嶅瓧绗�'],
+            });
+            //閲嶈浇form
+            form.render(null, 'LAY-app-CoreCmsGoods-editForm');
+        })
+    };
+</script>
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/index.html
new file mode 100644
index 0000000..da8e0fd
--- /dev/null
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/baifenbingfa/distributiongoods/index.html
@@ -0,0 +1,1003 @@
+<title>鍟嗗搧琛�</title>
+<!--褰撳墠浣嶇疆寮�濮�-->
+<div class="layui-card layadmin-header">
+  <div class="layui-breadcrumb" lay-filter="breadcrumb">
+    <script
+      type="text/html"
+      template
+      lay-done="layui.data.updateMainBreadcrumb();"
+    ></script>
+  </div>
+</div>
+<!--褰撳墠浣嶇疆缁撴潫-->
+<style>
+  /* 閲嶅啓鏍峰紡 */
+</style>
+<script
+  type="text/html"
+  template
+  lay-type="Post"
+  lay-url="Api/DistributionGoods/GetIndex"
+  lay-done="layui.data.done(d);"
+></script>
+<div class="table-body">
+  <table
+    id="LAY-app-DistributionGoods-tableBox"
+    lay-filter="LAY-app-DistributionGoods-tableBox"
+  ></table>
+</div>
+
+<script type="text/html" id="LAY-app-DistributionGoods-toolbar">
+  <div class="layui-form coreshop-toolbar-search-form">
+    <div class="layui-form-item">
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="id">鍟嗗搧ID</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="id"  placeholder="璇疯緭鍏ュ晢鍝両D" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="bn">鍟嗗搧鏉$爜</label> -->
+        <div class="layui-input-inline">
+          <input
+            type="text"
+            name="bn"
+            placeholder="璇疯緭鍏ュ晢鍝佹潯鐮�"
+            class="layui-input"
+          />
+        </div>
+      </div>
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="name">鍟嗗搧鍚嶇О</label> -->
+        <div class="layui-input-inline">
+          <input
+            type="text"
+            name="name"
+            placeholder="璇疯緭鍏ュ晢鍝佸悕绉�"
+            class="layui-input"
+          />
+        </div>
+      </div>
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="brief">鍟嗗搧绠�浠�</label> -->
+        <div class="layui-input-inline">
+          <input
+            type="text"
+            name="brief"
+            placeholder="璇疯緭鍏ュ晢鍝佺畝浠�"
+            class="layui-input"
+          />
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="image">缂╃暐鍥�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="image"  placeholder="璇疯緭鍏ョ缉鐣ュ浘" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="images">鍥鹃泦</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="images"  placeholder="璇疯緭鍏ュ浘闆�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="video">瑙嗛</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="video"  placeholder="璇疯緭鍏ヨ棰�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="productsDistributionType">浣i噾鍒嗛厤鏂瑰紡</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="productsDistributionType"  placeholder="璇疯緭鍏ヤ剑閲戝垎閰嶆柟寮�" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="goodsCategoryId">鍟嗗搧鍒嗙被</label> -->
+        <div class="layui-input-inline">
+          <div id="goodsSelectCategorytTreeDis" class="ew-xmselect-tree"></div>
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="goodsTypeId">鍟嗗搧绫诲埆</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="goodsTypeId"  placeholder="璇疯緭鍏ュ晢鍝佺被鍒�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="goodsSkuIds">sku搴忓垪</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="goodsSkuIds"  placeholder="璇疯緭鍏ku搴忓垪" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="goodsParamsIds">鍙傛暟搴忓垪</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="goodsParamsIds"  placeholder="璇疯緭鍏ュ弬鏁板簭鍒�" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="brandId">鍝佺墝</label> -->
+        <div class="layui-input-inline">
+          <select name="brandId" id="brandId">
+            <option value="">璇烽�夋嫨鎵�灞炲搧鐗�</option>
+            {{# layui.each(indexData.brands, function(index, item){ }}
+            <option value="{{ item.id }}">{{ item.name }}</option>
+            {{# }); }}
+          </select>
+        </div>
+      </div>
+
+      <!-- <div class="layui-inline">
+			    <label class="layui-form-label" for="isNomalVirtual">鏄惁铏氭嫙鍟嗗搧</label>
+                <div class="layui-input-inline">
+                    <select name="isNomalVirtual">
+                        <option value="">璇烽�夋嫨</option>
+                        <option value="True">鏄�</option>
+                        <option value="False">鍚�</option>
+                    </select>
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="isMarketable">鏄惁涓婃灦</label> -->
+        <div class="layui-input-inline">
+          <select name="isMarketable">
+            <option value="">璇烽�夋嫨鏄惁涓婃灦</option>
+            <option value="True">涓婃灦</option>
+            <option value="False">涓嬫灦</option>
+          </select>
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="unit">鍟嗗搧鍗曚綅</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="unit"  placeholder="璇疯緭鍏ュ晢鍝佸崟浣�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="intro">鍟嗗搧璇︽儏</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="intro"  placeholder="璇疯緭鍏ュ晢鍝佽鎯�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="spesDesc">鍟嗗搧瑙勬牸搴忓垪鍙峰瓨鍌�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="spesDesc"  placeholder="璇疯緭鍏ュ晢鍝佽鏍煎簭鍒楀彿瀛樺偍" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="parameters">鍙傛暟搴忓垪鍖�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="parameters"  placeholder="璇疯緭鍏ュ弬鏁板簭鍒楀寲" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="commentsCount">璇勮娆℃暟</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="commentsCount"  placeholder="璇疯緭鍏ヨ瘎璁烘鏁�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="viewCount">娴忚娆℃暟</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="viewCount"  placeholder="璇疯緭鍏ユ祻瑙堟鏁�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="buyCount">璐拱娆℃暟</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="buyCount"  placeholder="璇疯緭鍏ヨ喘涔版鏁�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="uptime">涓婃灦鏃堕棿</label>
+                <div class="layui-input-inline" style="width: 260px;">
+                    <input type="text" name="uptime" id="searchTime-DistributionGoods-uptime" placeholder="璇疯緭鍏ヤ笂鏋舵椂闂�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="downtime">涓嬫灦鏃堕棿</label>
+                <div class="layui-input-inline" style="width: 260px;">
+                    <input type="text" name="downtime" id="searchTime-DistributionGoods-downtime" placeholder="璇疯緭鍏ヤ笅鏋舵椂闂�" class="layui-input">
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="sort">鍟嗗搧鎺掑簭</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="sort"  placeholder="璇疯緭鍏ュ晢鍝佹帓搴�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="labelIds">鏍囩id閫楀彿鍒嗛殧</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="labelIds"  placeholder="璇疯緭鍏ユ爣绛緄d閫楀彿鍒嗛殧" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="newSpec">鑷畾涔夎鏍煎悕绉�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="newSpec"  placeholder="璇疯緭鍏ヨ嚜瀹氫箟瑙勬牸鍚嶇О" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="openSpec">寮�鍚鍒�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="openSpec"  placeholder="璇疯緭鍏ュ紑鍚鍒�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="createTime">鍒涘缓鏃堕棿</label>
+                <div class="layui-input-inline" style="width: 260px;">
+                    <input type="text" name="createTime" id="searchTime-DistributionGoods-createTime" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="updateTime">鏇存柊鏃堕棿</label>
+                <div class="layui-input-inline" style="width: 260px;">
+                    <input type="text" name="updateTime" id="searchTime-DistributionGoods-updateTime" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="isRecommend">鏄惁鎺ㄨ崘</label> -->
+        <div class="layui-input-inline">
+          <select name="isRecommend">
+            <option value="">璇烽�夋嫨鏄惁鎺ㄨ崘</option>
+            <option value="True">鎺ㄨ崘</option>
+            <option value="False">涓嶆帹鑽�</option>
+          </select>
+        </div>
+      </div>
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="isHot">鏄惁鐑棬</label> -->
+        <div class="layui-input-inline">
+          <select name="isHot">
+            <option value="">璇烽�夋嫨鏄惁鐑棬</option>
+            <option value="True">鐑棬</option>
+            <option value="False">闈炵儹闂�</option>
+          </select>
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+			    <label class="layui-form-label" for="isDel">鏄惁鍒犻櫎</label>
+                <div class="layui-input-inline">
+                    <select name="isDel">
+                        <option value="">璇烽�夋嫨</option>
+                        <option value="True">鏄�</option>
+                        <option value="False">鍚�</option>
+                    </select>
+                </div>
+            </div> -->
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="initialSales">鍒濆閿�閲�</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="initialSales"  placeholder="璇疯緭鍏ュ垵濮嬮攢閲�" class="layui-input">
+                </div>
+            </div>
+            <div class="layui-inline">
+                <label class="layui-form-label" for="areaCode"></label>
+                <div class="layui-input-inline">
+                    <input type="text" name="areaCode"  placeholder="璇疯緭鍏�" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="publisherId"></label> -->
+        <div class="layui-input-inline">
+          <!-- <input type="text" name="publisherId"  placeholder="璇疯緭鍏ュ彂甯冭�匢D" class="layui-input"> -->
+          <select lay-search="" name="publisherId" id="sledispublisherId">
+            <option value="">璇烽�夋嫨鍙戝竷鑰�</option>
+          </select>
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="approverId"></label>
+                <div class="layui-input-inline">
+                    <input type="text" name="approverId"  placeholder="璇疯緭鍏ュ鏍歌��" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <!-- <label class="layui-form-label" for="auditStatus"></label> -->
+        <div class="layui-input-inline">
+          <!-- <input type="text" name="auditStatus"  placeholder="璇疯緭鍏ュ鏍哥姸鎬�" class="layui-input"> -->
+          <select name="auditStatus" id="auditStatus">
+            <option value="">璇烽�夋嫨瀹℃牳鐘舵��</option>
+            {{# layui.each(indexData.auditStatusType, function(index, item){ }}
+            <option value="{{ item.value }}">{{ item.description }}</option>
+            {{# }); }}
+          </select>
+        </div>
+      </div>
+      <!-- <div class="layui-inline">
+                <label class="layui-form-label" for="auditTime"></label>
+                <div class="layui-input-inline" style="width: 260px;">
+                    <input type="text" name="auditTime" id="searchTime-DistributionGoods-auditTime" placeholder="璇疯緭鍏�" class="layui-input">
+                </div>
+            </div> -->
+      <div class="layui-inline">
+        <button
+          class="layui-btn layui-btn-sm"
+          lay-submit
+          lay-filter="LAY-app-DistributionGoods-search"
+        >
+          <i class="layui-icon layui-icon-search"></i>绛涢��
+        </button>
+      </div>
+    </div>
+  </div>
+</script>
+
+<script type="text/html" id="LAY-app-DistributionGoods-pagebar">
+  <div class="layui-btn-container">
+    <!-- <button class="layui-btn layui-btn-sm" lay-event="addData"><i class="layui-icon layui-icon-add-1"></i>娣诲姞鏁版嵁</button>
+        <button class="layui-btn layui-btn-sm" lay-event="batchDelete"><i class="layui-icon layui-icon-delete"></i>鎵归噺鍒犻櫎</button> -->
+    <!-- <button class="layui-btn layui-btn-sm" lay-event="selectExportExcel"><i class="layui-icon layui-icon-add-circle"></i>閫夋嫨瀵煎嚭</button> -->
+    <!-- <button class="layui-btn layui-btn-sm" lay-event="queryExportExcel"><i class="layui-icon layui-icon-download-circle"></i>鏌ヨ瀵煎嚭</button> -->
+  </div>
+</script>
+
+<script type="text/html" id="LAY-app-DistributionGoods-tableBox-bar">
+  <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail"
+    >鏌ョ湅</a
+  >
+  <a class="layui-btn layui-btn-xs" lay-event="edit">瀹℃牳</a>
+  <a
+    class="layui-btn layui-btn-danger layui-btn-xs"
+    data-dropdown="#DistributionGoodsTbDelDrop{{d.LAY_INDEX}}"
+    no-shade="true"
+    >鍒犻櫎</a
+  >
+  <div
+    class="dropdown-menu-nav dropdown-popconfirm dropdown-top-right layui-hide"
+    id="DistributionGoodsTbDelDrop{{d.LAY_INDEX}}"
+    style="max-width: 200px;white-space: normal;min-width: auto;margin-left: 10px;"
+  >
+    <div class="dropdown-anchor"></div>
+    <div class="dropdown-popconfirm-title">
+      <i class="layui-icon layui-icon-help"></i>
+      纭畾瑕佸垹闄ゅ悧锛�
+    </div>
+    <div class="dropdown-popconfirm-btn">
+      <a class="layui-btn layui-btn-primary cursor" btn-cancel>鍙栨秷</a>
+      <a class="layui-btn layui-btn-normal cursor" lay-event="del">纭畾</a>
+    </div>
+  </div>
+</script>
+
+<script>
+  var indexData;
+  var debug = layui.setter.debug;
+  layui.data.done = function (d) {
+    //寮�鍚皟璇曟儏鍐典笅鑾峰彇鎺ュ彛璧嬪�兼暟鎹�
+    if (debug) {
+      console.log(d);
+    }
+
+    indexData = d.data;
+    layui.use(
+      [
+        "index",
+        "table",
+        "laydate",
+        "util",
+        "coredropdown",
+        "coreHelper",
+        "xmSelect",
+      ],
+      function () {
+        var $ = layui.$,
+          admin = layui.admin,
+          table = layui.table,
+          form = layui.form,
+          laydate = layui.laydate,
+          setter = layui.setter,
+          coreHelper = layui.coreHelper,
+          util = layui.util,
+          view = layui.view,
+          xmSelect = layui.xmSelect;
+
+        var searchwhere;
+        //鐩戝惉鎼滅储
+        form.on("submit(LAY-app-DistributionGoods-search)", function (data) {
+          var field = data.field;
+          searchwhere = field;
+          //鎵ц閲嶈浇
+          table.reloadData("LAY-app-DistributionGoods-tableBox", {
+            where: field,
+          });
+        });
+
+        //鏁版嵁缁戝畾
+        table.render({
+          elem: "#LAY-app-DistributionGoods-tableBox",
+          url: layui.setter.apiUrl + "Api/DistributionGoods/GetPageList",
+          method: "POST",
+          toolbar: "#LAY-app-DistributionGoods-toolbar",
+          pagebar: "#LAY-app-DistributionGoods-pagebar",
+          className: "pagebarbox",
+          defaultToolbar: ["filter", "print", "exports"],
+          height: "full-127", //闈㈠寘灞�142px,鎼滅储妗�4琛�172,3琛�137,2琛�102,1琛�67
+          page: true,
+          limit: 30,
+          limits: [10, 15, 20, 25, 30, 50, 100, 200],
+          text: { none: "鏆傛棤鐩稿叧鏁版嵁" },
+          cols: [
+            [
+              { type: "checkbox", fixed: "left" },
+              { field: "id", title: "鍟嗗搧ID", width: 60, sort: false },
+              { field: "bn", title: "鍟嗗搧鏉$爜", sort: false, width: 125 },
+              { field: "name", title: "鍟嗗搧鍚嶇О", sort: false, width: 200 },
+              {
+                field: "image",
+                title: "缂╃暐鍥�",
+                width: 60,
+                sort: false,
+                templet: function (d) {
+                  if (d.image) {
+                    return (
+                      '<a href="javascript:void(0);" onclick=layui.coreHelper.viewImage("' +
+                      d.image +
+                      '")><image style="max-width:28px;max-height:28px;" src="' +
+                      d.image +
+                      '"/></a>'
+                    );
+                  } else {
+                    return (
+                      '<a href="javascript:void(0);" onclick=layui.coreHelper.viewImage("' +
+                      setter.noImagePicUrl +
+                      '")><image style="max-width:30px;max-height:30px;" src="' +
+                      setter.noImagePicUrl +
+                      '"/></a>'
+                    );
+                  }
+                },
+              },
+              { field: "brief", title: "鍟嗗搧绠�浠�", sort: false, width: 300 },
+
+              {
+                field: "goodsCategoryId",
+                title: "鍟嗗搧鍒嗙被",
+                sort: false,
+                width: 105,
+              },
+              { field: "brandId", title: "鍝佺墝", sort: false, width: 105 },
+
+              { field: "unit", title: "鍟嗗搧鍗曚綅", sort: false, width: 105 },
+              // { field: 'viewCount', title: '娴忚娆℃暟', sort: false,width: 105 },
+              // { field: 'buyCount', title: '璐拱娆℃暟', sort: false,width: 105 },
+              { field: "sort", title: "鍟嗗搧鎺掑簭", sort: false, width: 105 },
+              {
+                field: "createTime",
+                title: "鍒涘缓鏃堕棿",
+                width: 130,
+                sort: false,
+              },
+
+              //  { field: 'initialSales', title: '鍒濆閿�閲�', sort: false,width: 105 },
+              {
+                field: "publisherId",
+                title: "鍙戝竷缁忛攢鍟�",
+                sort: false,
+                width: 105,
+              },
+              {
+                field: "approverId",
+                title: "瀹℃牳浜哄憳",
+                sort: false,
+                width: 105,
+              },
+              {
+                field: "auditStatus",
+                title: "瀹℃牳鐘舵��",
+                sort: false,
+                width: 105,
+                templet: function (f) {
+                  let tem = d.data.auditStatusType?.filter(
+                    (x) => x.value == f.auditStatus
+                  );
+                  if (tem?.length > 0)
+                    return d.data.auditStatusType?.filter(
+                      (x) => x.value == f.auditStatus
+                    )[0].description;
+                  else return "鏃�";
+                },
+              },
+              {
+                field: "auditTime",
+                title: "瀹℃牳鏃堕棿",
+                width: 130,
+                sort: false,
+              },
+              {
+                field: "isMarketable",
+                title: "鏄惁涓婃灦",
+                width: 95,
+                templet: "#switch_isMarketable",
+                sort: false,
+                unresize: true,
+              },
+              {
+                field: "isRecommend",
+                title: "鏄惁鎺ㄨ崘",
+                width: 95,
+                templet: "#switch_isRecommend",
+                sort: false,
+                unresize: true,
+              },
+              {
+                field: "isHot",
+                title: "鏄惁鐑棬",
+                width: 95,
+                templet: "#switch_isHot",
+                sort: false,
+                unresize: true,
+              },
+              {
+                width: 162,
+                align: "center",
+                title: "鎿嶄綔",
+                fixed: "right",
+                toolbar: "#LAY-app-DistributionGoods-tableBox-bar",
+              },
+            ],
+          ],
+        });
+        //鐩戝惉鎺掑簭浜嬩欢
+        table.on("sort(LAY-app-DistributionGoods-tableBox)", function (obj) {
+          table.reloadData("LAY-app-DistributionGoods-tableBox", {
+            initSort: obj, //璁板綍鍒濆鎺掑簭锛屽鏋滀笉璁剧殑璇濓紝灏嗘棤娉曟爣璁拌〃澶寸殑鎺掑簭鐘舵�併��
+            where: {
+              //璇锋眰鍙傛暟锛堟敞鎰忥細杩欓噷闈㈢殑鍙傛暟鍙换鎰忓畾涔夛紝骞堕潪涓嬮潰鍥哄畾鐨勬牸寮忥級
+              orderField: obj.field, //鎺掑簭瀛楁
+              orderDirection: obj.type, //鎺掑簭鏂瑰紡
+            },
+          });
+        });
+       
+        //澶村伐鍏锋爮浜嬩欢
+        table.on("pagebar(LAY-app-DistributionGoods-tableBox)", function (obj) {
+          var checkStatus = table.checkStatus(obj.config.id);
+          switch (obj.event) {
+            case "addData":
+              doCreate();
+              break;
+            case "batchDelete":
+              doBatchDelete(checkStatus);
+              break;
+            case "selectExportExcel":
+              doSelectExportExcel(checkStatus);
+              break;
+            case "queryExportExcel":
+              doQueryExportexcel();
+              break;
+          }
+        });
+        //鐩戝惉宸ュ叿鏉�
+        table.on("tool(LAY-app-DistributionGoods-tableBox)", function (obj) {
+          if (obj.event === "detail") {
+            doDetails(obj);
+          } else if (obj.event === "del") {
+            doDelete(obj);
+          } else if (obj.event === "edit") {
+            doEdit(obj);
+          }
+        });
+        //鎵ц鍒涘缓鎿嶄綔
+        function doCreate() {
+          coreHelper.Post(
+            "Api/DistributionGoods/GetCreate",
+            null,
+            function (e) {
+              if (e.code === 0) {
+                admin.popup({
+                  shadeClose: false,
+                  title: "鍒涘缓鏁版嵁",
+                  area: ["1200px", "90%"],
+                  id: "LAY-popup-DistributionGoods-create",
+                  success: function (layero, index) {
+                    view(this.id)
+                      .render("baifenbingfa/DistributionGoods/create", {
+                        data: e.data,
+                      })
+                      .done(function () {
+                        //鐩戝惉鎻愪氦
+                        form.on(
+                          "submit(LAY-app-DistributionGoods-createForm-submit)",
+                          function (data) {
+                            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+                            field.isNomalVirtual = field.isNomalVirtual == "on";
+                            field.isMarketable = field.isMarketable == "on";
+                            field.isRecommend = field.isRecommend == "on";
+                            field.isHot = field.isHot == "on";
+                            field.isDel = field.isDel == "on";
+                            if (debug) {
+                              console.log(field);
+                            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                            coreHelper.Post(
+                              "Api/DistributionGoods/DoCreate",
+                              field,
+                              function (e) {
+                                console.log(e);
+                                if (e.code === 0) {
+                                  layui.table.reloadData(
+                                    "LAY-app-DistributionGoods-tableBox"
+                                  ); //閲嶈浇琛ㄦ牸
+                                  layer.close(index); //鍐嶆墽琛屽叧闂�
+                                  layer.msg(e.msg);
+                                } else {
+                                  layer.msg(e.msg);
+                                }
+                              }
+                            );
+                          }
+                        );
+                      });
+                    // 绂佹寮圭獥鍑虹幇婊氬姩鏉�
+                    $(layero)
+                      .children(".layui-layer-content")
+                      .css("overflow", "visible");
+                  },
+                  btn: ["纭畾", "鍙栨秷"],
+                  yes: function (index, layero) {
+                    layero
+                      .contents()
+                      .find("#LAY-app-DistributionGoods-createForm-submit")
+                      .click();
+                  },
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            }
+          );
+        }
+        //鎵ц缂栬緫鎿嶄綔
+        function doEdit(obj) {
+             coreHelper.Post(
+            "Api/DistributionGoods/GetEdit",
+            { id: obj.data.id },
+            function (e) {
+              if (e.code === 0) {
+                admin.popup({
+                  shadeClose: false,
+                  title: "缂栬緫鏁版嵁",
+                  area: ["95%", "95%"],
+                  id: "LAY-popup-DistributionGoods-edit",
+                  success: function (layero, index) {
+                   if( e.data.auditStatus==null||e.data.auditStatus==undefined){
+                      e.data.auditStatus=0;
+                   }
+                    view(this.id)
+                      .render("baifenbingfa/DistributionGoods/edit", {
+                        data: e.data,
+                        initdata:d.data,
+                       
+                      })
+                      .done(function () {
+                        //鐩戝惉鎻愪氦
+                        form.on(
+                          "submit(LAY-app-DistributionGoods-editForm-submit)",
+                          function (data) {
+                            var field = data.field; //鑾峰彇鎻愪氦鐨勫瓧娈�
+
+                            field.isNomalVirtual = field.isNomalVirtual == "on";
+                            field.isMarketable = field.isMarketable == "on";
+                            field.isRecommend = field.isRecommend == "on";
+                            field.isHot = field.isHot == "on";
+                            field.isDel = field.isDel == "on";
+
+                            if (debug) {
+                              console.log(field);
+                            } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                            //鎻愪氦 Ajax 鎴愬姛鍚庯紝鍏抽棴褰撳墠寮瑰眰骞堕噸杞借〃鏍�
+                            coreHelper.Post(
+                              "Api/DistributionGoods/DoEdit",
+                              field,
+                              function (e) {
+                                if (e.code === 0) {
+                                  layui.table.reloadData(
+                                    "LAY-app-DistributionGoods-tableBox"
+                                  ); //閲嶈浇琛ㄦ牸
+                                  layer.close(index); //鍐嶆墽琛屽叧闂�
+                                  layer.msg(e.msg);
+                                } else {
+                                  layer.msg(e.msg);
+                                }
+                              }
+                            );
+                          }
+                        );
+                      });
+                    // 绂佹寮圭獥鍑虹幇婊氬姩鏉�
+                    $(layero)
+                      .children(".layui-layer-content")
+                      .css("overflow", "visible");
+                  },
+                  btn: ["纭畾", "鍙栨秷"],
+                  yes: function (index, layero) {
+                    layero
+                      .contents()
+                      .find("#LAY-app-DistributionGoods-editForm-submit")
+                      .click();
+                  },
+                });
+              } else {
+                layer.msg(e.msg);
+              }
+            }
+          );
+        }
+        //鎵ц棰勮鎿嶄綔
+          function doDetails(obj) {
+              coreHelper.Post("Api/DistributionGoods/GetDetails", { id: obj.data.id }, function (e) {
+                  if (e.code === 0) {
+                      admin.popup({
+                          shadeClose: false,
+                          title: '鏌ョ湅璇︽儏',
+                          area: ['95%', '95%'],
+                          id: 'LAY-popup-CoreCmsGoods-details',
+                          success: function (layero, index) {
+                              view(this.id).render('good/goods/details', { data: e.data }).done(function () {
+                                  form.render();
+                              });
+                              // 绂佹寮圭獥鍑虹幇婊氬姩鏉�
+                              //$(layero).children('.layui-layer-content').css('overflow', 'visible');
+                          }
+                      });
+                  } else {
+                      layer.msg(e.msg);
+                  }
+              });
+         
+        }
+        //鎵ц鍗曚釜鍒犻櫎
+        function doDelete(obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoDelete",
+            { id: obj.data.id },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              table.reloadData("LAY-app-DistributionGoods-tableBox");
+              layer.msg(e.msg);
+            }
+          );
+        }
+        //鎵ц鎵归噺鍒犻櫎
+        function doBatchDelete(checkStatus) {
+          var checkData = checkStatus.data;
+          if (checkData.length === 0) {
+            return layer.msg("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+          }
+          layer.confirm("纭畾鍒犻櫎鍚楋紵鍒犻櫎鍚庡皢鏃犳硶鎭㈠銆�", function (index) {
+            var delidsStr = [];
+            layui.each(checkData, function (index, item) {
+              delidsStr.push(item.id);
+            });
+            coreHelper.Post(
+              "Api/DistributionGoods/DoBatchDelete",
+              { id: delidsStr },
+              function (e) {
+                if (debug) {
+                  console.log(e);
+                } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                table.reloadData("LAY-app-DistributionGoods-tableBox");
+                layer.msg(e.msg);
+              }
+            );
+          });
+        }
+        //鎵ц鏌ヨ鏉′欢瀵煎嚭excel
+        function doQueryExportexcel() {
+          layer.confirm("纭畾鏍规嵁褰撳墠鐨勬煡璇㈡潯浠跺鍑烘暟鎹悧锛�", function (index) {
+            var field = searchwhere;
+            coreHelper.PostForm(
+              "Api/DistributionGoods/QueryExportExcel",
+              field,
+              function (e) {
+                if (debug) {
+                  console.log(e);
+                } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                if (e.code === 0) {
+                  window.open(e.data);
+                } else {
+                  layer.msg(e.msg);
+                }
+              }
+            );
+          });
+        }
+        //鎵ц閫夋嫨鐩綍瀵煎嚭鏁版嵁
+        function doSelectExportExcel(checkStatus) {
+          var checkData = checkStatus.data;
+          if (checkData.length === 0) {
+            return layer.msg("璇烽�夋嫨鎮ㄨ瀵煎嚭鐨勬暟鎹�");
+          }
+          layer.confirm("纭畾瀵煎嚭閫夋嫨鐨勫唴瀹瑰悧锛�", function (index) {
+            var delidsStr = [];
+            layui.each(checkData, function (index, item) {
+              delidsStr.push(item.id);
+            });
+            layer.close(index);
+            coreHelper.Post(
+              "Api/DistributionGoods/SelectExportExcel",
+              { id: delidsStr },
+              function (e) {
+                if (debug) {
+                  console.log(e);
+                } //寮�鍚皟璇曡繑鍥炴暟鎹�
+                if (e.code === 0) {
+                  window.open(e.data);
+                } else {
+                  layer.msg(e.msg);
+                }
+              }
+            );
+          });
+        }
+        //鐢ㄦ埛閫夋嫨妗嗕笅鎷夋鍒濆鍖�
+        formatUserSelInPut(coreHelper, form, "sledispublisherId", "");
+        laydate.render({
+          elem: "#searchTime-DistributionGoods-uptime",
+          type: "datetime",
+          range: "鍒�",
+        });
+        laydate.render({
+          elem: "#searchTime-DistributionGoods-downtime",
+          type: "datetime",
+          range: "鍒�",
+        });
+        laydate.render({
+          elem: "#searchTime-DistributionGoods-createTime",
+          type: "datetime",
+          range: "鍒�",
+        });
+        laydate.render({
+          elem: "#searchTime-DistributionGoods-updateTime",
+          type: "datetime",
+          range: "鍒�",
+        });
+        laydate.render({
+          elem: "#searchTime-DistributionGoods-auditTime",
+          type: "datetime",
+          range: "鍒�",
+        });
+
+        //鐩戝惉 琛ㄦ牸澶嶉�夋鎿嶄綔
+
+        layui.form.on("switch(switch_isNomalVirtual)", function (obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoSetisNomalVirtual",
+            { id: this.value, data: obj.elem.checked },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              //table.reloadData('LAY-app-DistributionGoods-tableBox');
+              layer.msg(e.msg);
+            }
+          );
+        });
+
+        layui.form.on("switch(switch_isMarketable)", function (obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoSetisMarketable",
+            { id: this.value, data: obj.elem.checked },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              //table.reloadData('LAY-app-DistributionGoods-tableBox');
+              layer.msg(e.msg);
+            }
+          );
+        });
+
+        layui.form.on("switch(switch_isRecommend)", function (obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoSetisRecommend",
+            { id: this.value, data: obj.elem.checked },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              //table.reloadData('LAY-app-DistributionGoods-tableBox');
+              layer.msg(e.msg);
+            }
+          );
+        });
+
+        layui.form.on("switch(switch_isHot)", function (obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoSetisHot",
+            { id: this.value, data: obj.elem.checked },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              //table.reloadData('LAY-app-DistributionGoods-tableBox');
+              layer.msg(e.msg);
+            }
+          );
+        });
+
+        layui.form.on("switch(switch_isDel)", function (obj) {
+          coreHelper.Post(
+            "Api/DistributionGoods/DoSetisDel",
+            { id: this.value, data: obj.elem.checked },
+            function (e) {
+              if (debug) {
+                console.log(e);
+              } //寮�鍚皟璇曡繑鍥炴暟鎹�
+              //table.reloadData('LAY-app-DistributionGoods-tableBox');
+              layer.msg(e.msg);
+            }
+          );
+        });
+
+        // 娓叉煋涓嬫媺鏍� 鍟嗗搧鍒嗙被
+        var insXmSel = xmSelect.render({
+          el: "#goodsSelectCategorytTreeDis",
+          tips: "璇烽�夋嫨鍟嗗搧鍒嗙被",
+          height: "250px",
+          data: d.data.categories.data,
+          //initValue: mData ? [mData.parentId] : [],
+          model: { label: { type: "text" } },
+          name: "goodsCategoryId",
+          prop: {
+            name: "title",
+            value: "id",
+          },
+          radio: true,
+          clickClose: true,
+          tree: {
+            show: true,
+            indent: 15,
+            strict: false,
+            expandedKeys: true,
+          },
+        });
+        //閲嶈浇form
+        form.render();
+      }
+    );
+  };
+</script>
+<script src="/views/liao.js"></script>
+<!--璁剧疆鏄惁铏氭嫙鍟嗗搧-->
+<script type="text/html" id="switch_isNomalVirtual">
+  <input type="checkbox" name="switch_isNomalVirtual" value="{{d.id}}"
+  lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴" lay-filter="switch_isNomalVirtual" {{
+  d.isNomalVirtual ? 'checked' : '' }}>
+</script>
+
+<!--璁剧疆鏄惁涓婃灦-->
+<script type="text/html" id="switch_isMarketable">
+  <input {{d.auditStatus!=1?'disabled':''}} type="checkbox"
+  name="switch_isMarketable" value="{{d.id}}" lay-skin="switch"
+  lay-text="寮�鍚瘄鍏抽棴" lay-filter="switch_isMarketable" {{ d.isMarketable ?
+  'checked' : '' }}>
+</script>
+
+<!--璁剧疆鏄惁鎺ㄨ崘-->
+<script type="text/html" id="switch_isRecommend">
+  <input {{d.auditStatus!=1?'disabled':''}} type="checkbox"
+  name="switch_isRecommend" value="{{d.id}}" lay-skin="switch"
+  lay-text="寮�鍚瘄鍏抽棴" lay-filter="switch_isRecommend" {{ d.isRecommend ?
+  'checked' : '' }}>
+</script>
+
+<!--璁剧疆鏄惁鐑棬-->
+<script type="text/html" id="switch_isHot">
+  <input {{d.auditStatus!=1?'disabled':''}} type="checkbox" name="switch_isHot"
+  value="{{d.id}}" lay-skin="switch" lay-text="寮�鍚瘄鍏抽棴"
+  lay-filter="switch_isHot" {{ d.isHot ? 'checked' : '' }}>
+</script>
+
+<!--璁剧疆鏄惁鍒犻櫎-->
+<script type="text/html" id="switch_isDel">
+  <input type="checkbox" name="switch_isDel" value="{{d.id}}" lay-skin="switch"
+  lay-text="寮�鍚瘄鍏抽棴" lay-filter="switch_isDel" {{ d.isDel ? 'checked' : '' }}>
+</script>
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/create.html b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/create.html
index ded9a9f..e33a034 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/create.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/create.html
@@ -1601,6 +1601,7 @@
                     },
                     createbn: function () {
                         var bn = layui.coreHelper.getSN('BN');
+                        
                         $("#bn").val(bn);
                     }
                     , createSn: function () {
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/edit.html b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/edit.html
index 8a920fd..82815bb 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/edit.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/edit.html
@@ -767,7 +767,7 @@
                 } else {
                     oldSingleData = d.data.products[0];
                 }
-
+                
                 //鍒濆鍖栧晢鍝佷俊鎭�
                 var getTpl = getSpec_tpl.innerHTML, viewBox = document.getElementById('more_spec');
                 var tmpData = oldMultitermData;
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/index.html
index f86a144..5544bd9 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/index.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/good/goods/index.html
@@ -437,7 +437,7 @@
 
                 //鎵ц棰勮鎿嶄綔
                 function doDetails(obj) {
-                    console.log(obj);
+                  
                     coreHelper.Post("Api/CoreCmsGoods/GetDetails", { id: obj.data.id }, function (e) {
                         if (e.code === 0) {
                             admin.popup({
diff --git a/CoreCms.Net.Web.WebApi/Controllers/baifenbingfa/DistributorGoodsController.cs b/CoreCms.Net.Web.WebApi/Controllers/baifenbingfa/DistributorGoodsController.cs
index f46e905..be3b566 100644
--- a/CoreCms.Net.Web.WebApi/Controllers/baifenbingfa/DistributorGoodsController.cs
+++ b/CoreCms.Net.Web.WebApi/Controllers/baifenbingfa/DistributorGoodsController.cs
@@ -1,8 +1,32 @@
-锘縰sing CoreCms.Net.Model.Entities.baifenbingfa.jon;
+锘縰sing AutoMapper;
+using CoreCms.Net.Auth.HttpContextUser;
+using CoreCms.Net.Caching.AutoMate.RedisCache;
+using CoreCms.Net.Configuration;
+using CoreCms.Net.DTO.ComponentsDTO;
+using CoreCms.Net.Filter;
+using CoreCms.Net.IRepository.UnitOfWork;
+using CoreCms.Net.IServices;
+using CoreCms.Net.IServices.baifenbingfa;
+using CoreCms.Net.Model.Entities;
+using CoreCms.Net.Model.Entities.baifenbingfa.jon;
+using CoreCms.Net.Model.Entities.Expression;
+using CoreCms.Net.Model.FromBody;
 using CoreCms.Net.Model.ViewModels.UI;
+using CoreCms.Net.Services;
+using CoreCms.Net.Services.Basic;
+using CoreCms.Net.Utility.Extensions;
+using CoreCms.Net.Utility.Helper;
 using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Mvc;
+using Nest;
+using Newtonsoft.Json;
+using SqlSugar;
 using Swashbuckle.AspNetCore.Annotations;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
 using System.Threading.Tasks;
 
 namespace CoreCms.Net.Web.WebApi.Controllers.baifenbingfa
@@ -13,23 +37,468 @@
     [Route("api/[controller]/[action]")]
     [ApiController]
     [Authorize]
+    [DPremisssionFilter]//缁忛攢鍟嗚闂帶鍒�
+
     public class DistributorGoodsController : ControllerBase
     {
+        private readonly IHttpContextUser _user;
+        private readonly IUnitOfWork _worke;
+   
+        private readonly ICoreCmsBrandServices _brandServices;
+        private readonly ICoreCmsGoodsCategoryExtendServices _categoryExtendServices;
+        private readonly ICoreCmsGoodsCategoryServices _coreCmsGoodsCategoryServices;
+        private readonly ICoreCmsGoodsServices _coreCmsGoodsServices;
+        private readonly ICoreCmsGoodsGradeServices _goodsGradeServices;
+        private readonly ICoreCmsGoodsParamsServices _goodsParamsServices;
+        private readonly ICoreCmsGoodsTypeSpecServices _goodsTypeSpecServices;
+        private readonly ICoreCmsLabelServices _labelServices;
+        private readonly ICoreCmsProductsServices _productsServices;
+        private readonly ICoreCmsSettingServices _settingServices;
+        private readonly ICoreCmsGoodsTypeSpecValueServices _typeSpecValueServices;
+        private readonly ICoreCmsUserGradeServices _userGradeServices;
+        private readonly ICoreCmsProductsDistributionServices _productsDistributionServices;
+        private readonly IWebHostEnvironment _webHostEnvironment;
+        private readonly IRedisOperationRepository _redisOperationRepository;
+        private readonly ICoreCmsGoodsCategoryExtendServices _goodsCategoryExtendServices;
+
+
         /// <summary>
-        /// 
+        ///     鏋勯�犲嚱鏁�
+        /// </summary>
+        public DistributorGoodsController(IWebHostEnvironment webHostEnvironment
+            , ICoreCmsGoodsServices coreCmsGoodsServices
+            , ICoreCmsSettingServices settingServices
+            , ICoreCmsBrandServices brandServices
+            , ICoreCmsGoodsCategoryServices coreCmsGoodsCategoryServices
+            , ICoreCmsUserGradeServices userGradeServices
+            , ICoreCmsGoodsParamsServices goodsParamsServices
+            , ICoreCmsGoodsTypeSpecValueServices typeSpecValueServices
+            , ICoreCmsGoodsGradeServices goodsGradeServices
+            , ICoreCmsProductsServices productsServices
+            , ICoreCmsGoodsCategoryExtendServices categoryExtendServices
+            , ICoreCmsLabelServices labelServices
+            , ICoreCmsProductsDistributionServices productsDistributionServices
+            , ICoreCmsGoodsTypeSpecServices goodsTypeSpecServices,
+            IRedisOperationRepository redisOperationRepository,
+            ICoreCmsGoodsCategoryExtendServices goodsCategoryExtendServices
+            ,IHttpContextUser user)
+        {
+            _webHostEnvironment = webHostEnvironment;
+            _coreCmsGoodsServices = coreCmsGoodsServices;
+            _settingServices = settingServices;
+            _brandServices = brandServices;
+            _coreCmsGoodsCategoryServices = coreCmsGoodsCategoryServices;
+            _userGradeServices = userGradeServices;
+            _goodsParamsServices = goodsParamsServices;
+            _typeSpecValueServices = typeSpecValueServices;
+            _goodsGradeServices = goodsGradeServices;
+            _productsServices = productsServices;
+            _categoryExtendServices = categoryExtendServices;
+            _labelServices = labelServices;
+            _productsDistributionServices = productsDistributionServices;
+            _goodsTypeSpecServices = goodsTypeSpecServices;
+            _redisOperationRepository = redisOperationRepository;
+            _goodsCategoryExtendServices = goodsCategoryExtendServices;
+            _user = user;
+        }
+        /// <summary>
+        /// 鑾峰彇鍟嗗搧鍒濆鍖栧弬鏁�
         /// </summary>
         /// <returns></returns>
-        [HttpPost("GetGoodslist")]
-        [SwaggerResponse(200, "杩斿洖鏁版嵁", typeof(WebApiCallBack))]
-        [SwaggerResponse(201, "Data绫诲瀷", typeof(Job_jobSeting))]
-        public async Task<WebApiCallBack> GetGoodslist()
+        [HttpPost("GetInitParam")]
+        public async Task<WebApiCallBack> GetInitParam()
         {
             var jm = new WebApiCallBack();
+            //鑾峰彇鍟嗗搧鍒嗙被
+            var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true);
+            //鑾峰彇鍙傛暟鍒楄〃
+            var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇SKU鍒楄〃
+            var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇鍝佺墝
+            var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇鐢ㄦ埛绛夌骇
+            var userGrade = await _userGradeServices.QueryAsync();
 
-           
+            //鑾峰彇鍟嗗搧缁忛攢enum
+            var productsDistributionType = EnumHelper.EnumToList<GlobalEnumVars.ProductsDistributionType>();
+
+            jm.data = new
+            {
+                categories = GoodsHelper.GetTree(categories, false),
+                brands,
+                userGrade,
+                productsDistributionType,
+                paramsList,
+                skuList
+            };
+
+        
             jm.status = true;
             return jm;
 
         }
+        /// <summary>
+        /// 鑾峰彇鍟嗗搧鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("GetGoodsList")]       
+        public async Task<WebApiCallBack> GetGoodsList([FromBody] FMPageByWhereOrder entity)
+        {
+            var jm = new WebApiCallBack();
+
+            var where = PredicateBuilder.True<GoodListDTO>();
+
+            var className = string.Empty;
+            if (!string.IsNullOrWhiteSpace(entity.where))
+            {
+                var obj = JsonConvert.DeserializeAnonymousType(entity.where, new
+                {
+                    priceFrom = "",
+                    priceTo = "",
+                    catId = "",
+                    brandId = "",
+                    labelId = "",
+                    searchName = "",
+                    areaCode = ""
+
+                });
+
+                if (!string.IsNullOrWhiteSpace(obj.priceFrom))
+                {
+                    var priceF = obj.priceFrom.ObjectToDouble(0);
+                    if (priceF >= 0)
+                    {
+                        var f = Convert.ToDecimal(priceF);
+                        where = where.And(p => p.price >= f);
+                    }
+                }
+                if (!string.IsNullOrWhiteSpace(obj.priceTo))
+                {
+                    var priceT = obj.priceTo.ObjectToDouble(0);
+                    if (priceT > 0)
+                    {
+                        var f = Convert.ToDecimal(priceT);
+                        where = where.And(p => p.price <= f);
+                    }
+                }
+                if (!string.IsNullOrWhiteSpace(obj.catId))
+                {
+                    var catId = obj.catId.ObjectToInt(0);
+                    if (catId > 0)
+                    {
+                     
+                            where = where.And(p => p.goodsCategoryId==catId);
+                       
+                    }
+                }
+                if (!string.IsNullOrWhiteSpace(obj.brandId))
+                {
+                    if (obj.brandId.Contains(","))
+                    {
+                        var brandIdsIntArray = CommonHelper.StringToIntArray(obj.brandId);
+                        if (brandIdsIntArray.Any())
+                        {
+                            where = where.And(p => brandIdsIntArray.Contains(p.brandId));
+                        }
+                    }
+                    else
+                    {
+                        var brandId = obj.brandId.ObjectToInt(0);
+                        if (brandId > 0)
+                        {
+                            where = where.And(p => p.brandId == brandId);
+                        }
+                    }
+
+                }
+                if (!string.IsNullOrWhiteSpace(obj.labelId))
+                {
+                    where = where.And(p => (',' + p.labelIds.Trim(',') + ',').Contains(',' + obj.labelId.Trim(',') + ','));
+                }
+                if (!string.IsNullOrWhiteSpace(obj.searchName))
+                {
+                    where = where.And(p => p.name.Contains(obj.searchName));
+                }
+                if (!string.IsNullOrWhiteSpace(obj.areaCode))
+                {
+                    where = where.And(p => p.areaCode.Contains(obj.areaCode));
+                }
+                
+            }
+            //鍙幏鍙栧綋鍓嶇敤鎴风殑
+            where = where.And(p => p.publisherId == _user.ID);
+            //鑾峰彇鏁版嵁
+            var list = await _coreCmsGoodsServices.QueryPageByDTOAsync(where, entity.page, entity.limit, true);
+            jm.status = true;
+            return jm;
+
+        }
+        /// <summary>
+        /// 鑾峰彇鍟嗗搧璇︽儏
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public async Task<WebApiCallBack> GetEdit([FromBody] FMIntId entity)
+        {
+            var jm = new WebApiCallBack();
+
+            var model = await _coreCmsGoodsServices.QueryByClauseAsync(x=>x.id==entity.id&&x.publisherId==_user.ID);
+            if (model == null)
+            {
+                jm.msg = "鏃犳潈淇敼璇ュ晢鍝�";
+                jm.status = false;
+                return jm;
+            }
+
+            jm.code = 0;
+
+            //鑾峰彇鍟嗗搧鍒嗙被
+            var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true);
+            //鑾峰彇鐢ㄦ埛绛夌骇
+            var userGrade = await _userGradeServices.QueryAsync();
+            //鐢ㄦ埛浠锋牸浣撶郴
+            var goodsGrades = await _goodsGradeServices.QueryListByClauseAsync(p => p.goodsId == model.id);
+            //璐у搧淇℃伅
+            var products = await _productsServices.QueryListByClauseAsync(p => p.goodsId == model.id && p.isDel == false);
+            //鎵╁睍淇℃伅
+            var categoryExtend = await _categoryExtendServices.QueryListByClauseAsync(p => p.goodsId == model.id);
+            //鑾峰彇鍟嗗搧缁忛攢enum
+            var productsDistributionType = EnumHelper.EnumToList<GlobalEnumVars.ProductsDistributionType>();
+
+            //鑾峰彇鍙傛暟鍒楄〃
+            var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇SKU鍒楄〃
+            var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇鍝佺墝
+            var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true);
+
+
+            if (products != null && products.Any())
+            {
+                var pIds = products.Select(p => p.id).ToList();
+                if (pIds.Any())
+                {
+                    // 鑾峰彇鍟嗗搧缁忛攢鏄庣粏
+                    var pds = await _productsDistributionServices.QueryListByClauseAsync(p => pIds.Contains(p.productsId), p => p.id, OrderByType.Asc);
+                    products.ForEach(p =>
+                    {
+                        foreach (var o in pds.Where(o => o.productsId == p.id))
+                        {
+                            p.levelOne = o.levelOne;
+                            p.levelTwo = o.levelTwo;
+                            p.levelThree = o.levelThree;
+                        }
+                    });
+                    jm.otherData = pds;
+                }
+
+            }
+
+            //鑾峰彇鍙傛暟淇℃伅
+            var goodsTypeSpec = new List<CoreCmsGoodsTypeSpec>();
+            var goodsParams = new List<CoreCmsGoodsParams>();
+
+            //鑾峰彇鍙傛暟
+            if (!string.IsNullOrEmpty(model.goodsParamsIds))
+            {
+                var paramsIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsParamsIds);
+                goodsParams = await _goodsParamsServices.QueryListByClauseAsync(p => paramsIds.Contains(p.id));
+            }
+
+            //鑾峰彇灞炴��
+            if (!string.IsNullOrEmpty(model.goodsSkuIds))
+            {
+                var specIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsSkuIds);
+                var typeSpecs = skuList.Where(p => specIds.Contains(p.id)).ToList();
+                var typeSpecValues = await _typeSpecValueServices.QueryListByClauseAsync(p => specIds.Contains(p.specId));
+                typeSpecs.ForEach(p =>
+                {
+                    p.specValues = typeSpecValues.Where(o => o.specId == p.id).ToList();
+                });
+                goodsTypeSpec = typeSpecs;
+            }
+
+            jm.data = new
+            {
+                model,
+                categories = GoodsHelper.GetTree(categories, false),
+                brands,
+                userGrade,
+                goodsGrades,
+                products,
+                categoryExtend,
+                goodsTypeSpec,
+                goodsParams,
+                productsDistributionType,
+                paramsList,
+                skuList
+            };
+
+            jm.status = true;
+            return jm;
+
+         
+        }
+
+
+
+
+        // POST: Admins/CoreCmsGoods/Edit
+        /// <summary>
+        ///     缂栬緫鎻愪氦
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("缂栬緫鎻愪氦")]
+        public async Task<WebApiCallBack> DoEdit([FromBody] FMGoodsInsertModel entity)
+        {
+            var jm = await _coreCmsGoodsServices.UpdateAsync(entity);
+             var ret=new WebApiCallBack();
+            ret.status = jm.code == 0 ? true : false;
+            ret.data = jm.data;
+            ret.msg=jm.msg;
+           
+            return ret;
+        }
+        // POST: Api/CoreCmsGoods/DoCreate
+        /// <summary>
+        ///     鍒涘缓鎻愪氦
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("鍒涘缓鎻愪氦")]
+        public async Task<WebApiCallBack> DoCreate([FromBody] FMGoodsInsertModel entity)
+        {
+           
+            entity.goods.auditStatus = AuditStatusType.Pending;
+            entity.goods.publisherId = _user.ID;
+
+            var jm = await _coreCmsGoodsServices.InsertAsync(entity);
+            var ret = new WebApiCallBack();
+            ret.status = jm.code == 0 ? true : false;
+            ret.data = jm.data;
+            ret.msg = jm.msg;
+
+            return ret;
+        }
+
+
+
+        // POST: Api/CoreCmsGoods/GetDetails/10
+        /// <summary>
+        ///     棰勮鏁版嵁
+        /// </summary>
+        /// <param name="entity"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Description("棰勮鏁版嵁")]
+        public async Task<WebApiCallBack> GetDetails([FromBody] FMIntId entity)
+        {
+            var jm = new WebApiCallBack();
+
+            var model = await _coreCmsGoodsServices.QueryByIdAsync(entity.id);
+            if (model == null)
+            {
+                jm.msg = "涓嶅瓨鍦ㄦ淇℃伅";
+                jm.data = entity.id;
+                jm.status = false;
+                return jm;
+            }
+
+            jm.code = 0;
+
+            //鑾峰彇鍟嗗搧鍒嗙被
+            var categories = await _coreCmsGoodsCategoryServices.QueryListByClauseAsync(p => p.isShow, p => p.sort, OrderByType.Asc, true, true);
+
+            //鑾峰彇鐢ㄦ埛绛夌骇
+            var userGrade = await _userGradeServices.QueryAsync();
+            //鐢ㄦ埛浠锋牸浣撶郴
+            var goodsGrades = await _goodsGradeServices.QueryListByClauseAsync(p => p.goodsId == model.id);
+            //璐у搧淇℃伅
+            var products =
+                await _productsServices.QueryListByClauseAsync(p => p.goodsId == model.id && p.isDel == false);
+            //鎵╁睍淇℃伅
+            var categoryExtend = await _categoryExtendServices.QueryListByClauseAsync(p => p.goodsId == model.id);
+            //鑾峰彇鍟嗗搧缁忛攢enum
+            var productsDistributionType = EnumHelper.EnumToList<GlobalEnumVars.ProductsDistributionType>();
+
+
+            //鑾峰彇鍙傛暟鍒楄〃
+            var paramsList = await _goodsParamsServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+            //鑾峰彇SKU鍒楄〃
+            var skuList = await _goodsTypeSpecServices.QueryListByClauseAsync(p => p.id > 0, p => p.id, OrderByType.Desc, true, true);
+
+            //鑾峰彇鍝佺墝
+            var brands = await _brandServices.QueryListByClauseAsync(p => p.id > 0 && p.isShow == true, p => p.id, OrderByType.Desc, true, true);
+
+
+            if (products != null && products.Any())
+            {
+                var pIds = products.Select(p => p.id).ToList();
+                if (pIds.Any())
+                {
+                    // 鑾峰彇鍟嗗搧缁忛攢鏄庣粏
+                    var pds = await _productsDistributionServices.QueryListByClauseAsync(p => pIds.Contains(p.productsId), p => p.id, OrderByType.Asc);
+                    products.ForEach(p =>
+                    {
+                        foreach (var o in pds.Where(o => o.productsId == p.id))
+                        {
+                            p.levelOne = o.levelOne;
+                            p.levelTwo = o.levelTwo;
+                            p.levelThree = o.levelThree;
+                        }
+                    });
+                    jm.otherData = pds;
+                }
+
+            }
+
+            //鑾峰彇鍙傛暟淇℃伅
+            var goodsTypeSpec = new List<CoreCmsGoodsTypeSpec>();
+            var goodsParams = new List<CoreCmsGoodsParams>();
+
+            //鑾峰彇鍙傛暟
+            if (!string.IsNullOrEmpty(model.goodsParamsIds))
+            {
+                var paramsIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsParamsIds);
+                goodsParams = await _goodsParamsServices.QueryListByClauseAsync(p => paramsIds.Contains(p.id));
+            }
+
+            //鑾峰彇灞炴��
+            if (!string.IsNullOrEmpty(model.goodsSkuIds))
+            {
+                var specIds = Utility.Helper.CommonHelper.StringToIntArray(model.goodsSkuIds);
+                var typeSpecs = await _goodsTypeSpecServices.QueryListByClauseAsync(p => specIds.Contains(p.id));
+                var typeSpecValues = await _typeSpecValueServices.QueryListByClauseAsync(p => specIds.Contains(p.specId));
+                typeSpecs.ForEach(p =>
+                {
+                    p.specValues = typeSpecValues.Where(o => o.specId == p.id).ToList();
+                });
+                goodsTypeSpec = typeSpecs;
+            }
+
+            jm.data = new
+            {
+                model,
+                categories = GoodsHelper.GetTree(categories, false),
+                brands,
+                userGrade,
+                goodsGrades,
+                products,
+                categoryExtend,
+                goodsTypeSpec,
+                goodsParams,
+                productsDistributionType,
+                paramsList,
+                skuList
+            };
+
+            jm.status = true;
+            return jm;
+        }
     }
 }
diff --git a/CoreCms.Net.Web.WebApi/Program.cs b/CoreCms.Net.Web.WebApi/Program.cs
index 217d89e..c9b1b4c 100644
--- a/CoreCms.Net.Web.WebApi/Program.cs
+++ b/CoreCms.Net.Web.WebApi/Program.cs
@@ -94,6 +94,8 @@
 //娉ㄥ唽mvc锛屾敞鍐宺azor寮曟搸瑙嗗浘
 builder.Services.AddMvc(options =>
 {
+    //缁忛攢鍟嗚繃婊�
+    //options.Filters.Add<DPremisssionFilter>();
     //瀹炰綋楠岃瘉
     options.Filters.Add<RequiredErrorForClient>();
     //寮傚父澶勭悊
diff --git a/CoreCms.Net.Web.WebApi/Properties/launchSettings.json b/CoreCms.Net.Web.WebApi/Properties/launchSettings.json
index dfceaa6..9976e68 100644
--- a/CoreCms.Net.Web.WebApi/Properties/launchSettings.json
+++ b/CoreCms.Net.Web.WebApi/Properties/launchSettings.json
@@ -9,7 +9,7 @@
     },
     "CoreCms.Net.Web.WebApi": {
       "commandName": "Project",
-      "launchBrowser": false,
+      "launchBrowser": true,
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
       },

--
Gitblit v1.9.1