From a6b6b4303483395bf6ff745f5abf171552afae38 Mon Sep 17 00:00:00 2001
From: LR-20210131IOQH\Administrator <jackcold@163.com>
Date: 星期五, 18 六月 2021 17:30:14 +0800
Subject: [PATCH] 电话卡分配,电话费用录入
---
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,974 insertions(+), 15 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 eef7cde..2245d72 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 7a9c03f..56dad02 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 a10a54e..7f765ae 100644
--- a/zhengcaioa/zhengcaioa/Startup.cs
+++ b/zhengcaioa/zhengcaioa/Startup.cs
@@ -66,8 +66,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> 鐢佃瘽鍗″垎閰�</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> <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> <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> <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> <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 f59e8d5..1b8c331 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 = ' ';
+
+ 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">×</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 4f8b184..c318b5f 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 956ba54..962ca5c 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,
@@ -10,4 +12,68 @@
miniyearsalary decimal(10,2) null,
senioritywages decimal(10,2) null,
is_travelsubsidy nvarchar(1) null
-go
\ No newline at end of file
+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
+
--
Gitblit v1.9.1