浏览代码

Merge branch 'feature-dgy-创客分期扣款和预扣款' into DuGuYang

# Conflicts:
#	.DS_Store
#	Areas/Admin/Controllers/MainServer/ToChargeBackRecordController.cs
#	wwwroot/.DS_Store
DuGuYang 3 年之前
父节点
当前提交
01abfb64ac
共有 30 个文件被更改,包括 3831 次插入249 次删除
  1. 二进制
      .DS_Store
  2. 124 0
      AppStart/Helper/InstallmentDeductionService.cs
  3. 113 31
      AppStart/Helper/TimeOutPosChargeService.cs
  4. 二进制
      Areas/.DS_Store
  5. 二进制
      Areas/Admin/.DS_Store
  6. 二进制
      Areas/Admin/Controllers/.DS_Store
  7. 48 48
      Areas/Admin/Controllers/HomeController.cs
  8. 163 12
      Areas/Admin/Controllers/MainServer/ToChargeBackRecordController.cs
  9. 376 0
      Areas/Admin/Controllers/MainServer/ToChargeBackRecordSubController.cs
  10. 420 0
      Areas/Admin/Controllers/MainServer/ToChargeByStageController.cs
  11. 二进制
      Areas/Admin/Views/.DS_Store
  12. 2 2
      Areas/Admin/Views/Home/Login.cshtml
  13. 二进制
      Areas/Admin/Views/MainServer/.DS_Store
  14. 78 68
      Areas/Admin/Views/MainServer/ToChargeBackRecord/Add.cshtml
  15. 69 70
      Areas/Admin/Views/MainServer/ToChargeBackRecord/Edit.cshtml
  16. 27 10
      Areas/Admin/Views/MainServer/ToChargeBackRecord/Index.cshtml
  17. 243 0
      Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Add.cshtml
  18. 250 0
      Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Edit.cshtml
  19. 159 0
      Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Index.cshtml
  20. 390 0
      Areas/Admin/Views/MainServer/ToChargeByStage/Add.cshtml
  21. 264 0
      Areas/Admin/Views/MainServer/ToChargeByStage/Edit.cshtml
  22. 172 0
      Areas/Admin/Views/MainServer/ToChargeByStage/Index.cshtml
  23. 1 0
      Config/MysqlConn.cs
  24. 4 0
      Startup.cs
  25. 二进制
      wwwroot/.DS_Store
  26. 二进制
      wwwroot/layuiadmin/.DS_Store
  27. 409 0
      wwwroot/layuiadmin/modules_main/ToChargeBackRecordSub_Admin.js
  28. 83 8
      wwwroot/layuiadmin/modules_main/ToChargeBackRecord_Admin.js
  29. 436 0
      wwwroot/layuiadmin/modules_main/ToChargeByStage_Admin.js
  30. 二进制
      wwwroot/users/预扣款模版.xlsx

二进制
.DS_Store


+ 124 - 0
AppStart/Helper/InstallmentDeductionService.cs

@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Threading;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    /// <summary>
+    /// 分期扣款(每月20号执行)
+    /// </summary>
+    public class InstallmentDeductionService
+    {
+        public readonly static InstallmentDeductionService Instance = new InstallmentDeductionService();
+        private InstallmentDeductionService()
+        { }
+
+        public void Start()
+        {
+            Thread th = new Thread(doSomething);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void doSomething()
+        {
+            while (true)
+            {
+                // if (DateTime.Now.Day == 20 && DateTime.Now.Hour < 12)
+                if (DateTime.Now.Hour < 20)
+                {
+                    try
+                    {
+                        string check = function.ReadInstance("/InstallmentDeduction/check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt");
+                        if (string.IsNullOrEmpty(check))
+                        {
+                            function.WritePage("/InstallmentDeduction/", "check" + DateTime.Now.ToString("yyyy-MM-20") + ".txt", DateTime.Now.ToString("HH:mm:ss"));
+                            WebCMSEntities db = new WebCMSEntities();
+                            var startdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-20 00:00:00"));
+                            var enddate = startdate.AddDays(1);
+                            // var info = db.ToChargeBackRecordSub.Where(m => m.Status == 0 && m.StartDate >= startdate && m.StartDate < enddate).ToList();//分期扣款记录明细
+                            var info = db.ToChargeByStage.Where(m => m.Status == 0).ToList();//分期扣款记录
+                            foreach (var item in info)
+                            {
+                                var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub();
+                                if (toChargeBackRecordSub.Id > 0)
+                                {
+                                    var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId);
+                                    if (userAccount == null)
+                                    {
+                                        userAccount = db.UserAccount.Add(new UserAccount()
+                                        {
+                                            Id = item.UserId,
+                                            UserId = item.UserId,
+                                        }).Entity;
+                                        db.SaveChanges();
+                                    }
+                                    toChargeBackRecordSub.Status = 2;
+                                    userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款
+                                    var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                                    {
+                                        CreateDate = DateTime.Now,
+                                        Sort = toChargeBackRecordSub.Id,
+                                        UserId = item.UserId,
+                                        ChargeAmount = toChargeBackRecordSub.ChargeAmount,
+                                        ChargeType = 2,//分期预扣款
+                                        Remark = toChargeBackRecordSub.Remark,
+
+                                    }).Entity;
+                                }
+
+                                // //只能存在一笔分期扣款记录(先前有的但是余额不够未扣除的则不添加新的)
+                                // var checks = db.ToChargeBackRecord.Any(m => m.Sort > 0 && (m.Status == 0 || m.Status == 3) && m.ChargeType == 2 && m.UserId == item.UserId);
+                                // if (!checks)
+                                // {
+                                //     string checkAdd = RedisDbconn.Instance.Get<string>("InstallmentDeductionAddRecord:" + item.UserId);
+                                //     if (string.IsNullOrEmpty(check))
+                                //     {
+                                //         var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Status == 0 && m.ParentId == item.Id && m.StartDate >= startdate && m.StartDate < enddate) ?? new ToChargeBackRecordSub();
+                                //         if (toChargeBackRecordSub.Id > 0)
+                                //         {
+                                //             var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == item.UserId);
+                                //             if (userAccount == null)
+                                //             {
+                                //                 userAccount = db.UserAccount.Add(new UserAccount()
+                                //                 {
+                                //                     Id = item.UserId,
+                                //                     UserId = item.UserId,
+                                //                 }).Entity;
+                                //                 db.SaveChanges();
+                                //             }
+                                //             userAccount.ToChargeAmount += toChargeBackRecordSub.ChargeAmount;//增加预扣款
+                                //             var toChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                                //             {
+                                //                 CreateDate = DateTime.Now,
+                                //                 Sort = toChargeBackRecordSub.Id,
+                                //                 UserId = item.UserId,
+                                //                 ChargeAmount = toChargeBackRecordSub.ChargeAmount,
+                                //                 ChargeType = 2,//分期预扣款
+                                //                 Remark = "分期预扣款",
+
+                                //             }).Entity;
+                                //         }
+                                //     }
+                                //     RedisDbconn.Instance.Set("InstallmentDeductionAddRecord:" + item.UserId, "wait");
+                                //     RedisDbconn.Instance.SetExpire("InstallmentDeductionAddRecord:" + item.UserId, 300);
+                                // }
+                            }
+                            db.SaveChanges();
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        function.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "执行分期扣费异常");
+                    }
+                }
+                Thread.Sleep(1000);
+            }
+        }
+    }
+}

+ 113 - 31
AppStart/Helper/TimeOutPosChargeService.cs

@@ -28,7 +28,7 @@ namespace MySystem
         {
             while (true)
             {
-                if (DateTime.Now.Hour < 20)
+                if (DateTime.Now.Hour < 3)
                 {
                     try
                     {
@@ -40,8 +40,8 @@ namespace MySystem
                             var date = DateTime.Now.AddDays(-60).ToString("yyyy-MM-dd 00:00:00");//过期限制时间
                             var time = DateTime.Parse(date);//过期限制时间
 
-                            DataTable dt = CustomerSqlConn.dtable("SELECT BuyUserId FROM PosMachinesTwo WHERE `Status`>-1 AND BuyUserId>0 AND BindingState=0 AND ActivationState=0 AND ScanQrTrade=0 AND RecycEndDate <'" + date + "' GROUP BY BuyUserId", MysqlConn.connstr);//扣费创客
-                            var query = db.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId > 0 && m.BindingState == 0 && m.ActivationState == 0 && m.ScanQrTrade == 0 && m.RecycEndDate < time).ToList();//循环过期超过60天机具
+                            DataTable dt = CustomerSqlConn.dtable("SELECT BuyUserId FROM PosMachinesTwo WHERE `Status`>-1 AND BuyUserId>0 AND BindingState=0 AND ActivationState=0 AND ScanQrTrade=0 AND RecycEndDate <'" + date + "' GROUP BY BuyUserId", MysqlConn.SqlConnStr);//扣费创客
+                            var query = db.PosMachinesTwo.Where(m => m.Status > -1 && m.BuyUserId > 0 && m.BindingState == 0 && m.ActivationState == 0 && m.ScanQrTrade == 0 && m.RecycEndDate < time).ToList();//循环过期超过15天机具
                             var brandInfo = db.KqProducts.ToList();
                             foreach (DataRow item in dt.Rows)
                             {
@@ -85,34 +85,7 @@ namespace MySystem
                             }
                             db.SaveChanges();
 
-                            var info = db.ToChargeBackRecord.Where(m => m.Status == 0).ToList();//过期机具扣费记录
-                            foreach (var items in info)
-                            {
-                                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount();
-                                var record = info.FirstOrDefault(m => m.Id == items.Id);
-                                if (userAccount.BalanceAmount >= record.ChargeAmount)
-                                {
-                                    var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
-                                    {
-                                        CreateDate = DateTime.Now,
-                                        UserId = items.UserId,
-                                        BeforeBalanceAmount = userAccount.BalanceAmount,
-                                        AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
-                                        ChangeAmount = record.ChargeAmount,
-                                        ChangeType = 124,//过期机具货款扣费
-                                        Remark = "扣机具货款",
-
-                                    }).Entity;
-                                    record.Status = 1;
-                                    if (userAccount.ToChargeAmount >= record.ChargeAmount)
-                                    {
-                                        userAccount.ToChargeAmount -= record.ChargeAmount;//扣减预扣款
-                                    }
-                                    userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额
-                                }
-                            }
-                            db.SaveChanges();
-
+                            DoChargeAmount(db);
                         }
                     }
                     catch (Exception ex)
@@ -123,5 +96,114 @@ namespace MySystem
                 Thread.Sleep(1000);
             }
         }
+
+
+
+        public void StartDoChargeAmount()
+        {
+            Thread th = new Thread(StartDoChargeAmountReady);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void StartDoChargeAmountReady()
+        {
+            while (true)
+            {
+                WebCMSEntities db = new WebCMSEntities();
+                DoChargeAmount(db);
+                db.Dispose();
+                Thread.Sleep(600000);
+            }
+        }
+
+        public void ListenChargeAmount()
+        {
+            Thread th = new Thread(ListenChargeAmountReady);
+            th.IsBackground = true;
+            th.Start();
+        }
+
+        public void ListenChargeAmountReady()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("DoChargeAmountQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    WebCMSEntities db = new WebCMSEntities();
+                    DoChargeAmount(db, int.Parse(function.CheckInt(content)));
+                    db.Dispose();
+                }
+            }
+        }
+
+        public void DoChargeAmount(WebCMSEntities db, int UserId = 0)
+        {
+            IQueryable<ToChargeBackRecord> list = db.ToChargeBackRecord.Where(m => m.Status == 0);//过期机具扣费记录
+            if (UserId > 0)
+            {
+                list = list.Where(m => m.UserId == UserId);
+            }
+            var info = list.ToList();
+            foreach (var items in info)
+            {
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == items.UserId) ?? new UserAccount();
+                var record = info.FirstOrDefault(m => m.Id == items.Id);
+
+                if (userAccount.BalanceAmount >= record.ChargeAmount)
+                {
+                    var ChangeType = 0;
+                    var Remark = "";
+                    if (record.ChargeType == 124)//过期机具货款扣费
+                    {
+                        ChangeType = 124;
+                        Remark = "扣机具货款";
+                    }
+                    if (record.ChargeType == 1)//普通预扣款
+                    {
+                        ChangeType = 202;
+                        // Remark = "普通扣款";
+                        Remark = items.Remark;
+                    }
+                    if (record.ChargeType == 2)//分期预扣款
+                    {
+                        ChangeType = 201;
+                        // Remark = "分期扣款";
+                        Remark = items.Remark;
+                    }
+                    var userAccountRecord = db.UserAccountRecord.Add(new UserAccountRecord
+                    {
+                        CreateDate = DateTime.Now,
+                        UserId = items.UserId,
+                        BeforeBalanceAmount = userAccount.BalanceAmount,
+                        AfterBalanceAmount = userAccount.BalanceAmount - record.ChargeAmount,
+                        ChangeAmount = record.ChargeAmount,
+                        ChangeType = ChangeType,
+                        Remark = Remark,
+
+                    }).Entity;
+                    record.Status = 1;
+                    if (record.ChargeType == 2)
+                    {
+                        var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == record.Sort) ?? new ToChargeBackRecordSub();
+                        var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId && m.TimeNumber > m.QueryCount) ?? new ToChargeByStage();
+                        toChargeBackRecordSub.Status = 1;
+                        toChargeByStage.QueryCount += 1;
+                        toChargeByStage.ChargeAmount += toChargeBackRecordSub.ChargeAmount;
+                        if (toChargeByStage.TimeNumber == toChargeByStage.QueryCount)
+                        {
+                            toChargeByStage.Status = 1;
+                        }
+                    }
+                    if (userAccount.ToChargeAmount >= record.ChargeAmount)
+                    {
+                        userAccount.ToChargeAmount -= record.ChargeAmount;//分期扣款
+                    }
+                    userAccount.BalanceAmount -= record.ChargeAmount;//扣减余额
+                }
+            }
+            db.SaveChanges();
+        }
     }
 }

