From 0f5218bb8ed4ad8fa9b8b2f089efd624dc6e9f07 Mon Sep 17 00:00:00 2001
From: username@email.com <yzy2002yzy@163.com>
Date: 星期一, 21 六月 2021 08:56:25 +0800
Subject: [PATCH] Merge branch 'master' of http://47.108.235.38:8080/r/zhengcaioa

---
 zhengcaioa/Services/SimService.cs                                          |  337 ++++
 zhengcaioa/zhengcaioa/Views/Shared/_Layout.cshtml                          |    9 
 用户表更新.sql                                                                  |   68 
 zhengcaioa/zhengcaioa/Views/SimCost/Index.cshtml                           |  106 +
 zhengcaioa/zhengcaioa/Views/User/Edit.cshtml                               |    2 
 zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.css                       | 1140 +++++++++++++
 zhengcaioa/zhengcaioa/Views/Area/Index.cshtml                              |    5 
 zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs        |    1 
 zhengcaioa/zhengcaioa/Views/Sim/Edit.cshtml                                |  219 ++
 zhengcaioa/zhengcaioa/Startup.cs                                           |    5 
 zhengcaioa/zhengcaioa/zhengcaioa.csproj.user                               |    2 
 zhengcaioa/Model/Sim.cs                                                    |  154 +
 zhengcaioa/Model/zhengcaioaContext.cs                                      |    6 
 zhengcaioa/DTO/SimDTO.cs                                                   |   28 
 zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.less                      |  943 +++++++++++
 zhengcaioa/IServices/ISimService.cs                                        |   27 
 zhengcaioa/zhengcaioa/wwwroot/js/jquery-confirm.js                         | 1379 ++++++++++++++++
 zhengcaioa/zhengcaioa/Controllers/admin/SimController.cs                   |  125 +
 zhengcaioa/zhengcaioa/Controllers/admin/SimCostController.cs               |  134 +
 zhengcaioa/zhengcaioa/Properties/PublishProfiles/FolderProfile.pubxml.user |    1 
 zhengcaioa/zhengcaioa/Views/Sim/Index.cshtml                               |   98 +
 zhengcaioa/zhengcaioa/Views/SimCost/Edit.cshtml                            |  200 ++
 22 files changed, 4,975 insertions(+), 14 deletions(-)

diff --git a/zhengcaioa/DTO/SimDTO.cs b/zhengcaioa/DTO/SimDTO.cs
new file mode 100644
index 0000000..524c0f3
--- /dev/null
+++ b/zhengcaioa/DTO/SimDTO.cs
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DTO
+{
+    /// <summary>
+    /// 鏌ヨ鏉′欢
+    /// </summary>
+    public class SimBindDTOSearch : SearchEntity
+    {
+        public string simcard { get; set; }
+
+        public string username { get; set; }
+
+    }
+
+    /// <summary>
+    /// 鏌ヨ鏉′欢
+    /// </summary>
+    public class SimCostDTOSearch : SearchEntity
+    {
+        public string searchtime { get; set; }
+
+        public string searchsim { get; set; }
+
+    }
+}
diff --git a/zhengcaioa/IServices/ISimService.cs b/zhengcaioa/IServices/ISimService.cs
new file mode 100644
index 0000000..a5eaea0
--- /dev/null
+++ b/zhengcaioa/IServices/ISimService.cs
@@ -0,0 +1,27 @@
+锘縰sing DTO;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using zhengcaioa.Models;
+
+namespace IServices
+{
+    public interface ISimService
+    {
+        ResultEntity Save(SimBind sim);
+
+        SimBindView Get(string id);
+
+        ResultDataEntity<SimBindView> SearchByPaging(SimBindDTOSearch searchEntity);
+
+        ResultEntity UnBind(string ids,string user);
+
+        List<SimBindView> GetBindSim();
+
+        ResultEntity SaveCost(SimCost md);
+
+        SimCost GetSimCost(int id);
+
+        ResultDataEntity<SimCostView> SearchSimCostByPage(SimCostDTOSearch searchEntity);
+    }
+}
diff --git a/zhengcaioa/Model/Sim.cs b/zhengcaioa/Model/Sim.cs
new file mode 100644
index 0000000..7b98670
--- /dev/null
+++ b/zhengcaioa/Model/Sim.cs
@@ -0,0 +1,154 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Text;
+
+namespace zhengcaioa.Models
+{   
+    [Table("t_sim_bind")]
+    public class SimBind
+    {
+        [Key]
+        public int id { get; set; }
+
+        /// <summary>
+        /// 鍗″彿
+        /// </summary>
+        public string sim_id { get; set; }
+
+        /// <summary>
+        /// 鐢ㄦ埛
+        /// </summary>
+        public string user_id { get; set; }
+
+        /// <summary>
+        /// 灞炴��
+        /// </summary>
+        public string cardpro { get; set; }
+
+        public DateTime up_time { get; set; }
+
+        public string up_user { get; set; }
+    }
+
+    [Table("v_sim_bind")]
+    public class SimBindView
+    {
+        [Key]
+        public string Id { get; set; }
+
+        public string simcard { get; set; }
+
+        public string simstatus { get; set; }
+
+        public string userid { get; set; }
+
+        public string username { get; set; }
+
+        public string cardpro { get; set; }
+
+        [NotMapped]
+        public string cardproChs { get; set; } 
+
+        public DateTime? up_time { get; set; }
+    }
+
+    [Table("t_sim_cost")]
+    public class SimCost
+    {
+        [Key]
+        public int id { get; set; }
+
+        public string user_id { get; set; }
+        public string sim_id { get; set; }
+
+        public int bill_year { get; set; }
+        public int bill_month { get; set; }
+
+        /// <summary>
+        /// 鍙姤閲戦
+        /// </summary>
+        public decimal allow_amount { get; set; }
+        /// <summary>
+        /// 璐﹀崟閲戦
+        /// </summary>
+        public decimal bill_amount { get; set; }
+        /// <summary>
+        /// 宸紓閲戦
+        /// </summary>
+        public decimal amount { get; set; }
+        /// <summary>
+        /// 璁拌处鏃ユ湡
+        /// </summary>
+        public DateTime accounted_time { get; set; }
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public string status { get; set; }
+
+        public string sub_userid { get; set; }
+        public DateTime up_time { get; set; }
+        public string audit_userid { get; set; }
+        public DateTime? audit_time { get; set; }
+    }
+
+    [Table("v_sim_cost")]
+    public class SimCostView
+    {
+        [Key]
+        public int id { get; set; }
+
+        public string user_id { get; set; }
+
+        public string username { get; set; }
+
+        public string sim_id { get; set; }
+
+        public string simcard { get; set; }
+
+        public int bill_year { get; set; }
+        public int bill_month { get; set; }
+
+        /// <summary>
+        /// 鍙姤閲戦
+        /// </summary>
+        public decimal allow_amount { get; set; }
+
+        /// <summary>
+        /// 璐﹀崟閲戦
+        /// </summary>
+        public decimal bill_amount { get; set; }
+
+        public decimal amount { get; set; }
+
+        /// <summary>
+        /// 璁拌处鏃ユ湡
+        /// </summary>
+        public DateTime accounted_time { get; set; }
+
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        public string status { get; set; }
+
+        public DateTime up_time { get; set; }
+
+        [NotMapped]
+        public string accountMonth {
+            get
+            {
+                return bill_year + "-" + bill_month.ToString().PadLeft(2,'0');
+            }
+        }
+
+        [NotMapped]
+        public string statusChs
+        {
+            get
+            {
+                return status=="0"?"姝e父":"鍏宠处";
+            }
+        }
+    }
+}
diff --git a/zhengcaioa/Model/zhengcaioaContext.cs b/zhengcaioa/Model/zhengcaioaContext.cs
index be4dbef..09d641c 100644
--- a/zhengcaioa/Model/zhengcaioaContext.cs
+++ b/zhengcaioa/Model/zhengcaioaContext.cs
@@ -16,6 +16,12 @@
             : base(options)
         {
         }
+
+        public virtual DbSet<SimBind> SimBind { get; set; }
+        public virtual DbSet<SimBindView> SimBindView { get; set; }
+        public virtual DbSet<SimCost> SimCost { get; set; }
+        public virtual DbSet<SimCostView> SimCostView { get; set; }
+
         public virtual DbSet<AdmAskLeave> AdmAskLeaves { get; set; }
         public virtual DbSet<AdmAskLeaveOff> AdmAskLeaveOffs { get; set; }
         public virtual DbSet<AdmAttendance> AdmAttendances { get; set; }