二进制
Areas/.DS_Store


二进制
Areas/Admin/.DS_Store


二进制
Areas/Admin/Controllers/.DS_Store


+ 48 - 48
Areas/Admin/Controllers/HomeController.cs

@@ -149,60 +149,60 @@ namespace MySystem.Areas.Admin.Controllers
         [HttpPost]
         public string Login(string UserName, string Pwd, string CheckCode)
         {
-            string result = "";
-            if (function.GetCookie(_accessor.HttpContext, "checkcode") != CheckCode)
-            {
-                result = "验证码错误!!";
-            }
-            else
-            {
-                Pwd = function.MD5_32(Pwd);
-                var user = db.SysAdmin.FirstOrDefault(m => m.AdminName == UserName && m.Password == Pwd);
-                if (user != null)
-                {
-                    user.LastLoginDate = DateTime.Now;
-                    db.SaveChanges();
-                    function.WriteCookie(_accessor.HttpContext, "SysUserName", user.AdminName);
-                    function.WriteCookie(_accessor.HttpContext, "SysRealName", user.RealName);
-                    function.WriteCookie(_accessor.HttpContext, "SysRealRole", user.Role);
-                    int RoleId = int.Parse(function.CheckInt(user.Role));
-                    BsModels.SysAdminRole Role = db.SysAdminRole.FirstOrDefault(m => m.Id == RoleId) ?? new BsModels.SysAdminRole();
-                    string RightInfo = function.CheckNull(Role.RightInfo);
-                    function.WriteSession(_accessor.HttpContext, "RightInfo", RightInfo);
-                    string UserId = user.Id.ToString();
-                    function.WriteCookie(_accessor.HttpContext, "SysId", UserId);
-                    function.WriteSession(_accessor.HttpContext, "IsLogin", "1");
-                    result = "success";
-                }
-                else
-                {
-                    result = "用户名或密码错误";
-                }
-            }
-
             // string result = "";
-            // Pwd = function.MD5_32(Pwd);
-            // var user = db.SysAdmin.FirstOrDefault(m => m.AdminName == UserName && m.Password == Pwd);
-            // if (user != null)
+            // if (function.GetCookie(_accessor.HttpContext, "checkcode") != CheckCode)
             // {
-            //     user.LastLoginDate = DateTime.Now;
-            //     db.SaveChanges();
-            //     function.WriteCookie(_accessor.HttpContext, "SysUserName", user.AdminName);
-            //     function.WriteCookie(_accessor.HttpContext, "SysRealName", user.RealName);
-            //     function.WriteCookie(_accessor.HttpContext, "SysRealRole", user.Role);
-            //     int RoleId = int.Parse(function.CheckInt(user.Role));
-            //     BsModels.SysAdminRole Role = db.SysAdminRole.FirstOrDefault(m => m.Id == RoleId) ?? new BsModels.SysAdminRole();
-            //     string RightInfo = function.CheckNull(Role.RightInfo);
-            //     function.WriteSession(_accessor.HttpContext, "RightInfo", RightInfo);
-            //     string UserId = user.Id.ToString();
-            //     function.WriteCookie(_accessor.HttpContext, "SysId", UserId);
-            //     function.WriteSession(_accessor.HttpContext, "IsLogin", "1");
-            //     result = "success";
+            //     result = "验证码错误!!";
             // }
             // else
             // {
-            //     result = "用户名或密码错误";
+            //     Pwd = function.MD5_32(Pwd);
+            //     var user = db.SysAdmin.FirstOrDefault(m => m.AdminName == UserName && m.Password == Pwd);
+            //     if (user != null)
+            //     {
+            //         user.LastLoginDate = DateTime.Now;
+            //         db.SaveChanges();
+            //         function.WriteCookie(_accessor.HttpContext, "SysUserName", user.AdminName);
+            //         function.WriteCookie(_accessor.HttpContext, "SysRealName", user.RealName);
+            //         function.WriteCookie(_accessor.HttpContext, "SysRealRole", user.Role);
+            //         int RoleId = int.Parse(function.CheckInt(user.Role));
+            //         BsModels.SysAdminRole Role = db.SysAdminRole.FirstOrDefault(m => m.Id == RoleId) ?? new BsModels.SysAdminRole();
+            //         string RightInfo = function.CheckNull(Role.RightInfo);
+            //         function.WriteSession(_accessor.HttpContext, "RightInfo", RightInfo);
+            //         string UserId = user.Id.ToString();
+            //         function.WriteCookie(_accessor.HttpContext, "SysId", UserId);
+            //         function.WriteSession(_accessor.HttpContext, "IsLogin", "1");
+            //         result = "success";
+            //     }
+            //     else
+            //     {
+            //         result = "用户名或密码错误";
+            //     }
             // }
+
+            string result = "";
+            Pwd = function.MD5_32(Pwd);
+            var user = db.SysAdmin.FirstOrDefault(m => m.AdminName == UserName && m.Password == Pwd);
+            if (user != null)
+            {
+                user.LastLoginDate = DateTime.Now;
+                db.SaveChanges();
+                function.WriteCookie(_accessor.HttpContext, "SysUserName", user.AdminName);
+                function.WriteCookie(_accessor.HttpContext, "SysRealName", user.RealName);
+                function.WriteCookie(_accessor.HttpContext, "SysRealRole", user.Role);
+                int RoleId = int.Parse(function.CheckInt(user.Role));
+                BsModels.SysAdminRole Role = db.SysAdminRole.FirstOrDefault(m => m.Id == RoleId) ?? new BsModels.SysAdminRole();
+                string RightInfo = function.CheckNull(Role.RightInfo);
+                function.WriteSession(_accessor.HttpContext, "RightInfo", RightInfo);
+                string UserId = user.Id.ToString();
+                function.WriteCookie(_accessor.HttpContext, "SysId", UserId);
+                function.WriteSession(_accessor.HttpContext, "IsLogin", "1");
+                result = "success";
+            }
+            else
+            {
+                result = "用户名或密码错误";
+            }
             return result;
         }
         #endregion

+ 163 - 12
Areas/Admin/Controllers/MainServer/ToChargeBackRecordController.cs

@@ -96,16 +96,22 @@ namespace MySystem.Areas.Admin.Controllers
                 Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
                 dic["UserIdMakerCode"] = userid_Users.MakerCode;
                 dic["UserIdRealName"] = userid_Users.RealName;
+                dic["UserIdMobile"] = userid_Users.Mobile;
                 dic.Remove("UserId");
+
                 //待扣类型
                 int ChargeType = int.Parse(dic["ChargeType"].ToString());
-                if (ChargeType == 124) dic["ChargeType"] = "过期机具扣款";
+                if (ChargeType == 124) dic["ChargeTypeName"] = "过期机具扣款";
+                if (ChargeType == 1) dic["ChargeTypeName"] = "创客预扣款";
+                if (ChargeType == 2) dic["ChargeTypeName"] = "分期预扣款";
+                if (ChargeType == 0) dic["ChargeTypeName"] = "";
 
                 //扣款状态
                 int Status = int.Parse(dic["Status"].ToString());
-                if (Status == 0) dic["Status"] = "待扣款";
-                if (Status == 1) dic["Status"] = "已扣款";
-                if (Status == 2) dic["Status"] = "已退还";
+                if (Status == 0) dic["StatusName"] = "待扣款";
+                if (Status == 1) dic["StatusName"] = "已扣款";
+                if (Status == 2) dic["StatusName"] = "已退还";
+                if (Status == 3) dic["StatusName"] = "暂停扣款";
 
             }
             return Json(obj);
@@ -172,7 +178,9 @@ namespace MySystem.Areas.Admin.Controllers
 
 
             ToChargeBackRecord editData = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == Id) ?? new ToChargeBackRecord();
+            var user = db.Users.FirstOrDefault(m => m.Id == editData.UserId) ?? new Users();
             ViewBag.data = editData;
+            ViewBag.MakerCode = user.MakerCode;
             return View();
         }
 
@@ -188,16 +196,25 @@ namespace MySystem.Areas.Admin.Controllers
         public string Edit(ToChargeBackRecord data)
         {
             Dictionary<string, object> Fields = new Dictionary<string, object>();
-
-            Fields.Add("UserId", data.UserId); //创客
+            var info = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == data.Id) ?? new ToChargeBackRecord();
+            if (info.ChargeAmount != data.ChargeAmount)
+            {
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == info.UserId) ?? new UserAccount();
+                if (info.ChargeAmount > data.ChargeAmount)
+                {
+                    userAccount.ToChargeAmount -= info.ChargeAmount - data.ChargeAmount;
+                }
+                if (info.ChargeAmount < data.ChargeAmount)
+                {
+                    userAccount.ToChargeAmount += data.ChargeAmount - info.ChargeAmount;
+                }
+            }
             Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
-            Fields.Add("ChargeType", data.ChargeType); //待扣类型
-            Fields.Add("Remark", data.Remark); //备注
-            Fields.Add("Field1", data.Field1); //备用字段
-
-            Fields.Add("SeoTitle", data.SeoTitle);
-            Fields.Add("SeoKeyword", data.SeoKeyword);
             Fields.Add("SeoDescription", data.SeoDescription);
+            if (info.ChargeType != 124)
+            {
+                Fields.Add("Remark", data.SeoDescription);
+            }
             new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, data.Id);
             AddSysLog(data.Id.ToString(), "ToChargeBackRecord", "update");
             db.SaveChanges();
@@ -220,6 +237,9 @@ namespace MySystem.Areas.Admin.Controllers
             foreach (string subid in idlist)
             {
                 int id = int.Parse(subid);
+                var toChargeBackRecord = db.ToChargeBackRecord.FirstOrDefault(m => m.Id == id) ?? new ToChargeBackRecord();
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == toChargeBackRecord.UserId) ?? new UserAccount();
+                userAccount.ToChargeAmount -= toChargeBackRecord.ChargeAmount;//删除预扣款记录时扣减相应预扣额度
                 Dictionary<string, object> Fields = new Dictionary<string, object>();
                 Fields.Add("Status", -1);
                 new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
@@ -277,6 +297,54 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+        #region 暂停扣款
+
+        /// <summary>
+        /// 暂停扣款
+        /// </summary>
+        /// <returns></returns>
+        public string Break(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "Break");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 3);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启扣款
+
+        /// <summary>
+        /// 开启扣款
+        /// </summary>
+        /// <returns></returns>
+        public string Start(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecord", "Start");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecord", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+
         #region 排序
         /// <summary>
         /// 排序
@@ -291,6 +359,71 @@ namespace MySystem.Areas.Admin.Controllers
         }
         #endregion
 
+
+        #region 导入预扣信息
+        /// <summary>
+        /// 导入预扣信息
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string ChargeImport(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            var info = "";
+            var error = "";
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                string itemJson = dr.ToJson();
+                string MakerCode = itemJson.Contains("\"A\"") ? dr["A"].ToString() : "";
+                string Name = itemJson.Contains("\"B\"") ? dr["B"].ToString() : "";
+                string Amount = itemJson.Contains("\"C\"") ? dr["C"].ToString() : "";
+                string Remark = itemJson.Contains("\"D\"") ? dr["D"].ToString() : "";
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
+                var users = db.Users.FirstOrDefault(m => m.Id == userForMakerCode.UserId && m.RealName == Name) ?? new Users();
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == users.Id);
+                if (users.Id == 0)
+                {
+                    error += "失败:" + MakerCode + "_" + Name + "创客不存在或创客编号和姓名不匹配" + '\n';
+                }
+                else
+                {
+                    if (userAccount == null)
+                    {
+                        userAccount = db.UserAccount.Add(new UserAccount()
+                        {
+                            Id = users.Id,
+                            UserId = users.Id,
+                        }).Entity;
+                        db.SaveChanges();
+                    }
+                    userAccount.ToChargeAmount += decimal.Parse(Amount);
+                    var ToChargeBackRecord = db.ToChargeBackRecord.Add(new ToChargeBackRecord
+                    {
+                        CreateDate = DateTime.Now,
+                        SeoTitle = SysUserName + "_" + SysRealName,
+                        SeoDescription = Remark,
+                        Remark = Remark,
+                        ChargeType = 1,
+                        ChargeAmount = decimal.Parse(Amount),
+                        UserId = users.Id,
+                    }).Entity;
+                    info += "创客编号:" + MakerCode + ";创客姓名:" + Name + ";金额:" + Amount + ";备注:" + Remark + "<br/>";
+                }
+            }
+            if (!string.IsNullOrEmpty(error))
+            {
+                return "Warning|" + error;
+            }
+            string text = string.Format("预扣信息: '" + info + "',Time'" + DateTime.Now + "'");
+            function.WriteLog(text, "导入预扣信息");//机具扣款退还
+            db.SaveChanges();
+            AddSysLog("0", "ToChargeBackRecord", "ChargeImport");
+            return "success";
+        }
+        #endregion
+
+
         #region 机具扣款退还
         /// <summary>
         /// 导入数据
@@ -510,5 +643,23 @@ namespace MySystem.Areas.Admin.Controllers
 
         #endregion
 
+
+        #region 分期扣款
+
+        public IActionResult ChangeInfoDo(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+            return View();
+        }
+
+        public string ChangeInfoDo(string PosCouponCodes, string FromMakerCode)
+        {
+            var result = "";
+            return result;
+        }
+        #endregion
+
     }
 }

+ 376 - 0
Areas/Admin/Controllers/MainServer/ToChargeBackRecordSubController.cs

@@ -0,0 +1,376 @@
+/*
+ * 待扣款明细
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class ToChargeBackRecordSubController : BaseController
+    {
+        public ToChargeBackRecordSubController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 待扣款明细列表
+
+        /// <summary>
+        /// 根据条件查询待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(ToChargeBackRecordSub data, string right, string ParentId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询待扣款明细列表
+
+        /// <summary>
+        /// 待扣款明细列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(ToChargeBackRecordSub data, string OrderNo, string StatusSelect, string CreateDateData, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("ParentId", "1");
+
+            string condition = " and Status>-1";
+
+            //分期单号
+            if (!string.IsNullOrEmpty(OrderNo))
+            {
+                var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.SeoKeyword == OrderNo) ?? new ToChargeByStage();
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.ParentId == toChargeByStage.Id) ?? new ToChargeBackRecordSub();
+                condition += " and ParentId=" + toChargeByStage.Id;
+            }
+
+            //状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                condition += " and Status=" + StatusSelect;
+            }
+
+            //创建时间
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecordSub", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //状态
+                int Status = int.Parse(function.CheckInt(dic["Status"].ToString()));
+                dic["StatusName"] = "";
+                if (Status == 0)
+                {
+                    dic["StatusName"] = "待扣款";
+                }
+                if (Status == 1)
+                {
+                    dic["StatusName"] = "已扣款";
+                }
+                if (Status == 2)
+                {
+                    dic["StatusName"] = "扣款中";
+                }
+
+                //分期单号
+                int ParentId = int.Parse(function.CheckInt(dic["ParentId"].ToString()));
+                var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == ParentId) ?? new ToChargeByStage();
+                dic["OrderNo"] = toChargeByStage.SeoKeyword;
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right, string ParentId)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            Fields.Add("ParentId", data.ParentId);
+
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("ToChargeBackRecordSub", Fields, 0);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecordSub", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, string ParentId, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+            ViewBag.ParentId = ParentId;
+
+
+            ToChargeBackRecordSub editData = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == Id) ?? new ToChargeBackRecordSub();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改待扣款明细
+
+        /// <summary>
+        /// 增加或修改待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            var toChargeBackRecordSub = db.ToChargeBackRecordSub.FirstOrDefault(m => m.Id == data.Id) ?? new ToChargeBackRecordSub();
+            var toChargeByStage = db.ToChargeByStage.FirstOrDefault(m => m.Id == toChargeBackRecordSub.ParentId) ?? new ToChargeByStage();
+            if (toChargeByStage.QueryCount > 0)
+            {
+                return "该扣款记录正处于扣款中或已经结束,不能修改!";
+            }
+            if (toChargeBackRecordSub.ChargeAmount != data.ChargeAmount)
+            {
+                var userAccount = db.UserAccount.FirstOrDefault(m => m.Id == toChargeByStage.UserId) ?? new UserAccount();
+                if (toChargeBackRecordSub.ChargeAmount > data.ChargeAmount)
+                {
+                    toChargeByStage.TotalAmount -= toChargeBackRecordSub.ChargeAmount - data.ChargeAmount;
+                    userAccount.ToChargeAmount -= toChargeBackRecordSub.ChargeAmount - data.ChargeAmount;
+                }
+                if (toChargeBackRecordSub.ChargeAmount < data.ChargeAmount)
+                {
+                    toChargeByStage.TotalAmount += data.ChargeAmount - toChargeBackRecordSub.ChargeAmount;
+                    userAccount.ToChargeAmount += data.ChargeAmount - toChargeBackRecordSub.ChargeAmount;
+                }
+            }
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "ToChargeBackRecordSub", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除待扣款明细信息
+
+        /// <summary>
+        /// 删除待扣款明细信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeBackRecordSub", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeBackRecordSub", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("ToChargeBackRecordSub", Sort, Id);
+
+            AddSysLog(Id.ToString(), "ToChargeBackRecordSub", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+
+                db.ToChargeBackRecordSub.Add(new ToChargeBackRecordSub()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "ToChargeBackRecordSub", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(ToChargeBackRecordSub data)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("CreateDate", "3"); //时间
+
+
+            string condition = " and Status>-1";
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeBackRecordSub", Fields, "Id desc", "0", 1, 20000, condition, "ChargeAmount,Remark", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+            ReturnFields.Add("ChargeAmount", "待扣金额");
+            ReturnFields.Add("Remark", "备注");
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "ToChargeBackRecordSub", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

+ 420 - 0
Areas/Admin/Controllers/MainServer/ToChargeByStageController.cs

@@ -0,0 +1,420 @@
+/*
+ * 分期扣款信息
+ */
+
+using System;
+using System.Web;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+using LitJson;
+using MySystemLib;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    [Area("Admin")]
+    [Route("Admin/[controller]/[action]")]
+    public class ToChargeByStageController : BaseController
+    {
+        public ToChargeByStageController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+            OtherMySqlConn.connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        }
+
+        #region 分期扣款信息列表
+
+        /// <summary>
+        /// 根据条件查询分期扣款信息列表
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index(ToChargeByStage data, string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 根据条件查询分期扣款信息列表
+
+        /// <summary>
+        /// 分期扣款信息列表
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult IndexData(ToChargeByStage data, string MakerCode, string StatusSelect, string CreateDateData, int page = 1, int limit = 30)
+        {
+
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+
+            Fields.Add("SeoTitle", "1"); //创客姓名
+
+            string condition = " and Status>-1";
+
+            //创客编号
+            if (!string.IsNullOrEmpty(MakerCode))
+            {
+                var userForMakerCode = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode) ?? new UserForMakerCode();
+                condition += " and UserId=" + userForMakerCode.UserId;
+            }
+
+            //状态
+            if (!string.IsNullOrEmpty(StatusSelect))
+            {
+                if (StatusSelect == "0")//待扣款
+                {
+                    condition += " and QueryCount<TimeNumber and QueryCount=0 and Status=0";
+                }
+                if (StatusSelect == "1")//已扣款
+                {
+                    condition += " and QueryCount=TimeNumber and Status=1";
+                }
+                if (StatusSelect == "2")//扣款中
+                {
+                    condition += " and QueryCount<TimeNumber and QueryCount>0 and Status=0";
+                }
+            }
+
+            //创建时间
+            if (!string.IsNullOrEmpty(CreateDateData))
+            {
+                string[] datelist = CreateDateData.Split(new string[] { " - " }, StringSplitOptions.None);
+                string start = datelist[0];
+                string end = datelist[1];
+                condition += " and CreateDate>='" + start + " 00:00:00' and CreateDate<='" + end + " 23:59:59'";
+            }
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeByStage", Fields, "Id desc", "0", page, limit, condition);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+                //创客
+                int UserId = int.Parse(function.CheckInt(dic["UserId"].ToString()));
+                Users userid_Users = db.Users.FirstOrDefault(m => m.Id == UserId) ?? new Users();
+                dic["MakerCode"] = userid_Users.MakerCode;
+                dic["MakerName"] = userid_Users.RealName;
+                dic["MakerMobile"] = userid_Users.Mobile;
+
+                //扣款状态
+                int TimeNumber = int.Parse(function.CheckInt(dic["TimeNumber"].ToString()));
+                int QueryCount = int.Parse(function.CheckInt(dic["QueryCount"].ToString()));
+                int Status = int.Parse(function.CheckInt(dic["Status"].ToString()));
+                if (QueryCount < TimeNumber && QueryCount == 0 && Status == 0)
+                {
+                    dic["StatusName"] = "待扣款";
+                }
+                if (QueryCount == TimeNumber && Status == 1)
+                {
+                    dic["StatusName"] = "已扣款";
+                }
+                if (QueryCount < TimeNumber && QueryCount > 0 && Status == 0)
+                {
+                    dic["StatusName"] = "扣款中";
+                }
+
+            }
+            return Json(obj);
+        }
+
+        #endregion
+
+        #region 增加分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Add(string right)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            return View();
+        }
+
+        #endregion
+
+        #region 增加分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Add(ToChargeByStage data, string MakerCode, string MakerName, string StartDates, string ChargeAmounts)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+            string[] StartDatelist = StartDates.TrimEnd(',').Split(',');
+            string[] ChargeAmountslist = ChargeAmounts.TrimEnd(',').Split(',');
+            UserForMakerCode user = db.UserForMakerCode.FirstOrDefault(m => m.MakerCode == MakerCode);
+            if (user == null)
+            {
+                return "创客编号不存在";
+            }
+            var userInfo = db.Users.FirstOrDefault(m => m.Id == user.UserId && m.RealName == MakerName) ?? new Users();
+            if (userInfo.Id == 0)
+            {
+                return "创客编号不存在或创客编号和姓名不匹配";
+            }
+            var StartTime = DateTime.Parse(DateTime.Parse(data.StartDate.ToString()).ToString("yyyy-MM-20 00:00:00"));
+            Fields.Add("UserId", user.UserId); //创客Id
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", StartTime); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+            Fields.Add("TotalAmount", data.TotalAmount); //扣款总金额
+            Fields.Add("SeoTitle", SysUserName + "_" + SysRealName);//操作人
+            Fields.Add("SeoKeyword", "FQ" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8));//分期单号
+            int Id = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Add("ToChargeByStage", Fields, 0);
+            for (int i = 0; i < StartDatelist.Length; i++)
+            {
+                var StartDate = StartDatelist[i];
+                var ChargeAmount = ChargeAmountslist[i];
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.Add(new ToChargeBackRecordSub()
+                {
+                    CreateDate = DateTime.Now,
+                    SeoTitle = SysUserName + "_" + SysRealName,
+                    StartDate = DateTime.Parse(StartDate),
+                    TimeNumber = data.TimeNumber,
+                    ChargeAmount = decimal.Parse(ChargeAmount),
+                    ParentId = Id,
+                    Remark = data.Remark,
+                }).Entity;
+            }
+            AddSysLog(data.Id.ToString(), "ToChargeByStage", "add");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 修改分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Edit(string right, int Id = 0)
+        {
+            ViewBag.RightInfo = RightInfo;
+            ViewBag.right = right;
+
+
+            ToChargeByStage editData = db.ToChargeByStage.FirstOrDefault(m => m.Id == Id) ?? new ToChargeByStage();
+            ViewBag.data = editData;
+            return View();
+        }
+
+        #endregion
+
+        #region 修改分期扣款信息
+
+        /// <summary>
+        /// 增加或修改分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        public string Edit(ToChargeByStage data)
+        {
+            Dictionary<string, object> Fields = new Dictionary<string, object>();
+
+            Fields.Add("UserId", data.UserId); //创客
+            Fields.Add("ChargeAmount", data.ChargeAmount); //待扣金额
+            Fields.Add("Remark", data.Remark); //备注
+            Fields.Add("StartDate", data.StartDate); //扣款开始时间
+            Fields.Add("TimeNumber", data.TimeNumber); //期数
+            Fields.Add("TotalAmount", data.TotalAmount); //扣款总金额
+
+            Fields.Add("SeoTitle", data.SeoTitle);
+            Fields.Add("SeoKeyword", data.SeoKeyword);
+            Fields.Add("SeoDescription", data.SeoDescription);
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, data.Id);
+            AddSysLog(data.Id.ToString(), "ToChargeByStage", "update");
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 删除分期扣款信息信息
+
+        /// <summary>
+        /// 删除分期扣款信息信息
+        /// </summary>
+        /// <returns></returns>
+        public string Delete(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "del");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                var toChargeBackRecordSub = db.ToChargeBackRecordSub.Where(m => m.ParentId == id).ToList();
+                foreach (var item in toChargeBackRecordSub)
+                {
+                    var info = toChargeBackRecordSub.FirstOrDefault(m => m.Id == item.Id);
+                    info.Status = -1;
+                    info.UpdateDate = DateTime.Now;
+                    info.SeoTitle = SysUserName + "_" + SysRealName;
+                }
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", -1);
+                Fields.Add("SeoTitle", SysUserName + "_" + SysRealName);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+
+            return "success";
+        }
+
+        #endregion
+
+        #region 开启
+
+        /// <summary>
+        /// 开启
+        /// </summary>
+        /// <returns></returns>
+        public string Open(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "open");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 1);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 关闭
+
+        /// <summary>
+        /// 关闭
+        /// </summary>
+        /// <returns></returns>
+        public string Close(string Id)
+        {
+            string[] idlist = Id.Split(new char[] { ',' });
+            AddSysLog(Id, "ToChargeByStage", "close");
+            foreach (string subid in idlist)
+            {
+                int id = int.Parse(subid);
+                Dictionary<string, object> Fields = new Dictionary<string, object>();
+                Fields.Add("Status", 0);
+                new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Edit("ToChargeByStage", Fields, id);
+            }
+            db.SaveChanges();
+            return "success";
+        }
+
+        #endregion
+
+        #region 排序
+        /// <summary>
+        /// 排序
+        /// </summary>
+        /// <param name="Id"></param>
+        public string Sort(int Id, int Sort)
+        {
+            new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).Sort("ToChargeByStage", Sort, Id);
+
+            AddSysLog(Id.ToString(), "ToChargeByStage", "sort");
+            return "success";
+        }
+        #endregion
+
+        #region 导入数据
+        /// <summary>
+        /// 导入数据
+        /// </summary>
+        /// <param name="ExcelData"></param>
+        public string Import(string ExcelData)
+        {
+            ExcelData = HttpUtility.UrlDecode(ExcelData);
+            JsonData list = JsonMapper.ToObject(ExcelData);
+            for (int i = 1; i < list.Count; i++)
+            {
+                JsonData dr = list[i];
+                int UserId = int.Parse(dr["创客"].ToString());
+                decimal ChargeAmount = decimal.Parse(dr["待扣金额"].ToString());
+                string Remark = dr["备注"].ToString();
+                DateTime StartDate = DateTime.Parse(dr["扣款开始时间"].ToString());
+                int TimeNumber = int.Parse(dr["期数"].ToString());
+                decimal TotalAmount = decimal.Parse(dr["扣款总金额"].ToString());
+
+                db.ToChargeByStage.Add(new ToChargeByStage()
+                {
+                    CreateDate = DateTime.Now,
+                    UpdateDate = DateTime.Now,
+                    UserId = UserId,   //创客
+                    ChargeAmount = ChargeAmount,   //待扣金额
+                    Remark = Remark,   //备注
+                    StartDate = StartDate,   //扣款开始时间
+                    TimeNumber = TimeNumber,   //期数
+                    TotalAmount = TotalAmount,   //扣款总金额
+
+                });
+                db.SaveChanges();
+            }
+            AddSysLog("0", "ToChargeByStage", "Import");
+            return "success";
+        }
+        #endregion
+
+        #region 导出Excel
+
+        /// <summary>
+        /// 导出Excel
+        /// </summary>
+        /// <returns></returns>
+        public JsonResult ExportExcel(ToChargeByStage data, int? sUserId, int? eUserId)
+        {
+            Dictionary<string, string> Fields = new Dictionary<string, string>();
+            Fields.Add("sUserId", "31"); //创客上限
+            Fields.Add("eUserId", "32"); //创客下限
+            Fields.Add("CreateDate", "3"); //时间
+
+
+            string condition = " and Status>-1";
+
+
+            Dictionary<string, object> obj = new AdminContentOther(_accessor.HttpContext, PublicFunction.MainTables).IndexData("ToChargeByStage", Fields, "Id desc", "0", 1, 20000, condition, "", false);
+            List<Dictionary<string, object>> diclist = obj["data"] as List<Dictionary<string, object>>;
+            foreach (Dictionary<string, object> dic in diclist)
+            {
+
+            }
+
+            Dictionary<string, object> result = new Dictionary<string, object>();
+            result.Add("Status", "1");
+            result.Add("Info", "Excel报表-" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + ".xlsx");
+            result.Add("Obj", diclist);
+            Dictionary<string, object> ReturnFields = new Dictionary<string, object>();
+
+            result.Add("Fields", ReturnFields);
+            AddSysLog("0", "ToChargeByStage", "ExportExcel");
+            return Json(result);
+        }
+
+        #endregion
+
+    }
+}