diff --git a/zhengcaioa/Services/SimService.cs b/zhengcaioa/Services/SimService.cs
new file mode 100644
index 0000000..5278ed0
--- /dev/null
+++ b/zhengcaioa/Services/SimService.cs
@@ -0,0 +1,337 @@
+锘縰sing AutoMapper;
+using DTO;
+using IServices;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using zhengcaioa.Models;
+
+namespace Services
+{
+    public class SimService :ISimService
+    {
+        private readonly zhengcaioaContext _context;
+        private readonly IMapper _mapper;
+        public SimService(zhengcaioaContext context, IMapper mapper)
+        {
+            _context = context;
+            _mapper = mapper;
+        }
+
+        #region SIM 鍒嗛厤
+
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        /// <param name="md"></param>
+        /// <returns></returns>
+        public ResultEntity Save(SimBind md)
+        {
+            ResultEntity resultEntity = new ResultEntity();
+            try
+            {
+                var temp = _context.SimBind.Where(e => e.sim_id == md.sim_id).SingleOrDefault();
+                if(temp!=null)
+                {
+                    var users = _context.SimBind.Where(c => c.user_id == md.user_id).ToList();
+                    if(users!=null)
+                    {
+                        foreach(var item in users)
+                        {
+                            item.user_id = "";
+                            item.up_time = DateTime.Now;
+                            item.up_user = md.up_user;
+                        }
+                    }
+                    temp.cardpro = md.cardpro;
+                    temp.user_id = md.user_id;
+                    temp.up_user = md.up_user;
+                    temp.up_time = DateTime.Now;
+                }
+                else
+                {
+                    md.up_time = DateTime.Now;
+                    _context.SimBind.Add(md);
+                }               
+                _context.SaveChanges();
+                resultEntity.Result = true;
+            }
+            catch (Exception ex)
+            {
+                resultEntity.Result = false;
+                resultEntity.Message = "淇濆瓨澶辫触锛岃鑱旂郴绠$悊鍛�";
+                ex.Message.ToString();
+            }
+            return resultEntity;
+        }
+
+        /// <summary>
+        /// 瑙g粦
+        /// </summary>
+        /// <param name="ids"></param>
+        /// <returns></returns>
+        public ResultEntity UnBind(string ids,string user)
+        {
+            ResultEntity resultEntity = new ResultEntity();
+            try
+            {
+                var temp = _context.SimBind.Where(e =>ids.Contains(e.sim_id)).ToList();
+                if (temp != null)
+                {
+                    foreach (var item in temp)
+                    {
+                        item.user_id = "";
+                        item.up_time = DateTime.Now;
+                        item.up_user = user;
+                    }
+                }
+                _context.SaveChanges();
+                resultEntity.Result = true;
+            }
+            catch (Exception ex)
+            {
+                resultEntity.Result = false;
+                resultEntity.Message = "淇濆瓨澶辫触锛岃鑱旂郴绠$悊鍛�";
+                ex.Message.ToString();
+            }
+            return resultEntity;
+        }
+
+        /// <summary>
+        /// 缁戝畾淇℃伅鏌ヨ
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public SimBindView Get(string id)
+        {
+            var entity = _context.SimBindView.Where(c=>c.Id==id).SingleOrDefault();
+            if (entity == null)
+            {
+                entity = new SimBindView();
+            }
+            return entity;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍐呭
+        /// </summary>
+        /// <param name="searchEntity"></param>
+        /// <returns></returns>
+        public ResultDataEntity<SimBindView> SearchByPaging(SimBindDTOSearch searchEntity)
+        {
+            ResultDataEntity<SimBindView> data = new ResultDataEntity<SimBindView>();
+            try
+            {
+                var codedata= (from e in _context.SysCodes
+                 join c in _context.SysCodeDtls
+                 on e.Id equals c.CodeId
+                 where e.RecStatus == "A"
+                 && c.RecStatus == "A"
+                 && e.CodeTable == "t_sim_bind"
+                 && e.CodeField == "cardpro"
+                               select c).OrderBy(x => x.Sort).ToList();
+
+                var dt = _context.SimBindView.OrderBy(c => c.simcard).ToList();                
+                if(!string.IsNullOrEmpty(searchEntity.simcard))
+                {
+                    dt = dt.Where(c => c.simcard.Contains(searchEntity.simcard)).ToList();
+                }
+                if (!string.IsNullOrEmpty(searchEntity.username))
+                {
+                    dt = dt.Where(c => !string.IsNullOrEmpty(c.username) && c.username.Contains(searchEntity.username)).ToList();
+                }
+
+                if (searchEntity.totalrows == 0)
+                    searchEntity.totalrows = dt.Count();
+
+                var signinList = dt.Skip((searchEntity.page - 1) * searchEntity.rows).Take(searchEntity.rows).ToList();
+
+               signinList= signinList.Select(a=> new SimBindView()
+               {
+                   cardproChs = ToChs(a.cardpro, codedata),
+                   Id = a.Id,
+                   simcard = a.simcard,
+                   simstatus = a.simstatus,
+                   up_time = a.up_time,
+                   username = a.username
+               }).ToList();
+
+                data.LoadData(searchEntity, signinList);
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+            return data;
+        }
+
+        private string ToChs(string key,List<SysCodeDtl> list)
+        {
+            string str = "";
+            var item = list.Find(c => c.CodeSn == key);
+            if(item!=null)
+            {
+                str = item.Comments;
+            }
+            return str;
+        }
+
+        #endregion
+
+        #region 璐圭敤褰曞叆
+
+        /// <summary>
+        /// 鑾峰彇宸茬粦瀹氱殑鐢佃瘽鍗�
+        /// </summary>
+        /// <returns></returns>
+        public List<SimBindView> GetBindSim()
+        {
+            List<SimBindView> list = null;
+            try
+            {
+                list = _context.SimBindView.Where(c=>!string.IsNullOrEmpty(c.userid)).OrderBy(c => c.simcard).ToList();
+            }
+            catch (Exception er)
+            {
+                throw;
+            }
+            return list;
+        }
+
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        /// <param name="md"></param>
+        /// <returns></returns>
+        public ResultEntity SaveCost(SimCost md)
+        {
+            ResultEntity resultEntity = new ResultEntity();
+            try
+            {
+                var temp = _context.SimCost.Where(e => e.id == md.id).SingleOrDefault();
+                var tempBind = _context.SimBindView.Where(e => e.Id == md.sim_id).SingleOrDefault();                
+                if (temp != null && temp.status=="0")
+                {                    
+                    temp.bill_amount = md.bill_amount;
+                    temp.bill_month = md.accounted_time.Month;
+                    temp.bill_year = md.accounted_time.Year;
+                    temp.sub_userid = md.sub_userid;                    
+                    temp.up_time = DateTime.Now;
+                    if(tempBind!=null)
+                    {
+                        temp.allow_amount = decimal.Parse(tempBind.cardpro);
+                        temp.user_id = tempBind.userid;
+                        temp.amount = temp.allow_amount - temp.bill_amount > 0 ? 0 : temp.allow_amount - temp.bill_amount;
+                    }
+                }
+                else
+                {
+                    md.bill_month = md.accounted_time.Month;
+                    md.bill_year = md.accounted_time.Year;
+
+                    //褰撴湀閲嶅鍒ゆ柇
+                    var monthck = _context.SimCost.Where(c => c.sim_id == md.sim_id && c.bill_year == md.bill_year && c.bill_month == md.bill_month).Count();
+                    if(monthck>0)
+                    {
+                        resultEntity.Result = false;
+                        resultEntity.Message = string.Format("姝ょ數璇濆崱鍦╗{0}-{1}]鏈堝凡瀛樺湪璁板綍锛屼笉鑳介噸澶嶆坊鍔狅紱",md.bill_year,md.bill_month);
+                        return resultEntity;
+                    }
+                    else
+                    {
+                        md.up_time = DateTime.Now;
+                        md.status = "0";
+
+                        if (tempBind != null)
+                        {
+                            md.allow_amount = decimal.Parse(tempBind.cardpro);
+                            md.amount = md.allow_amount - md.bill_amount > 0 ? 0 : md.allow_amount - md.bill_amount;
+                            md.user_id = tempBind.userid;
+                        }
+                        _context.SimCost.Add(md);
+                    }                    
+                }
+                _context.SaveChanges();
+                resultEntity.Result = true;
+            }
+            catch (Exception ex)
+            {
+                resultEntity.Result = false;
+                resultEntity.Message = "淇濆瓨澶辫触锛岃鑱旂郴绠$悊鍛�";
+                ex.Message.ToString();
+            }
+            return resultEntity;
+        }
+
+        /// <summary>
+        /// 缁戝畾淇℃伅鏌ヨ
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public SimCost GetSimCost(int id)
+        {
+            var entity = _context.SimCost.Where(c => c.id == id).SingleOrDefault();
+            if (entity == null)
+            {
+                entity = new SimCost();
+            }
+            return entity;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鍐呭
+        /// </summary>
+        /// <param name="searchEntity"></param>
+        /// <returns></returns>
+        public ResultDataEntity<SimCostView> SearchSimCostByPage(SimCostDTOSearch searchEntity)
+        {
+            ResultDataEntity<SimCostView> data = new ResultDataEntity<SimCostView>();
+            try
+            {
+                var codedata = (from e in _context.SysCodes
+                                join c in _context.SysCodeDtls
+                                on e.Id equals c.CodeId
+                                where e.RecStatus == "A"
+                                && c.RecStatus == "A"
+                                && e.CodeTable == "t_sim_bind"
+                                && e.CodeField == "cardpro"
+                                select c).OrderBy(x => x.Sort).ToList();
+
+                var dt = _context.SimCostView.OrderByDescending(c => c.accounted_time).ToList();
+                if (!string.IsNullOrEmpty(searchEntity.searchtime))
+                {
+                    //dt = dt.Where(c => c.simcard.Contains(searchEntity.simcard)).ToList();
+                }
+                if (!string.IsNullOrEmpty(searchEntity.searchsim))
+                {
+                    dt = dt.Where(c => !string.IsNullOrEmpty(c.simcard) && c.simcard.Contains(searchEntity.searchsim)).ToList();
+                }
+
+                if (searchEntity.totalrows == 0)
+                    searchEntity.totalrows = dt.Count();
+
+                var signinList = dt.Skip((searchEntity.page - 1) * searchEntity.rows).Take(searchEntity.rows).ToList();
+
+                //signinList = signinList.Select(a => new SimBindView()
+                //{
+                //    cardproChs = ToChs(a.cardpro, codedata),
+                //    Id = a.Id,
+                //    simcard = a.simcard,
+                //    simstatus = a.simstatus,
+                //    up_time = a.up_time,
+                //    username = a.username
+                //}).ToList();
+
+                data.LoadData(searchEntity, signinList);
+            }
+            catch (Exception ex)
+            {
+                throw;
+            }
+            return data;
+        }
+
+        #endregion
+    }
+}
diff --git a/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs b/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
index 5b531dd..94534d1 100644
--- a/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
+++ b/zhengcaioa/zhengcaioa/Controllers/AdmManagement/SigninController.cs
@@ -116,7 +116,6 @@
         }
 
 
-
         [DllImport("Iphlpapi.dll")]
         private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
 
diff --git a/zhengcaioa/zhengcaioa/Controllers/admin/SimController.cs b/zhengcaioa/zhengcaioa/Controllers/admin/SimController.cs
new file mode 100644
index 0000000..adfd74c
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Controllers/admin/SimController.cs
@@ -0,0 +1,125 @@
+锘縰sing DTO;
+using IServices;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Transactions;
+using zhengcaioa.IService;
+using zhengcaioa.Models;
+
+namespace zhengcaioa.Controllers.admin
+{
+    [CheckLogin]
+    public class SimController : Controller
+    {
+        private readonly ILogger<SimController> _logger;
+        private readonly ILiaotianService _liaotianService;
+        private readonly IUserService _userService;
+        private readonly ISimService _simService;
+
+        public SimController(ILogger<SimController> logger, IUserService userService, ILiaotianService liaotianService,ISimService simService)
+        {
+            _logger = logger;
+            _liaotianService = liaotianService;
+            _userService = userService;
+            _simService = simService;
+        }
+
+        /// <summary>
+        /// 鍒楄〃椤�
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index()
+        {
+            List<ActionEntity> actionlist = new List<ActionEntity>();
+            ActionEntity actionEntity = new ActionEntity();
+            actionEntity.OpenType = 0;
+            actionEntity.ActionUrl = "";
+            actionEntity.ActionFun = "Search";
+            actionEntity.PageIco = "fa fa-search";
+            actionEntity.ActionName = "鏌ヨ";
+            actionlist.Add(actionEntity);
+
+            ActionEntity actionEntity1 = new ActionEntity();
+            actionEntity1.OpenType = 0;
+            actionEntity1.ActionUrl = "";
+            actionEntity1.ActionFun = "UnBind";
+            actionEntity1.PageIco = "fa fa-remove";
+            actionEntity1.ActionName = "鎵归噺瑙i櫎缁戝畾";
+            actionlist.Add(actionEntity1);
+
+            ViewData["ActionInfo"] = actionlist;
+            return View();
+        }
+
+        /// <summary>
+        /// 鍒楄〃鍐呭
+        /// </summary>
+        /// <param name="search"></param>
+        /// <returns></returns>
+        public IActionResult GetList(SimBindDTOSearch search)
+        {            
+            return new JsonResult(_simService.SearchByPaging(search));
+        }
+
+        /// <summary>
+        /// 缂栬緫椤�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public IActionResult Edit(string id)
+        {
+            ViewBag.CardPro = _liaotianService.GetSYScode("t_sim_bind", "cardpro");
+            ViewData["users"] = _userService.GetList();
+            SimBindView dto = new SimBindView();
+            if (!string.IsNullOrEmpty(id))
+            {
+                dto = _simService.Get(id);          
+            }
+            ViewData.Model = dto;
+            return View();
+        }
+
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult SaveSimBind(SimBind data)
+        {
+            var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
+            ResultEntity resultEntity = new ResultEntity();
+            using (TransactionScope scope = new TransactionScope())
+            {
+                data.up_user = curentuser.Id;
+                resultEntity = _simService.Save(data);
+                scope.Complete();
+            }
+            return new JsonResult(resultEntity);
+        }
+
+        /// <summary>
+        /// 瑙g粦
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public JsonResult UnBindSim(string id)
+        {
+            var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
+            ResultEntity resultEntity = new ResultEntity();
+            using (TransactionScope scope = new TransactionScope())
+            {
+                resultEntity = _simService.UnBind(id,curentuser.Id);
+                scope.Complete();
+            }
+            return new JsonResult(resultEntity);
+        }
+    }
+}
diff --git a/zhengcaioa/zhengcaioa/Controllers/admin/SimCostController.cs b/zhengcaioa/zhengcaioa/Controllers/admin/SimCostController.cs
new file mode 100644
index 0000000..507c37a
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Controllers/admin/SimCostController.cs
@@ -0,0 +1,134 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Transactions;
+using DTO;
+using IServices;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+using zhengcaioa.IService;
+using zhengcaioa.Models;
+
+namespace zhengcaioa.Controllers.admin
+{
+    [CheckLogin]
+    public class SimCostController : Controller
+    {
+        private readonly ILogger<SimController> _logger;
+        private readonly ILiaotianService _liaotianService;
+        private readonly IUserService _userService;
+        private readonly ISimService _simService;
+
+        public SimCostController(ILogger<SimController> logger, IUserService userService, ILiaotianService liaotianService, ISimService simService)
+        {
+            _logger = logger;
+            _liaotianService = liaotianService;
+            _userService = userService;
+            _simService = simService;
+        }
+
+        /// <summary>
+        /// 鍒楄〃椤�
+        /// </summary>
+        /// <returns></returns>
+        public IActionResult Index()
+        {
+            List<ActionEntity> actionlist = new List<ActionEntity>();
+            ActionEntity actionEntity = new ActionEntity();
+            actionEntity.OpenType = 0;
+            actionEntity.ActionUrl = "";
+            actionEntity.ActionFun = "Search";
+            actionEntity.PageIco = "fa fa-search";
+            actionEntity.ActionName = "鏌ヨ";
+            actionlist.Add(actionEntity);
+
+            ActionEntity actionEntity1 = new ActionEntity();
+            actionEntity1.OpenType = 0;
+            actionEntity1.ActionUrl = "";
+            actionEntity1.ActionFun = "Add";
+            actionEntity1.PageIco = "fa fa-plus";
+            actionEntity1.ActionName = "鏂板";
+            actionlist.Add(actionEntity1);
+
+
+            //ActionEntity actionEntity4 = new ActionEntity();
+            //actionEntity4.OpenType = 0;
+            //actionEntity4.ActionUrl = "";
+            //actionEntity4.ActionFun = "UnBind";
+            //actionEntity4.PageIco = "fa fa-remove";
+            //actionEntity4.ActionName = "鎵归噺鍒犻櫎";
+            //actionlist.Add(actionEntity4);
+
+            ViewData["ActionInfo"] = actionlist;
+            return View();
+        }
+
+        /// <summary>
+        /// 鍒楄〃鍐呭
+        /// </summary>
+        /// <param name="search"></param>
+        /// <returns></returns>
+        public IActionResult GetList(SimCostDTOSearch search)
+        {
+            return new JsonResult(_simService.SearchSimCostByPage(search));
+        }
+
+        /// <summary>
+        /// 缂栬緫椤�
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public IActionResult Edit(string id=null)
+        {
+            ViewBag.SimCard = _simService.GetBindSim();            
+            SimCost dto = new SimCost();
+            dto.accounted_time = DateTime.Now;
+            if (!string.IsNullOrEmpty(id))
+            {
+                dto = _simService.GetSimCost(int.Parse(id));
+            }
+            ViewData.Model = dto;
+            return View();
+        }
+
+        /// <summary>
+        /// 淇濆瓨
+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult SaveSimCost(SimCost data)
+        {
+            var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
+            ResultEntity resultEntity = new ResultEntity();
+            using (TransactionScope scope = new TransactionScope())
+            {
+                data.sub_userid = curentuser.Id;
+                resultEntity = _simService.SaveCost(data);
+                scope.Complete();
+            }
+            return new JsonResult(resultEntity);
+        }
+
+        ///// <summary>
+        ///// 瑙g粦
+        ///// </summary>
+        ///// <param name="id"></param>
+        ///// <returns></returns>
+        //[HttpPost]
+        //public JsonResult UnBindSim(string id)
+        //{
+        //    var curentuser = JsonConvert.DeserializeObject<PltUser>(HttpContext.Session.GetString("User"));
+        //    ResultEntity resultEntity = new ResultEntity();
+        //    using (TransactionScope scope = new TransactionScope())
+        //    {
+        //        resultEntity = _simService.UnBind(id, curentuser.Id);
+        //        scope.Complete();
+        //    }
+        //    return new JsonResult(resultEntity);
+        //}
+    }
+}
diff --git a/zhengcaioa/zhengcaioa/Properties/PublishProfiles/FolderProfile.pubxml.user b/zhengcaioa/zhengcaioa/Properties/PublishProfiles/FolderProfile.pubxml.user
index c5829ff..3b7fd30 100644
--- a/zhengcaioa/zhengcaioa/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/zhengcaioa/zhengcaioa/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,5 +5,6 @@
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <_PublishTargetUrl>D:\netcoreapp3.1\publish\</_PublishTargetUrl>
+    <History>True|2021-06-18T02:23:47.0862716Z;</History>
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/zhengcaioa/zhengcaioa/Startup.cs b/zhengcaioa/zhengcaioa/Startup.cs
index 182d1fc..103fb08 100644
--- a/zhengcaioa/zhengcaioa/Startup.cs
+++ b/zhengcaioa/zhengcaioa/Startup.cs
@@ -68,8 +68,11 @@
 
             var connectionString = Configuration.GetConnectionString("DefaultConnection");
             services.AddDbContext<zhengcaioaContext>(options =>
-            options.UseSqlServer(connectionString));
+            options.UseSqlServer(connectionString));            
             services.AddControllersWithViews();
+
+            services.AddScoped(typeof(ISimService), typeof(SimService));
+
             services.AddScoped(typeof(IUserService), typeof(UserService));
             services.AddScoped(typeof(ILiaotianService), typeof(LiaotianService));
             services.AddScoped(typeof(IProjectService), typeof(ProjectService));
diff --git a/zhengcaioa/zhengcaioa/Views/Area/Index.cshtml b/zhengcaioa/zhengcaioa/Views/Area/Index.cshtml
index a6d3e0a..4db7df2 100644
--- a/zhengcaioa/zhengcaioa/Views/Area/Index.cshtml
+++ b/zhengcaioa/zhengcaioa/Views/Area/Index.cshtml
@@ -19,13 +19,8 @@
         ];
         dataUrl = "/Area/GetList";
         searchCol = [
-
-
-
             { label: '鍖哄煙鍚�', name: 'Name', labtype: 'txt', hidden: false },
             { label: '鐖跺尯鍩熷悕', name: 'ParentName', labtype: 'txt', hidden: false },
-
-
         ];
         var _pageAdd = function () {
             OpenWindow("鏂板鍖哄煙", "98%", "90%", "/Area/Edit/");
diff --git a/zhengcaioa/zhengcaioa/Views/Shared/_Layout.cshtml b/zhengcaioa/zhengcaioa/Views/Shared/_Layout.cshtml
index cc1b319..eb8e61e 100644
--- a/zhengcaioa/zhengcaioa/Views/Shared/_Layout.cshtml
+++ b/zhengcaioa/zhengcaioa/Views/Shared/_Layout.cshtml
@@ -36,6 +36,7 @@
     <link href="~/css/animate.min.css" rel="stylesheet">
     <link href="~/css/style.min.css?v=6" rel="stylesheet">
     <link href="~/css/plugins/toastr/toastr.min.css" rel="stylesheet">
+    
 </head>
 <body class="fixed-sidebar full-height-layout gray-bg" style="overflow: hidden">
     <div id="wrapper">
@@ -55,7 +56,7 @@
             @*@RenderPage("_Layout_Footer.cshtml")*@
             @RenderBody()
         </div>
-     
+
         <a id="aFlowLink" class="J_menuItem" href="" data-index="0" style="display:none;"></a>
 
 
@@ -71,7 +72,7 @@
     <script src="~/js/plugins/pace/pace.min.js" type="text/javascript"></script>
     <script src="~/js/plugins/toastr/toastr.min.js" type="text/javascript"></script>
     <script src="~/js/common-layout.js" type="text/javascript"></script>
-    <script src="~/js/datehelper.js"></script>
+    <script src="~/js/datehelper.js"></script>    
 
     <script type="text/javascript">
 
@@ -124,7 +125,7 @@
         var timerId; // 瀹氭椂鍣╥d
         var isLock = false; // 鏄惁閿佸畾
 
-     
+
         // 閫�鍑�
         var logout = function () {
             if (isLock) {
@@ -181,7 +182,7 @@
         })
 
 
-       
+
 
 
         function _CloseTab1(taburl) {
diff --git a/zhengcaioa/zhengcaioa/Views/Sim/Edit.cshtml b/zhengcaioa/zhengcaioa/Views/Sim/Edit.cshtml
new file mode 100644
index 0000000..ac486f9
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Views/Sim/Edit.cshtml
@@ -0,0 +1,219 @@
+锘緻model SimBindView;
+@using DTO;
+@using zhengcaioa.Models;
+@{
+    Layout = null;
+    List<SysCodeDtl> CardPro = ViewData["CardPro"] as List<SysCodeDtl>; //鐢佃瘽琛ヨ创
+    List<PltUserDTO> users = ViewData["users"] as List<PltUserDTO>;
+}
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+    <meta name="description" content="">
+    <meta name="author" content="ThemeBucket">
+    <title>@(SiteConfig.SiteName)</title>
+    <link href="~/css/bootstrap.min.css" rel="stylesheet">
+    <link href="~/css/font-awesome.min.css" rel="stylesheet">
+    <link href="~/css/animate.min.css" rel="stylesheet">
+    <link href="~/css/style.min.css" rel="stylesheet">
+    <link href="~/css/plugins/chosen/chosen.css" rel="stylesheet">
+    <link href="~/js/plugins/layer/skin/layer.css" rel="stylesheet">
+    <link href="~/css/style.min.css" rel="stylesheet">
+    <link href="~/css/plugins/toastr/toastr.min.css" rel="stylesheet" />
+    <link href="~/css/plugins/webuploader/webuploader.css" rel="stylesheet" />
+
+    <!-- jqgrid-->
+    <script language="javascript" src="~/js/jquery.min.js" type="text/javascript"></script>
+    <script src="~/js/bootstrap.min.js"></script>
+
+    <!--瀹瑰櫒-->
+    <script language="javascript" src="~/js/plugins/chosen/chosen.jquery.js" type="text/javascript"></script>
+    <script language="javascript" src="~/js/plugins/layer/layer.js" type="text/javascript"></script>
+    <script src="~/js/plugins/toastr/toastr.min.js" type="text/javascript"></script>
+    <script language="javascript" src="~/js/common-layout.js" type="text/javascript"></script>
+    <script src="~/js/plugins/layer/laydate/laydate.js" type="text/javascript"></script>
+    <script src="~/js/TUJS.js"></script>
+
+    <style type="text/css">
+        
+        div.clearfix > label {
+            padding-top: 8px;
+        }
+
+        .col-md-1.control-label {
+            padding-right: 0px;
+            font-weight: 400;
+        }
+    </style>
+
+
+</head>
+
+<body class="gray-bg" style="overflow:auto">
+    <form id="fm" method="post">
+        <div class="wrapper wrapper-content" id="ibox-content" style="padding:15px;">
+            <div class="row">
+                <div class="col-sm-12">
+                    <div class="ibox float-e-margins">
+                        <div class="ibox-title">
+                            <h5><i class="fa fa-list"></i>&nbsp;鐢佃瘽鍗″垎閰�</h5>
+                        </div>
+                        <div id="div_content" class="ibox-content" style="background-color:white;">
+                            <div class="row">
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+                                    <label class="text-right col-sm-1 col-md-1 control-label">鐢佃瘽鍗�</label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <input class="form-control" labtype="txt" addvisible="true" editvisible="true" readonly="readonly" maxlength="500" reg="" ismust="true" type="text" value="@Model.simcard">
+                                        <input type="hidden" name="sim_id" value="@Model.Id" />
+                                    </div>
+                                </div>
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+
+                                    <label class="text-right col-sm-1 col-md-1 control-label">浣跨敤鍛樺伐<i class="red">*</i></label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <select id="cbbUser" class="data form-control" name="user_id" data-placeholder="閫夋嫨 搴忓垪 ...">
+                                            <option value="" hassubinfo="true">璇烽�夋嫨</option>
+                                            @foreach (var item in users)
+                                            {
+                                                @if (!item.Id.Equals(Model.userid))
+                                                {
+                                                    <option value="@item.Id" hassubinfo="true">
+                                                        @item.UserName
+                                                    </option>
+                                                }
+                                                else
+                                                {
+                                                    <option value="@item.Id" hassubinfo="true" selected="selected">
+                                                        @item.UserName
+                                                    </option>
+                                                }
+                                            }
+                                        </select>
+                                    </div>
+                                </div>
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+
+                                    <label class="text-right col-sm-1 col-md-1 control-label">鐢佃瘽琛ヨ创<i class="red">*</i></label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <select id="cbbDhbt" class="data form-control" name="cardpro" data-placeholder="閫夋嫨 搴忓垪 ...">
+                                            <option value="" hassubinfo="true">璇烽�夋嫨</option>
+                                            @foreach (var item in CardPro)
+                                            {
+                                                @if (!item.CodeSn.Equals(Model.cardpro))
+                                                {
+                                                    <option value="@item.CodeSn" hassubinfo="true">
+                                                        @item.Comments
+                                                    </option>
+                                                }
+                                                else
+                                                {
+                                                    <option value="@item.CodeSn" hassubinfo="true" selected="selected">
+                                                        @item.Comments
+                                                    </option>
+                                                }
+                                            }
+                                        </select>
+                                        
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="ibox-content" id="top" style="z-index:100; position:fixed; height:50px; width:100%;bottom:0; text-align: right; padding-top:8px ">
+            <div class="" style="float:right;" data-bootstro-width="500px" data-bootstro-content="鍔熻兘鎸夐挳锛氣�滀繚瀛樷�濓紝鈥滃彇娑堚��">
+                <a class="btn btn-success" href="javascript:void(0)" onclick="_pageAutoClose();" style="margin-left:4px; border-radius:4px;">
+                    <i class="glyphicon glyphicon-remove"></i>&nbsp;&nbsp;<span class="bold">鍙栨秷</span>
+                </a>
+                <a class="btn btn-success" href="javascript:void(0)" onclick="saveSim();" style="margin-left:4px; border-radius:4px;">
+                    <i class="glyphicon glyphicon-ok"></i>&nbsp;&nbsp;<span class="bold">鎻愪氦</span>
+                </a>
+            </div>
+        </div>
+
+    </form>
+
+    <script type="text/javascript">
+         $(function () {
+            
+             $("#cbbUser").chosen();           
+
+            });
+
+        var hh = document.body.clientHeight - $('.ibox-title').height() - $("#top").height() * 2 - 95;
+        $("#div_content").height(hh);
+
+        toastr.options = {
+            "closeButton": true,
+            "debug": false,
+            "progressBar": true,
+            "positionClass": "toast-bottom-right",
+            "onclick": null,
+            "showDuration": "300",
+            "hideDuration": "600",
+            "timeOut": "4500",
+            "extendedTimeOut": "600",
+            "showEasing": "swing",
+            "hideEasing": "linear",
+            "showMethod": "fadeIn",
+            "hideMethod": "fadeOut"
+        };
+
+        // 淇濆瓨
+        function saveSim() {
+
+            if ($("#cbbUser").val() == '') {
+                toastr.warning("浣跨敤浜哄憳涓嶈兘涓虹┖");
+                return;
+            }
+            if ($("#cbbDhbt").val() == '') {
+                toastr.warning("鐢佃瘽琛ヨ创涓嶈兘涓虹┖");
+                return;
+            }
+           
+            $.ajax({
+                type: "POST",
+                url: "/Sim/SaveSimBind",
+                dataType: "json",
+                global: false,
+                data: $('#fm').serialize(),
+                success: function (data) {
+
+                        if (data.Result) {
+                            parent.layer.msg('璁剧疆鎴愬姛', { icon: 6 });
+                            try {
+                                _pageAutoClose();//鑷姩鍏抽棴椤甸潰鏂规硶
+                            }
+                            catch (err) {
+                                parent._CloseTab1("/Sim/Edit/");
+                            }
+                        }
+                        else {
+                            // toastr.error("澶辫触");
+                            parent.layer.msg(data.Message, { icon: 5 });
+                        }
+
+                },
+                error: function () {
+                    parent.layer.msg('澶辫触', { icon: 5 });
+                }
+            });
+        }
+
+
+        function _pageAutoClose() {
+            parent.window._reloadPageData();
+            var index = parent.layer.getFrameIndex(window.name);
+            parent.layer.isRefresh = true;
+            parent.layer.closeAll('loading');
+            parent.layer.close(index);
+            return false;
+        }
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zhengcaioa/zhengcaioa/Views/Sim/Index.cshtml b/zhengcaioa/zhengcaioa/Views/Sim/Index.cshtml
new file mode 100644
index 0000000..fc36a1c
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Views/Sim/Index.cshtml
@@ -0,0 +1,98 @@
+锘緻{
+    ViewBag.Title = "鐢佃瘽鍗″垎閰�";
+    Layout = "~/Views/Shared/_Layout_Search.cshtml";
+}
+
+<link href="~/css/jquery-confirm.css" rel="stylesheet">
+<script src="~/js/jquery-confirm.js" type="text/javascript"></script>
+
+@section headerStyle{
+
+    <script type="text/javascript">
+
+        gridConfig = { multiselect: true, selectcol: "Id" };
+        dataCol = [
+            { label: 'id', name: 'Id', labtype: 'txt', hidden: true },
+            {
+                label: '鐢佃瘽鍗″彿', name: 'simcard', labtype: 'txt', hidden: false, width: 150,
+                formatter: function (cellvalue, options, rowObject) {
+                    return "<a onclick=\"OpenWindow('" + cellvalue.replace(/'/g, '') + "','98%','100%', '/Sim/Edit?id=" + rowObject.Id + "')\"  >" + cellvalue + "</a>";
+                }
+            },
+            { label: '浣跨敤浜哄憳', name: 'username', labtype: 'txt', hidden: false, width: 150 },
+            { label: '鐢佃瘽琛ヨ创', name: 'cardproChs', labtype: 'txt', hidden: false, width: 100 },
+            { label: '鏇存柊鏃ユ湡', name: 'up_time', labtype: 'txt', hidden: false, width: 150 },
+        ];
+        dataUrl = "/Sim/GetList";
+        searchCol = [
+            { label: '鐢佃瘽鍗″彿', name: 'simcard', labtype: 'txt', hidden: false, cwidth: '5%', cccwidth: '8%' },
+            { label: '浣跨敤浜哄憳', name: 'username', labtype: 'txt', hidden: false, cwidth: '5%', cccwidth: '8%' },
+        ];
+
+        var _pageUnBind = function () {
+            var db = jQuery('#jqGrid').jqGrid('getGridParam', 'selarrrow');
+            if (db.length > 0) {
+                $.confirm({
+                    title: '瑙i櫎缁戝畾鎿嶄綔纭',
+                    content: '姝ゆ搷浣滃皢瑙i櫎鎵�閫夊畾鐢佃瘽鍗″拰浜哄憳缁戝畾鍏崇郴锛岀‘璁よ缁х画鍚�?',
+                    type: 'green',
+                    icon: 'glyphicon glyphicon-question-sign',
+                    buttons: {
+                        ok: {
+                            text: '纭',
+                            btnClass: 'btn-primary',
+                            action: function () {
+                                $.ajax({
+                                    type: "POST",
+                                    url: "/Sim/UnBindSim?id="+db,
+                                    dataType: "json",
+                                    global: false,
+                                    success: function (data) {
+
+                                        if (data.Result) {
+                                            jQuery('#jqGrid').jqGrid().trigger('reloadGrid');
+                                            
+                                            parent.layer.msg('璁剧疆鎴愬姛', { icon: 6 });                                           
+                                        }
+                                        else {
+                                            parent.layer.msg(data.Message, { icon: 5 });
+                                        }
+                                    },
+                                    error: function () {
+                                        parent.layer.msg('澶辫触', { icon: 5 });
+                                    }
+                                });
+                            }
+                        },
+                        cancel: {
+                            text: '鍙栨秷',
+                            btnClass: 'btn-primary'
+                        }
+                    }
+                });
+            }
+            else {
+                $.alert("璇峰厛閫夋嫨闇�瑕佽В缁戠殑鐢佃瘽鍗★紒");
+            }
+
+        }
+
+        var _afterSave = function (result) {
+            if (result) {
+                toastr.success("淇濆瓨鎴愬姛");
+            } else {
+                toastr.error("淇濆瓨澶辫触");
+            }
+        }
+
+        var _afterDel = function (result) {
+            if (result) {
+                toastr.success("鍒犻櫎鎴愬姛");
+            } else {
+                /**/
+                toastr.error("鍒犻櫎鎴愬姛");
+                /**/
+            }
+        }
+    </script>
+}
diff --git a/zhengcaioa/zhengcaioa/Views/SimCost/Edit.cshtml b/zhengcaioa/zhengcaioa/Views/SimCost/Edit.cshtml
new file mode 100644
index 0000000..d419797
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Views/SimCost/Edit.cshtml
@@ -0,0 +1,200 @@
+锘緻model SimCost;
+@using DTO;
+@using zhengcaioa.Models;
+@{
+    Layout = null;
+    List<SimBindView> Card = ViewData["SimCard"] as List<SimBindView>; 
+}
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+    <meta name="description" content="">
+    <meta name="author" content="ThemeBucket">
+    <link href="~/css/bootstrap.min.css" rel="stylesheet">
+    <link href="~/css/font-awesome.min.css" rel="stylesheet">
+    <link href="~/css/animate.min.css" rel="stylesheet">
+    <link href="~/css/style.min.css" rel="stylesheet">
+    <link href="~/css/plugins/chosen/chosen.css" rel="stylesheet">
+    <link href="~/js/plugins/layer/skin/layer.css" rel="stylesheet">
+    <link href="~/css/style.min.css" rel="stylesheet">
+    <link href="~/css/plugins/toastr/toastr.min.css" rel="stylesheet" />
+
+    <!-- jqgrid-->
+    <script language="javascript" src="~/js/jquery.min.js" type="text/javascript"></script>
+    <script src="~/js/bootstrap.min.js"></script>
+
+    <!--瀹瑰櫒-->
+    <script language="javascript" src="~/js/plugins/chosen/chosen.jquery.js" type="text/javascript"></script>
+    <script language="javascript" src="~/js/plugins/layer/layer.js" type="text/javascript"></script>
+    <script src="~/js/plugins/toastr/toastr.min.js" type="text/javascript"></script>
+    <script language="javascript" src="~/js/common-layout.js" type="text/javascript"></script>
+    <script src="~/js/plugins/layer/laydate/laydate.js" type="text/javascript"></script>
+    <script src="~/js/TUJS.js"></script>
+
+    <style type="text/css">
+        
+        div.clearfix > label {
+            padding-top: 8px;
+        }
+
+        .col-md-1.control-label {
+            padding-right: 0px;
+            font-weight: 400;
+        }
+    </style>
+
+
+</head>
+
+<body class="gray-bg" style="overflow:auto">
+    <form id="fm" method="post">
+        <div class="wrapper wrapper-content" id="ibox-content" style="padding:15px;">
+            <div class="row">
+                <div class="col-sm-12">
+                    <div class="ibox float-e-margins">
+                        <div id="div_content" class="ibox-content" style="background-color:white;">
+                            <div class="row">
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+                                    <label class="text-right col-sm-1 col-md-1 control-label">鐢佃瘽鍗″彿<i class="red">*</i></label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <select id="cbbCard" class="data form-control" name="sim_id" data-placeholder="閫夋嫨 搴忓垪 ...">
+                                            <option value="" hassubinfo="true">璇烽�夋嫨</option>
+                                            @foreach (var item in Card)
+                                            {
+                                                @if (!item.Id.Equals(Model.sim_id))
+                                                {
+                                                    <option value="@item.Id" hassubinfo="true">
+                                                        @item.simcard
+                                                    </option>
+                                                }
+                                                else
+                                                {
+                                                    <option value="@item.Id" hassubinfo="true" selected="selected">
+                                                        @item.simcard
+                                                    </option>
+                                                }
+                                            }
+                                        </select>
+                                        <input type="hidden" name="id" value="@Model.id" />
+                                    </div>
+                                </div>
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+                                    <label class="text-right col-sm-1 col-md-1 control-label">瀹為檯鐢佃瘽璐圭敤<i class="red">*</i></label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <input id="billamount" class="form-control" label="钖祫寰呴亣" name="bill_amount" labtype="txt" addvisible="true" maxlength="500" editvisible="true" reg="" ismust="true" type="text" value="@Model.bill_amount" oninput="if(value.length>4)value=value.slice(0,10)" onkeyup="value=value.toString().match(/^\d+(?:\.\d{0,2})?/)">
+                                    </div>
+                                </div>
+                                <div class="clearfix layer-area" style="padding-bottom:15px;">
+
+                                    <label class="text-right col-sm-1 col-md-1 control-label">璐圭敤璁拌处鏃ユ湡<i class="red">*</i></label>
+                                    <div class="col-sm-2 col-md-2">
+                                        <input id="acTime" class="form-control" name="accounted_time" labtype="txt" addvisible="true" editvisible="true" reg="" ismust="true" type="text" value="@Model.accounted_time.ToString("yyyy/MM/dd")" >
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="ibox-content" id="top" style="z-index:100; position:fixed; height:50px; width:100%;bottom:0; text-align: right; padding-top:8px ">
+            <div class="" style="float:right;" data-bootstro-width="500px" data-bootstro-content="鍔熻兘鎸夐挳锛氣�滀繚瀛樷�濓紝鈥滃彇娑堚��">
+                <a class="btn btn-success" href="javascript:void(0)" onclick="_pageAutoClose();" style="margin-left:4px; border-radius:4px;">
+                    <i class="glyphicon glyphicon-remove"></i>&nbsp;&nbsp;<span class="bold">鍙栨秷</span>
+                </a>
+                <a class="btn btn-success" href="javascript:void(0)" onclick="saveSimCost();" style="margin-left:4px; border-radius:4px;">
+                    <i class="glyphicon glyphicon-ok"></i>&nbsp;&nbsp;<span class="bold">淇濆瓨</span>
+                </a>
+            </div>
+        </div>
+
+    </form>
+
+    <script type="text/javascript">
+         $(function () {
+            
+             $("#cbbCard").chosen();           
+
+             laydate({ elem: "#acTime", format: 'YYYY/MM/DD', istime: false, event: "focus" });
+
+            });
+
+        var hh = document.body.clientHeight - $('.ibox-title').height() - $("#top").height() * 2 - 95;
+        $("#div_content").height(hh);
+
+        toastr.options = {
+            "closeButton": true,
+            "debug": false,
+            "progressBar": true,
+            "positionClass": "toast-bottom-right",
+            "onclick": null,
+            "showDuration": "300",
+            "hideDuration": "600",
+            "timeOut": "4500",
+            "extendedTimeOut": "600",
+            "showEasing": "swing",
+            "hideEasing": "linear",
+            "showMethod": "fadeIn",
+            "hideMethod": "fadeOut"
+        };
+
+        // 淇濆瓨
+        function saveSimCost() {
+
+            if ($("#cbbCard").val() == '') {
+                toastr.warning("鐢佃瘽鍗″彿涓嶈兘涓虹┖");
+                return;
+            }
+            if ($("#billamount").val() == '') {
+                toastr.warning("瀹為檯鐢佃瘽璐圭敤涓嶈兘涓虹┖");
+                return;
+            }
+            if ($("#acTime").val() == '') {
+                toastr.warning("璐圭敤璁拌处鏃ユ湡涓嶈兘涓虹┖");
+                return;
+            }
+           
+            $.ajax({
+                type: "POST",
+                url: "/SimCost/SaveSimCost",
+                dataType: "json",
+                global: false,
+                data: $('#fm').serialize(),
+                success: function (data) {
+
+                        if (data.Result) {
+                            parent.layer.msg('璁剧疆鎴愬姛', { icon: 6 });
+                            try {
+                                _pageAutoClose();//鑷姩鍏抽棴椤甸潰鏂规硶
+                            }
+                            catch (err) {
+                                parent._CloseTab1("/SimCost/Edit/");
+                            }
+                        }
+                        else {
+                            // toastr.error("澶辫触");
+                            parent.layer.msg(data.Message, { icon: 5 });
+                        }
+
+                },
+                error: function () {
+                    parent.layer.msg('澶辫触', { icon: 5 });
+                }
+            });
+        }
+
+
+        function _pageAutoClose() {
+            parent.window._reloadPageData();
+            var index = parent.layer.getFrameIndex(window.name);
+            parent.layer.isRefresh = true;
+            parent.layer.closeAll('loading');
+            parent.layer.close(index);
+            return false;
+        }
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/zhengcaioa/zhengcaioa/Views/SimCost/Index.cshtml b/zhengcaioa/zhengcaioa/Views/SimCost/Index.cshtml
new file mode 100644
index 0000000..72d4b9a
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/Views/SimCost/Index.cshtml
@@ -0,0 +1,106 @@
+锘緻{
+    ViewBag.Title = "鐢佃瘽璐瑰綍鍏�";
+    Layout = "~/Views/Shared/_Layout_Search.cshtml";
+}
+
+<link href="~/css/jquery-confirm.css" rel="stylesheet">
+<script src="~/js/jquery-confirm.js" type="text/javascript"></script>
+
+@section headerStyle{
+
+    <script type="text/javascript">
+
+        gridConfig = { multiselect: false, selectcol: "id" };
+        dataCol = [
+            { label: '搴忓彿', name: 'id', labtype: 'txt', hidden: false, width: 50 },
+            { label: '璐﹀崟鏃ユ湡', name: 'accountMonth', labtype: 'txt', hidden: false, width: 150 },
+            {
+                label: '鐢佃瘽鍗″彿', name: 'simcard', labtype: 'txt', hidden: false, width: 150,
+                formatter: function (cellvalue, options, rowObject) {
+                    return "<a onclick=\"OpenWindow('缂栬緫鐢佃瘽璐圭敤','98%','90%', '/SimCost/Edit?id=" + rowObject.id + "')\"  >" + cellvalue + "</a>";
+                }
+            },
+            { label: '浣跨敤浜哄憳', name: 'username', labtype: 'txt', hidden: false, width: 150 },
+            { label: '鐢佃瘽鍗曢噾棰�', name: 'bill_amount', labtype: 'txt', hidden: false, width: 100 },
+            { label: '鐢佃瘽琛ヨ创閲戦', name: 'allow_amount', labtype: 'txt', hidden: false, width: 100 },
+            { label: '宸紓閲戦', name: 'amount', labtype: 'txt', hidden: false, width: 100 },
+            { label: '鐘舵��', name: 'statusChs', labtype: 'txt', hidden: false, width: 100 },
+            { label: '鏇存柊鏃ユ湡', name: 'up_time', labtype: 'txt', hidden: false },
+        ];
+        dataUrl = "/SimCost/GetList";
+        searchCol = [
+            { label: '鏃堕棿', name: 'searchtime', labtype: 'datearea', hidden: false },
+            { label: '鐢佃瘽鍗″彿', name: 'searchsim', labtype: 'txt', hidden: false, cwidth: '5%', cccwidth: '8%' }
+        ];
+
+        var _pageAdd = function () {
+            OpenWindow("鏂板鐢佃瘽璐圭敤", "98%", "90%", "/SimCost/Edit/");
+        }
+
+        var _pageUnBind = function () {
+            var db = jQuery('#jqGrid').jqGrid('getGridParam', 'selarrrow');
+            if (db.length > 0) {
+                $.confirm({
+                    title: '瑙i櫎缁戝畾鎿嶄綔纭',
+                    content: '姝ゆ搷浣滃皢瑙i櫎鎵�閫夊畾鐢佃瘽鍗″拰浜哄憳缁戝畾鍏崇郴锛岀‘璁よ缁х画鍚�?',
+                    type: 'green',
+                    icon: 'glyphicon glyphicon-question-sign',
+                    buttons: {
+                        ok: {
+                            text: '纭',
+                            btnClass: 'btn-primary',
+                            action: function () {
+                                $.ajax({
+                                    type: "POST",
+                                    url: "/Sim/UnBindSim?id="+db,
+                                    dataType: "json",
+                                    global: false,
+                                    success: function (data) {
+
+                                        if (data.Result) {
+                                            jQuery('#jqGrid').jqGrid().trigger('reloadGrid');
+                                            
+                                            parent.layer.msg('璁剧疆鎴愬姛', { icon: 6 });                                           
+                                        }
+                                        else {
+                                            parent.layer.msg(data.Message, { icon: 5 });
+                                        }
+                                    },
+                                    error: function () {
+                                        parent.layer.msg('澶辫触', { icon: 5 });
+                                    }
+                                });
+                            }
+                        },
+                        cancel: {
+                            text: '鍙栨秷',
+                            btnClass: 'btn-primary'
+                        }
+                    }
+                });
+            }
+            else {
+                $.alert("璇峰厛閫夋嫨闇�瑕佽В缁戠殑鐢佃瘽鍗★紒");
+            }
+
+        }
+
+        var _afterSave = function (result) {
+            if (result) {
+                toastr.success("淇濆瓨鎴愬姛");
+            } else {
+                toastr.error("淇濆瓨澶辫触");
+            }
+        }
+
+        var _afterDel = function (result) {
+            if (result) {
+                toastr.success("鍒犻櫎鎴愬姛");
+            } else {
+                /**/
+                toastr.error("鍒犻櫎鎴愬姛");
+                /**/
+            }
+        }
+    </script>
+}
diff --git a/zhengcaioa/zhengcaioa/Views/User/Edit.cshtml b/zhengcaioa/zhengcaioa/Views/User/Edit.cshtml
index fc4109c..086ae78 100644
--- a/zhengcaioa/zhengcaioa/Views/User/Edit.cshtml
+++ b/zhengcaioa/zhengcaioa/Views/User/Edit.cshtml
@@ -11,8 +11,6 @@
     List<SysCodeDtl> isMaryed = ViewBag.isMaryed as List<SysCodeDtl>; //濠氬Щ鐘跺喌
 
 
-
-
     List<PltJiatingchengyuanDTO> pltJiatingchengyuanDTOs = Model.pltJiatingchengyuanDTOs;
 
 
diff --git a/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.css b/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.css
new file mode 100644
index 0000000..055743f
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.css
@@ -0,0 +1,1140 @@
+/*!
+ * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/)
+ * Author: boniface pereira
+ * Website: www.craftpip.com
+ * Contact: hey@craftpip.com
+ *
+ * Copyright 2013-2019 jquery-confirm
+ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE)
+ */
+@-webkit-keyframes jconfirm-spin {
+    from {
+        -webkit-transform: rotate(0deg);
+        transform: rotate(0deg);
+    }
+    to {
+        -webkit-transform: rotate(360deg);
+        transform: rotate(360deg);
+    }
+}
+
+@keyframes jconfirm-spin {
+    from {
+        -webkit-transform: rotate(0deg);
+        transform: rotate(0deg);
+    }
+    to {
+        -webkit-transform: rotate(360deg);
+        transform: rotate(360deg);
+    }
+}
+
+body[class*=jconfirm-no-scroll-] {
+    overflow: hidden !important;
+}
+
+.jconfirm {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    z-index: 99999999;
+    font-family: inherit;
+    overflow: hidden;
+}
+
+.jconfirm .jconfirm-bg {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    -webkit-transition: opacity .4s;
+    transition: opacity .4s;
+}
+
+.jconfirm .jconfirm-bg.jconfirm-bg-h {
+    opacity: 0 !important;
+}
+
+.jconfirm .jconfirm-scrollpane {
+    -webkit-perspective: 500px;
+    perspective: 500px;
+    -webkit-perspective-origin: center;
+    perspective-origin: center;
+    display: table;
+    width: 100%;
+    height: 100%;
+}
+
+.jconfirm .jconfirm-row {
+    display: table-row;
+    width: 100%;
+}
+
+.jconfirm .jconfirm-cell {
+    display: table-cell;
+    vertical-align: middle;
+}
+
+.jconfirm .jconfirm-holder {
+    max-height: 100%;
+    padding: 50px 0;
+}
+
+.jconfirm .jconfirm-box-container {
+    -webkit-transition: -webkit-transform;
+    transition: -webkit-transform;
+    transition: transform;
+    transition: transform, -webkit-transform;
+}
+
+.jconfirm .jconfirm-box-container.jconfirm-no-transition {
+    -webkit-transition: none !important;
+    transition: none !important;
+}
+
+.jconfirm .jconfirm-box {
+    background: white;
+    border-radius: 4px;
+    position: relative;
+    outline: none;
+    padding: 15px 15px 0;
+    overflow: hidden;
+    margin-left: auto;
+    margin-right: auto;
+}
+
+@-webkit-keyframes type-blue {
+    1%,
+    100% {
+        border-color: #3498db;
+    }
+    50% {
+        border-color: #5faee3;
+    }
+}
+
+@keyframes type-blue {
+    1%,
+    100% {
+        border-color: #3498db;
+    }
+    50% {
+        border-color: #5faee3;
+    }
+}
+
+@-webkit-keyframes type-green {
+    1%,
+    100% {
+        border-color: #2ecc71;
+    }
+    50% {
+        border-color: #54d98c;
+    }
+}
+
+@keyframes type-green {
+    1%,
+    100% {
+        border-color: #2ecc71;
+    }
+    50% {
+        border-color: #54d98c;
+    }
+}
+
+@-webkit-keyframes type-red {
+    1%,
+    100% {
+        border-color: #e74c3c;
+    }
+    50% {
+        border-color: #ed7669;
+    }
+}
+
+@keyframes type-red {
+    1%,
+    100% {
+        border-color: #e74c3c;
+    }
+    50% {
+        border-color: #ed7669;
+    }
+}
+
+@-webkit-keyframes type-orange {
+    1%,
+    100% {
+        border-color: #f1c40f;
+    }
+    50% {
+        border-color: #f4d03f;
+    }
+}
+
+@keyframes type-orange {
+    1%,
+    100% {
+        border-color: #f1c40f;
+    }
+    50% {
+        border-color: #f4d03f;
+    }
+}
+
+@-webkit-keyframes type-purple {
+    1%,
+    100% {
+        border-color: #9b59b6;
+    }
+    50% {
+        border-color: #b07cc6;
+    }
+}
+
+@keyframes type-purple {
+    1%,
+    100% {
+        border-color: #9b59b6;
+    }
+    50% {
+        border-color: #b07cc6;
+    }
+}
+
+@-webkit-keyframes type-dark {
+    1%,
+    100% {
+        border-color: #34495e;
+    }
+    50% {
+        border-color: #46627f;
+    }
+}
+
+@keyframes type-dark {
+    1%,
+    100% {
+        border-color: #34495e;
+    }
+    50% {
+        border-color: #46627f;
+    }
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-animated {
+    -webkit-animation-duration: 2s;
+    animation-duration: 2s;
+    -webkit-animation-iteration-count: infinite;
+    animation-iteration-count: infinite;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-blue {
+    border-top: solid 7px #3498db;
+    -webkit-animation-name: type-blue;
+    animation-name: type-blue;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-green {
+    border-top: solid 7px #2ecc71;
+    -webkit-animation-name: type-green;
+    animation-name: type-green;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-red {
+    border-top: solid 7px #e74c3c;
+    -webkit-animation-name: type-red;
+    animation-name: type-red;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-orange {
+    border-top: solid 7px #f1c40f;
+    -webkit-animation-name: type-orange;
+    animation-name: type-orange;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-purple {
+    border-top: solid 7px #9b59b6;
+    -webkit-animation-name: type-purple;
+    animation-name: type-purple;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-dark {
+    border-top: solid 7px #34495e;
+    -webkit-animation-name: type-dark;
+    animation-name: type-dark;
+}
+
+.jconfirm .jconfirm-box.loading {
+    height: 120px;
+}
+
+.jconfirm .jconfirm-box.loading:before {
+    content: '';
+    position: absolute;
+    left: 0;
+    background: white;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    border-radius: 10px;
+    z-index: 1;
+}
+
+.jconfirm .jconfirm-box.loading:after {
+    opacity: 0.6;
+    content: '';
+    height: 30px;
+    width: 30px;
+    border: solid 3px transparent;
+    position: absolute;
+    left: 50%;
+    margin-left: -15px;
+    border-radius: 50%;
+    -webkit-animation: jconfirm-spin 1s infinite linear;
+    animation: jconfirm-spin 1s infinite linear;
+    border-bottom-color: dodgerblue;
+    top: 50%;
+    margin-top: -15px;
+    z-index: 2;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon {
+    height: 20px;
+    width: 20px;
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    cursor: pointer;
+    opacity: .6;
+    text-align: center;
+    font-size: 27px !important;
+    line-height: 14px !important;
+    display: none;
+    z-index: 1;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon:empty {
+    display: none;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon .fa {
+    font-size: 16px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon .glyphicon {
+    font-size: 16px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon .zmdi {
+    font-size: 16px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-closeIcon:hover {
+    opacity: 1;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c {
+    display: block;
+    font-size: 22px;
+    line-height: 20px;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: default;
+    padding-bottom: 15px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c.jconfirm-hand {
+    cursor: move;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c {
+    font-size: inherit;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c i {
+    vertical-align: middle;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c:empty {
+    display: none;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-title {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    font-size: inherit;
+    font-family: inherit;
+    display: inline-block;
+    vertical-align: middle;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-title-c .jconfirm-title:empty {
+    display: none;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane {
+    margin-bottom: 15px;
+    height: auto;
+    -webkit-transition: height 0.4s ease-in;
+    transition: height 0.4s ease-in;
+    display: inline-block;
+    width: 100%;
+    position: relative;
+    overflow-x: hidden;
+    overflow-y: auto;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane.no-scroll {
+    overflow-y: hidden;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar {
+    width: 3px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar-track {
+    background: rgba(0, 0, 0, 0.1);
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane::-webkit-scrollbar-thumb {
+    background: #666;
+    border-radius: 3px;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content {
+    overflow: auto;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content img {
+    max-width: 100%;
+    height: auto;
+}
+
+.jconfirm .jconfirm-box div.jconfirm-content-pane .jconfirm-content:empty {
+    display: none;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons {
+    padding-bottom: 11px;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons > button {
+    margin-bottom: 4px;
+    margin-left: 2px;
+    margin-right: 2px;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button {
+    display: inline-block;
+    padding: 6px 12px;
+    font-size: 14px;
+    font-weight: 400;
+    line-height: 1.42857143;
+    text-align: center;
+    white-space: nowrap;
+    vertical-align: middle;
+    -ms-touch-action: manipulation;
+    touch-action: manipulation;
+    cursor: pointer;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    border-radius: 4px;
+    min-height: 1em;
+    -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;
+    transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;
+    transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;
+    transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;
+    -webkit-tap-highlight-color: transparent;
+    border: none;
+    background-image: none;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-blue {
+    background-color: #3498db;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-blue:hover {
+    background-color: #2980b9;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-green {
+    background-color: #2ecc71;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-green:hover {
+    background-color: #27ae60;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-red {
+    background-color: #e74c3c;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-red:hover {
+    background-color: #c0392b;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-orange {
+    background-color: #f1c40f;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-orange:hover {
+    background-color: #f39c12;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-default {
+    background-color: #ecf0f1;
+    color: #000;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-default:hover {
+    background-color: #bdc3c7;
+    color: #000;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-purple {
+    background-color: #9b59b6;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-purple:hover {
+    background-color: #8e44ad;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-dark {
+    background-color: #34495e;
+    color: #FFF;
+    text-shadow: none;
+    -webkit-transition: background .2s;
+    transition: background .2s;
+}
+
+.jconfirm .jconfirm-box .jconfirm-buttons button.btn-dark:hover {
+    background-color: #2c3e50;
+    color: #FFF;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-red .jconfirm-title-c .jconfirm-icon-c {
+    color: #e74c3c !important;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-blue .jconfirm-title-c .jconfirm-icon-c {
+    color: #3498db !important;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-green .jconfirm-title-c .jconfirm-icon-c {
+    color: #2ecc71 !important;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-purple .jconfirm-title-c .jconfirm-icon-c {
+    color: #9b59b6 !important;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-orange .jconfirm-title-c .jconfirm-icon-c {
+    color: #f1c40f !important;
+}
+
+.jconfirm .jconfirm-box.jconfirm-type-dark .jconfirm-title-c .jconfirm-icon-c {
+    color: #34495e !important;
+}
+
+.jconfirm .jconfirm-clear {
+    clear: both;
+}
+
+.jconfirm.jconfirm-rtl {
+    direction: rtl;
+}
+
+.jconfirm.jconfirm-rtl div.jconfirm-closeIcon {
+    left: 5px;
+    right: auto;
+}
+
+.jconfirm.jconfirm-white .jconfirm-bg,
+.jconfirm.jconfirm-light .jconfirm-bg {
+    background-color: #444;
+    opacity: .2;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box,
+.jconfirm.jconfirm-light .jconfirm-box {
+    -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+    border-radius: 5px;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box .jconfirm-title-c .jconfirm-icon-c,
+.jconfirm.jconfirm-light .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+    margin-right: 8px;
+    margin-left: 0px;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons,
+.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons {
+    float: right;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button,
+.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button {
+    text-transform: uppercase;
+    font-size: 14px;
+    font-weight: bold;
+    text-shadow: none;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button.btn-default,
+.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button.btn-default {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+    color: #333;
+}
+
+.jconfirm.jconfirm-white .jconfirm-box .jconfirm-buttons button.btn-default:hover,
+.jconfirm.jconfirm-light .jconfirm-box .jconfirm-buttons button.btn-default:hover {
+    background: #ddd;
+}
+
+.jconfirm.jconfirm-white.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c,
+.jconfirm.jconfirm-light.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c {
+    margin-left: 8px;
+    margin-right: 0px;
+}
+
+.jconfirm.jconfirm-black .jconfirm-bg,
+.jconfirm.jconfirm-dark .jconfirm-bg {
+    background-color: darkslategray;
+    opacity: .4;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box,
+.jconfirm.jconfirm-dark .jconfirm-box {
+    -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
+    background: #444;
+    border-radius: 5px;
+    color: white;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box .jconfirm-title-c .jconfirm-icon-c,
+.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+    margin-right: 8px;
+    margin-left: 0px;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons,
+.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons {
+    float: right;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button,
+.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button {
+    border: none;
+    background-image: none;
+    text-transform: uppercase;
+    font-size: 14px;
+    font-weight: bold;
+    text-shadow: none;
+    -webkit-transition: background .1s;
+    transition: background .1s;
+    color: white;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button.btn-default,
+.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button.btn-default {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+    color: #fff;
+    background: none;
+}
+
+.jconfirm.jconfirm-black .jconfirm-box .jconfirm-buttons button.btn-default:hover,
+.jconfirm.jconfirm-dark .jconfirm-box .jconfirm-buttons button.btn-default:hover {
+    background: #666;
+}
+
+.jconfirm.jconfirm-black.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c,
+.jconfirm.jconfirm-dark.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c {
+    margin-left: 8px;
+    margin-right: 0px;
+}
+
+.jconfirm .jconfirm-box.hilight.jconfirm-hilight-shake {
+    -webkit-animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
+    animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+.jconfirm .jconfirm-box.hilight.jconfirm-hilight-glow {
+    -webkit-animation: glow 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
+    animation: glow 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+}
+
+@-webkit-keyframes shake {
+    10%,
+    90% {
+        -webkit-transform: translate3d(-2px, 0, 0);
+        transform: translate3d(-2px, 0, 0);
+    }
+    20%,
+    80% {
+        -webkit-transform: translate3d(4px, 0, 0);
+        transform: translate3d(4px, 0, 0);
+    }
+    30%,
+    50%,
+    70% {
+        -webkit-transform: translate3d(-8px, 0, 0);
+        transform: translate3d(-8px, 0, 0);
+    }
+    40%,
+    60% {
+        -webkit-transform: translate3d(8px, 0, 0);
+        transform: translate3d(8px, 0, 0);
+    }
+}
+
+@keyframes shake {
+    10%,
+    90% {
+        -webkit-transform: translate3d(-2px, 0, 0);
+        transform: translate3d(-2px, 0, 0);
+    }
+    20%,
+    80% {
+        -webkit-transform: translate3d(4px, 0, 0);
+        transform: translate3d(4px, 0, 0);
+    }
+    30%,
+    50%,
+    70% {
+        -webkit-transform: translate3d(-8px, 0, 0);
+        transform: translate3d(-8px, 0, 0);
+    }
+    40%,
+    60% {
+        -webkit-transform: translate3d(8px, 0, 0);
+        transform: translate3d(8px, 0, 0);
+    }
+}
+
+@-webkit-keyframes glow {
+    0%,
+    100% {
+        -webkit-box-shadow: 0 0 0px red;
+        box-shadow: 0 0 0px red;
+    }
+    50% {
+        -webkit-box-shadow: 0 0 30px red;
+        box-shadow: 0 0 30px red;
+    }
+}
+
+@keyframes glow {
+    0%,
+    100% {
+        -webkit-box-shadow: 0 0 0px red;
+        box-shadow: 0 0 0px red;
+    }
+    50% {
+        -webkit-box-shadow: 0 0 30px red;
+        box-shadow: 0 0 30px red;
+    }
+}
+
+/*Transition rules*/
+.jconfirm {
+    -webkit-perspective: 400px;
+    perspective: 400px;
+}
+
+.jconfirm .jconfirm-box {
+    opacity: 1;
+    -webkit-transition-property: all;
+    transition-property: all;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-top,
+.jconfirm .jconfirm-box.jconfirm-animation-left,
+.jconfirm .jconfirm-box.jconfirm-animation-right,
+.jconfirm .jconfirm-box.jconfirm-animation-bottom,
+.jconfirm .jconfirm-box.jconfirm-animation-opacity,
+.jconfirm .jconfirm-box.jconfirm-animation-zoom,
+.jconfirm .jconfirm-box.jconfirm-animation-scale,
+.jconfirm .jconfirm-box.jconfirm-animation-none,
+.jconfirm .jconfirm-box.jconfirm-animation-rotate,
+.jconfirm .jconfirm-box.jconfirm-animation-rotatex,
+.jconfirm .jconfirm-box.jconfirm-animation-rotatey,
+.jconfirm .jconfirm-box.jconfirm-animation-scaley,
+.jconfirm .jconfirm-box.jconfirm-animation-scalex {
+    opacity: 0;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-rotate {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-rotatex {
+    -webkit-transform: rotateX(90deg);
+    transform: rotateX(90deg);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-rotatexr {
+    -webkit-transform: rotateX(-90deg);
+    transform: rotateX(-90deg);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-rotatey {
+    -webkit-transform: rotatey(90deg);
+    transform: rotatey(90deg);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-rotateyr {
+    -webkit-transform: rotatey(-90deg);
+    transform: rotatey(-90deg);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-scaley {
+    -webkit-transform: scaley(1.5);
+    transform: scaley(1.5);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-scalex {
+    -webkit-transform: scalex(1.5);
+    transform: scalex(1.5);
+    -webkit-transform-origin: center;
+    transform-origin: center;
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-top {
+    -webkit-transform: translate(0px, -100px);
+    transform: translate(0px, -100px);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-left {
+    -webkit-transform: translate(-100px, 0px);
+    transform: translate(-100px, 0px);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-right {
+    -webkit-transform: translate(100px, 0px);
+    transform: translate(100px, 0px);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-bottom {
+    -webkit-transform: translate(0px, 100px);
+    transform: translate(0px, 100px);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-zoom {
+    -webkit-transform: scale(1.2);
+    transform: scale(1.2);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-scale {
+    -webkit-transform: scale(0.5);
+    transform: scale(0.5);
+}
+
+.jconfirm .jconfirm-box.jconfirm-animation-none {
+    visibility: hidden;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-bg {
+    background-color: rgba(54, 70, 93, 0.95);
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box {
+    background-color: transparent;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-blue {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-green {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-red {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-orange {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-purple {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box.jconfirm-type-dark {
+    border: none;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-closeIcon {
+    color: white;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c {
+    text-align: center;
+    color: white;
+    font-size: 28px;
+    font-weight: normal;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c > * {
+    padding-bottom: 25px;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c {
+    margin-right: 8px;
+    margin-left: 0px;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-content-pane {
+    margin-bottom: 25px;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box div.jconfirm-content {
+    text-align: center;
+    color: white;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box .jconfirm-buttons {
+    text-align: center;
+}
+
+.jconfirm.jconfirm-supervan .jconfirm-box .jconfirm-buttons button {
+    font-size: 16px;
+    border-radius: 2px;
+    background: #303f53;
+    text-shadow: none;
+    border: none;
+    color: white;
+    padding: 10px;
+    min-width: 100px;
+}
+
+.jconfirm.jconfirm-supervan.jconfirm-rtl .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c {
+    margin-left: 8px;
+    margin-right: 0px;
+}
+
+.jconfirm.jconfirm-material .jconfirm-bg {
+    background-color: rgba(0, 0, 0, 0.67);
+}
+
+.jconfirm.jconfirm-material .jconfirm-box {
+    background-color: white;
+    -webkit-box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2), 0 13px 19px 2px rgba(0, 0, 0, 0.14), 0 5px 24px 4px rgba(0, 0, 0, 0.12);
+    box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2), 0 13px 19px 2px rgba(0, 0, 0, 0.14), 0 5px 24px 4px rgba(0, 0, 0, 0.12);
+    padding: 30px 25px 10px 25px;
+}
+
+.jconfirm.jconfirm-material .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+    margin-right: 8px;
+    margin-left: 0px;
+}
+
+.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-closeIcon {
+    color: rgba(0, 0, 0, 0.87);
+}
+
+.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-title-c {
+    color: rgba(0, 0, 0, 0.87);
+    font-size: 22px;
+    font-weight: bold;
+}
+
+.jconfirm.jconfirm-material .jconfirm-box div.jconfirm-content {
+    color: rgba(0, 0, 0, 0.87);
+}
+
+.jconfirm.jconfirm-material .jconfirm-box .jconfirm-buttons {
+    text-align: right;
+}
+
+.jconfirm.jconfirm-material .jconfirm-box .jconfirm-buttons button {
+    text-transform: uppercase;
+    font-weight: 500;
+}
+
+.jconfirm.jconfirm-material.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c {
+    margin-left: 8px;
+    margin-right: 0px;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-bg {
+    background-color: rgba(0, 0, 0, 0.21);
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box {
+    background-color: white;
+    -webkit-box-shadow: 0 3px 8px 0px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 3px 8px 0px rgba(0, 0, 0, 0.2);
+    border: solid 1px rgba(0, 0, 0, 0.4);
+    padding: 15px 0 0;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+    margin-right: 8px;
+    margin-left: 0px;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-closeIcon {
+    color: rgba(0, 0, 0, 0.87);
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-title-c {
+    color: rgba(0, 0, 0, 0.87);
+    font-size: 22px;
+    font-weight: bold;
+    padding-left: 15px;
+    padding-right: 15px;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box div.jconfirm-content {
+    color: rgba(0, 0, 0, 0.87);
+    padding: 0px 15px;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-buttons {
+    text-align: right;
+    padding: 10px;
+    margin: -5px 0 0px;
+    border-top: solid 1px #ddd;
+    overflow: hidden;
+    border-radius: 0 0 4px 4px;
+}
+
+.jconfirm.jconfirm-bootstrap .jconfirm-box .jconfirm-buttons button {
+    font-weight: 500;
+}
+
+.jconfirm.jconfirm-bootstrap.jconfirm-rtl .jconfirm-title-c .jconfirm-icon-c {
+    margin-left: 8px;
+    margin-right: 0px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-bg {
+    background-color: slategray;
+    opacity: .6;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box {
+    background-color: white;
+    -webkit-box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2), 0 13px 19px 2px rgba(0, 0, 0, 0.14), 0 5px 24px 4px rgba(0, 0, 0, 0.12);
+    box-shadow: 0 7px 8px -4px rgba(0, 0, 0, 0.2), 0 13px 19px 2px rgba(0, 0, 0, 0.14), 0 5px 24px 4px rgba(0, 0, 0, 0.12);
+    padding: 30px 30px 15px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-closeIcon {
+    color: rgba(0, 0, 0, 0.87);
+    top: 15px;
+    right: 15px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-title-c {
+    color: rgba(0, 0, 0, 0.87);
+    font-size: 24px;
+    font-weight: bold;
+    text-align: center;
+    margin-bottom: 10px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c {
+    -webkit-transition: -webkit-transform .5s;
+    transition: -webkit-transform .5s;
+    transition: transform .5s;
+    transition: transform .5s, -webkit-transform .5s;
+    -webkit-transform: scale(0);
+    transform: scale(0);
+    display: block;
+    margin-right: 0px;
+    margin-left: 0px;
+    margin-bottom: 10px;
+    font-size: 69px;
+    color: #aaa;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-content {
+    text-align: center;
+    font-size: 15px;
+    color: #777;
+    margin-bottom: 25px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons {
+    text-align: center;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons button {
+    font-weight: bold;
+    text-transform: uppercase;
+    -webkit-transition: background .1s;
+    transition: background .1s;
+    padding: 10px 20px;
+}
+
+.jconfirm.jconfirm-modern .jconfirm-box .jconfirm-buttons button + button {
+    margin-left: 4px;
+}
+
+.jconfirm.jconfirm-modern.jconfirm-open .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+    -webkit-transform: scale(1);
+    transform: scale(1);
+}
diff --git a/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.less b/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.less
new file mode 100644
index 0000000..a62c631
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/wwwroot/css/jquery-confirm.less
@@ -0,0 +1,943 @@
+/*!
+ * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/)
+ * Author: boniface pereira
+ * Website: www.craftpip.com
+ * Contact: hey@craftpip.com
+ *
+ * Copyright 2013-2019 jquery-confirm
+ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE)
+ */
+@blue: #3498db;
+@blueHover: #2980b9;
+@green: #2ecc71;
+@greenHover: #27ae60;
+@red: #e74c3c;
+@redHover: #c0392b;
+@orange: #f1c40f;
+@orangeHover: #f39c12;
+@purple: #9b59b6;
+@purpleHover: #8e44ad;
+@default: #ecf0f1;
+@defaultHover: #bdc3c7;
+@dark: #34495e;
+@darkHover: #2c3e50;
+
+@keyframes jconfirm-spin {
+  from {
+    transform: rotate(0deg);
+  }
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+body[class*=jconfirm-no-scroll-] {
+  overflow: hidden !important;
+}
+
+.jconfirm {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 99999999;
+  font-family: inherit;
+  overflow: hidden;
+
+  .jconfirm-bg {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    transition: opacity .4s;
+
+    &.jconfirm-bg-h {
+      opacity: 0 !important;
+    }
+  }
+  .jconfirm-scrollpane {
+    //overflow-y: auto;
+    perspective: 500px;
+    perspective-origin: center;
+
+    display: table;
+    width: 100%;
+    height: 100%;
+  }
+  .jconfirm-row {
+    display: table-row;
+    width: 100%;
+  }
+  .jconfirm-cell {
+    //height: 100%;
+    display: table-cell;
+    vertical-align: middle;
+  }
+  .jconfirm-holder {
+    max-height: 100%;
+    padding: 50px 0;
+  }
+  .jconfirm-box-container {
+    transition: transform;
+
+    &.jconfirm-no-transition {
+      transition: none !important;
+    }
+  }
+  .jconfirm-box {
+    background: white;
+    border-radius: 4px;
+    position: relative;
+    outline: none;
+    padding: 15px 15px 0;
+    overflow: hidden;
+    margin-left: auto;
+    margin-right: auto;
+
+    @keyframes type-blue {
+      1%, 100% {
+        border-color: @blue;
+      }
+      50% {
+        border-color: lighten(@blue, 10%);
+      }
+    }
+    @keyframes type-green {
+      1%, 100% {
+        border-color: @green;
+      }
+      50% {
+        border-color: lighten(@green, 10%);
+      }
+    }
+    @keyframes type-red {
+      1%, 100% {
+        border-color: @red;
+      }
+      50% {
+        border-color: lighten(@red, 10%);
+      }
+    }
+    @keyframes type-orange {
+      1%, 100% {
+        border-color: @orange;
+      }
+      50% {
+        border-color: lighten(@orange, 10%);
+      }
+    }
+    @keyframes type-purple {
+      1%, 100% {
+        border-color: @purple;
+      }
+      50% {
+        border-color: lighten(@purple, 10%);
+      }
+    }
+    @keyframes type-dark {
+      1%, 100% {
+        border-color: @dark;
+      }
+      50% {
+        border-color: lighten(@dark, 10%);
+      }
+    }
+    &.jconfirm-type-animated {
+      animation-duration: 2s;
+      animation-iteration-count: infinite;
+    }
+    &.jconfirm-type-blue {
+      border-top: solid 7px @blue;
+      animation-name: type-blue;
+    }
+    &.jconfirm-type-green {
+      border-top: solid 7px @green;
+      animation-name: type-green;
+    }
+    &.jconfirm-type-red {
+      border-top: solid 7px @red;
+      animation-name: type-red;
+    }
+    &.jconfirm-type-orange {
+      border-top: solid 7px @orange;
+      animation-name: type-orange;
+    }
+    &.jconfirm-type-purple {
+      border-top: solid 7px @purple;
+      animation-name: type-purple;
+    }
+    &.jconfirm-type-dark {
+      border-top: solid 7px @dark;
+      animation-name: type-dark;
+    }
+    &.loading {
+      height: 120px;
+
+      &:before {
+        content: '';
+        position: absolute;
+        left: 0;
+        background: white;
+        right: 0;
+        top: 0;
+        bottom: 0;
+        border-radius: 10px;
+        z-index: 1;
+      }
+      &:after {
+        opacity: 0.6;
+        content: '';
+        height: 30px;
+        width: 30px;
+        border: solid 3px transparent;
+        position: absolute;
+        left: 50%;
+        margin-left: -15px;
+        border-radius: 50%;
+        animation: jconfirm-spin 1s infinite linear;
+        border-bottom-color: dodgerblue;
+        top: 50%;
+        margin-top: -15px;
+        z-index: 2;
+      }
+    }
+
+    div.jconfirm-closeIcon {
+      height: 20px;
+      width: 20px;
+      position: absolute;
+      top: 10px;
+      right: 10px;
+      cursor: pointer;
+      opacity: .6;
+      text-align: center;
+      font-size: 27px !important;
+      line-height: 14px !important;
+      display: none;
+      z-index: 1;
+
+      &:empty {
+        display: none;
+      }
+
+      .fa {
+        font-size: 16px;
+      }
+      .glyphicon {
+        font-size: 16px;
+      }
+      .zmdi {
+        font-size: 16px;
+      }
+
+      &:hover {
+        opacity: 1;
+      }
+    }
+    div.jconfirm-title-c {
+      display: block;
+      font-size: 22px;
+      line-height: 20px;
+      user-select: none;
+      cursor: default;
+      padding-bottom: 15px;
+
+      &.jconfirm-hand {
+        cursor: move;
+      }
+      .jconfirm-icon-c {
+        font-size: inherit;
+        //padding-bottom: 15px;
+        display: inline-block;
+        vertical-align: middle;
+        i {
+          vertical-align: middle;
+        }
+        &:empty {
+          display: none;
+        }
+      }
+      .jconfirm-title {
+        user-select: none;
+        font-size: inherit;
+        font-family: inherit;
+        display: inline-block;
+        vertical-align: middle;
+        //padding-bottom: 15px;
+        &:empty {
+          display: none;
+        }
+      }
+    }
+
+    div.jconfirm-content-pane {
+      margin-bottom: 15px;
+      height: auto;
+      transition: height .4s ease-in;
+      display: inline-block;
+      width: 100%;
+      position: relative;
+      overflow-x: hidden;
+      overflow-y: auto;
+
+      &.no-scroll {
+        overflow-y: hidden;
+      }
+      &::-webkit-scrollbar {
+        width: 3px;
+      }
+
+      &::-webkit-scrollbar-track {
+        background: rgba(0, 0, 0, .1);
+      }
+
+      &::-webkit-scrollbar-thumb {
+        background: #666;
+        border-radius: 3px;
+      }
+
+      .jconfirm-content {
+        overflow: auto;
+
+        img {
+          max-width: 100%;
+          height: auto;
+        }
+        &:empty {
+          display: none;
+        }
+      }
+    }
+
+    .jconfirm-buttons {
+      padding-bottom: 11px;
+      > button {
+        margin-bottom: 4px;
+        margin-left: 2px;
+        margin-right: 2px;
+      }
+
+      button {
+        display: inline-block;
+        padding: 6px 12px;
+        font-size: 14px;
+        font-weight: 400;
+        line-height: 1.42857143;
+        text-align: center;
+        white-space: nowrap;
+        vertical-align: middle;
+        -ms-touch-action: manipulation;
+        touch-action: manipulation;
+        cursor: pointer;
+        -webkit-user-select: none;
+        -moz-user-select: none;
+        -ms-user-select: none;
+        user-select: none;
+        border-radius: 4px;
+        min-height: 1em;
+        //outline: blue;
+        //user-select: none;
+        transition: opacity .1s ease, background-color .1s ease, color .1s ease, box-shadow .1s ease, background .1s ease;
+        -webkit-tap-highlight-color: transparent;
+        border: none;
+        background-image: none;
+
+        &.btn-blue {
+          background-color: @blue;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @blueHover;
+            color: #FFF;
+          }
+        }
+
+        &.btn-green {
+          background-color: @green;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @greenHover;
+            color: #FFF;
+          }
+        }
+
+        &.btn-red {
+          background-color: @red;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @redHover;
+            color: #FFF;
+          }
+        }
+
+        &.btn-orange {
+          background-color: @orange;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @orangeHover;
+            color: #FFF;
+          }
+        }
+
+        &.btn-default {
+          background-color: @default;
+          color: #000;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @defaultHover;
+            color: #000;
+          }
+        }
+
+        &.btn-purple {
+          background-color: @purple;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @purpleHover;
+            color: #FFF;
+          }
+        }
+
+        &.btn-dark {
+          background-color: @dark;
+          color: #FFF;
+          text-shadow: none;
+          transition: background .2s;
+          &:hover {
+            background-color: @darkHover;
+            color: #FFF;
+          }
+        }
+      }
+    }
+
+    &.jconfirm-type-red .jconfirm-title-c .jconfirm-icon-c {
+      color: @red !important;
+    }
+    &.jconfirm-type-blue .jconfirm-title-c .jconfirm-icon-c {
+      color: @blue !important;
+    }
+    &.jconfirm-type-green .jconfirm-title-c .jconfirm-icon-c {
+      color: @green !important;
+    }
+    &.jconfirm-type-purple .jconfirm-title-c .jconfirm-icon-c {
+      color: @purple !important;
+    }
+    &.jconfirm-type-orange .jconfirm-title-c .jconfirm-icon-c {
+      color: @orange !important;
+    }
+    &.jconfirm-type-dark .jconfirm-title-c .jconfirm-icon-c {
+      color: @dark !important;
+    }
+  }
+
+  .jconfirm-clear {
+    clear: both;
+  }
+
+  &.jconfirm-rtl {
+    direction: rtl;
+    div.jconfirm-closeIcon {
+      left: 5px;
+      right: auto;
+    }
+  }
+
+  &.jconfirm-white, &.jconfirm-light {
+    .jconfirm-bg {
+      background-color: #444;
+      opacity: .2;
+    }
+    .jconfirm-box {
+      box-shadow: 0 2px 6px rgba(0, 0, 0, .2);
+      border-radius: 5px;
+
+      .jconfirm-title-c .jconfirm-icon-c {
+        margin-right: 8px;
+        margin-left: 0px;
+      }
+      .jconfirm-buttons {
+        float: right;
+
+        button {
+          text-transform: uppercase;
+          font-size: 14px;
+          font-weight: bold;
+          text-shadow: none;
+        }
+        button.btn-default {
+          box-shadow: none;
+          color: #333;
+
+          &:hover {
+            background: #ddd;
+          }
+        }
+      }
+    }
+    &.jconfirm-rtl {
+      .jconfirm-title-c .jconfirm-icon-c {
+        margin-left: 8px;
+        margin-right: 0px;
+      }
+    }
+  }
+
+  &.jconfirm-black, &.jconfirm-dark {
+    .jconfirm-bg {
+      background-color: darkslategray;
+      opacity: .4;
+    }
+    .jconfirm-box {
+      box-shadow: 0 2px 6px rgba(0, 0, 0, .2);
+      background: #444;
+      border-radius: 5px;
+      color: white;
+
+      .jconfirm-title-c .jconfirm-icon-c {
+        margin-right: 8px;
+        margin-left: 0px;
+      }
+
+      .jconfirm-buttons {
+        float: right;
+
+        button {
+          border: none;
+          background-image: none;
+          text-transform: uppercase;
+          font-size: 14px;
+          font-weight: bold;
+          text-shadow: none;
+          transition: background .1s;
+          color: white;
+        }
+        button.btn-default {
+          box-shadow: none;
+          color: #fff;
+          background: none;
+
+          &:hover {
+            background: #666;
+          }
+        }
+      }
+    }
+
+    &.jconfirm-rtl {
+      .jconfirm-title-c .jconfirm-icon-c {
+        margin-left: 8px;
+        margin-right: 0px;
+      }
+    }
+  }
+
+  .jconfirm-box.hilight {
+    &.jconfirm-hilight-shake {
+      animation: shake 0.82s cubic-bezier(.36, .07, .19, .97) both;
+      transform: translate3d(0, 0, 0);
+    }
+    &.jconfirm-hilight-glow {
+      animation: glow 0.82s cubic-bezier(.36, .07, .19, .97) both;
+      transform: translate3d(0, 0, 0);
+    }
+  }
+}
+
+@keyframes shake {
+  10%, 90% {
+    transform: translate3d(-2px, 0, 0);
+  }
+  20%, 80% {
+    transform: translate3d(4px, 0, 0);
+  }
+  30%, 50%, 70% {
+    transform: translate3d(-8px, 0, 0);
+  }
+  40%, 60% {
+    transform: translate3d(8px, 0, 0);
+  }
+}
+
+@keyframes glow {
+  0%, 100% {
+    box-shadow: 0 0 0px red;
+  }
+  50% {
+    box-shadow: 0 0 30px red;
+  }
+}
+
+/*Transition rules*/
+.jconfirm {
+  perspective: 400px;
+
+  .jconfirm-box {
+    opacity: 1;
+    transition-property: all;
+
+    &.jconfirm-animation-top, &.jconfirm-animation-left, &.jconfirm-animation-right, &.jconfirm-animation-bottom, &.jconfirm-animation-opacity, &.jconfirm-animation-zoom, &.jconfirm-animation-scale, &.jconfirm-animation-none, &.jconfirm-animation-rotate, &.jconfirm-animation-rotatex, &.jconfirm-animation-rotatey, &.jconfirm-animation-scaley, &.jconfirm-animation-scalex {
+      opacity: 0;
+    }
+    &.jconfirm-animation-rotate {
+      transform: rotate(90deg);
+    }
+    &.jconfirm-animation-rotatex {
+      transform: rotateX(90deg);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-rotatexr {
+      transform: rotateX(-90deg);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-rotatey {
+      transform: rotatey(90deg);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-rotateyr {
+      transform: rotatey(-90deg);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-scaley {
+      transform: scaley(1.5);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-scalex {
+      transform: scalex(1.5);
+      transform-origin: center;
+    }
+    &.jconfirm-animation-top {
+      transform: translate(0px, -100px);
+    }
+    &.jconfirm-animation-left {
+      transform: translate(-100px, 0px);
+    }
+    &.jconfirm-animation-right {
+      transform: translate(100px, 0px);
+    }
+    &.jconfirm-animation-bottom {
+      transform: translate(0px, 100px);
+    }
+    &.jconfirm-animation-opacity {
+
+    }
+    &.jconfirm-animation-zoom {
+      transform: scale(1.2);
+    }
+    &.jconfirm-animation-scale {
+      transform: scale(0.5);
+    }
+    &.jconfirm-animation-none {
+      visibility: hidden;
+    }
+  }
+}
+
+.jconfirm.jconfirm-supervan {
+  .jconfirm-bg {
+    background-color: rgba(54, 70, 93, .95);
+  }
+
+  .jconfirm-box {
+    background-color: transparent;
+
+    &.jconfirm-type-blue {
+      border: none;
+    }
+    &.jconfirm-type-green {
+      border: none;
+    }
+    &.jconfirm-type-red {
+      border: none;
+    }
+    &.jconfirm-type-orange {
+      border: none;
+    }
+    &.jconfirm-type-purple {
+      border: none;
+    }
+    &.jconfirm-type-dark {
+      border: none;
+    }
+
+    div.jconfirm-closeIcon {
+      color: white;
+    }
+
+    div.jconfirm-title-c {
+      text-align: center;
+      color: white;
+      font-size: 28px;
+      font-weight: normal;
+      > * {
+        padding-bottom: 25px;
+      }
+
+      .jconfirm-icon-c {
+        margin-right: 8px;
+        margin-left: 0px;
+      }
+    }
+    div.jconfirm-content-pane {
+      margin-bottom: 25px;
+    }
+    div.jconfirm-content {
+      text-align: center;
+      color: white;
+
+      &:empty {
+        &:before {
+
+        }
+        &:after {
+
+        }
+      }
+    }
+    .jconfirm-buttons {
+      text-align: center;
+
+      button {
+        font-size: 16px;
+        border-radius: 2px;
+        background: darken(#36465D, 3%);
+        text-shadow: none;
+        border: none;
+        color: white;
+        padding: 10px;
+        min-width: 100px;
+      }
+      button + button {
+
+      }
+    }
+    &.hilight {
+
+    }
+  }
+
+  &.jconfirm-rtl {
+    .jconfirm-box div.jconfirm-title-c .jconfirm-icon-c {
+      margin-left: 8px;
+      margin-right: 0px;
+    }
+  }
+}
+
+.jconfirm.jconfirm-material {
+  .jconfirm-bg {
+    background-color: rgba(0, 0, 0, .67);
+  }
+  .jconfirm-box {
+    background-color: white;
+    box-shadow: 0 7px 8px -4px rgba(0, 0, 0, .2), 0 13px 19px 2px rgba(0, 0, 0, .14), 0 5px 24px 4px rgba(0, 0, 0, .12);
+    padding: 30px 25px 10px 25px;
+
+    .jconfirm-title-c .jconfirm-icon-c {
+      margin-right: 8px;
+      margin-left: 0px;
+    }
+
+    div.jconfirm-closeIcon {
+      color: rgba(0, 0, 0, .87);
+    }
+
+    div.jconfirm-title-c {
+      color: rgba(0, 0, 0, .87);
+      font-size: 22px;
+      font-weight: bold;
+    }
+    div.jconfirm-content {
+      color: rgba(0, 0, 0, .87);
+
+      &:empty {
+        &:before {
+
+        }
+        &:after {
+
+        }
+      }
+    }
+    .jconfirm-buttons {
+      text-align: right;
+
+      button {
+        text-transform: uppercase;
+        font-weight: 500;
+      }
+      button + button {
+
+      }
+    }
+    &.hilight {
+
+    }
+  }
+
+  &.jconfirm-rtl {
+    .jconfirm-title-c .jconfirm-icon-c {
+      margin-left: 8px;
+      margin-right: 0px;
+    }
+  }
+}
+
+.jconfirm.jconfirm-bootstrap {
+  .jconfirm-bg {
+    background-color: rgba(0, 0, 0, .21);
+  }
+
+  .jconfirm-box {
+    background-color: white;
+    box-shadow: 0 3px 8px 0px rgba(0, 0, 0, 0.2);
+    border: solid 1px rgba(0, 0, 0, 0.4);
+    padding: 15px 0 0;
+
+    .jconfirm-title-c .jconfirm-icon-c {
+      margin-right: 8px;
+      margin-left: 0px;
+    }
+
+    div.jconfirm-closeIcon {
+      color: rgba(0, 0, 0, 0.87);
+    }
+
+    div.jconfirm-title-c {
+      color: rgba(0, 0, 0, 0.87);
+      font-size: 22px;
+      font-weight: bold;
+      padding-left: 15px;
+      padding-right: 15px;
+    }
+    div.jconfirm-content-pane {
+
+    }
+    div.jconfirm-content {
+      color: rgba(0, 0, 0, 0.87);
+      padding: 0px 15px;
+
+      &:empty {
+        &:before {
+
+        }
+        &:after {
+
+        }
+      }
+    }
+    .jconfirm-buttons {
+      text-align: right;
+      padding: 10px;
+      margin: -5px 0 0px;
+      border-top: solid 1px #ddd;
+      overflow: hidden;
+      border-radius: 0 0 4px 4px;
+
+      button {
+        font-weight: 500;
+      }
+      button + button {
+
+      }
+    }
+    &.hilight {
+
+    }
+  }
+
+  &.jconfirm-rtl {
+    .jconfirm-title-c .jconfirm-icon-c {
+      margin-left: 8px;
+      margin-right: 0px;
+    }
+  }
+}
+
+.jconfirm.jconfirm-modern {
+  .jconfirm-bg {
+    background-color: slategray;
+    opacity: .6;
+  }
+
+  .jconfirm-box {
+    background-color: white;
+    box-shadow: 0 7px 8px -4px rgba(0, 0, 0, .2), 0 13px 19px 2px rgba(0, 0, 0, .14), 0 5px 24px 4px rgba(0, 0, 0, .12);
+    padding: 30px 30px 15px;
+
+    div.jconfirm-closeIcon {
+      color: rgba(0, 0, 0, 0.87);
+      top: 15px;
+      right: 15px;
+    }
+
+    div.jconfirm-title-c {
+      color: rgba(0, 0, 0, .87);
+      font-size: 24px;
+      font-weight: bold;
+      text-align: center;
+      margin-bottom: 10px;
+
+      .jconfirm-icon-c {
+        transition: transform .5s;
+        transform: scale(0);
+        display: block;
+        margin-right: 0px;
+        margin-left: 0px;
+        margin-bottom: 10px;
+        font-size: 69px;
+        color: #aaa;
+      }
+    }
+
+    div.jconfirm-content {
+      text-align: center;
+      font-size: 15px;
+      color: #777;
+      margin-bottom: 25px;
+
+      &:empty {
+        &:before {
+
+        }
+        &:after {
+
+        }
+      }
+    }
+    .jconfirm-buttons {
+      text-align: center;
+
+      button {
+        font-weight: bold;
+        text-transform: uppercase;
+        transition: background .1s;
+        padding: 10px 20px;
+
+        &.btn-success {
+
+        }
+      }
+      button + button {
+        margin-left: 4px;
+      }
+    }
+  }
+  &.jconfirm-open {
+    .jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
+      transform: scale(1);
+    }
+  }
+}
\ No newline at end of file
diff --git a/zhengcaioa/zhengcaioa/wwwroot/js/jquery-confirm.js b/zhengcaioa/zhengcaioa/wwwroot/js/jquery-confirm.js
new file mode 100644
index 0000000..a1f6747
--- /dev/null
+++ b/zhengcaioa/zhengcaioa/wwwroot/js/jquery-confirm.js
@@ -0,0 +1,1379 @@
+/*!
+ * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/)
+ * Author: Boniface Pereira
+ * Website: www.craftpip.com
+ * Contact: hey@craftpip.com
+ *
+ * Copyright 2013-2019 jquery-confirm
+ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE)
+ */
+
+
+/**
+ * UMD (Universal Module Definition) to support CommonJS, AMD and browser
+ * Thanks to https://github.com/umdjs/umd
+ */
+(function(factory){
+    if(typeof define === 'function' && define.amd){
+        // AMD. Register as an anonymous module.
+        define(['jquery'], factory);
+    }else if(typeof module === 'object' && module.exports){
+        // Node/CommonJS
+        module.exports = function(root, jQuery){
+            if(jQuery === undefined){
+                // require('jQuery') returns a factory that requires window to
+                // build a jQuery instance, we normalize how we use modules
+                // that require this pattern but the window provided is a noop
+                // if it's defined (how jquery works)
+                if(typeof window !== 'undefined'){
+                    jQuery = require('jquery');
+                }
+                else{
+                    jQuery = require('jquery')(root);
+                }
+            }
+            factory(jQuery);
+            return jQuery;
+        };
+    }else{
+        // Browser globals
+        factory(jQuery);
+    }
+}(function($){
+    "use strict";
+
+    // locally assign window
+    var w = window;
+    // w.jconfirm
+    // w.Jconfirm;
+
+    $.fn.confirm = function(options, option2){
+        if(typeof options === 'undefined') options = {};
+        if(typeof options === 'string'){
+            options = {
+                content: options,
+                title: (option2) ? option2 : false
+            };
+        }
+        /*
+         *  Alias of $.confirm to emulate native confirm()
+         */
+        $(this).each(function(){
+            var $this = $(this);
+            if($this.attr('jc-attached')){
+                console.warn('jConfirm has already been attached to this element ', $this[0]);
+                return;
+            }
+
+            $this.on('click', function(e){
+                e.preventDefault();
+                var jcOption = $.extend({}, options);
+                if($this.attr('data-title'))
+                    jcOption['title'] = $this.attr('data-title');
+                if($this.attr('data-content'))
+                    jcOption['content'] = $this.attr('data-content');
+                if(typeof jcOption['buttons'] === 'undefined')
+                    jcOption['buttons'] = {};
+
+                jcOption['$target'] = $this;
+                if($this.attr('href') && Object.keys(jcOption['buttons']).length === 0){
+                    var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {});
+                    var firstBtn = Object.keys(buttons)[0];
+                    jcOption['buttons'] = buttons;
+                    jcOption.buttons[firstBtn].action = function(){
+                        location.href = $this.attr('href');
+                    };
+                }
+                jcOption['closeIcon'] = false;
+                var instance = $.confirm(jcOption);
+            });
+
+            $this.attr('jc-attached', true);
+        });
+        return $(this);
+    };
+    $.confirm = function(options, option2){
+        if(typeof options === 'undefined') options = {};
+        if(typeof options === 'string'){
+            options = {
+                content: options,
+                title: (option2) ? option2 : false
+            };
+        }
+
+        var putDefaultButtons = !(options['buttons'] === false);
+
+        if(typeof options['buttons'] !== 'object')
+            options['buttons'] = {};
+
+        if(Object.keys(options['buttons']).length === 0 && putDefaultButtons){
+            var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {});
+            options['buttons'] = buttons;
+        }
+
+        /*
+         *  Alias of jconfirm
+         */
+        return w.jconfirm(options);
+    };
+    $.alert = function(options, option2){
+        if(typeof options === 'undefined') options = {};
+        if(typeof options === 'string'){
+            options = {
+                content: options,
+                title: (option2) ? option2 : false
+            };
+        }
+
+        var putDefaultButtons = !(options['buttons'] === false);
+
+        if(typeof options.buttons !== 'object')
+            options.buttons = {};
+
+        if(Object.keys(options['buttons']).length === 0 && putDefaultButtons){
+            var buttons = $.extend(true, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {});
+            var firstBtn = Object.keys(buttons)[0];
+            options['buttons'][firstBtn] = buttons[firstBtn];
+        }
+        /*
+         *  Alias of jconfirm
+         */
+        return w.jconfirm(options);
+    };
+    $.dialog = function(options, option2){
+        if(typeof options === 'undefined') options = {};
+        if(typeof options === 'string'){
+            options = {
+                content: options,
+                title: (option2) ? option2 : false,
+                closeIcon: function(){
+                    // Just close the modal
+                }
+            };
+        }
+
+        options['buttons'] = {}; // purge buttons
+
+        if(typeof options['closeIcon'] === 'undefined'){
+            // Dialog must have a closeIcon.
+            options['closeIcon'] = function(){
+            }
+        }
+        /*
+         *  Alias of jconfirm
+         */
+        options.confirmKeys = [13];
+        return w.jconfirm(options);
+    };
+
+    w.jconfirm = function(options){
+        if(typeof options === 'undefined') options = {};
+        /*
+         * initial function for calling.
+         */
+        var pluginOptions = $.extend(true, {}, w.jconfirm.pluginDefaults);
+        if(w.jconfirm.defaults){
+            pluginOptions = $.extend(true, pluginOptions, w.jconfirm.defaults);
+        }
+
+        /*
+         * merge options with plugin defaults.
+         */
+        pluginOptions = $.extend(true, {}, pluginOptions, options);
+        var instance = new w.Jconfirm(pluginOptions);
+        w.jconfirm.instances.push(instance);
+        return instance;
+    };
+    w.Jconfirm = function(options){
+        /*
+         * constructor function Jconfirm,
+         * options = user options.
+         */
+        $.extend(this, options);
+        this._init();
+    };
+    w.Jconfirm.prototype = {
+        _init: function(){
+            var that = this;
+
+            if(!w.jconfirm.instances.length)
+                w.jconfirm.lastFocused = $('body').find(':focus');
+
+            this._id = Math.round(Math.random() * 99999);
+            /**
+             * contentParsed maintains the contents for $content, before it is put in DOM
+             */
+            this.contentParsed = $(document.createElement('div'));
+
+            if(!this.lazyOpen){
+                setTimeout(function(){
+                    that.open();
+                }, 0);
+            }
+        },
+        _buildHTML: function(){
+            var that = this;
+
+            // prefix the animation string and store in animationParsed
+            this._parseAnimation(this.animation, 'o');
+            this._parseAnimation(this.closeAnimation, 'c');
+            this._parseBgDismissAnimation(this.backgroundDismissAnimation);
+            this._parseColumnClass(this.columnClass);
+            this._parseTheme(this.theme);
+            this._parseType(this.type);
+
+            /*
+             * Append html.
+             */
+            var template = $(this.template);
+            template.find('.jconfirm-box').addClass(this.animationParsed).addClass(this.backgroundDismissAnimationParsed).addClass(this.typeParsed);
+
+            if(this.typeAnimated)
+                template.find('.jconfirm-box').addClass('jconfirm-type-animated');
+
+            if(this.useBootstrap){
+                template.find('.jc-bs3-row').addClass(this.bootstrapClasses.row);
+                template.find('.jc-bs3-row').addClass('justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center');
+
+                template.find('.jconfirm-box-container').addClass(this.columnClassParsed);
+
+                if(this.containerFluid)
+                    template.find('.jc-bs3-container').addClass(this.bootstrapClasses.containerFluid);
+                else
+                    template.find('.jc-bs3-container').addClass(this.bootstrapClasses.container);
+            }else{
+                template.find('.jconfirm-box').css('width', this.boxWidth);
+            }
+
+            if(this.titleClass)
+                template.find('.jconfirm-title-c').addClass(this.titleClass);
+
+            template.addClass(this.themeParsed);
+            var ariaLabel = 'jconfirm-box' + this._id;
+            template.find('.jconfirm-box').attr('aria-labelledby', ariaLabel).attr('tabindex', -1);
+            template.find('.jconfirm-content').attr('id', ariaLabel);
+            if(this.bgOpacity !== null)
+                template.find('.jconfirm-bg').css('opacity', this.bgOpacity);
+            if(this.rtl)
+                template.addClass('jconfirm-rtl');
+
+            this.$el = template.appendTo(this.container);
+            this.$jconfirmBoxContainer = this.$el.find('.jconfirm-box-container');
+            this.$jconfirmBox = this.$body = this.$el.find('.jconfirm-box');
+            this.$jconfirmBg = this.$el.find('.jconfirm-bg');
+            this.$title = this.$el.find('.jconfirm-title');
+            this.$titleContainer = this.$el.find('.jconfirm-title-c');
+            this.$content = this.$el.find('div.jconfirm-content');
+            this.$contentPane = this.$el.find('.jconfirm-content-pane');
+            this.$icon = this.$el.find('.jconfirm-icon-c');
+            this.$closeIcon = this.$el.find('.jconfirm-closeIcon');
+            this.$holder = this.$el.find('.jconfirm-holder');
+            // this.$content.css(this._getCSS(this.animationSpeed, this.animationBounce));
+            this.$btnc = this.$el.find('.jconfirm-buttons');
+            this.$scrollPane = this.$el.find('.jconfirm-scrollpane');
+
+            that.setStartingPoint();
+
+            // for loading content via URL
+            this._contentReady = $.Deferred();
+            this._modalReady = $.Deferred();
+            this.$holder.css({
+                'padding-top': this.offsetTop,
+                'padding-bottom': this.offsetBottom,
+            });
+
+            this.setTitle();
+            this.setIcon();
+            this._setButtons();
+            this._parseContent();
+            this.initDraggable();
+
+            if(this.isAjax)
+                this.showLoading(false);
+
+            $.when(this._contentReady, this._modalReady).then(function(){
+                if(that.isAjaxLoading)
+                    setTimeout(function(){
+                        that.isAjaxLoading = false;
+                        that.setContent();
+                        that.setTitle();
+                        that.setIcon();
+                        setTimeout(function(){
+                            that.hideLoading(false);
+                            that._updateContentMaxHeight();
+                        }, 100);
+                        if(typeof that.onContentReady === 'function')
+                            that.onContentReady();
+                    }, 50);
+                else{
+                    // that.setContent();
+                    that._updateContentMaxHeight();
+                    that.setTitle();
+                    that.setIcon();
+                    if(typeof that.onContentReady === 'function')
+                        that.onContentReady();
+                }
+
+                // start countdown after content has loaded.
+                if(that.autoClose)
+                    that._startCountDown();
+            }).then(function(){
+                that._watchContent();
+            });
+
+            if(this.animation === 'none'){
+                this.animationSpeed = 1;
+                this.animationBounce = 1;
+            }
+
+            this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce));
+            this.$contentPane.css(this._getCSS(this.animationSpeed, 1));
+            this.$jconfirmBg.css(this._getCSS(this.animationSpeed, 1));
+            this.$jconfirmBoxContainer.css(this._getCSS(this.animationSpeed, 1));
+        },
+        _typePrefix: 'jconfirm-type-',
+        typeParsed: '',
+        _parseType: function(type){
+            this.typeParsed = this._typePrefix + type;
+        },
+        setType: function(type){
+            var oldClass = this.typeParsed;
+            this._parseType(type);
+            this.$jconfirmBox.removeClass(oldClass).addClass(this.typeParsed);
+        },
+        themeParsed: '',
+        _themePrefix: 'jconfirm-',
+        setTheme: function(theme){
+            var previous = this.theme;
+            this.theme = theme || this.theme;
+            this._parseTheme(this.theme);
+            if(previous)
+                this.$el.removeClass(previous);
+            this.$el.addClass(this.themeParsed);
+            this.theme = theme;
+        },
+        _parseTheme: function(theme){
+            var that = this;
+            theme = theme.split(',');
+            $.each(theme, function(k, a){
+                if(a.indexOf(that._themePrefix) === -1)
+                    theme[k] = that._themePrefix + $.trim(a);
+            });
+            this.themeParsed = theme.join(' ').toLowerCase();
+        },
+        backgroundDismissAnimationParsed: '',
+        _bgDismissPrefix: 'jconfirm-hilight-',
+        _parseBgDismissAnimation: function(bgDismissAnimation){
+            var animation = bgDismissAnimation.split(',');
+            var that = this;
+            $.each(animation, function(k, a){
+                if(a.indexOf(that._bgDismissPrefix) === -1)
+                    animation[k] = that._bgDismissPrefix + $.trim(a);
+            });
+            this.backgroundDismissAnimationParsed = animation.join(' ').toLowerCase();
+        },
+        animationParsed: '',
+        closeAnimationParsed: '',
+        _animationPrefix: 'jconfirm-animation-',
+        setAnimation: function(animation){
+            this.animation = animation || this.animation;
+            this._parseAnimation(this.animation, 'o');
+        },
+        _parseAnimation: function(animation, which){
+            which = which || 'o'; // parse what animation and store where. open or close?
+            var animations = animation.split(',');
+            var that = this;
+            $.each(animations, function(k, a){
+                if(a.indexOf(that._animationPrefix) === -1)
+                    animations[k] = that._animationPrefix + $.trim(a);
+            });
+            var a_string = animations.join(' ').toLowerCase();
+            if(which === 'o')
+                this.animationParsed = a_string;
+            else
+                this.closeAnimationParsed = a_string;
+
+            return a_string;
+        },
+        setCloseAnimation: function(closeAnimation){
+            this.closeAnimation = closeAnimation || this.closeAnimation;
+            this._parseAnimation(this.closeAnimation, 'c');
+        },
+        setAnimationSpeed: function(speed){
+            this.animationSpeed = speed || this.animationSpeed;
+            // this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce));
+        },
+        columnClassParsed: '',
+        setColumnClass: function(colClass){
+            if(!this.useBootstrap){
+                console.warn("cannot set columnClass, useBootstrap is set to false");
+                return;
+            }
+            this.columnClass = colClass || this.columnClass;
+            this._parseColumnClass(this.columnClass);
+            this.$jconfirmBoxContainer.addClass(this.columnClassParsed);
+        },
+        _updateContentMaxHeight: function(){
+            var height = $(window).height() - (this.$jconfirmBox.outerHeight() - this.$contentPane.outerHeight()) - (this.offsetTop + this.offsetBottom);
+            this.$contentPane.css({
+                'max-height': height + 'px'
+            });
+        },
+        setBoxWidth: function(width){
+            if(this.useBootstrap){
+                console.warn("cannot set boxWidth, useBootstrap is set to true");
+                return;
+            }
+            this.boxWidth = width;
+            this.$jconfirmBox.css('width', width);
+        },
+        _parseColumnClass: function(colClass){
+            colClass = colClass.toLowerCase();
+            var p;
+            switch(colClass){
+                case 'xl':
+                case 'xlarge':
+                    p = 'col-md-12';
+                    break;
+                case 'l':
+                case 'large':
+                    p = 'col-md-8 col-md-offset-2';
+                    break;
+                case 'm':
+                case 'medium':
+                    p = 'col-md-6 col-md-offset-3';
+                    break;
+                case 's':
+                case 'small':
+                    p = 'col-md-4 col-md-offset-4';
+                    break;
+                case 'xs':
+                case 'xsmall':
+                    p = 'col-md-2 col-md-offset-5';
+                    break;
+                default:
+                    p = colClass;
+            }
+            this.columnClassParsed = p;
+        },
+        initDraggable: function(){
+            var that = this;
+            var $t = this.$titleContainer;
+
+            this.resetDrag();
+            if(this.draggable){
+                $t.on('mousedown', function(e){
+                    $t.addClass('jconfirm-hand');
+                    that.mouseX = e.clientX;
+                    that.mouseY = e.clientY;
+                    that.isDrag = true;
+                });
+                $(window).on('mousemove.' + this._id, function(e){
+                    if(that.isDrag){
+                        that.movingX = e.clientX - that.mouseX + that.initialX;
+                        that.movingY = e.clientY - that.mouseY + that.initialY;
+                        that.setDrag();
+                    }
+                });
+
+                $(window).on('mouseup.' + this._id, function(){
+                    $t.removeClass('jconfirm-hand');
+                    if(that.isDrag){
+                        that.isDrag = false;
+                        that.initialX = that.movingX;
+                        that.initialY = that.movingY;
+                    }
+                })
+            }
+        },
+        resetDrag: function(){
+            this.isDrag = false;
+            this.initialX = 0;
+            this.initialY = 0;
+            this.movingX = 0;
+            this.movingY = 0;
+            this.mouseX = 0;
+            this.mouseY = 0;
+            this.$jconfirmBoxContainer.css('transform', 'translate(' + 0 + 'px, ' + 0 + 'px)');
+        },
+        setDrag: function(){
+            if(!this.draggable)
+                return;
+
+            this.alignMiddle = false;
+            var boxWidth = this.$jconfirmBox.outerWidth();
+            var boxHeight = this.$jconfirmBox.outerHeight();
+            var windowWidth = $(window).width();
+            var windowHeight = $(window).height();
+            var that = this;
+            var dragUpdate = 1;
+            if(that.movingX % dragUpdate === 0 || that.movingY % dragUpdate === 0){
+                if(that.dragWindowBorder){
+                    var leftDistance = (windowWidth / 2) - boxWidth / 2;
+                    var topDistance = (windowHeight / 2) - boxHeight / 2;
+                    topDistance -= that.dragWindowGap;
+                    leftDistance -= that.dragWindowGap;
+
+                    if(leftDistance + that.movingX < 0){
+                        that.movingX = -leftDistance;
+                    }else if(leftDistance - that.movingX < 0){
+                        that.movingX = leftDistance;
+                    }
+
+                    if(topDistance + that.movingY < 0){
+                        that.movingY = -topDistance;
+                    }else if(topDistance - that.movingY < 0){
+                        that.movingY = topDistance;
+                    }
+                }
+
+                that.$jconfirmBoxContainer.css('transform', 'translate(' + that.movingX + 'px, ' + that.movingY + 'px)');
+            }
+        },
+        _scrollTop: function(){
+            if(typeof pageYOffset !== 'undefined'){
+                //most browsers except IE before #9
+                return pageYOffset;
+            }
+            else{
+                var B = document.body; //IE 'quirks'
+                var D = document.documentElement; //IE with doctype
+                D = (D.clientHeight) ? D : B;
+                return D.scrollTop;
+            }
+        },
+        _watchContent: function(){
+            var that = this;
+            if(this._timer) clearInterval(this._timer);
+
+            var prevContentHeight = 0;
+            this._timer = setInterval(function(){
+                if(that.smoothContent){
+                    var contentHeight = that.$content.outerHeight() || 0;
+                    if(contentHeight !== prevContentHeight){
+
+                        // Commented out to prevent scroll to top when updating the content
+                        // (for example when using ajax in forms in content)
+                        // that.$contentPane.css({
+                        //     'height': contentHeight
+                        // }).scrollTop(0);
+                        prevContentHeight = contentHeight;
+                    }
+                    var wh = $(window).height();
+                    var total = that.offsetTop + that.offsetBottom + that.$jconfirmBox.height() - that.$contentPane.height() + that.$content.height();
+                    if(total < wh){
+                        that.$contentPane.addClass('no-scroll');
+                    }else{
+                        that.$contentPane.removeClass('no-scroll');
+                    }
+                }
+            }, this.watchInterval);
+        },
+        _overflowClass: 'jconfirm-overflow',
+        _hilightAnimating: false,
+        highlight: function(){
+            this.hiLightModal();
+        },
+        hiLightModal: function(){
+            var that = this;
+            if(this._hilightAnimating)
+                return;
+
+            that.$body.addClass('hilight');
+            var duration = parseFloat(that.$body.css('animation-duration')) || 2;
+            this._hilightAnimating = true;
+            setTimeout(function(){
+                that._hilightAnimating = false;
+                that.$body.removeClass('hilight');
+            }, duration * 1000);
+        },
+        _bindEvents: function(){
+            var that = this;
+            this.boxClicked = false;
+
+            this.$scrollPane.click(function(e){ // Ignore propagated clicks
+                if(!that.boxClicked){ // Background clicked
+                    /*
+                     If backgroundDismiss is a function and its return value is truthy
+                     proceed to close the modal.
+                     */
+                    var buttonName = false;
+                    var shouldClose = false;
+                    var str;
+
+                    if(typeof that.backgroundDismiss === 'function')
+                        str = that.backgroundDismiss();
+                    else
+                        str = that.backgroundDismiss;
+
+                    if(typeof str === 'string' && typeof that.buttons[str] !== 'undefined'){
+                        buttonName = str;
+                        shouldClose = false;
+                    }else if(typeof str === 'undefined' || !!(str) === true){
+                        shouldClose = true;
+                    }else{
+                        shouldClose = false;
+                    }
+
+                    if(buttonName){
+                        var btnResponse = that.buttons[buttonName].action.apply(that);
+                        shouldClose = (typeof btnResponse === 'undefined') || !!(btnResponse);
+                    }
+
+                    if(shouldClose)
+                        that.close();
+                    else
+                        that.hiLightModal();
+                }
+                that.boxClicked = false;
+            });
+
+            this.$jconfirmBox.click(function(e){
+                that.boxClicked = true;
+            });
+
+            var isKeyDown = false;
+            $(window).on('jcKeyDown.' + that._id, function(e){
+                if(!isKeyDown){
+                    isKeyDown = true;
+                }
+            });
+            $(window).on('keyup.' + that._id, function(e){
+                if(isKeyDown){
+                    that.reactOnKey(e);
+                    isKeyDown = false;
+                }
+            });
+
+            $(window).on('resize.' + this._id, function(){
+                that._updateContentMaxHeight();
+                setTimeout(function(){
+                    that.resetDrag();
+                }, 100);
+            });
+        },
+        _cubic_bezier: '0.36, 0.55, 0.19',
+        _getCSS: function(speed, bounce){
+            return {
+                '-webkit-transition-duration': speed / 1000 + 's',
+                'transition-duration': speed / 1000 + 's',
+                '-webkit-transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')',
+                'transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')'
+            };
+        },
+        _setButtons: function(){
+            var that = this;
+            /*
+             * Settings up buttons
+             */
+
+            var total_buttons = 0;
+            if(typeof this.buttons !== 'object')
+                this.buttons = {};
+
+            $.each(this.buttons, function(key, button){
+                total_buttons += 1;
+                if(typeof button === 'function'){
+                    that.buttons[key] = button = {
+                        action: button
+                    };
+                }
+
+                that.buttons[key].text = button.text || key;
+                that.buttons[key].btnClass = button.btnClass || 'btn-default';
+                that.buttons[key].action = button.action || function(){
+                };
+                that.buttons[key].keys = button.keys || [];
+                that.buttons[key].isHidden = button.isHidden || false;
+                that.buttons[key].isDisabled = button.isDisabled || false;
+
+                $.each(that.buttons[key].keys, function(i, a){
+                    that.buttons[key].keys[i] = a.toLowerCase();
+                });
+
+                var button_element = $('<button type="button" class="btn"></button>')
+                    .html(that.buttons[key].text)
+                    .addClass(that.buttons[key].btnClass)
+                    .prop('disabled', that.buttons[key].isDisabled)
+                    .css('display', that.buttons[key].isHidden ? 'none' : '')
+                    .click(function(e){
+                        e.preventDefault();
+                        var res = that.buttons[key].action.apply(that, [that.buttons[key]]);
+                        that.onAction.apply(that, [key, that.buttons[key]]);
+                        that._stopCountDown();
+                        if(typeof res === 'undefined' || res)
+                            that.close();
+                    });
+
+                that.buttons[key].el = button_element;
+                that.buttons[key].setText = function(text){
+                    button_element.html(text);
+                };
+                that.buttons[key].addClass = function(className){
+                    button_element.addClass(className);
+                };
+                that.buttons[key].removeClass = function(className){
+                    button_element.removeClass(className);
+                };
+                that.buttons[key].disable = function(){
+                    that.buttons[key].isDisabled = true;
+                    button_element.prop('disabled', true);
+                };
+                that.buttons[key].enable = function(){
+                    that.buttons[key].isDisabled = false;
+                    button_element.prop('disabled', false);
+                };
+                that.buttons[key].show = function(){
+                    that.buttons[key].isHidden = false;
+                    button_element.css('display', '');
+                };
+                that.buttons[key].hide = function(){
+                    that.buttons[key].isHidden = true;
+                    button_element.css('display', 'none');
+                };
+                /*
+                 Buttons are prefixed with $_ or $$ for quick access
+                 */
+                that['$_' + key] = that['$$' + key] = button_element;
+                that.$btnc.append(button_element);
+            });
+
+            if(total_buttons === 0) this.$btnc.hide();
+            if(this.closeIcon === null && total_buttons === 0){
+                /*
+                 in case when no buttons are present & closeIcon is null, closeIcon is set to true,
+                 set closeIcon to true to explicitly tell to hide the close icon
+                 */
+                this.closeIcon = true;
+            }
+
+            if(this.closeIcon){
+                if(this.closeIconClass){
+                    // user requires a custom class.
+                    var closeHtml = '<i class="' + this.closeIconClass + '"></i>';
+                    this.$closeIcon.html(closeHtml);
+                }
+
+                this.$closeIcon.click(function(e){
+                    e.preventDefault();
+
+                    var buttonName = false;
+                    var shouldClose = false;
+                    var str;
+
+                    if(typeof that.closeIcon === 'function'){
+                        str = that.closeIcon();
+                    }else{
+                        str = that.closeIcon;
+                    }
+
+                    if(typeof str === 'string' && typeof that.buttons[str] !== 'undefined'){
+                        buttonName = str;
+                        shouldClose = false;
+                    }else if(typeof str === 'undefined' || !!(str) === true){
+                        shouldClose = true;
+                    }else{
+                        shouldClose = false;
+                    }
+                    if(buttonName){
+                        var btnResponse = that.buttons[buttonName].action.apply(that);
+                        shouldClose = (typeof btnResponse === 'undefined') || !!(btnResponse);
+                    }
+                    if(shouldClose){
+                        that.close();
+                    }
+                });
+                this.$closeIcon.show();
+            }else{
+                this.$closeIcon.hide();
+            }
+        },
+        setTitle: function(string, force){
+            force = force || false;
+
+            if(typeof string !== 'undefined')
+                if(typeof string === 'string')
+                    this.title = string;
+                else if(typeof string === 'function'){
+                    if(typeof string.promise === 'function')
+                        console.error('Promise was returned from title function, this is not supported.');
+
+                    var response = string();
+                    if(typeof response === 'string')
+                        this.title = response;
+                    else
+                        this.title = false;
+                }else
+                    this.title = false;
+
+            if(this.isAjaxLoading && !force)
+                return;
+
+            this.$title.html(this.title || '');
+            this.updateTitleContainer();
+        },
+        setIcon: function(iconClass, force){
+            force = force || false;
+
+            if(typeof iconClass !== 'undefined')
+                if(typeof iconClass === 'string')
+                    this.icon = iconClass;
+                else if(typeof iconClass === 'function'){
+                    var response = iconClass();
+                    if(typeof response === 'string')
+                        this.icon = response;
+                    else
+                        this.icon = false;
+                }
+                else
+                    this.icon = false;
+
+            if(this.isAjaxLoading && !force)
+                return;
+
+            this.$icon.html(this.icon ? '<i class="' + this.icon + '"></i>' : '');
+            this.updateTitleContainer();
+        },
+        updateTitleContainer: function(){
+            if(!this.title && !this.icon){
+                this.$titleContainer.hide();
+            }else{
+                this.$titleContainer.show();
+            }
+        },
+        setContentPrepend: function(content, force){
+            if(!content)
+                return;
+
+            this.contentParsed.prepend(content);
+        },
+        setContentAppend: function(content){
+            if(!content)
+                return;
+
+            this.contentParsed.append(content);
+        },
+        setContent: function(content, force){
+            force = !!force;
+            var that = this;
+            if(content)
+                this.contentParsed.html('').append(content);
+            if(this.isAjaxLoading && !force)
+                return;
+
+            this.$content.html('');
+            this.$content.append(this.contentParsed);
+            setTimeout(function(){
+                that.$body.find('input[autofocus]:visible:first').focus();
+            }, 100);
+        },
+        loadingSpinner: false,
+        showLoading: function(disableButtons){
+            this.loadingSpinner = true;
+            this.$jconfirmBox.addClass('loading');
+            if(disableButtons)
+                this.$btnc.find('button').prop('disabled', true);
+
+        },
+        hideLoading: function(enableButtons){
+            this.loadingSpinner = false;
+            this.$jconfirmBox.removeClass('loading');
+            if(enableButtons)
+                this.$btnc.find('button').prop('disabled', false);
+
+        },
+        ajaxResponse: false,
+        contentParsed: '',
+        isAjax: false,
+        isAjaxLoading: false,
+        _parseContent: function(){
+            var that = this;
+            var e = '&nbsp;';
+
+            if(typeof this.content === 'function'){
+                var res = this.content.apply(this);
+                if(typeof res === 'string'){
+                    this.content = res;
+                }
+                else if(typeof res === 'object' && typeof res.always === 'function'){
+                    // this is ajax loading via promise
+                    this.isAjax = true;
+                    this.isAjaxLoading = true;
+                    res.always(function(data, status, xhr){
+                        that.ajaxResponse = {
+                            data: data,
+                            status: status,
+                            xhr: xhr
+                        };
+                        that._contentReady.resolve(data, status, xhr);
+                        if(typeof that.contentLoaded === 'function')
+                            that.contentLoaded(data, status, xhr);
+                    });
+                    this.content = e;
+                }else{
+                    this.content = e;
+                }
+            }
+
+            if(typeof this.content === 'string' && this.content.substr(0, 4).toLowerCase() === 'url:'){
+                this.isAjax = true;
+                this.isAjaxLoading = true;
+                var u = this.content.substring(4, this.content.length);
+                $.get(u).done(function(html){
+                    that.contentParsed.html(html);
+                }).always(function(data, status, xhr){
+                    that.ajaxResponse = {
+                        data: data,
+                        status: status,
+                        xhr: xhr
+                    };
+                    that._contentReady.resolve(data, status, xhr);
+                    if(typeof that.contentLoaded === 'function')
+                        that.contentLoaded(data, status, xhr);
+                });
+            }
+
+            if(!this.content)
+                this.content = e;
+
+            if(!this.isAjax){
+                this.contentParsed.html(this.content);
+                this.setContent();
+                that._contentReady.resolve();
+            }
+        },
+        _stopCountDown: function(){
+            clearInterval(this.autoCloseInterval);
+            if(this.$cd)
+                this.$cd.remove();
+        },
+        _startCountDown: function(){
+            var that = this;
+            var opt = this.autoClose.split('|');
+            if(opt.length !== 2){
+                console.error('Invalid option for autoClose. example \'close|10000\'');
+                return false;
+            }
+
+            var button_key = opt[0];
+            var time = parseInt(opt[1]);
+            if(typeof this.buttons[button_key] === 'undefined'){
+                console.error('Invalid button key \'' + button_key + '\' for autoClose');
+                return false;
+            }
+
+            var seconds = Math.ceil(time / 1000);
+            this.$cd = $('<span class="countdown"> (' + seconds + ')</span>')
+                .appendTo(this['$_' + button_key]);
+
+            this.autoCloseInterval = setInterval(function(){
+                that.$cd.html(' (' + (seconds -= 1) + ') ');
+                if(seconds <= 0){
+                    that['$$' + button_key].trigger('click');
+                    that._stopCountDown();
+                }
+            }, 1000);
+        },
+        _getKey: function(key){
+            // very necessary keys.
+            switch(key){
+                case 192:
+                    return 'tilde';
+                case 13:
+                    return 'enter';
+                case 16:
+                    return 'shift';
+                case 9:
+                    return 'tab';
+                case 20:
+                    return 'capslock';
+                case 17:
+                    return 'ctrl';
+                case 91:
+                    return 'win';
+                case 18:
+                    return 'alt';
+                case 27:
+                    return 'esc';
+                case 32:
+                    return 'space';
+            }
+
+            // only trust alphabets with this.
+            var initial = String.fromCharCode(key);
+            if(/^[A-z0-9]+$/.test(initial))
+                return initial.toLowerCase();
+            else
+                return false;
+        },
+        reactOnKey: function(e){
+            var that = this;
+
+            /*
+             Prevent keyup event if the dialog is not last!
+             */
+            var a = $('.jconfirm');
+            if(a.eq(a.length - 1)[0] !== this.$el[0])
+                return false;
+
+            var key = e.which;
+            /*
+             Do not react if Enter or Space is pressed on input elements
+             */
+            if(this.$content.find(':input').is(':focus') && /13|32/.test(key))
+                return false;
+
+            var keyChar = this._getKey(key);
+
+            // If esc is pressed
+            if(keyChar === 'esc' && this.escapeKey){
+                if(this.escapeKey === true){
+                    this.$scrollPane.trigger('click');
+                }
+                else if(typeof this.escapeKey === 'string' || typeof this.escapeKey === 'function'){
+                    var buttonKey;
+                    if(typeof this.escapeKey === 'function'){
+                        buttonKey = this.escapeKey();
+                    }else{
+                        buttonKey = this.escapeKey;
+                    }
+
+                    if(buttonKey)
+                        if(typeof this.buttons[buttonKey] === 'undefined'){
+                            console.warn('Invalid escapeKey, no buttons found with key ' + buttonKey);
+                        }else{
+                            this['$_' + buttonKey].trigger('click');
+                        }
+                }
+            }
+
+            // check if any button is listening to this key.
+            $.each(this.buttons, function(key, button){
+                if(button.keys.indexOf(keyChar) !== -1){
+                    that['$_' + key].trigger('click');
+                }
+            });
+        },
+        setDialogCenter: function(){
+            console.info('setDialogCenter is deprecated, dialogs are centered with CSS3 tables');
+        },
+        _unwatchContent: function(){
+            clearInterval(this._timer);
+        },
+        close: function(onClosePayload){
+            var that = this;
+
+            if(typeof this.onClose === 'function')
+                this.onClose(onClosePayload);
+
+            this._unwatchContent();
+
+            /*
+             unbind the window resize & keyup event.
+             */
+            $(window).unbind('resize.' + this._id);
+            $(window).unbind('keyup.' + this._id);
+            $(window).unbind('jcKeyDown.' + this._id);
+
+            if(this.draggable){
+                $(window).unbind('mousemove.' + this._id);
+                $(window).unbind('mouseup.' + this._id);
+                this.$titleContainer.unbind('mousedown');
+            }
+
+            that.$el.removeClass(that.loadedClass);
+            $('body').removeClass('jconfirm-no-scroll-' + that._id);
+            that.$jconfirmBoxContainer.removeClass('jconfirm-no-transition');
+
+            setTimeout(function(){
+                that.$body.addClass(that.closeAnimationParsed);
+                that.$jconfirmBg.addClass('jconfirm-bg-h');
+                var closeTimer = (that.closeAnimation === 'none') ? 1 : that.animationSpeed;
+
+                setTimeout(function(){
+                    that.$el.remove();
+
+                    var l = w.jconfirm.instances;
+                    var i = w.jconfirm.instances.length - 1;
+                    for(i; i >= 0; i--){
+                        if(w.jconfirm.instances[i]._id === that._id){
+                            w.jconfirm.instances.splice(i, 1);
+                        }
+                    }
+
+                    // Focusing a element, scrolls automatically to that element.
+                    // no instances should be open, lastFocused should be true, the lastFocused element must exists in DOM
+                    if(!w.jconfirm.instances.length){
+                        if(that.scrollToPreviousElement && w.jconfirm.lastFocused && w.jconfirm.lastFocused.length && $.contains(document, w.jconfirm.lastFocused[0])){
+                            var $lf = w.jconfirm.lastFocused;
+                            if(that.scrollToPreviousElementAnimate){
+                                var st = $(window).scrollTop();
+                                var ot = w.jconfirm.lastFocused.offset().top;
+                                var wh = $(window).height();
+                                if(!(ot > st && ot < (st + wh))){
+                                    var scrollTo = (ot - Math.round((wh / 3)));
+                                    $('html, body').animate({
+                                        scrollTop: scrollTo
+                                    }, that.animationSpeed, 'swing', function(){
+                                        // gracefully scroll and then focus.
+                                        $lf.focus();
+                                    });
+                                }else{
+                                    // the element to be focused is already in view.
+                                    $lf.focus();
+                                }
+                            }else{
+                                $lf.focus();
+                            }
+                            w.jconfirm.lastFocused = false;
+                        }
+                    }
+
+                    if(typeof that.onDestroy === 'function')
+                        that.onDestroy();
+
+                }, closeTimer * 0.40);
+            }, 50);
+
+            return true;
+        },
+        open: function(){
+            if(this.isOpen())
+                return false;
+
+            // var that = this;
+            this._buildHTML();
+            this._bindEvents();
+            this._open();
+
+            return true;
+        },
+        setStartingPoint: function(){
+            var el = false;
+
+            if(this.animateFromElement !== true && this.animateFromElement){
+                el = this.animateFromElement;
+                w.jconfirm.lastClicked = false;
+            }else if(w.jconfirm.lastClicked && this.animateFromElement === true){
+                el = w.jconfirm.lastClicked;
+                w.jconfirm.lastClicked = false;
+            }else{
+                return false;
+            }
+
+            if(!el)
+                return false;
+
+            var offset = el.offset();
+
+            var iTop = el.outerHeight() / 2;
+            var iLeft = el.outerWidth() / 2;
+
+            // placing position of jconfirm modal in center of clicked element
+            iTop -= this.$jconfirmBox.outerHeight() / 2;
+            iLeft -= this.$jconfirmBox.outerWidth() / 2;
+
+            // absolute position on screen
+            var sourceTop = offset.top + iTop;
+            sourceTop = sourceTop - this._scrollTop();
+            var sourceLeft = offset.left + iLeft;
+
+            // window halved
+            var wh = $(window).height() / 2;
+            var ww = $(window).width() / 2;
+
+            var targetH = wh - this.$jconfirmBox.outerHeight() / 2;
+            var targetW = ww - this.$jconfirmBox.outerWidth() / 2;
+
+            sourceTop -= targetH;
+            sourceLeft -= targetW;
+
+            // Check if the element is inside the viewable window.
+            if(Math.abs(sourceTop) > wh || Math.abs(sourceLeft) > ww)
+                return false;
+
+            this.$jconfirmBoxContainer.css('transform', 'translate(' + sourceLeft + 'px, ' + sourceTop + 'px)');
+        },
+        _open: function(){
+            var that = this;
+            if(typeof that.onOpenBefore === 'function')
+                that.onOpenBefore();
+
+            this.$body.removeClass(this.animationParsed);
+            this.$jconfirmBg.removeClass('jconfirm-bg-h');
+            this.$body.focus();
+
+            that.$jconfirmBoxContainer.css('transform', 'translate(' + 0 + 'px, ' + 0 + 'px)');
+
+            setTimeout(function(){
+                that.$body.css(that._getCSS(that.animationSpeed, 1));
+                that.$body.css({
+                    'transition-property': that.$body.css('transition-property') + ', margin'
+                });
+                that.$jconfirmBoxContainer.addClass('jconfirm-no-transition');
+                that._modalReady.resolve();
+                if(typeof that.onOpen === 'function')
+                    that.onOpen();
+
+                that.$el.addClass(that.loadedClass);
+            }, this.animationSpeed);
+        },
+        loadedClass: 'jconfirm-open',
+        isClosed: function(){
+            return !this.$el || this.$el.parent().length === 0;
+        },
+        isOpen: function(){
+            return !this.isClosed();
+        },
+        toggle: function(){
+            if(!this.isOpen())
+                this.open();
+            else
+                this.close();
+        }
+    };
+
+    w.jconfirm.instances = [];
+    w.jconfirm.lastFocused = false;
+    w.jconfirm.pluginDefaults = {
+        template: '' +
+            '<div class="jconfirm">' +
+            '<div class="jconfirm-bg jconfirm-bg-h"></div>' +
+            '<div class="jconfirm-scrollpane">' +
+            '<div class="jconfirm-row">' +
+            '<div class="jconfirm-cell">' +
+            '<div class="jconfirm-holder">' +
+            '<div class="jc-bs3-container">' +
+            '<div class="jc-bs3-row">' +
+            '<div class="jconfirm-box-container jconfirm-animated">' +
+            '<div class="jconfirm-box" role="dialog" aria-labelledby="labelled" tabindex="-1">' +
+            '<div class="jconfirm-closeIcon">&times;</div>' +
+            '<div class="jconfirm-title-c">' +
+            '<span class="jconfirm-icon-c"></span>' +
+            '<span class="jconfirm-title"></span>' +
+            '</div>' +
+            '<div class="jconfirm-content-pane">' +
+            '<div class="jconfirm-content"></div>' +
+            '</div>' +
+            '<div class="jconfirm-buttons">' +
+            '</div>' +
+            '<div class="jconfirm-clear">' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div>' +
+            '</div></div>',
+        title: 'Hello',
+        titleClass: '',
+        type: 'default',
+        typeAnimated: true,
+        draggable: true,
+        dragWindowGap: 15,
+        dragWindowBorder: true,
+        animateFromElement: true,
+        /**
+         * @deprecated
+         */
+        alignMiddle: true,
+        smoothContent: true,
+        content: 'Are you sure to continue?',
+        buttons: {},
+        defaultButtons: {
+            ok: {
+                action: function(){
+                }
+            },
+            close: {
+                action: function(){
+                }
+            }
+        },
+        contentLoaded: function(){
+        },
+        icon: '',
+        lazyOpen: false,
+        bgOpacity: null,
+        theme: 'light',
+        animation: 'scale',
+        closeAnimation: 'scale',
+        animationSpeed: 400,
+        animationBounce: 1,
+        escapeKey: true,
+        rtl: false,
+        container: 'body',
+        containerFluid: false,
+        backgroundDismiss: false,
+        backgroundDismissAnimation: 'shake',
+        autoClose: false,
+        closeIcon: null,
+        closeIconClass: false,
+        watchInterval: 100,
+        columnClass: 'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1',
+        boxWidth: '50%',
+        scrollToPreviousElement: true,
+        scrollToPreviousElementAnimate: true,
+        useBootstrap: true,
+        offsetTop: 40,
+        offsetBottom: 40,
+        bootstrapClasses: {
+            container: 'container',
+            containerFluid: 'container-fluid',
+            row: 'row'
+        },
+        onContentReady: function(){
+
+        },
+        onOpenBefore: function(){
+
+        },
+        onOpen: function(){
+
+        },
+        onClose: function(){
+
+        },
+        onDestroy: function(){
+
+        },
+        onAction: function(){
+
+        }
+    };
+
+    /**
+     * This refers to the issue #241 and #246
+     *
+     * Problem:
+     * Button A is clicked (keydown) using the Keyboard ENTER key
+     * A opens the jconfirm modal B,
+     * B has registered ENTER key for one of its button C
+     * A is released (keyup), B gets the keyup event and triggers C.
+     *
+     * Solution:
+     * Register a global keydown event, that tells jconfirm if the keydown originated inside jconfirm
+     */
+    var keyDown = false;
+    $(window).on('keydown', function(e){
+        if(!keyDown){
+            var $target = $(e.target);
+            var pass = false;
+            if($target.closest('.jconfirm-box').length)
+                pass = true;
+            if(pass)
+                $(window).trigger('jcKeyDown');
+
+            keyDown = true;
+        }
+    });
+    $(window).on('keyup', function(){
+        keyDown = false;
+    });
+    w.jconfirm.lastClicked = false;
+    $(document).on('mousedown', 'button, a, [jc-source]', function(){
+        w.jconfirm.lastClicked = $(this);
+    });
+}));
diff --git a/zhengcaioa/zhengcaioa/zhengcaioa.csproj.user b/zhengcaioa/zhengcaioa/zhengcaioa.csproj.user
index 67fd912..824e794 100644
--- a/zhengcaioa/zhengcaioa/zhengcaioa.csproj.user
+++ b/zhengcaioa/zhengcaioa/zhengcaioa.csproj.user
@@ -9,7 +9,7 @@
     <View_SelectedScaffolderCategoryPath>root/Common/MVC/View</View_SelectedScaffolderCategoryPath>
     <Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
     <Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
-    <NameOfLastUsedPublishProfile>FolderProfile</NameOfLastUsedPublishProfile>
+    <NameOfLastUsedPublishProfile>D:\qianwj\ZCOa\zhengcaioa\zhengcaioa\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
     <WebStackScaffolding_ViewDialogWidth>650</WebStackScaffolding_ViewDialogWidth>
     <WebStackScaffolding_IsLayoutPageSelected>True</WebStackScaffolding_IsLayoutPageSelected>
     <WebStackScaffolding_IsPartialViewSelected>False</WebStackScaffolding_IsPartialViewSelected>
diff --git "a/\347\224\250\346\210\267\350\241\250\346\233\264\346\226\260.sql" "b/\347\224\250\346\210\267\350\241\250\346\233\264\346\226\260.sql"
index 8dff297..8a26f62 100644
--- "a/\347\224\250\346\210\267\350\241\250\346\233\264\346\226\260.sql"
+++ "b/\347\224\250\346\210\267\350\241\250\346\233\264\346\226\260.sql"
@@ -1,5 +1,7 @@
 use zhengcaioa
 go
+
+--qwj 2021.6.8
 alter table plt_user add 
 
 ipmac nvarchar(30) null,
@@ -12,6 +14,7 @@
 is_travelsubsidy nvarchar(1) null
 go
 
+<<<<<<< HEAD
 
 alter table plt_user add 
 
@@ -43,3 +46,68 @@
 
 INSERT [dbo].[plt_page] ([Id], [system_id], [page_name], [page_shortcut], [display_seq], [page_path], [page_method], [page_type], [page_superior], [page_ico], [open_type], [rec_status], [creater], [createtime], [modifier], [modifytime]) VALUES (N'e7e0363d-8215-433e-8c63-df902088b160', N'1', N'绩效提成标准', NULL, 3, N'/HrJixiaoticheng/Index', N'01', N'M', N'6a13cb10-35d9-4176-a231-8887948e059e', NULL, 0, N'A', N'e4c93811-b9b1-4998-89f5-c416ebab0c07', CAST(N'2021-06-17T14:53:30.890' AS DateTime), N'e4c93811-b9b1-4998-89f5-c416ebab0c07', CAST(N'2021-06-17T14:54:01.643' AS DateTime))
 go
+=======
+--qwj 2021.6.18
+create table t_sim_bind (
+   id                   int                  identity,
+   sim_id               nvarchar(40)         null,
+   user_id              nvarchar(40)         null,
+   cardpro              nvarchar(5)          null,
+   up_time              datetime             null,
+   up_user              nvarchar(40)         null,
+   constraint PK_T_SIM_BIND primary key (id)
+)
+go
+
+create table t_sim_cost (
+   id                   int                  identity,
+   sim_id               nvarchar(40)         null,
+   user_id              nvarchar(40)         null,
+   allow_amount         decimal(10,2)        null,
+   bill_amount          decimal(10,2)        null,
+   amount               decimal(10,2)        null,
+   bill_year            int                  null,
+   bill_month           int                  null,
+   accounted_time       datetime             null,
+   status               nvarchar(1)          null,
+   up_time              datetime             null,
+   sub_userid           nvarchar(40)         null,
+   audit_time           datetime             null,
+   audit_userid         nvarchar(40)         null,
+   constraint PK_T_SIM_COST primary key (id)
+)
+go
+
+--电话卡类型定义
+insert into [adm_goods_classify] values('d309d1af-5086-453a-b5a2-58b344dfff97','电话卡','A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'04')
+--补贴字典定义
+insert into [sys_code] values('107bc4e5-f13a-4d25-bd47-e4b1e61aed8a','t_sim_bind','cardpro','电话补贴','A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+
+insert into [sys_code_dtl]([Id],[code_sn],[code_id],[comments],[sort] ,[rec_status],[creater],[createtime],[modifier],[modifytime]) values('2632d933-31a3-4692-a954-df11bf223854','50','107bc4e5-f13a-4d25-bd47-e4b1e61aed8a','50',1,'A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+
+insert into [sys_code_dtl]([Id],[code_sn],[code_id],[comments],[sort] ,[rec_status],[creater],[createtime],[modifier],[modifytime]) values('306d666f-e93c-415c-a294-414e34cb3311','100','107bc4e5-f13a-4d25-bd47-e4b1e61aed8a','100',2,'A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+
+insert into [sys_code_dtl]([Id],[code_sn],[code_id],[comments],[sort] ,[rec_status],[creater],[createtime],[modifier],[modifytime]) values('61711fb1-0b96-4611-9dc0-6c69dfef656c','9999','107bc4e5-f13a-4d25-bd47-e4b1e61aed8a','不限',3,'A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+
+create view v_sim_bind as
+SELECT   a.Id, a.goods_name AS simcard, a.goods_status AS simstatus, c.user_id AS userid, b.user_name AS username, 
+                c.cardpro, c.up_time
+FROM      dbo.adm_goods_manage AS a LEFT OUTER JOIN
+                dbo.t_sim_bind AS c ON a.Id = c.sim_id LEFT OUTER JOIN
+                dbo.plt_user AS b ON c.user_id = b.Id
+WHERE   (a.classify_id = 'd309d1af-5086-453a-b5a2-58b344dfff97' and a.goods_status='A')
+go
+
+--电话卡分配菜单
+insert into [plt_page] values('a3479c03-d554-4e02-b201-487e8e1dfb55','1','电话卡分配','',3,'/Sim/Index/','01','M','967b0bdd-cd5d-4660-8c72-7f744c07751b','',0,'A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+--电话费记录明细
+insert into [plt_page] values('5E973843-7EB4-41A6-B49B-192208647B2C','1','电话费用记录','',4,'/SimCost/Index/','01','M','967b0bdd-cd5d-4660-8c72-7f744c07751b','',0,'A','e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate(),'e4c93811-b9b1-4998-89f5-c416ebab0c07',getdate())
+
+create view v_sim_cost as
+ select  a.[id],[sim_id],[user_id],[allow_amount],[bill_amount],[bill_year],[bill_month],[status],[up_time]
+	  ,b.goods_name,c.user_name
+	   FROM [t_sim_cost] a inner join adm_goods_manage b on a.sim_id =b.Id
+	   left join plt_user c on a.user_id=c.Id
+go
+
+>>>>>>> a6b6b4303483395bf6ff745f5abf171552afae38

--
Gitblit v1.9.1