二进制
Areas/Admin/Views/.DS_Store


+ 2 - 2
Areas/Admin/Views/Home/Login.cshtml

@@ -26,11 +26,11 @@
                     <label for="password">密码 / Password</label>
                     <input class="form-input" type="password" name="Pwd" id="Pwd" onKeyUp="if(event.keyCode==13){$('#CheckCode').focus();}" placeholder="请填写密码">
                 </div>
-                <div class="form-group pb10">
+                @* <div class="form-group pb10">
                     <label for="password">验证码 / Verification</label>
                     <input class="form-input" type="text" name="CheckCode" id="CheckCode" onkeyup="if(event.keyCode==13){syslogin();}" placeholder="请填写验证码" style="width: 70%; display: inline-block; margin-right: 2%">
                     <img src="/Api/PublicMethod/CheckCode" onclick="$(this).attr('src','/Api/PublicMethod/CheckCode?r='+Math.random())" style="width: 26%; height:38px;" />
-                </div>
+                </div> *@
                 @*<div class="form-group pb10 cf">
                         <label class="remembermetext fl" for="rememberme">
                             <input type="checkbox" checked name="rememberme">&nbsp;记住我的登录

二进制
Areas/Admin/Views/MainServer/.DS_Store


+ 78 - 68
Areas/Admin/Views/MainServer/ToChargeBackRecord/Add.cshtml

@@ -1,82 +1,91 @@
 @{
     string RightInfo = ViewBag.RightInfo as string;
     string right = ViewBag.right as string;
-    
+
 }
 <!DOCTYPE html>
 <html>
+
 <head>
     <meta charset="utf-8">
     <title>待扣款明细(增加)</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
     <script src="/admin/js/jquery-1.10.1.min.js"></script>
     <script src="/admin/js/LAreaData2.js"></script>
 </head>
+
 <body>
 
     <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
-        
+
         <div class="layui-card">
-          <div class="layui-card-body">
-            <div class="layui-tab" lay-filter="mytabbar">
-                <ul class="layui-tab-title">
-                    <li class="layui-this" lay-id="1">基本信息</li>
-                </ul>
-                <div class="layui-tab-content mt20">
-                    <div class="layui-tab-item layui-show">
-@{Dictionary<string, string> UsersDic = new MySystem.DictionaryClass().getUsersDic();}
-<div class="layui-form-item">
-<label class="layui-form-label">创客</label>
-<div class="layui-input-inline">
-<select id="UserId" name="UserId" lay-search="">
-<option value="">请选择</option>
-@foreach (string key in UsersDic.Keys)
-{
-<option value="@key">@UsersDic[key]</option>
-}
-</select>
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣金额</label>
-<div class="layui-input-inline">
-<input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount" maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣类型</label>
-<div class="layui-input-inline">
-<select id="ChargeType" name="ChargeType" lay-search="">
-<option value="">请选择</option>
-<option value="1">过期机具扣款</option>
-<option value="2">人工预扣</option>
-</select>
-</div>
-</div>
-<div class="layui-form-item layui-form-text">
-<label class="layui-form-label">备注</label>
-<div class="layui-input-block">
-<textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500" lay-verify="" placeholder="请输入备注"></textarea>
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">备用字段</label>
-<div class="layui-input-inline">
-<input class="layui-input" type="text" id="Field1" name="Field1" maxlength="200" lay-verify="" autocomplete="off" placeholder="请输入备用字段">
-</div>
-</div>
-
-</div>
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            @{
+                                Dictionary<string, string> UsersDic = new MySystem.DictionaryClass().getUsersDic();
+                            }
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客</label>
+                                <div class="layui-input-inline">
+                                    <select id="UserId" name="UserId" lay-search="">
+                                        <option value="">请选择</option>
+                                        @foreach (string key in UsersDic.Keys)
+                                        {
+                                            <option value="@key">@UsersDic[key]</option>
+                                        }
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                        maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="ChargeType" name="ChargeType" lay-search="">
+                                        <option value="">请选择</option>
+                                        <option value="1">过期机具扣款</option>
+                                        <option value="2">人工预扣</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注"></textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">备用字段</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="Field1" name="Field1" maxlength="200"
+                                        lay-verify="" autocomplete="off" placeholder="请输入备用字段">
+                                </div>
+                            </div>
 
+                        </div>
+
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
                 </div>
             </div>
-            <div class="layui-form-item layui-hide">
-                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
-            </div>
-          </div>
         </div>
     </div>
 
@@ -85,11 +94,11 @@
     <script src="/other/mybjq/kindeditor-min.js"></script>
     <script src="/other/mybjq/lang/zh_CN.js"></script>
     <script>
-        
-                    
+
+
         //编辑器
         KindEditor.ready(function (K) {
-            
+
         });
 
         var ids = "";
@@ -195,7 +204,7 @@
             });
         }
 
-        
+
         var tree;
         var element;
         var upload;
@@ -215,30 +224,31 @@
             tree = layui.tree;
             element = layui.element;
             upload = layui.upload;
-        
+
             //Hash地址的定位
             var layid = location.hash.replace(/^#test=/, '');
             element.tabChange('test', layid);
             element.on('tab(test)', function (elem) {
                 location.hash = 'test=' + $(this).attr('lay-id');
             });
-    
+
             //日期
-            
+
 
             //上传文件
-            
+
 
             //穿梭框
-            
+
 
             //TreeView,比如权限管理
-            
+
 
             //省市区
-            
+
         })
 
     </script>
 </body>
+
 </html>

+ 69 - 70
Areas/Admin/Views/MainServer/ToChargeBackRecord/Edit.cshtml

@@ -1,87 +1,85 @@
 @using MySystem.Models;
-@{ToChargeBackRecord editData = ViewBag.data as ToChargeBackRecord;}
+@{
+    ToChargeBackRecord editData = ViewBag.data as ToChargeBackRecord;
+}
 @{
     string RightInfo = ViewBag.RightInfo as string;
     string right = ViewBag.right as string;
-    
+
 }
 <!DOCTYPE html>
 <html>
+
 <head>
     <meta charset="utf-8">
     <title>待扣款明细(修改)</title>
     <meta name="renderer" content="webkit">
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
     <script src="/admin/js/jquery-1.10.1.min.js"></script>
     <script src="/admin/js/LAreaData2.js"></script>
 </head>
+
 <body>
 
     <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
         <input type="hidden" name="Id" value="@editData.Id" />
-        
+
         <div class="layui-card">
-          <div class="layui-card-body">
-            <div class="layui-tab" lay-filter="mytabbar">
-                <ul class="layui-tab-title">
-                    <li class="layui-this" lay-id="1">基本信息</li>
-                </ul>
-                <div class="layui-tab-content mt20">
-                    <div class="layui-tab-item layui-show">
-@{Dictionary<string, string> UsersDic = new MySystem.DictionaryClass().getUsersDic();}
-<div class="layui-form-item">
-<label class="layui-form-label">创客</label>
-<div class="layui-input-inline">
-<select id="UserId" name="UserId" lay-search="">
-<option value="">请选择</option>
-@foreach (string key in UsersDic.Keys)
-{
-<option value="@key">@UsersDic[key]</option>
-}
-</select>
-<script>$("#UserId").val("@editData.UserId");</script>
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣金额</label>
-<div class="layui-input-inline">
-<input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount" value="@editData.ChargeAmount" maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">待扣类型</label>
-<div class="layui-input-inline">
-<select id="ChargeType" name="ChargeType" lay-search="">
-<option value="">请选择</option>
-<option value="1">过期机具扣款</option>
-<option value="2">人工预扣</option>
-</select>
-<script>$("#ChargeType").val("@editData.ChargeType");</script>
-</div>
-</div>
-<div class="layui-form-item layui-form-text">
-<label class="layui-form-label">备注</label>
-<div class="layui-input-block">
-<textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500" lay-verify="" placeholder="请输入备注">@editData.Remark</textarea>
-</div>
-</div>
-<div class="layui-form-item">
-<label class="layui-form-label">备用字段</label>
-<div class="layui-input-inline">
-<input class="layui-input" type="text" id="Field1" name="Field1" value="@editData.Field1" maxlength="200" lay-verify="" autocomplete="off" placeholder="请输入备用字段">
-</div>
-</div>
-
-</div>
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客编号</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount" readonly
+                                        value="@ViewBag.MakerCode" maxlength="20" lay-verify="required|"
+                                        autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                        value="@editData.ChargeAmount" maxlength="20" lay-verify="required|"
+                                        autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            @* <div class="layui-form-item">
+                                <label class="layui-form-label">待扣类型</label>
+                                <div class="layui-input-inline">
+                                    <select id="ChargeType" name="ChargeType" lay-search="" readonly>
+                                        <option value="">请选择</option>
+                                        <option value="124">过期机具扣款</option>
+                                        <option value="1">普通预扣</option>
+                                        <option value="2">分期扣款</option>
+                                    </select>
+                                    <script>$("#ChargeType").val("@editData.ChargeType");</script>
+                                </div>
+                            </div> *@
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="SeoDescription" name="SeoDescription" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注">@editData.SeoDescription</textarea>
+                                </div>
+                            </div>
+
+                        </div>
 
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
                 </div>
             </div>
-            <div class="layui-form-item layui-hide">
-                <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit" value="确认">
-            </div>
-          </div>
         </div>
     </div>
 
@@ -90,11 +88,11 @@
     <script src="/other/mybjq/kindeditor-min.js"></script>
     <script src="/other/mybjq/lang/zh_CN.js"></script>
     <script>
-        
-        
+
+
         //编辑器
         KindEditor.ready(function (K) {
-            
+
         });
 
         var ids = "";
@@ -219,30 +217,31 @@
             tree = layui.tree;
             element = layui.element;
             upload = layui.upload;
-        
+
             //Hash地址的定位
             var layid = location.hash.replace(/^#test=/, '');
             element.tabChange('test', layid);
             element.on('tab(test)', function (elem) {
                 location.hash = 'test=' + $(this).attr('lay-id');
             });
-    
+
             //日期
-            
+
 
             //上传文件
-            
+
 
             //穿梭框
-            
+
 
             //TreeView,比如权限管理
-            
+
 
             //省市区
-            
+
         })
 
     </script>
 </body>
+
 </html>

+ 27 - 10
Areas/Admin/Views/MainServer/ToChargeBackRecord/Index.cshtml

@@ -70,17 +70,20 @@
                                 <option value="">全部...</option>
                                 <option value="0">待扣款</option>
                                 <option value="1">已扣款</option>
+                                <option value="3">暂停扣款</option>
                                 <option value="2">已退还</option>
                             </select>
                         </div>
                     </div>
+                    @* 创客编号、创客姓名、手机号、创建时间、扣款金额、扣款时间、扣款状态(待扣款/已扣款/暂停扣款)、备注、操作人、操作(暂停/恢复扣款、删除、修改预扣金额) *@
                     <div class="layui-inline">
                         <label class="layui-form-label">待扣类型</label>
                         <div class="layui-input-inline">
                             <select id="ChargeTypeSelect" name="ChargeTypeSelect" lay-search="">
                                 <option value="">全部...</option>
                                 <option value="124">过期机具扣款</option>
-                                @* <option value="2">人工预扣</option> *@
+                                <option value="1">创客预扣款</option>
+                                <option value="2">分期预扣款</option>
                             </select>
                         </div>
                     </div>
@@ -115,30 +118,43 @@
                     }
                     @if (RightInfo.Contains("," + right + "_import,"))
                     {
-                        <button class="layui-btn" data-type="ImportData"><i
-                            class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>机具扣款退还</button>
+                        <button class="layui-btn" data-type="ChargeImport"><i
+                            class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>导入预扣信息</button>
+
+                        @* <button class="layui-btn" data-type="ImportData"><i
+                            class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>机具扣款退还</button> *@
                     }
                     @* @if (RightInfo.Contains("," + right + "_import,"))
-                    {
+                        {
                         <button class="layui-btn" data-type="ImportDatas"><i
-                            class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>机具回收确认退还</button>
-                    } *@
+                        class="layui-icon layui-icon-upload layuiadmin-button-btn"></i>机具回收确认退还</button>
+                        } *@
                 </div>
 
                 <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
                 <script type="text/html" id="table-list-tools">
                     @if (RightInfo.Contains("," + right + "_edit,"))
                     {
+                        @("{{#if (d.ChargeType != 2){ }}")
                         <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
+                        @("{{#} }}")
                     }
                     @if (RightInfo.Contains("," + right + "_delete,"))
                     {
+                        @("{{#if (d.Status == 0 || d.Status == 3){ }}")
                         <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
+                        @("{{#} }}")
                     }
-                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    @if (RightInfo.Contains("," + right + "_BreakOrStart,"))
                     {
-
+                        @("{{#if (d.Status == 0){ }}")
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Break"><i class="layui-icon layui-icon-edit"></i>暂停扣款</a>
+                        @("{{#} }}")
+                        @("{{#if (d.Status == 3){ }}")
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="Start"><i class="layui-icon layui-icon-edit"></i>恢复扣款</a>
+                        @("{{#} }}")
                     }
+
                 </script>
             </div>
         </div>
@@ -163,13 +179,14 @@
         </div>
         <div class="layui-form-item ml10">
             <div class="layui-input-block">
-                <button type="button" class="layui-btn" onclick="ConfirmImport()">立即导入</button>
+                <button type="button" class="layui-btn" onclick="ConfirmChargeImport()">立即导入</button>
             </div>
         </div>
     </div>
 
     <script src="/layuiadmin/layui/layui.js"></script>
-    <script src="/layuiadmin/modules_main/ToChargeBackRecord_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script
+        src="/layuiadmin/modules_main/ToChargeBackRecord_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
     <script>
 
     </script>

+ 243 - 0
Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Add.cshtml

@@ -0,0 +1,243 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    string ParentId = ViewBag.ParentId as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>待扣款明细(增加)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        <input type="hidden" name="ParentId" value="@ParentId" />
+
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                        maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注"></textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款开始时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="StartDate" name="StartDate" lay-verify=""
+                                        autocomplete="off" placeholder="请输入扣款开始时间">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">期数</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="TimeNumber" name="TimeNumber"
+                                        maxlength="20" lay-verify="" autocomplete="off" placeholder="请输入期数">
+                                </div>
+                            </div>
+
+                        </div>
+
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+
+
+        //编辑器
+        KindEditor.ready(function (K) {
+
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+
+        var tree;
+        var element;
+        var upload;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+
+            //日期
+            laydate.render({
+                elem: '#StartDate',
+                type: 'datetime',
+                trigger: 'click'
+            });
+
+
+            //上传文件
+
+
+            //穿梭框
+
+
+            //TreeView,比如权限管理
+
+
+            //省市区
+
+        })
+
+    </script>
+</body>
+
+</html>

+ 250 - 0
Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Edit.cshtml

@@ -0,0 +1,250 @@
+@using MySystem.Models;
+@{
+    ToChargeBackRecordSub editData = ViewBag.data as ToChargeBackRecordSub;
+}
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    string ParentId = ViewBag.ParentId as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>待扣款明细(修改)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        <input type="hidden" name="Id" value="@editData.Id" />
+        <input type="hidden" name="ParentId" value="@ParentId" />
+
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                        value="@editData.ChargeAmount" maxlength="20" lay-verify="required|"
+                                        autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注">@editData.Remark</textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款开始时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="StartDate" name="StartDate" readonly
+                                        value="@(editData.StartDate == null ? "" : editData.StartDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))"
+                                        lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">期数</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="TimeNumber" name="TimeNumber"
+                                        value="@editData.TimeNumber" maxlength="20" lay-verify="" autocomplete="off" readonly
+                                        placeholder="请输入期数">
+                                </div>
+                            </div>
+
+                        </div>
+
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+
+
+        //编辑器
+        KindEditor.ready(function (K) {
+
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+        var tree;
+        var element;
+        var upload;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+
+            //日期
+            laydate.render({
+                elem: '#StartDate',
+                type: 'datetime',
+                trigger: 'click'
+            });
+
+
+            //上传文件
+
+
+            //穿梭框
+
+
+            //TreeView,比如权限管理
+
+
+            //省市区
+
+        })
+
+    </script>
+</body>
+
+</html>

+ 159 - 0
Areas/Admin/Views/MainServer/ToChargeBackRecordSub/Index.cshtml

@@ -0,0 +1,159 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+    string ParentId = ViewBag.ParentId as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>待扣款明细</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="/layuiadmin/style/admin.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <style>
+        .layui-input-inline {
+            width: 175px !important;
+        }
+
+        .layui-form-label {
+            width: 85px !important;
+        }
+
+        .layui-inline {
+            margin-right: 0px !important;
+        }
+
+        .w100 {
+            width: 100px !important;
+        }
+
+        .ml50 {
+            margin-left: 50px !important;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label">分期单号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="OrderNo" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创建时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="CreateDateData" id="CreateDate"
+                                placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">扣款状态</label>
+                        <div class="layui-input-inline">
+                            <select id="StatusSelect" name="StatusSelect" lay-search="">
+                                <option value="">全部...</option>
+                                <option value="0">待扣款</option>
+                                <option value="2">扣款中</option>
+                                <option value="1">已扣款</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline ml50">
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询
+                        </button>
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-searchall">
+                            <i class="layui-icon layui-icon-list layuiadmin-button-btn"></i>全部
+                        </button>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-card-body">
+                <div style="padding-bottom: 10px;">
+                    @if (RightInfo.Contains("," + right + "_add,"))
+                    {
+                        <button class="layui-btn" data-type="add"><i
+                            class="layui-icon layui-icon-add-1 layuiadmin-button-btn"></i>添加</button>
+                    }
+                    @* @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        <button class="layui-btn" data-type="batchdel"><i
+                            class="layui-icon layui-icon-delete layuiadmin-button-btn"></i>删除</button>
+                    } *@
+                    @* @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <button class="layui-btn" data-type="ExportExcel"><i
+                            class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出</button>
+
+                    } *@
+                </div>
+
+                <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
+                <script type="text/html" id="table-list-tools">
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        @("{{#if ( d.Status == 0){ }}")
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
+                        @("{{#} }}")
+                    }
+                    @* @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        @("{{#if ( d.Status == 0){ }}")
+                        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
+                        @("{{#} }}")
+                    } *@
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+
+                    }
+                </script>
+            </div>
+        </div>
+    </div>
+    <div id="excelForm" style="display:none; padding:20px;">
+        <div class="layui-tab-item layui-show">
+            <div class="layui-form-item">
+                <label class="layui-form-label">模板下载</label>
+                <div class="layui-form-mid layui-word-aux" id="excelTemp">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">excel文件</label>
+                <div class="layui-form-mid layui-word-aux">
+                    <div class="layui-upload">
+                        <input type="file" id="ExcelFile" name="ExcelFile" value="">
+                    </div>
+                    <div class="mt10" id="ExcelFileList">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item ml10">
+            <div class="layui-input-block">
+                <button type="button" class="layui-btn" onclick="ConfirmImport()">立即导入</button>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script
+        src="/layuiadmin/modules_main/ToChargeBackRecordSub_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script>
+        var ParentId = '@ParentId';
+
+    </script>
+</body>
+
+</html>

+ 390 - 0
Areas/Admin/Views/MainServer/ToChargeByStage/Add.cshtml

@@ -0,0 +1,390 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+}
+
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>分期扣款信息(增加)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客编号</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="MakerCode" name="MakerCode"
+                                        maxlength="20" lay-verify="" autocomplete="off" placeholder="请输入创客编号">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客姓名</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="MakerName" name="MakerName"
+                                        maxlength="20" lay-verify="" autocomplete="off" placeholder="请输入创客姓名">
+                                </div>
+                            </div>
+                            @* <div class="layui-form-item">
+                                <label class="layui-form-label">待扣金额</label>
+                                <div class="layui-input-inline">
+                                <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount"
+                                maxlength="20" lay-verify="required|" autocomplete="off" placeholder="请输入待扣金额">
+                                </div>
+                                </div> *@
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注"></textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款开始时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="StartDate" name="StartDate" lay-verify=""
+                                        autocomplete="off" placeholder="请输入扣款开始时间">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款总金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="TotalAmount" name="TotalAmount"
+                                        oninput="OnInput()" maxlength="20" lay-verify="" autocomplete="off"
+                                        placeholder="请输入扣款总金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">期数</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="number" id="TimeNumber" name="TimeNumber"
+                                        onkeyup="CheckTimeNumber(this)" maxlength="50" lay-verify="" autocomplete="off"
+                                        placeholder="请输入期数">
+                                </div>
+                            </div>
+                            <div id="SubList">
+                            </div>
+                        </div>
+
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+
+        function ChangeInfo() {
+            var userdata = $("#confirmFrm").serialize();
+            $.ajax({
+                type: "POST",
+                url: "/Admin/ToChargeBackRecord/ChangeInfoDo?r=" + Math.random(1),
+                data: "userdata",
+                dataType: "text",
+                success: function (data) {
+                    layer.close(index);
+                    layer.alert(data.replace(/\n/g, '<br />'), { area: ['700px', '750px'] });
+                }
+            });
+        }
+
+        function OnInput() {
+            @* $('#TimeNumber').val(''); *@
+            $("#SubList").html("");
+            var totalAmount = $('#TotalAmount').val();//扣款总金额
+            count = $('#TimeNumber').val();
+            if (count > 12) {
+                layer.msg('最多可分12期');
+                obj.value = '';
+                $("#SubList").html("");
+                return;
+            }
+            chargeAmount = (totalAmount / count).toFixed(2);
+            leave = (totalAmount - (chargeAmount * count)).toFixed(2);
+            leaveAmount = ((chargeAmount * 100 + leave * 100) / 100).toFixed(2);
+            num = 0;
+            nums = 0;
+            var html = '';
+            for (var i = 0; i < count; i++) {
+                num = num + 1;
+                numInfo = "第" + num + "期";
+                html += '<div class="layui-form-item">' +
+                    '<label class="layui-form-label"> ' + numInfo + '</label >' +
+                    '<div class="layui-input-inline">' +
+                    '<input class="layui-input" type="text" id="ChargeAmounts' + num + '" name="ChargeAmounts" maxlength="50" lay-verify="" autocomplete="off" placeholder="" readonly>' +
+                    '</div>' +
+                    '<label class="layui-form-label">扣款开始时间</label>' +
+                    '<div class="layui-input-inline"><input class="layui-input" type="text" id="StartDates' + num + '" name="StartDates"lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间"></div>' +
+                    '</div >';
+            }
+            $('#SubList').html(html);
+            for (var i = 0; i < count; i++) {
+                nums = nums + 1;
+                if (nums < count) {
+                    $('#ChargeAmounts' + nums).val(chargeAmount);
+                }
+                else {
+                    $('#ChargeAmounts' + nums).val(leaveAmount);
+                }
+                var time = $('#StartDate').val() + '-20 00:00:00';
+
+                var dateTime = new Date(time);
+                dateTime = dateTime.setMonth(dateTime.getMonth() + nums - 1);
+                dateTime = new Date(dateTime);
+
+                laydate.render({
+                    elem: '#StartDates' + nums,
+                    type: 'datetime',
+                    trigger: 'click',
+                    value: dateTime
+                });
+            }
+            form.render();
+        }
+
+        function CheckTimeNumber(obj) {
+            var totalAmount = $('#TotalAmount').val();//扣款总金额
+            count = obj.value;
+            if (count > 12) {
+                layer.msg('最多可分12期');
+                obj.value = '';
+                $("#SubList").html("");
+                return;
+            }
+            chargeAmount = (totalAmount / count).toFixed(2);
+            leave = (totalAmount - (chargeAmount * count)).toFixed(2);
+            leaveAmount = ((chargeAmount * 100 + leave * 100) / 100).toFixed(2);
+            console.log(chargeAmount);
+            console.log(leave);
+            console.log(leaveAmount);
+            num = 0;
+            nums = 0;
+            var html = '';
+            for (var i = 0; i < count; i++) {
+                num = num + 1;
+                numInfo = "第" + num + "期";
+                html += '<div class="layui-form-item">' +
+                    '<label class="layui-form-label"> ' + numInfo + '</label >' +
+                    '<div class="layui-input-inline">' +
+                    '<input class="layui-input" type="text" id="ChargeAmounts' + num + '" name="ChargeAmounts" maxlength="50" lay-verify="" autocomplete="off" placeholder="" readonly>' +
+                    '</div>' +
+                    '<label class="layui-form-label">扣款开始时间</label>' +
+                    '<div class="layui-input-inline"><input class="layui-input" type="text" id="StartDates' + num + '" name="StartDates"lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间"></div>' +
+                    '</div >';
+            }
+            $('#SubList').html(html);
+            for (var i = 0; i < count; i++) {
+                nums = nums + 1;
+                if (nums < count) {
+                    $('#ChargeAmounts' + nums).val(chargeAmount);
+                }
+                else {
+                    $('#ChargeAmounts' + nums).val(leaveAmount);
+                }
+                var time = $('#StartDate').val() + '-20 00:00:00';
+
+                var dateTime = new Date(time);
+                dateTime = dateTime.setMonth(dateTime.getMonth() + nums - 1);
+                dateTime = new Date(dateTime);
+
+                laydate.render({
+                    elem: '#StartDates' + nums,
+                    type: 'datetime',
+                    trigger: 'click',
+                    value: dateTime
+                });
+            }
+            form.render();
+        }
+
+
+        //编辑器
+        KindEditor.ready(function (K) {
+
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+
+        var tree;
+        var element;
+        var upload;
+        var laydate;
+        var form;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            form = layui.form;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+            laydate = layui.laydate;
+
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+
+            //日期
+            laydate.render({
+                elem: '#StartDate',
+                type: 'month',
+                trigger: 'click'
+            });
+
+
+            //上传文件
+
+
+            //穿梭框
+
+
+            //TreeView,比如权限管理
+
+
+            //省市区
+
+        })
+
+    </script>
+</body>
+
+</html>

+ 264 - 0
Areas/Admin/Views/MainServer/ToChargeByStage/Edit.cshtml

@@ -0,0 +1,264 @@
+@using MySystem.Models;
+@{
+    ToChargeByStage editData = ViewBag.data as ToChargeByStage;
+}
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>分期扣款信息(修改)</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <script src="/admin/js/LAreaData2.js"></script>
+</head>
+
+<body>
+
+    <div class="layui-form" lay-filter="layuiadmin-form-useradmin" id="layuiadmin-form-useradmin">
+        <input type="hidden" name="Id" value="@editData.Id" />
+
+        <div class="layui-card">
+            <div class="layui-card-body">
+                <div class="layui-tab" lay-filter="mytabbar">
+                    <ul class="layui-tab-title">
+                        <li class="layui-this" lay-id="1">基本信息</li>
+                    </ul>
+                    <div class="layui-tab-content mt20">
+                        <div class="layui-tab-item layui-show">
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">创客</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="UserId" name="UserId"
+                                        value="@editData.UserId" maxlength="20" lay-verify="" autocomplete="off" readonly
+                                        placeholder="请输入创客">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">已扣金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="ChargeAmount" name="ChargeAmount" readonly
+                                        value="@editData.ChargeAmount" maxlength="20" lay-verify="required|"
+                                        autocomplete="off" placeholder="请输入已扣金额">
+                                </div>
+                            </div>
+                            <div class="layui-form-item layui-form-text">
+                                <label class="layui-form-label">备注</label>
+                                <div class="layui-input-block">
+                                    <textarea class="layui-textarea" id="Remark" name="Remark" maxlength="500"
+                                        lay-verify="" placeholder="请输入备注">@editData.Remark</textarea>
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款开始时间</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="StartDate" name="StartDate"
+                                        value="@(editData.StartDate == null ? "" : editData.StartDate.Value.ToString("yyyy-MM-dd HH:mm:ss"))"
+                                        lay-verify="" autocomplete="off" placeholder="请输入扣款开始时间">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">期数</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="TimeNumber" name="TimeNumber"
+                                        value="@editData.TimeNumber" maxlength="20" lay-verify="" autocomplete="off" readonly
+                                        placeholder="请输入期数">
+                                </div>
+                            </div>
+                            <div class="layui-form-item">
+                                <label class="layui-form-label">扣款总金额</label>
+                                <div class="layui-input-inline">
+                                    <input class="layui-input" type="text" id="TotalAmount" name="TotalAmount"
+                                        value="@editData.TotalAmount" maxlength="20" lay-verify="" autocomplete="off" readonly
+                                        placeholder="请输入扣款总金额">
+                                </div>
+                            </div>
+
+                        </div>
+
+                    </div>
+                </div>
+                <div class="layui-form-item layui-hide">
+                    <input type="button" lay-submit lay-filter="LAY-list-front-submit" id="LAY-list-front-submit"
+                        value="确认">
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/other/oss/upload-min@(MySystem.OssHelper.Instance.OssStatus ? "-oss" : "").js"></script>
+    <script src="/other/mybjq/kindeditor-min.js"></script>
+    <script src="/other/mybjq/lang/zh_CN.js"></script>
+    <script>
+
+
+        //编辑器
+        KindEditor.ready(function (K) {
+
+        });
+
+        var ids = "";
+        function getChildren(obj) {
+            $.each(obj, function (index, value) {
+                var id = obj[index].id;
+                ids += id + ",";
+                var children = obj[index].children;
+                if (children) {
+                    getChildren(children);
+                }
+            });
+        }
+
+        function AreasProvinceInit(tagId, areasVal, form) {
+            for (var i = 0; i < provs_data.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(provs_data[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Province").append('<option value="' + provs_data[i].value + '"' + sel + '>' + provs_data[i].text + '</option>');
+            }
+            form.render();
+        }
+
+        function AreasProvinceSelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "City").html('<option value="">市</option>');
+            var list = citys_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "City").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasCitySelected(tagId, areasVal, form, value) {
+            $("#" + tagId + "Area").html('<option value="">县/区</option>');
+            var list = dists_data[value];
+            for (var i = 0; i < list.length; i++) {
+                var sel = "";
+                if (areasVal.indexOf(list[i].text) > -1) {
+                    sel = " selected=selected";
+                }
+                $("#" + tagId + "Area").append('<option value="' + list[i].value + '"' + sel + '>' + list[i].text + '</option>');
+            }
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+
+        function AreasAreaSelected(tagId, form) {
+            form.render();
+            $("#" + tagId + "").val($("#" + tagId + "Province option:selected").text() + "," + $("#" + tagId + "City option:selected").text() + "," + $("#" + tagId + "Area option:selected").text());
+        }
+        function movePrev(obj, tagId) {
+            $(obj).parent().prev().insertAfter($(obj).parent());
+            checkPics(tagId);
+        }
+        function moveNext(obj, tagId) {
+            $(obj).parent().next().insertBefore($(obj).parent());
+            checkPics(tagId);
+        }
+        function deletePic(obj, tagId) {
+            $(obj).parent().remove();
+            checkPics(tagId);
+        }
+        function checkPics(tagId) {
+            var pics = "";
+            var texts = "";
+            $("#" + tagId + "Image div img").each(function (i) {
+                pics += $(this).attr("src").replace(osshost, '') + "|";
+            });
+            $("#" + tagId + "Image div input").each(function (i) {
+                texts += $(this).val() + "|";
+            });
+            if (pics == "") {
+                $("#" + tagId).val("");
+            } else {
+                pics = pics.substring(0, pics.length - 1);
+                texts = texts.substring(0, pics.length - 1);
+                $("#" + tagId).val(pics + "#cut#" + texts);
+            }
+        }
+        function checkBox(tagId) {
+            var text = "";
+            $("input[type=checkbox][name=" + tagId + "List]:checked").each(function (i) {
+                text += $(this).val() + ",";
+            });
+            $("#" + tagId).val(text);
+        }
+        function showBigPic(picpath) {
+            parent.layer.open({
+                type: 1,
+                title: false,
+                closeBtn: 0,
+                shadeClose: true,
+                area: ['auto', 'auto'],
+                content: '<img src="' + picpath + '" style="max-width:800px; max-height:800px;" />'
+            });
+        }
+
+        var tree;
+        var element;
+        var upload;
+        layui.config({
+            base: '/layuiadmin/' //静态资源所在路径
+        }).extend({
+            index: 'lib/index' //主入口模块
+        }).use(['index', 'form', 'upload', 'layedit', 'laydate', 'element', 'croppers', 'transfer', 'tree', 'util'], function () {
+            var $ = layui.$
+                , form = layui.form
+                , layer = layui.layer
+                , layedit = layui.layedit
+                , laydate = layui.laydate
+                , croppers = layui.croppers
+                , transfer = layui.transfer
+                , util = layui.util;
+            tree = layui.tree;
+            element = layui.element;
+            upload = layui.upload;
+
+            //Hash地址的定位
+            var layid = location.hash.replace(/^#test=/, '');
+            element.tabChange('test', layid);
+            element.on('tab(test)', function (elem) {
+                location.hash = 'test=' + $(this).attr('lay-id');
+            });
+
+            //日期
+            laydate.render({
+                elem: '#StartDate',
+                type: 'datetime',
+                trigger: 'click'
+            });
+
+
+            //上传文件
+
+
+            //穿梭框
+
+
+            //TreeView,比如权限管理
+
+
+            //省市区
+
+        })
+
+    </script>
+</body>
+
+</html>

+ 172 - 0
Areas/Admin/Views/MainServer/ToChargeByStage/Index.cshtml

@@ -0,0 +1,172 @@
+@{
+    string RightInfo = ViewBag.RightInfo as string;
+    string right = ViewBag.right as string;
+
+}
+<!DOCTYPE html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <title>分期扣款信息</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" href="/layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="/layuiadmin/style/admin.css" media="all">
+    <script src="/admin/js/jquery-1.10.1.min.js"></script>
+    <style>
+        .layui-input-inline {
+            width: 175px !important;
+        }
+
+        .layui-form-label {
+            width: 85px !important;
+        }
+
+        .layui-inline {
+            margin-right: 0px !important;
+        }
+
+        .w100 {
+            width: 100px !important;
+        }
+
+        .ml50 {
+            margin-left: 50px !important;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="layui-fluid">
+        <div class="layui-card">
+            <div class="layui-form layui-card-header layuiadmin-card-header-auto">
+                <div class="layui-form-item">
+                    @* <div class="layui-inline">
+                        <label class="layui-form-label">创客</label>
+                        <div class="layui-input-inline w100">
+                            <input class="layui-input" type="text" name="sUserId" id="sUserId" placeholder=""
+                                autocomplete="off">
+                        </div>
+                        <div class="layui-form-mid">-</div>
+                        <div class="layui-input-inline w100">
+                            <input class="layui-input" type="text" name="eUserId" id="eUserId" placeholder=""
+                                autocomplete="off">
+                        </div>
+                    </div> *@
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创客编号</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="MakerCode" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创客姓名</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="SeoTitle" placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">扣款状态</label>
+                        <div class="layui-input-inline">
+                            <select id="StatusSelect" name="StatusSelect" lay-search="">
+                                <option value="">全部...</option>
+                                <option value="0">待扣款</option>
+                                <option value="2">扣款中</option>
+                                <option value="1">已扣款</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label">创建时间</label>
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" readonly name="CreateDateData" id="CreateDate"
+                                placeholder="" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline ml50">
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-search">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>查询
+                        </button>
+                        <button class="layui-btn" lay-submit lay-filter="LAY-list-front-searchall">
+                            <i class="layui-icon layui-icon-list layuiadmin-button-btn"></i>全部
+                        </button>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-card-body">
+                <div style="padding-bottom: 10px;">
+                    @if (RightInfo.Contains("," + right + "_add,"))
+                    {
+                        <button class="layui-btn" data-type="add"><i
+                            class="layui-icon layui-icon-add-1 layuiadmin-button-btn"></i>添加</button>
+                    }
+                    @* @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        <button class="layui-btn" data-type="batchdel"><i
+                            class="layui-icon layui-icon-delete layuiadmin-button-btn"></i>删除</button>
+                    } *@
+                    @* @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <button class="layui-btn" data-type="ExportExcel"><i
+                            class="layui-icon layui-icon-export layuiadmin-button-btn"></i>导出</button>
+
+                    } *@
+                </div>
+
+                <table id="LAY-list-manage" lay-filter="LAY-list-manage"></table>
+                <script type="text/html" id="table-list-tools">
+                    @* @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a>
+                    } *@
+                    @if (RightInfo.Contains("," + right + "_delete,"))
+                    {
+                        @("{{#if (d.QueryCount == 0){ }}")
+                        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>
+                        @("{{#} }}")
+                    }
+                    @if (RightInfo.Contains("," + right + "_edit,"))
+                    {
+                        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-href="/Admin/ToChargeBackRecordSub/Index?right=@right&ParentId=@("{{d.Id}}")">待扣款明细</a>
+                    }
+                </script>
+            </div>
+        </div>
+    </div>
+    <div id="excelForm" style="display:none; padding:20px;">
+        <div class="layui-tab-item layui-show">
+            <div class="layui-form-item">
+                <label class="layui-form-label">模板下载</label>
+                <div class="layui-form-mid layui-word-aux" id="excelTemp">
+                </div>
+            </div>
+            <div class="layui-form-item">
+                <label class="layui-form-label">excel文件</label>
+                <div class="layui-form-mid layui-word-aux">
+                    <div class="layui-upload">
+                        <input type="file" id="ExcelFile" name="ExcelFile" value="">
+                    </div>
+                    <div class="mt10" id="ExcelFileList">
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item ml10">
+            <div class="layui-input-block">
+                <button type="button" class="layui-btn" onclick="ConfirmImport()">立即导入</button>
+            </div>
+        </div>
+    </div>
+
+    <script src="/layuiadmin/layui/layui.js"></script>
+    <script src="/layuiadmin/modules_main/ToChargeByStage_Admin.js?r=@DateTime.Now.ToString("yyyyMMddHHmmss")"></script>
+    <script>
+
+    </script>
+</body>
+
+</html>

+ 1 - 0
Config/MysqlConn.cs

@@ -8,6 +8,7 @@ namespace MySystem
     public class MysqlConn
     {
         public static string connstr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
+        public static string SqlConnStr = ConfigurationManager.AppSettings["SqlConnStr"].ToString();
 
     }
 }

+ 4 - 0
Startup.cs

@@ -141,6 +141,10 @@ namespace MySystem
             ExcelHelper.Instance.Start();
             OpExcelHelper.Instance.Start();
             SycnUserMachineCountHelper.Instance.Start(); //重置创客机具数量
+
+
+            // InstallmentDeductionService.Instance.Start();//每月20号执行分期扣费
+            // TimeOutPosChargeService.Instance.StartDoChargeAmount();//每天执行预扣款
         }
 
 

二进制
wwwroot/.DS_Store


二进制
wwwroot/layuiadmin/.DS_Store


+ 409 - 0
wwwroot/layuiadmin/modules_main/ToChargeBackRecordSub_Admin.js

@@ -0,0 +1,409 @@
+var ExcelData, ExcelKind;
+function ConfirmImport() {
+    $.ajax({
+        type: "POST",
+        url: "/Admin/ToChargeBackRecordSub/Import?r=" + Math.random(1),
+        data: "ExcelData=" + encodeURIComponent(JSON.stringify(ExcelData)),
+        dataType: "text",
+        success: function (data) {
+            if (data == "success") {
+                layer.msg("导入成功", { time: 2000 }, function () {
+                    window.location.reload();
+                });
+            } else {
+                layer.msg(data);
+            }
+        }
+    });
+}
+
+var excel;
+layui.config({
+    base: '/layuiadmin/' //静态资源所在路径
+}).extend({
+    myexcel: 'layui/lay/modules/excel',
+    index: 'lib/index' //主入口模块
+}).use(['index', 'table', 'excel', 'laydate'], function () {
+    var $ = layui.$
+        , form = layui.form
+        , table = layui.table;
+
+    //- 筛选条件-日期
+    var laydate = layui.laydate;
+    var layCreateDate = laydate.render({
+        elem: '#CreateDate',
+        type: 'date',
+        range: true,
+        trigger: 'click',
+        change: function (value, date, endDate) {
+            var op = true;
+            if (date.year == endDate.year && endDate.month - date.month <= 1) {
+                if (endDate.month - date.month == 1 && endDate.date > date.date) {
+                    op = false;
+                    layCreateDate.hint('日期范围请不要超过1个月');
+                    setTimeout(function () {
+                        $(".laydate-btns-confirm").addClass("laydate-disabled");
+                    }, 1);
+                }
+            } else {
+                op = false;
+                layCreateDate.hint('日期范围请不要超过1个月');
+                setTimeout(function () {
+                    $(".laydate-btns-confirm").addClass("laydate-disabled");
+                }, 1);
+            }
+            if (op) {
+                $('#CreateDate').val(value);
+            }
+        }
+    });
+
+
+    //excel导入
+    excel = layui.excel;
+    $('#ExcelFile').change(function (e) {
+        var files = e.target.files;
+        excel.importExcel(files, {}, function (data) {
+            ExcelData = data[0].sheet1;
+        });
+    });
+
+    //监听单元格编辑
+    table.on('edit(LAY-list-manage)', function (obj) {
+        var value = obj.value //得到修改后的值
+            , data = obj.data //得到所在行所有键值
+            , field = obj.field; //得到字段
+        if (field == "Sort") {
+            $.ajax({
+                type: "POST",
+                url: "/Admin/ToChargeBackRecordSub/Sort?r=" + Math.random(1),
+                data: "Id=" + data.Id + "&Sort=" + value,
+                dataType: "text",
+                success: function (data) {
+                }
+            });
+        }
+    });
+
+    //列表数据
+    table.render({
+        elem: '#LAY-list-manage'
+        , url: '/Admin/ToChargeBackRecordSub/IndexData' //模拟接口
+        , cols: [[
+            { type: 'checkbox', fixed: 'left' }
+            , { field: 'Id', fixed: 'left', title: 'ID', width: 80, sort: true, unresize: true }
+            , { field: 'CreateDate', width: 200, title: '创建时间', sort: true }
+            , { field: 'ChargeAmount', width: 200, title: '待扣金额', sort: true }
+            , { field: 'StartDate', width: 200, title: '扣款开始时间', sort: true }
+            , { field: 'TimeNumber', width: 200, title: '期数', sort: true }
+            , { field: 'OrderNo', width: 200, title: '分期单号', sort: true }
+            , { field: 'StatusName', width: 200, title: '状态', sort: true }
+
+            , { title: '操作', align: 'center', fixed: 'right', toolbar: '#table-list-tools' }
+        ]]
+        , where: {
+            ParentId: ParentId
+        }
+        , page: true
+        , limit: 30
+        , height: 'full-220'
+        , text: '对不起,加载出现异常!'
+        , done: function (res, curr, count) {
+            $(".layui-none").text("无数据");
+        }
+    });
+
+    //监听工具条
+    table.on('tool(LAY-list-manage)', function (obj) {
+        var data = obj.data;
+        if (obj.event === 'del') {
+            var index = layer.confirm('确定要删除吗?删除后不能恢复!', function (index) {
+                $.ajax({
+                    type: "POST",
+                    url: "/Admin/ToChargeBackRecordSub/Delete?r=" + Math.random(1),
+                    data: "Id=" + data.Id,
+                    dataType: "text",
+                    success: function (data) {
+                        if (data == "success") {
+                            obj.del();
+                            layer.close(index);
+                        } else {
+                            parent.layer.msg(data);
+                        }
+                    }
+                });
+            });
+        } else if (obj.event === 'edit') {
+            var tr = $(obj.tr);
+            var perContent = layer.open({
+                type: 2
+                , title: '待扣款明细-编辑'
+                , content: 'Edit?Id=' + data.Id + '&ParentId=' + ParentId + ''
+                , maxmin: true
+                , area: ['500px', '450px']
+                , btn: ['确定', '取消']
+                , yes: function (index, layero) {
+                    var iframeWindow = window['layui-layer-iframe' + index]
+                        , submitID = 'LAY-list-front-submit'
+                        , submit = layero.find('iframe').contents().find('#' + submitID);
+
+                    setTimeout(function () {
+                        layero.find('iframe').contents().find('.layui-tab-item').each(function (i) {
+                            var errObj = $(this).find('.layui-form-danger');
+                            if (errObj.length > 0) {
+                                iframeWindow.element.tabChange('mytabbar', String(i + 1));
+                                submit.click();
+                            }
+                        });
+                    }, 300);
+
+
+
+
+
+
+                    //监听提交
+                    iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
+                        var field = data.field; //获取提交的字段
+                        var userdata = "";
+                        for (var prop in field) {
+                            userdata += prop + "=" + encodeURIComponent(field[prop]) + "&";
+                        }
+                        //提交 Ajax 成功后,静态更新表格中的数据
+                        //$.ajax({});
+
+                        $.ajax({
+                            type: "POST",
+                            url: "/Admin/ToChargeBackRecordSub/Edit?r=" + Math.random(1),
+                            data: userdata,
+                            dataType: "text",
+                            success: function (data) {
+                                layer.close(index); //关闭弹层
+                                if (data == "success") {
+                                    table.reload('LAY-list-manage'); //数据刷新
+                                } else {
+                                    layer.msg(data);
+                                }
+                            }
+                        });
+                    });
+
+                    submit.trigger('click');
+                }
+                , success: function (layero, index) {
+
+                }
+            });
+            layer.full(perContent);
+        }
+    });
+
+
+    //监听搜索
+    form.on('submit(LAY-list-front-search)', function (data) {
+        var field = data.field;
+
+        //执行重载
+        table.reload('LAY-list-manage', {
+            where: field,
+            page: {
+                curr: 1
+            }
+        });
+    });
+    form.on('submit(LAY-list-front-searchall)', function (data) {
+        table.reload('LAY-list-manage', {
+            where: null,
+            page: {
+                curr: 1
+            }
+        });
+    });
+
+    //事件
+    var active = {
+        batchdel: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要删除的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要删除吗?删除后不能恢复!', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeBackRecordSub/Delete?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+        , add: function () {
+            var perContent = layer.open({
+                type: 2
+                , title: '待扣款明细-添加'
+                , content: 'Add?ParentId=' + ParentId + ''
+                , maxmin: true
+                , area: ['500px', '450px']
+                , btn: ['确定', '取消']
+                , yes: function (index, layero) {
+                    var iframeWindow = window['layui-layer-iframe' + index]
+                        , submitID = 'LAY-list-front-submit'
+                        , submit = layero.find('iframe').contents().find('#' + submitID);
+
+                    setTimeout(function () {
+                        layero.find('iframe').contents().find('.layui-tab-item').each(function (i) {
+                            var errObj = $(this).find('.layui-form-danger');
+                            if (errObj.length > 0) {
+                                iframeWindow.element.tabChange('mytabbar', String(i + 1));
+                                submit.click();
+                            }
+                        });
+                    }, 300);
+
+
+
+
+
+
+                    //监听提交
+                    iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
+                        var field = data.field; //获取提交的字段
+                        var userdata = "";
+                        for (var prop in field) {
+                            userdata += prop + "=" + encodeURIComponent(field[prop]) + "&";
+                        }
+                        //提交 Ajax 成功后,静态更新表格中的数据
+                        //$.ajax({});
+
+                        $.ajax({
+                            type: "POST",
+                            url: "/Admin/ToChargeBackRecordSub/Add?r=" + Math.random(1),
+                            data: userdata,
+                            dataType: "text",
+                            success: function (data) {
+                                layer.close(index); //关闭弹层
+                                if (data == "success") {
+                                    table.reload('LAY-list-manage'); //数据刷新
+                                } else {
+                                    layer.msg(data);
+                                }
+                            }
+                        });
+                    });
+
+                    submit.trigger('click');
+                }
+            });
+            layer.full(perContent);
+        }
+        , ImportData: function () {
+            ExcelKind = 1;
+            layer.open({
+                type: 1,
+                title: '导入',
+                maxmin: false,
+                area: ['460px', '280px'],
+                content: $('#excelForm'),
+                cancel: function () {
+                }
+            });
+            $("#excelTemp").html('<a href="/excelfile/模板文件.xlsx">点击下载模板文件</a>');
+        }
+        , ExportExcel: function () {
+            var userdata = '';
+            $(".layuiadmin-card-header-auto input").each(function (i) {
+                userdata += $(this).attr('name') + '=' + encodeURIComponent($(this).val()) + '&';
+            });
+            $(".layuiadmin-card-header-auto select").each(function (i) {
+                userdata += $(this).attr('name') + '=' + encodeURIComponent($(this).val()) + '&';
+            });
+            $.ajax({
+                type: "GET",
+                url: "/Admin/ToChargeBackRecordSub/ExportExcel?r=" + Math.random(1),
+                data: userdata,
+                dataType: "json",
+                success: function (data) {
+                    data.Obj.unshift(data.Fields);
+                    excel.exportExcel(data.Obj, data.Info, 'xlsx');
+                }
+            });
+        }
+        , Open: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要开启的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要开启吗?', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeBackRecordSub/Open?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+        , Close: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要关闭的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要关闭吗?', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeBackRecordSub/Close?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+    };
+
+    $('.layui-btn').on('click', function () {
+        var type = $(this).data('type');
+        active[type] ? active[type].call(this) : '';
+    });
+});

+ 83 - 8
wwwroot/layuiadmin/modules_main/ToChargeBackRecord_Admin.js

@@ -1,4 +1,29 @@
 var ExcelData, ExcelKind;
+//导入预扣信息
+function ConfirmChargeImport() {
+    $.ajax({
+        type: "POST",
+        url: "/Admin/ToChargeBackRecord/ChargeImport?r=" + Math.random(1),
+        data: "ExcelData=" + encodeURIComponent(JSON.stringify(ExcelData)),
+        dataType: "text",
+        success: function (data) {
+            if (data == "success") {
+                layer.msg("导入成功", { time: 2000 }, function () {
+                    window.location.reload();
+                });
+            } else if (data.indexOf("Warning") == 0) {
+                var datalist = data.split('|');
+                console.log(datalist);
+                layer.alert(datalist[1], { time: 20000 }, function () {
+                    window.location.reload();
+                });
+            } else {
+                layer.msg(data);
+            }
+        }
+    });
+}
+
 //机具扣款退还
 function ConfirmImport() {
     $.ajax({
@@ -95,7 +120,7 @@ layui.config({
     $('#ExcelFile').change(function (e) {
         var files = e.target.files;
         excel.importExcel(files, {}, function (data) {
-            ExcelData = data[0].sheet1;
+            ExcelData = data[0].Sheet1;
         });
     });
 
@@ -123,16 +148,19 @@ layui.config({
         , cols: [[
             { type: 'checkbox', fixed: 'left' }
             , { field: 'Id', fixed: 'left', title: 'ID', width: 80, sort: true, unresize: true }
-            , { field: 'UserIdMakerCode', width: 200, title: '创客创客编号', sort: true }
+            , { field: 'UserIdMakerCode', width: 200, title: '创客编号', sort: true }
             , { field: 'UserIdRealName', width: 200, title: '创客真实姓名', sort: true }
+            , { field: 'UserIdMobile', width: 200, title: '手机号', sort: true }
             , { field: 'CreateDate', width: 200, title: '创建时间', sort: true }
-            , { field: 'ChargeAmount', width: 200, title: '待扣金额', sort: true }
-            , { field: 'ChargeType', width: 200, title: '待扣类型', sort: true }
-            , { field: 'Status', width: 200, title: '扣款状态', sort: true }
+            , { field: 'ChargeAmount', width: 200, title: '扣款金额', sort: true }
+            , { field: 'ChargeTypeName', width: 200, title: '扣款类型', sort: true }
+            , { field: 'UpdateDate', width: 200, title: '扣款时间', sort: true }
+            , { field: 'StatusName', width: 200, title: '扣款状态', sort: true }
             , { field: 'Remark', width: 200, title: '机具Sn', sort: true }
+            , { field: 'SeoDescription', width: 200, title: '备注', sort: true }
+            , { field: 'SeoTitle', width: 200, title: '操作人', sort: true }
 
-            , { field: 'Sort', fixed: 'right', title: '排序', width: 80, edit: 'text' }
-            , { title: '操作', align: 'center', fixed: 'right', toolbar: '#table-list-tools' }
+            , { title: '操作', width: 400, align: 'center', fixed: 'right', toolbar: '#table-list-tools' }
         ]]
         , where: {
 
@@ -166,7 +194,41 @@ layui.config({
                     }
                 });
             });
-        } else if (obj.event === 'edit') {
+        }else if (obj.event === 'Break') {
+            var index = layer.confirm('确定要暂停扣款吗?', function (index) {
+                $.ajax({
+                    type: "POST",
+                    url: "/Admin/ToChargeBackRecord/Break?r=" + Math.random(1),
+                    data: "Id=" + data.Id,
+                    dataType: "text",
+                    success: function (data) {
+                        if (data == "success") {
+                            layer.close(index);
+                            table.reload('LAY-list-manage'); //数据刷新
+                        } else {
+                            parent.layer.msg(data);
+                        }
+                    }
+                });
+            });
+        }else if (obj.event === 'Start') {
+            var index = layer.confirm('确定要恢复扣款吗?', function (index) {
+                $.ajax({
+                    type: "POST",
+                    url: "/Admin/ToChargeBackRecord/Start?r=" + Math.random(1),
+                    data: "Id=" + data.Id,
+                    dataType: "text",
+                    success: function (data) {
+                        if (data == "success") {
+                            layer.close(index);
+                            table.reload('LAY-list-manage'); //数据刷新
+                        } else {
+                            parent.layer.msg(data);
+                        }
+                    }
+                });
+            });
+        }else if (obj.event === 'edit') {
             var tr = $(obj.tr);
             var perContent = layer.open({
                 type: 2
@@ -343,6 +405,19 @@ layui.config({
             });
             layer.full(perContent);
         }
+        , ChargeImport: function () {
+            ExcelKind = 1;
+            layer.open({
+                type: 1,
+                title: '导入',
+                maxmin: false,
+                area: ['460px', '280px'],
+                content: $('#excelForm'),
+                cancel: function () {
+                }
+            });
+            $("#excelTemp").html('<a href="/users/预扣款模版.xlsx">点击下载预扣款模版文件</a>');
+        }
         , ImportData: function () {
             ExcelKind = 1;
             layer.open({

+ 436 - 0
wwwroot/layuiadmin/modules_main/ToChargeByStage_Admin.js

@@ -0,0 +1,436 @@
+var ExcelData, ExcelKind;
+var clickflag = 0;
+function ConfirmImport() {
+    $.ajax({
+        type: "POST",
+        url: "/Admin/ToChargeByStage/Import?r=" + Math.random(1),
+        data: "ExcelData=" + encodeURIComponent(JSON.stringify(ExcelData)),
+        dataType: "text",
+        success: function (data) {
+            if (data == "success") {
+                layer.msg("导入成功", { time: 2000 }, function () {
+                    window.location.reload();
+                });
+            } else {
+                layer.msg(data);
+            }
+        }
+    });
+}
+
+var excel;
+layui.config({
+    base: '/layuiadmin/' //静态资源所在路径
+}).extend({
+    myexcel: 'layui/lay/modules/excel',
+    index: 'lib/index' //主入口模块
+}).use(['index', 'table', 'excel', 'laydate'], function () {
+    var $ = layui.$
+        , form = layui.form
+        , table = layui.table;
+
+    //- 筛选条件-日期
+    var laydate = layui.laydate;
+    var layCreateDate = laydate.render({
+        elem: '#CreateDate',
+        type: 'date',
+        range: true,
+        trigger: 'click',
+        change: function (value, date, endDate) {
+            var op = true;
+            if (date.year == endDate.year && endDate.month - date.month <= 1) {
+                if (endDate.month - date.month == 1 && endDate.date > date.date) {
+                    op = false;
+                    layCreateDate.hint('日期范围请不要超过1个月');
+                    setTimeout(function () {
+                        $(".laydate-btns-confirm").addClass("laydate-disabled");
+                    }, 1);
+                }
+            } else {
+                op = false;
+                layCreateDate.hint('日期范围请不要超过1个月');
+                setTimeout(function () {
+                    $(".laydate-btns-confirm").addClass("laydate-disabled");
+                }, 1);
+            }
+            if (op) {
+                $('#CreateDate').val(value);
+            }
+        }
+    });
+
+
+    //excel导入
+    excel = layui.excel;
+    $('#ExcelFile').change(function (e) {
+        var files = e.target.files;
+        excel.importExcel(files, {}, function (data) {
+            ExcelData = data[0].sheet1;
+        });
+    });
+
+    //监听单元格编辑
+    table.on('edit(LAY-list-manage)', function (obj) {
+        var value = obj.value //得到修改后的值
+            , data = obj.data //得到所在行所有键值
+            , field = obj.field; //得到字段
+        if (field == "Sort") {
+            $.ajax({
+                type: "POST",
+                url: "/Admin/ToChargeByStage/Sort?r=" + Math.random(1),
+                data: "Id=" + data.Id + "&Sort=" + value,
+                dataType: "text",
+                success: function (data) {
+                }
+            });
+        }
+    });
+
+    //列表数据
+    table.render({
+        elem: '#LAY-list-manage'
+        , url: '/Admin/ToChargeByStage/IndexData' //模拟接口
+        , cols: [[
+            { type: 'checkbox', fixed: 'left' }
+            , { field: 'Id', fixed: 'left', title: 'ID', width: 80, sort: true, unresize: true }
+            , { field: 'CreateDate', width: 200, title: '创建时间', sort: true }
+            , { field: 'StatusName', width: 200, title: '扣款状态', sort: true }
+            , { field: 'MakerCode', width: 200, title: '创客编号', sort: true }
+            , { field: 'MakerName', width: 200, title: '创客姓名', sort: true }
+            , { field: 'MakerMobile', width: 200, title: '创客手机号', sort: true }
+            , { field: 'TimeNumber', width: 200, title: '期数', sort: true }
+            , { field: 'TotalAmount', width: 200, title: '扣款总金额', sort: true }
+            , { field: 'ChargeAmount', width: 200, title: '已扣金额', sort: true }
+            , { field: 'StartDate', width: 200, title: '扣款开始时间', sort: true }
+            , { field: 'Remark', width: 200, title: '备注', sort: true }
+            , { field: 'SeoKeyword', width: 200, title: '分期单号', sort: true }
+            , { field: 'SeoTitle', width: 200, title: '操作人', sort: true }
+
+            , { title: '操作', width: 300, align: 'center', fixed: 'right', toolbar: '#table-list-tools' }
+        ]]
+        , where: {
+
+        }
+        , page: true
+        , limit: 30
+        , height: 'full-220'
+        , text: '对不起,加载出现异常!'
+        , done: function (res, curr, count) {
+            $(".layui-none").text("无数据");
+        }
+    });
+
+    //监听工具条
+    table.on('tool(LAY-list-manage)', function (obj) {
+        var data = obj.data;
+        if (obj.event === 'del') {
+            var index = layer.confirm('确定要删除吗?删除后不能恢复!', function (index) {
+                $.ajax({
+                    type: "POST",
+                    url: "/Admin/ToChargeByStage/Delete?r=" + Math.random(1),
+                    data: "Id=" + data.Id,
+                    dataType: "text",
+                    success: function (data) {
+                        if (data == "success") {
+                            obj.del();
+                            layer.close(index);
+                        } else {
+                            parent.layer.msg(data);
+                        }
+                    }
+                });
+            });
+        } else if (obj.event === 'edit') {
+            var tr = $(obj.tr);
+            var perContent = layer.open({
+                type: 2
+                , title: '分期扣款信息-编辑'
+                , content: 'Edit?Id=' + data.Id + ''
+                , maxmin: true
+                , area: ['500px', '450px']
+                , btn: ['确定', '取消']
+                , yes: function (index, layero) {
+                    var iframeWindow = window['layui-layer-iframe' + index]
+                        , submitID = 'LAY-list-front-submit'
+                        , submit = layero.find('iframe').contents().find('#' + submitID);
+
+                    setTimeout(function () {
+                        layero.find('iframe').contents().find('.layui-tab-item').each(function (i) {
+                            var errObj = $(this).find('.layui-form-danger');
+                            if (errObj.length > 0) {
+                                iframeWindow.element.tabChange('mytabbar', String(i + 1));
+                                submit.click();
+                            }
+                        });
+                    }, 300);
+
+
+
+
+
+
+                    //监听提交
+                    iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
+                        var field = data.field; //获取提交的字段
+                        var userdata = "";
+                        for (var prop in field) {
+                            userdata += prop + "=" + encodeURIComponent(field[prop]) + "&";
+                        }
+                        //提交 Ajax 成功后,静态更新表格中的数据
+                        //$.ajax({});
+
+                        $.ajax({
+                            type: "POST",
+                            url: "/Admin/ToChargeByStage/Edit?r=" + Math.random(1),
+                            data: userdata,
+                            dataType: "text",
+                            success: function (data) {
+                                layer.close(index); //关闭弹层
+                                if (data == "success") {
+                                    table.reload('LAY-list-manage'); //数据刷新
+                                } else {
+                                    layer.msg(data);
+                                }
+                            }
+                        });
+                    });
+
+                    submit.trigger('click');
+                }
+                , success: function (layero, index) {
+
+                }
+            });
+            layer.full(perContent);
+        }
+    });
+
+
+    //监听搜索
+    form.on('submit(LAY-list-front-search)', function (data) {
+        var field = data.field;
+
+        //执行重载
+        table.reload('LAY-list-manage', {
+            where: field,
+            page: {
+                curr: 1
+            }
+        });
+    });
+    form.on('submit(LAY-list-front-searchall)', function (data) {
+        table.reload('LAY-list-manage', {
+            where: null,
+            page: {
+                curr: 1
+            }
+        });
+    });
+
+    //事件
+    var active = {
+        batchdel: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要删除的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要删除吗?删除后不能恢复!', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeByStage/Delete?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+        , add: function () {
+            var perContent = layer.open({
+                type: 2
+                , title: '分期扣款信息-添加'
+                , content: 'Add'
+                , maxmin: true
+                , area: ['500px', '450px']
+                , btn: ['确定', '取消']
+                , yes: function (index, layero) {
+                    var iframeWindow = window['layui-layer-iframe' + index]
+                        , submitID = 'LAY-list-front-submit'
+                        , submit = layero.find('iframe').contents().find('#' + submitID);
+
+                    setTimeout(function () {
+                        layero.find('iframe').contents().find('.layui-tab-item').each(function (i) {
+                            var errObj = $(this).find('.layui-form-danger');
+                            if (errObj.length > 0) {
+                                iframeWindow.element.tabChange('mytabbar', String(i + 1));
+                                submit.click();
+                            }
+                        });
+                    }, 300);
+                    var times = layero.find('iframe').contents().find('input[type=number][name=TimeNumber]').val();
+                    var ChargeAmounts = '';
+                    var StartDates = '';
+                    var num = 0;
+                    for (var i = 0; i < times; i++) {
+                        num += 1;
+                        ChargeAmounts += layero.find('iframe').contents().find('#ChargeAmounts' + num).val() + ',';
+                        StartDates += layero.find('iframe').contents().find('#StartDates' + num).val() + ',';
+                        // layero.find('iframe').contents().find('#ChargeAmounts' + num).each(function (i) {
+                        //     ChargeAmounts += $(this).val() + ','
+                        // });
+                        // layero.find('iframe').contents().find('#StartDates' + num).each(function (i) {
+                        //     StartDates += $(this).val() + ','
+                        // });
+                    }
+                    console.log(times);
+                    console.log(ChargeAmounts);
+                    console.log(StartDates);
+
+                    //监听提交
+                    iframeWindow.layui.form.on('submit(' + submitID + ')', function (data) {
+                        if (clickflag == 0) {
+                            clickflag = 1;
+                            var field = data.field; //获取提交的字段
+                            field.ChargeAmounts = ChargeAmounts;
+                            field.StartDates = StartDates;
+                            var userdata = "";
+                            for (var prop in field) {
+                                userdata += prop + "=" + encodeURIComponent(field[prop]) + "&";
+                            }
+                            userdata += "StartDates=" + encodeURIComponent(StartDates) + "&ChargeAmounts=" + encodeURIComponent(ChargeAmounts) + "&";
+                            //提交 Ajax 成功后,静态更新表格中的数据
+                            //$.ajax({});
+
+                            $.ajax({
+                                type: "POST",
+                                url: "/Admin/ToChargeByStage/Add?r=" + Math.random(1),
+                                data: userdata,
+                                dataType: "text",
+                                success: function (data) {
+                                    clickflag = 0;
+                                    layer.close(index); //关闭弹层
+                                    if (data == "success") {
+                                        table.reload('LAY-list-manage'); //数据刷新
+                                    } else {
+                                        layer.msg(data);
+                                    }
+                                }
+                            });
+                        }
+                    });
+
+                    submit.trigger('click');
+                }
+            });
+            layer.full(perContent);
+        }
+        , ImportData: function () {
+            ExcelKind = 1;
+            layer.open({
+                type: 1,
+                title: '导入',
+                maxmin: false,
+                area: ['460px', '280px'],
+                content: $('#excelForm'),
+                cancel: function () {
+                }
+            });
+            $("#excelTemp").html('<a href="/excelfile/模板文件.xlsx">点击下载模板文件</a>');
+        }
+        , ExportExcel: function () {
+            var userdata = '';
+            $(".layuiadmin-card-header-auto input").each(function (i) {
+                userdata += $(this).attr('name') + '=' + encodeURIComponent($(this).val()) + '&';
+            });
+            $(".layuiadmin-card-header-auto select").each(function (i) {
+                userdata += $(this).attr('name') + '=' + encodeURIComponent($(this).val()) + '&';
+            });
+            $.ajax({
+                type: "GET",
+                url: "/Admin/ToChargeByStage/ExportExcel?r=" + Math.random(1),
+                data: userdata,
+                dataType: "json",
+                success: function (data) {
+                    data.Obj.unshift(data.Fields);
+                    excel.exportExcel(data.Obj, data.Info, 'xlsx');
+                }
+            });
+        }
+        , Open: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要开启的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要开启吗?', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeByStage/Open?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+        , Close: function () {
+            var checkStatus = table.checkStatus('LAY-list-manage')
+                , data = checkStatus.data; //得到选中的数据
+            if (data.length < 1) {
+                parent.layer.msg("请选择要关闭的项");
+            } else {
+                var ids = "";
+                $.each(data, function (index, value) {
+                    ids += data[index].Id + ",";
+                });
+                ids = ids.substring(0, ids.length - 1);
+                var index = layer.confirm('确定要关闭吗?', function (index) {
+                    $.ajax({
+                        type: "POST",
+                        url: "/Admin/ToChargeByStage/Close?r=" + Math.random(1),
+                        data: "Id=" + ids,
+                        dataType: "text",
+                        success: function (data) {
+                            layer.close(index);
+                            if (data == "success") {
+                                table.reload('LAY-list-manage');
+                            } else {
+                                layer.msg(data);
+                            }
+                        }
+                    });
+                });
+            }
+        }
+    };
+
+    $('.layui-btn').on('click', function () {
+        var type = $(this).data('type');
+        active[type] ? active[type].call(this) : '';
+    });
+});

二进制
wwwroot/users/预扣款模版.xlsx