ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(14)之会员中心管理
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c
会员中心,主要包含了会员的基本信息维护、充值管理,以及下载充值的日志管理和收藏等功能
首先我们需要在MemberCenterModule区域下的Controller文件中创建MemberSystemController.cs控制器:
using Bobo.Utilities;
using Bobo.Utilities.Membership;
using IA.Business;
using IA.Entity;
using IA.WebApp.SystemExtension;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace IA.WebApp.Areas.MemberCenterModule.Controllers
{
[LoginAuthorize("~/MemberCenterModule/MemberRegLogin/login")]
public class MemberSystemController : Controller
{
//
// GET: /MemberCenterModule/MemberSystem/
/// <summary>
/// 会员中心
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
string MemeberID = ManageProvider.Provider.Current().UserId;
Com_Member mentity = new Com_MemberBll().Factory.FindEntity(MemeberID);
return View(mentity);
}
/// <summary>
/// 充值中心
/// </summary>
/// <returns></returns>
public ActionResult RechargeView()
{
string MemeberID = ManageProvider.Provider.Current().UserId;
Com_Member mentity = new Com_MemberBll().Factory.FindEntity(MemeberID);
return View(mentity);
}
//支付凭证
public ActionResult SubPayForm()
{
return View();
}
/// <summary>
/// 获取凭证实体
/// </summary>
/// <param name="KeyValue"></param>
/// <returns></returns>
public ActionResult GetPayInit(string KeyValue)
{
Com_PayFor mentity = new Com_PayForBll().Factory.FindEntity(KeyValue);
return Content(mentity.ToJson());
}
/// <summary>
/// 支付凭证提交
/// </summary>
/// <returns></returns>
public ActionResult SubPayDataForm(Com_PayFor entity, string KeyValue)
{
HttpPostedFileBase FileUrl = Request.Files["PayForUrlFile"];
Com_PayForBll bll = new Com_PayForBll();
try
{
int IsOk = 0;
string Message = "提交失败。";
List<string> fileType = ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageType").ToLower().Split('|').ToList();
string FileUrName = "";
bool FileHasUrl = FileUrl != null && FileUrl.ContentLength > 0;
if (FileHasUrl)
{
FileUrName = Path.GetFileName(FileUrl.FileName);
} if ((FileHasUrl && !fileType.Contains(Path.GetExtension(FileUrName).ToLower())))
{
return Content(new JsonMessage { Code = "-1", Success = false, Message = "支付凭证只能上传" + ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageType").ToLower() + "类型的文件!" }.ToString());
}
if (FileHasUrl && CommonHelper.GetInt(SizeHelper.CountSizeNum(FileUrl.ContentLength)) > CommonHelper.GetInt(ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageSize")))
{
return Content(new JsonMessage { Code = "-1", Success = false, Message = "文件大小不能超过" + ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageSize") + "M!" }.ToString());
}
string AllPath = "";//ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "AllFilePath");
string PicPath = "/Resource/PayForUrl/";
DirFileHelper.CreateDirectory(Server.MapPath(AllPath + PicPath));
//上传凭证
if (FileUrl != null && FileUrl.ContentLength > 0)
{
string fileName = CommonHelper.GetGuidNotLine() + Path.GetFileName(FileUrl.FileName);
FileUrl.SaveAs(Server.MapPath(AllPath + PicPath + fileName));
entity.PayForUrl = PicPath + fileName;
}
if (!StringHelper.IsNullOrEmpty(KeyValue))
{
entity.Modify(KeyValue);
IsOk = bll.Factory.Update(entity);
if (IsOk > 0)
{
Message = "编辑成功。";
}
}
else
{
entity.Create();
IsOk = bll.Factory.Insert(entity);
}
if (IsOk > 0)
{
Message = "提交成功。";
string emailTit = "用户上传支付凭证通知";
string emailBody = "用户【" + ManageProvider.Provider.Current().UserName + "】已经上传支付凭证,请尽快前往处理!http://www.yealuo.com/BackstageModule/PayForMange/Index";
NetHelper.SendMailByWeb("470797533@qq.com", ConfigHelper.ReadAppConfig("FromEmail"), emailTit, emailBody, ConfigHelper.ReadAppConfig("EmailPwd"), ConfigHelper.ReadAppConfig("SmtpServer"));//发送邮件
}
return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
}
catch (Exception ex)
{
return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
}
} /// <summary>
/// 提交用户信息
/// </summary>
/// <param name="entity"></param>
/// <param name="EmailCode"></param>
/// <param name="NewEmailCode"></param>
/// <param name="num"></param>
/// <returns></returns>
public ActionResult SubAccountInfo(Com_Member entity, string EmailCode, string NewEmailCode, int num = 0)
{
Com_MemberBll bll = new Com_MemberBll();
int IsOk = 0;
string Message = "操作失败。";
bool Success = false;
if (num > 0)
{
if (Session["EmailCode"].ToString() != Md5Helper.CreateMd5(EmailCode.ToLower(), 16))
{
return Content(new JsonMessage { Success = false, Code = "-2", Message = "邮箱验证码不正确" }.ToString());
}
if (num > 1)
{
if (Session["NewEmailCode"].ToString() != Md5Helper.CreateMd5(NewEmailCode.ToLower(), 16))
{
return Content(new JsonMessage { Success = false, Code = "-2", Message = "新邮箱验证码不正确" }.ToString());
}
}
else
{
entity.Password = Md5Helper.CreateMd5(DESEncrypt.Encrypt(entity.Password, BaseFactory.BaseHelper().GetPwodKey()).ToLower(), 32).ToLower();
}
}
try
{
string MemeberID = ManageProvider.Provider.Current().UserId;
entity.Modify(MemeberID);
IsOk = bll.Factory.Update(entity);
if (IsOk > 0)
{
Message = "修改成功。";
Success = true;
}
return Content(new JsonMessage { Success = Success, Code = IsOk.ToString(), Message = Message }.ToString());
}
catch (Exception ex)
{
return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
} } /// <summary>
/// 下载日志
/// </summary>
/// <param name="jgp"></param>
/// <returns></returns>
public ActionResult GetDownTable(JqGridParam jgp)
{ Com_DownloadLogBll bll = new Com_DownloadLogBll();
string MemeberID = ManageProvider.Provider.Current().UserId;
DataTable model = bll.GetTablePage(MemeberID, ref jgp);
//构建分页数据
var JsonData = new
{
success = true,
pageData = jgp,
message = "",
data = model
};
return Content(JsonData.ToJson());
}
/// <summary>
/// 获取收藏记录
/// </summary>
/// <param name="jgp"></param>
/// <returns></returns>
public ActionResult GetCollectionTable(JqGridParam jgp)
{ Com_ApproveBll bll = new Com_ApproveBll();
string MemeberID = ManageProvider.Provider.Current().UserId;
DataTable model = bll.GetTablePage(MemeberID, "Collection", ref jgp);
//构建分页数据
var JsonData = new
{
success = true,
pageData = jgp,
message = "",
data = model
};
return Content(JsonData.ToJson());
} /// <summary>
/// 获取支付凭证记录
/// </summary>
/// <param name="jgp"></param>
/// <returns></returns>
public ActionResult GetPayTable(JqGridParam jgp)
{ Com_PayForBll bll = new Com_PayForBll();
string MemeberID = ManageProvider.Provider.Current().UserId;
DataTable model = bll.GetOtherTablePage(MemeberID, ref jgp);
//构建分页数据
var JsonData = new
{
success = true,
pageData = jgp,
message = "",
data = model
};
return Content(JsonData.ToJson());
}
/// <summary>
/// 获取评论记录
/// </summary>
/// <param name="jgp"></param>
/// <returns></returns>
public ActionResult GetMsgTable(JqGridParam jgp)
{ OND_MessageReplyBll bll = new OND_MessageReplyBll();
string MemeberID = ManageProvider.Provider.Current().UserId;
DataTable model = bll.GetOtherTablePage(MemeberID, ref jgp);
//构建分页数据
var JsonData = new
{
success = true,
pageData = jgp,
message = "",
data = model
};
return Content(JsonData.ToJson());
}
/// <summary>
/// 获取审批记录
/// </summary>
/// <param name="DataId"></param>
/// <returns></returns>
public ActionResult GetApprove(string DataId)
{
Com_ApproveBll bll = new Com_ApproveBll();
if (!StringHelper.IsNullOrEmpty(DataId))
{
List<Com_Approve> List = bll.GetApproveList(DataId, null, null);
return Content(List.ToJson());
}
else
{
return null;
}
}
}
}
然后创建对应的业务层方法:
(1)OND_MessageReplyBll.cs
using Bobo.DataAccess;
using Bobo.Repository;
using Bobo.Utilities;
using IA.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IA.Business
{
// <summary>
/// 评论信息表
/// <author>
/// <name>YHB</name>
/// <date>2018.10.18</date>
/// </author>
/// </summary>
public class OND_MessageReplyBll : RepositoryFactory<OND_MessageReply>
{ /// <summary>
/// 获取list分页数据
/// </summary>
/// <param name="DataID"></param>
/// <param name="jgp"></param>
/// <returns></returns>
public List<OND_MessageReply> GetListPage(string DataID,ref JqGridParam jgp)
{
StringBuilder Sql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>(); Sql.Append(@"SELECT * FROM(
SELECT y.[MessageReplyID]
,y.[DataID]
,y.[MessageReplyCenter]
,CASE ParentID WHEN '' THEN '' WHEN null THEN ''
ELSE (SELECT
'<p>引用'+x.CreateUserName +'发表于 '+CONVERT(nvarchar(50),x.CreateDate)+' 的回复:</p>'
+'<span>'+x.MessageReplyCenter +'</span>'
FROM OND_MessageReply x WHERE x.DeleteMark<>1 AND x.MessageReplyID=y.ParentID) END
AS ParentID
,y.[DeleteMark]
,y.[GiveNum]
,y.[CreateDate]
,y.[CreateUserId]
,y.[CreateUserName]
,y.[ModifyDate]
,y.[ModifyUserId]
,y.[ModifyUserName]
FROM [dbo].[OND_MessageReply] y WHERE y.DeleteMark<>1) T WHERE 1=1"); if (!StringHelper.IsNullOrEmpty(DataID))
{
Sql.Append(@" AND DataID=@DataID");
param.Add(DbFactory.CreateDbParameter("@DataID", DataID));
}
return Factory.FindListPageBySql(Sql.ToString(), param.ToArray(), ref jgp);
}
/// <summary>
/// 获取会员评论信息
/// </summary>
/// <param name="MemeberID"></param>
/// <param name="jgp"></param>
/// <returns></returns>
public DataTable GetOtherTablePage(string MemeberID, ref JqGridParam jgp)
{
StringBuilder Sql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>();
Sql.Append(@"SELECT * FROM(
SELECT
x2.ArticleTitle,x2.ArticleType
,(SELECT COUNT(*) FROM OND_MessageReply y1 WHERE y1.DeleteMark<>1 AND y1.ParentID=x1.MessageReplyID) AS ReplyNum
,x1.* FROM dbo.OND_MessageReply x1
INNER JOIN dbo.Com_Article x2 ON x1.DataID=x2.ArticleID AND x2.DeleteMark<>1
) T WHERE DeleteMark<>1");
if (!StringHelper.IsNullOrEmpty(MemeberID))
{
Sql.Append(@" AND CreateUserId=@CreateUserId");
param.Add(DbFactory.CreateDbParameter("@CreateUserId", MemeberID));
}
return Factory.FindTablePageBySql(Sql.ToString(), param.ToArray(), ref jgp);
} }
} }
}
(2)Com_PayForBll.cs:
using Bobo.DataAccess;
using Bobo.Repository;
using Bobo.Utilities;
using IA.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IA.Business
{
// <summary>
/// 支付流水表
/// <author>
/// <name>YHB</name>
/// <date>2018.10.18</date>
/// </author>
/// </summary>
public class Com_PayForBll : RepositoryFactory<Com_PayFor>
{ /// <summary>
/// 获取分页数据
/// </summary> /// <param name="jgp"></param>
/// <returns></returns>
public DataTable GetTablePage(string UserAccount, int? PayForState, ref JqGridParam jgp)
{
StringBuilder Sql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>();
Sql.Append(@"SELECT * FROM (SELECT x2.RealName,x2.Integral AS HasIntegral,x2.MemberType, x1.* FROM Com_PayFor x1
LEFT JOIN Com_Member x2 ON x1.CreateUserId=x2.MemberID) T WHERE 1=1 AND DeleteMark<>1");
if (!StringHelper.IsNullOrEmpty(UserAccount))
{
Sql.Append(@" AND RealName=@RealName");
param.Add(DbFactory.CreateDbParameter("@RealName", UserAccount));
}
if (!StringHelper.IsNullOrEmpty(PayForState))
{
Sql.Append(@" AND PayForState=@PayForState");
param.Add(DbFactory.CreateDbParameter("@PayForState", PayForState));
}
return Factory.FindTablePageBySql(Sql.ToString(), param.ToArray(), ref jgp);
} /// <summary>
/// 获取充值记录
/// </summary>
/// <param name="MemeberID"></param>
/// <param name="jgp"></param>
/// <returns></returns>
public DataTable GetOtherTablePage(string MemeberID, ref JqGridParam jgp)
{
StringBuilder whereSql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>();
whereSql.Append(@" AND DeleteMark<>1");
if (!StringHelper.IsNullOrEmpty(MemeberID))
{
whereSql.Append(@" AND CreateUserId=@MemeberID");
param.Add(DbFactory.CreateDbParameter("@MemeberID", MemeberID));
} return Factory.FindTablePage(whereSql.ToString(), param.ToArray(), ref jgp);
} }
}
(3)Com_ApproveBll.cs
using Bobo.DataAccess;
using Bobo.Repository;
using Bobo.Utilities;
using Bobo.Utilities.Membership;
using IA.Entity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IA.Business
{
// <summary>
/// 审批记录表
/// <author>
/// <name>YHB</name>
/// <date>2018.10.18</date>
/// </author>
/// </summary>
public class Com_ApproveBll : RepositoryFactory<Com_Approve>
{
/// <summary>
/// 插入审批记录
/// </summary>
/// <param name="DataId"></param>
/// <param name="Action"></param>
/// <param name="Idea"></param>
/// <param name="transaction"></param>
/// <returns></returns>
public int SubmitApproveData(string DataId, string ActionCode, string Action, string Idea, DbTransaction transaction)
{
int IsOk = 0;
Com_Approve entity = new Com_Approve();
try
{
entity.DataId = DataId;
entity.ActionCode = ActionCode;
entity.Action = Action;
entity.Idea = Idea;
entity.CreateUserId = ManageProvider.Provider.Current().UserId;
entity.CreateUserName = ManageProvider.Provider.Current().UserName;
entity.Create();
IsOk = Factory.Insert(entity, transaction);
}
catch
{
IsOk = -1;
}
return IsOk;
}
/// <summary>
/// 获取审核记录
/// </summary>
/// <param name="DataId"></param>
/// <returns></returns>
public List<Com_Approve> GetApproveList(string DataId, string ActionCode, string MemberID)
{
StringBuilder whereSql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>(); whereSql.Append(@" AND DeleteMark<>1"); if (!StringHelper.IsNullOrEmpty(DataId))
{
whereSql.Append(@" AND DataId=@DataId");
param.Add(DbFactory.CreateDbParameter("@DataId", DataId));
}
if (!StringHelper.IsNullOrEmpty(ActionCode))
{
whereSql.Append(@" AND ActionCode=@ActionCode");
param.Add(DbFactory.CreateDbParameter("@ActionCode", ActionCode));
}
if (!StringHelper.IsNullOrEmpty(MemberID))
{
whereSql.Append(@" AND CreateUserId=@CreateUserId");
param.Add(DbFactory.CreateDbParameter("@CreateUserId", MemberID));
}
whereSql.Append(@" ORDER BY CreateDate DESC");
return Factory.FindList(whereSql.ToString(), param.ToArray());
} /// <summary>
/// 获取记录
/// </summary>
/// <param name="MemeberID"></param>
/// <param name="ActionCode"></param>
/// <param name="jgp"></param>
/// <returns></returns>
public DataTable GetTablePage(string MemeberID, string ActionCode, ref JqGridParam jgp)
{
StringBuilder Sql = new StringBuilder();
List<DbParameter> param = new List<DbParameter>();
Sql.Append(@"SELECT * FROM(
SELECT x2.FileID,x2.FileTitle,x1.* FROM dbo.Com_Approve x1
INNER JOIN dbo.Com_Attachment x2 ON x2.FileID=x1.DataID AND x1.DeleteMark<>1 AND x2.DeleteMark<>1
) T WHERE 1=1");
if (!StringHelper.IsNullOrEmpty(MemeberID))
{
Sql.Append(@" AND CreateUserId=@MemeberID");
param.Add(DbFactory.CreateDbParameter("@MemeberID", MemeberID));
}
if (!StringHelper.IsNullOrEmpty(ActionCode))
{
Sql.Append(@" AND ActionCode=@ActionCode");
param.Add(DbFactory.CreateDbParameter("@ActionCode", ActionCode));
}
return Factory.FindTablePageBySql(Sql.ToString(), param.ToArray(), ref jgp);
}
}
}
最后我们需要创建三个视图(基本信息维护、支付套餐选择,支付凭证上传),都创建在同一个MemberSystem视图文件中:
(1)基本信息维护Index.cshtml
@using IA.Entity
@using Bobo.Utilities
@model Com_Member
@{
ViewBag.Title ="会员中心- 页落素材网-页落网";
Layout = "~/Views/Shared/_LayoutMember.cshtml";
}
<script src="~/Content/Scripts/jQuery.md5.js"></script>
<script src="~/Content/Scripts/boboui-jshelp.js"></script>
<script src="~/Content/Scripts/Juicer/juicer.js"></script>
<script src="~/Content/Scripts/m_pager.js"></script>
@*center S*@
<div id="center" style="padding-top:130px;">
<div class="member-main">
<div class="member-top">
<img src="~/Content/Images/slice/pht.png" class="member-photo L" width="100" height="125" alt="@Model.RealName">
<div class="member-txt R">
<div class="member-UserName">@Model.RealName</div>
<div class="member-ico">普通会员 <a href="/MemberCenterModule/MemberSystem/RechargeView">成为VIP</a></div>
<div class="member-Tip"> <b>@Model.Integral</b> 金币 <a href="/MemberCenterModule/MemberSystem/RechargeView">充值金币</a></div>
</div>
</div>
<div class="member-tag-nav">
<a href="javascript:;" class="on tag-nav-item">我的资料</a>
<a href="javascript:;" class="tag-nav-item">我的收藏</a>
<a href="javascript:;" class="tag-nav-item">我的下载</a>
<a href="javascript:;" class="tag-nav-item">我的充值</a>
<a href="javascript:;" class="tag-nav-item">我的评论</a>
</div>
@* 我的资料*@
<div class="member-tag-com on">
<form id="formInfo" action="/MemberCenterModule/MemberSystem/SubAccountInfo" method="post" enctype="multipart/form-data" style="margin: 1px">
<div class="member-center-item">
<div class="member-center-title L">账号:</div>
<div class="member-center-txt L">@Model.Account</div>
<div class="member-center-tip L"><a href="javascript:;" onclick="AddEditBtn(1)">修改密码</a></div>
</div>
<div class="member-center-item">
<div class="member-center-title L">邮箱:</div>
<div class="member-center-txt L">@Model.Email</div>
<div class="member-center-tip L"><a href="javascript:;" onclick="AddEditBtn(2)">修改邮箱</a></div>
</div>
<div class="member-center-item">
<div class="member-center-title L">昵称:</div>
<div class="member-center-txt L">
<input type="text" id="RealName" name="RealName" class="mc-text" value="@Model.RealName" />
</div>
</div>
<div class="member-center-item">
<div class="member-center-title L">手机号码:</div>
<div class="member-center-txt L">
<input type="text" id="Mobile" name="Mobile" class="mc-text" value="@Model.Mobile" />
</div>
</div>
<div class="member-center-item">
<input type="button" class="submcBtn" onclick="SubAccountInfo(0)" value="提交修改" />
</div>
</form>
</div>
@* 我的收藏*@
<div class="member-tag-com">
<ul class="member-list-box">
<li class="member-list-item member-list-title">
<span class="lst-item1 L">素材标题</span>
<span class="lst-item2 R">收藏时间</span>
</li>
<div id="Collection-box"></div>
</ul>
<div id="CollectionPage" class="m_pageBar com_pageBar" style="padding:0 30px;"></div>
</div>
@* 我的下载*@
<div class="member-tag-com">
<ul class="member-list-box">
<li class="member-list-item member-list-title">
<span class="lst-item1 L">素材标题</span>
<span class="lst-item2 R">下载时间</span>
<span class="lst-item3 R">消费金币</span>
</li>
<div id="down-box"></div>
</ul>
<div id="downPage" class="m_pageBar com_pageBar" style="padding:0 30px;"></div>
</div>
@* 我的充值*@
<div class="member-tag-com">
<ul class="member-list-box">
<li class="member-list-item member-list-title">
<span class="lst-item1 L">充值套餐</span>
<span class="lst-item2 R">操作</span>
<span class="lst-item3 R">充值状态</span>
<span class="lst-item2 R">充值时间</span>
</li>
<div id="Pay-box"></div>
</ul>
<div id="PayPage" class="m_pageBar com_pageBar" style="padding:0 30px;"></div>
</div>
@* 我的评论*@
<div class="member-tag-com">
<ul class="member-list-box">
<li class="member-list-item member-list-title">
<span class="lst-item1 L">文章标题</span>
<span class="lst-item2 R">回复&点赞</span>
<span class="lst-item2 R">评论时间</span>
<span class="lst-item4 R">评论内容</span>
</li>
<div id="Msg-box"></div>
</ul>
<div id="MsgPage" class="m_pageBar com_pageBar" style="padding:0 30px;"></div>
</div>
</div>
</div>
@*center E*@ @*下载分页数据模版*@
<script id="downBody" type="text/template">
{#each data as item}
<li class="member-list-item">
<a class="lst-item1 L" href="/Sccnn/Detail?KeyValue=!{item.FileID}" title="!{item.FileTitle}">!{subString(item.FileTitle,40)}</a>
<span class="lst-item2 R">!{formatDate(item.CreateDate, "yyyy-MM-dd hh:mm:ss")}</span>
<span class="lst-item3 R">!{item.Integral}</span>
</li>
{#/each}
</script>
@*收藏分页数据模版*@
<script id="CollectionBody" type="text/template">
{#each data as item}
<li class="member-list-item">
<a class="lst-item1 L" href="/Sccnn/Detail?KeyValue=!{item.FileID}" title="!{item.FileTitle}">!{subString(item.FileTitle,40)}</a>
<span class="lst-item2 R">!{formatDate(item.CreateDate, "yyyy-MM-dd hh:mm:ss")}</span>
</li>
{#/each}
</script>
@*充值分页数据模版*@
<script id="PayBody" type="text/template">
{#each data as item}
<li class="member-list-item">
<a href="javascript:;" title="点击查看支付凭证" class="lst-item1 L" onclick="layer.full(layer.open({ content: $(this).find('.imgHid').html()}))">
<div style="display:none;" class="imgHid">
<img src="!{item.PayForUrl}">
</div>
{#if item.PayForContent==5}
<span> 5个金币/5元</span>
{#else if item.PayForContent==10}
<span> 10个金币/10元</span>
{#else if item.PayForContent==22}
<span> 22个金币/20元</span>
{#else if item.PayForContent==33}
<<span> 33个金币/30元</span>
{#else if item.PayForContent==44}
<span> 44个金币/40元</span>
{#else if item.PayForContent==55}
<span> 55个金币/50元</span>
{#else if item.PayForContent==110}
<span> 110个金币/100元</span>
{#else if item.PayForContent==220}
<span> 220个金币/200元</span>
{#else if item.PayForContent==330}
<span> 330个金币/300元</span>
{#else if item.PayForContent==440}
<span> 440个金币/400元</span>
{#else if item.PayForContent==550}
<span> 550个金币/500元</span>
{#/if}
</a>
{#if item.PayForState>0}
<span class="lst-item2 R" style="color:#999;">
充值完成
</span>
{#else}
<span class="lst-item2 R">
<a href="/MemberCenterModule/MemberSystem/SubPayForm?KeyValue=!{item.PayForID}">编辑</a>
</span>
{#/if}
{#if item.PayForState>0}
<span class="lst-item3 R" style="color:#00ff21;"> 审核通过</span>
{#else if item.PayForState==-1}
<span class="lst-item3 R" style="color: #ff0000;"> 审核不通过
<a href="javascript:;" onclick="ApproveDetail($(this))" data-id="!{item.PayForID}">详情</a>
</span>
{#else}
<span class="lst-item3 R" style="color:#ff6a00;">待审核 </span>
{#/if}
<span class="lst-item2 R">!{formatDate(item.CreateDate, "yyyy-MM-dd hh:mm:ss")}</span> </li>
{#/each}
</script>
@*我的评论分页数据模版*@
<script id="MsgBody" type="text/template">
{#each data as item}
<li class="member-list-item">
<a target="_blank" href="/WebArticle/Detail?KeyValue=!{item.DataID}&ArticleType=!{item.ArticleType}#msg-form" title="!{item.ArticleTitle}" class="lst-item1 L">
!{subString(item.ArticleTitle,21)}
</a>
<span class="lst-item2 R">
回复(!{item.ReplyNum})
点赞(!{item.GiveNum})
</span>
<span class="lst-item2 R">!{formatDate(item.CreateDate, "yyyy-MM-dd hh:mm:ss")}</span>
<span class="lst-item4 R" title="!{item.MessageReplyCenter}"> !{subString(item.MessageReplyCenter,21)}</span>
</li>
{#/each}
</script>
@*隐藏弹窗模版*@
<script id="PwdEdit" type="text/template">
<div style="margin:20px 20px;">
<form id="form1" action="/MemberCenterModule/MemberSystem/SubAccountInfo" method="post" enctype="multipart/form-data" style="margin: 1px">
<input type="hidden" id="KeyValue" name="KeyValue" />
<table class="layer-table-form">
<tr>
<td><span class="layer-form-tit">新密码:</span><input type="password" name="Password" class="layer-form-txt" id="Password" datacol="yes" err="新密码" checkexpession="NotNull" /></td>
</tr>
<tr>
<td><span class="layer-form-tit">确认新密码:</span><input type="password" name="truePassword" class="layer-form-txt" id="truePassword" datacol="yes" err="确认密码" checkexpession="NotNull" /></td>
</tr>
<tr>
<td>
<span class="layer-form-tit">邮箱验证码:</span><input type="text" name="EmailCode" class="layer-form-txt" id="EmailCode" datacol="yes" err="邮箱验证码" checkexpession="NotNull" />
<a href="javascript:;" class="PostEmail" onclick="PostEmail($(this),'@Model.Email', 'EmailCode')">发送邮箱验证</a>
</td>
</tr>
</table> </form>
</div>
</script>
<script id="EmailEdit" type="text/template">
<div style="margin:20px 20px;">
<form id="form1" action="/MemberCenterModule/MemberSystem/SubAccountInfo" method="post" enctype="multipart/form-data" style="margin: 1px">
<input type="hidden" id="KeyValue" name="KeyValue" />
<table class="layer-table-form">
<tr>
<td>
<span class="layer-form-tit">邮箱验证码:</span><input type="text" name="EmailCode" class="layer-form-txt" id="EmailCode" datacol="yes" err="邮箱验证码" checkexpession="NotNull" />
<a href="javascript:;" class="PostEmail" onclick="PostEmail($(this),'@Model.Email', 'EmailCode')">发送邮箱验证</a>
</td>
</tr>
<tr>
<td><span class="layer-form-tit">新邮箱:</span><input type="text" name="Email" class="layer-form-txt" id="Email" datacol="yes" err="新邮箱" checkexpession="Email" /></td>
</tr>
<tr>
<td>
<span class="layer-form-tit">新邮箱验证码:</span><input type="text" name="NewEmailCode" class="layer-form-txt" id="NewEmailCode" datacol="yes" err="新邮箱验证码" checkexpession="NotNull" />
<a href="javascript:;" class="PostEmail" onclick="PostEmail($(this), $(this).parents('table').find('#Email').val(), 'NewEmailCode')">发送新邮箱验证</a>
</td>
</tr>
</table> </form>
</div>
</script>
@*隐藏审批记录模版*@
<script id="DialogApprove" type="text/template">
<div class="Dialog-Box font-yahei">
<div class="Dialog-Com" style="display:block;">
<table class="Dialog-table">
<thead>
<tr>
<td class="Dialog-table-tit" style="text-align:center;">状态</td>
<td class="Dialog-table-tit" style="text-align:center;">操作人</td>
<td class="Dialog-table-tit" style="text-align:center;">操作时间</td>
<td class="Dialog-table-tit" style="text-align:center;">原因</td>
</tr>
</thead>
<tbody id="Approve"></tbody>
</table>
</div>
</div>
</script> <script type="text/javascript">
$(function () {
juicer.register('formatDate', formatDate);
juicer.register('subString', subString);
getDownPageData();
getCollectionPageData();
getPayPageData();
getMsgPageData();
SetTagNav();
})
///审核记录详情
function ApproveDetail(elem) {
var dataId = elem.attr("data-id");
layer.open({
title: "审核记录",
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['700px', '500px'], //宽高
content: $("#DialogApprove").html(),
});
AjaxJson("/MemberCenterModule/MemberSystem/GetApprove", { DataId: dataId }, function (data) {
if (!!data) {
var str = "";
for (var i = 0; i < data.length; i++) {
str += "<tr>"
str += "<td class=\"Dialog-table-tit\" style=\"text-align:center;\">" + data[i].Action + "</td>"
str += "<td class=\"Dialog-table-tit\" style=\"text-align:center;\">" + data[i].CreateUserName + "</td>"
str += "<td class=\"Dialog-table-tit\" style=\"text-align:center;\">" + formatDate(data[i].CreateDate, "yyyy-MM-dd") + "</td>"
str += "<td class=\"Dialog-table-tit\" style=\"text-align:center;\">" + (!data[i].Idea ? '' : data[i].Idea) + "</td>"
str += "</tr>";
}
$("#Approve").html(str);
}
});
}
//菜单切换
function SetTagNav() {
$(".member-tag-nav .tag-nav-item").click(function () {
if (!$(this).hasClass("on")) {
$(this).addClass("on").siblings(".tag-nav-item").removeClass("on");
$(".member-tag-com").eq($(this).index()).addClass("on").siblings(".member-tag-com").removeClass("on");
}
});
}
//下载记录初始化分页函数
function getDownPageData() {
var param = {
rows: 10,
url: "/MemberCenterModule/MemberSystem/GetDownTable",
sidx: "CreateDate",
sord: "DESC",
searchForm: "",
infoPanel: '#down-box',
barPanel: '#downPage',
template: '#downBody',
callback: ""
}
Pager.init(param); }
//收藏记录初始化分页函数
function getCollectionPageData() {
var param = {
rows: 10,
url: "/MemberCenterModule/MemberSystem/GetCollectionTable",
sidx: "CreateDate",
sord: "DESC",
searchForm: "",
infoPanel: '#Collection-box',
barPanel: '#CollectionPage',
template: '#CollectionBody',
callback: ""
}
Pager.init(param); }
//充值记录初始化分页函数
function getPayPageData() {
var param = {
rows: 10,
url: "/MemberCenterModule/MemberSystem/GetPayTable",
sidx: "CreateDate",
sord: "DESC",
searchForm: "",
infoPanel: '#Pay-box',
barPanel: '#PayPage',
template: '#PayBody',
callback: ""
}
Pager.init(param); }
//充值记录初始化分页函数
function getMsgPageData() {
var param = {
rows: 10,
url: "/MemberCenterModule/MemberSystem/GetMsgTable",
sidx: "CreateDate",
sord: "DESC",
searchForm: "",
infoPanel: '#Msg-box',
barPanel: '#MsgPage',
template: '#MsgBody',
callback: ""
}
Pager.init(param); }
//编辑弹窗
function AddEditBtn(num) {
var tem = $("#PwdEdit").html();
if (num > 1) {
tem = $("#EmailEdit").html();
}
layer.open({
title: "修改信息",
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['650px', '300px'], //宽高
content: tem,
btn: ['保存', '取消'], //只是为了演示
yes: function () {
SubAccountInfo(num);
}
});
}
//提交用户信息
function SubAccountInfo(num) {
var postData;
if (num > 0) {
if (!CheckDataValid('#form1', true)) {
return false;
}
if ($("#Password").val() != $("#truePassword").val()) {
layer.tips('两次输入的秘密不一致!', $("#truePassword"));
$("#truePassword").focus();
return false;
}
postData = GetWebControls("#form1");
if (num == 1) {
postData.Password = escape($.md5(postData.Password));
}
}
else {
if (!CheckDataValid('#formInfo', true)) {
return false;
}
postData = GetWebControls("#formInfo");
} AjaxJson("/MemberCenterModule/MemberSystem/SubAccountInfo?EmailCode=" + $("#EmailCode").val() + "&NewEmailCode=" + $("#NewEmailCode").val() + "&num=" + num, postData,
function (data) {
if (data.Code > 0) {
layer.msg(data.Message, { icon: 1, time: 1000 }, function () {
location.reload();
});
}
else {
layer.alert(data.Message, { icon: data.Code });
}
}
);
}
//邮箱验证
function PostEmail(elem, Email, Type) { if (elem.hasClass("PostEmailActive")) {
return false;
} if (!isEmail(Email)) {
layer.tips('请输入正确的邮箱!', $("#Email"));
$("#Email").focus();
return false;
} AjaxJson("/MemberCenterModule/MemberLogin/PostEmail?Type=" + Type + "&Email=" + Email,{}, function (data) {
if (data.Code > 0) {
layer.msg(data.Message, { icon: 1, time: 1000 }, function () {
$(".PostEmail").text("发送邮箱验证").removeClass("PostEmailActive");
elem.addClass("PostEmailActive");
SetPostTime(elem, Type);
});
}
else {
layer.alert(data.Message, { icon: data.Code });
}
}
);
} </script>
@*发送倒计时*@
<script type="text/javascript">
function writeCookie(name, value, timeNum) {//把当前发送的时间写入cookie
var expire = "";
if (timeNum != null) {
expire = new Date((new Date()).getTime() + timeNum);//设置有效时间段(当前时间+设置的有效时间长度)
expire = "; expires=" + expire.toGMTString();//这里分号是为与前面的拼接需要"name=xxx;expires=yyy"
}
document.cookie = name + "=" + escape(value) + expire + ";path=/";
}
function readCookie(name) {//读取cookie中名称等于name的值
var cookieValue = "";
var search = name + "=";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
cookieValue = (document.cookie.substring(offset, end))
}
}
return cookieValue;
} var tipId;
var TypeCode;
var _elem;
function SetPostTime(elem, Type) {
TypeCode = Type;
_elem = elem;
writeCookie(TypeCode, (new Date()).getTime(), 60000)
tipId = window.setInterval("startTiem()", 1000); } function startTiem() {
var tt = parseInt(((new Date()).getTime() - readCookie(TypeCode)) / 1000);
if (tt < 60) {
var vv = "(" + parseInt(60 - tt) + ")秒后重新发送";
_elem.text(vv); } else {
_elem.text("发送邮箱验证");
_elem.removeClass("PostEmailActive");
window.clearInterval(tipId);
}
}
</script>
(2)充值套餐页面RechargeView.cshtml
@using IA.Entity
@using Bobo.Utilities
@model Com_Member
@{
ViewBag.Title = "充值中心-页落素材网-页落网";
Layout = "~/Views/Shared/_LayoutMember.cshtml";
}
<script src="~/Content/Scripts/layer/layer.js"></script>
<div id="center" style="padding-top:130px;">
<div class="pay">
<!--主内容开始编辑-->
<div class="tr_rechtext">
<p class="te_retit"><img src="~/Content/Web/img/coin.png" alt="">充值中心</p>
<p>1.金币是页落素材网推出的专用于本站下载素材的虚拟货币。</p>
<p>2.金币以套餐形式组合推出,你可以选择支付宝或者是微信的付款方式来进行充值,金币每次5个起充。</p>
</div> <div class="tr_rechhead">
<img src="~/Content/Images/slice/pht.png">
<p>
充值帐号:
<a>@Model.RealName</a>
</p>
<div class="tr_rechheadcion R">
<img src="~/Content/Web/img/coin.png" alt="">
<span>当前余额:<b>@Model.Integral 金币</b></span>
</div>
</div>
<ul class="ui-choose am-form-group" id="uc_01">
<li class="ui-chli on" data-value="5">5个金币/5元</li>
<li class="ui-chli" data-value="10">10个金币/10元</li>
<li class="ui-chli" data-value="22">22个金币/20元</li>
<li class="ui-chli" data-value="33">33个金币/30元</li>
<li class="ui-chli" data-value="44">44个金币/40元</li>
<li class="ui-chli" data-value="55">55个金币/50元</li>
<li class="ui-chli" data-value="110">110个金币/100元</li>
<li class="ui-chli" data-value="220">220个金币/200元</li>
<li class="ui-chli" data-value="330">330个金币/300元</li>
<li class="ui-chli" data-value="440">440个金币/400元</li>
<li class="ui-chli" data-value="550">550个金币/500元</li>
@*<li class="ui-choose-ling ui-chli">VIP1(23个任意下载/19元)</li>
<li class="ui-choose-ling ui-chli">VIP2(50个任意下载/39元)</li>
<li class="ui-choose-ling ui-chli">VIP3(100个任意下载/88元)</li>
<li class="ui-choose-ling ui-chli">VIP4(一年任意下载/299元)</li>*@
<li class="chck-btn chck-btn2" onclick="PaySubData()">
立即充值
</li>
</ul>
<div class="clear"></div> </div>
</div> @*隐藏下载弹窗模版*@
<script id="PayTemp" type="text/template">
<div class="pay-nav">
<a href="javascript:;" class="pay-nav-item pay-wxnav on" data-type="1" onclick="setNavTag($(this))"><img src="/Content/Web/img/wxnav.png" />微信支付</a>
<a href="javascript:;" class="pay-nav-item pay-zfbnav" data-type="2" onclick="setNavTag($(this))"><img src="/Content/Web/img/zfbnav.png" />支付宝支付</a>
</div>
<div class="pay-title">扫一扫输入套餐金额</div>
<div class="pay-2vm pay-wx2vm on"><img src="/Content/Web/img/vxrm.png" /></div>
<div class="pay-2vm pay-zfb2vm"><img src="/Content/Web/img/zfbrm.png" /></div>
<div class="pay-tip">
<p>1.页落素材网属于个人运维网站,不支持在线接口支付。</p>
<p>2.付款成功后点击完成支付跳转至上传支付凭证(支付截图),最快1分钟内即可完成支付充值,并以邮件形式通知您处理结果。</p>
</div>
</script> <script type="text/javascript">
$(function () {
clickfun();
}); function clickfun() {
$(".ui-chli").click(function () {
if (!$(this).hasClass("on")) {
$(this).addClass("on").siblings(".ui-chli").removeClass("on");
}
});
} //支付弹窗
function PaySubData() {
layer.open({
title: "充值支付",
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['500px', '560px'], //宽高
content: $("#PayTemp").html(),
btn: ['完成支付', '取消支付'],
yes: function (index) {
location.href = "/MemberCenterModule/MemberSystem/SubPayForm?value=" + escape($(".ui-chli.on").attr("data-value")) + "&typev=" + escape($(".pay-nav-item.on").attr("data-type"));
}
});
$(".pay-title").text($(".ui-chli.on").text());
}
//导航切换
function setNavTag(elem) {
if (!elem.hasClass("on")) {
elem.addClass("on").siblings(".pay-nav-item").removeClass("on");
$(".pay-2vm").eq(elem.index()).addClass("on").siblings(".pay-2vm").removeClass("on");
}
}
</script>
(3)支付凭证上传SubPayForm.cshtml
@{
ViewBag.Title = "凭证上传中心-页落素材网-页落网";
Layout = "~/Views/Shared/_LayoutMember.cshtml";
}
<script src="~/Content/Scripts/layer/layer.js"></script>
<div id="center" style="padding-top:130px;">
<form id="payForm" class="form" action="/MemberCenterModule/MemberSystem/SubPayDataForm" method="post" enctype="multipart/form-data" style="margin: 1px">
<div class="pay">
<div class="tr_rechtext otherretxt">
<p class="te_retit"><img src="~/Content/Web/img/up.png" alt="">凭证上传中心</p>
<p>1.页落素材网属于个人运维网站,不支持在线接口支付。</p>
<p>2.付款成功后可在这里上传支付凭证(支付截图),最快1分钟内即可完成支付充值。</p>
</div>
<div class="pay-item">
<span class="pay-tit">已购套餐类型:</span>
<select class="pay-text" onchange="$('#Integral').val($(this).val());" id="PayForContent" name="PayForContent" datacol="yes" err="购买套餐" checkexpession="NotNull">
<option value="">==请选择==</option>
<option value="5">5个金币/5元</option>
<option value="10">10个金币/10元</option>
<option value="22">22个金币/20元</option>
<option value="33">33个金币/30元</option>
<option value="44">44个金币/40元</option>
<option value="55">55个金币/50元</option>
<option value="110">110个金币/100元</option>
<option value="220">220个金币/200元</option>
<option value="330">330个金币/300元</option>
<option value="440">440个金币/400元</option>
<option value="550">550个金币/500元</option>
@*<option value="VIP1(23个任意下载/19元)">VIP1(23个任意下载/19元)</option>
<option value="VIP2(50个任意下载/39元)">VIP2(50个任意下载/39元)</option>
<option value="VIP3(100个任意下载/88元)">VIP3(100个任意下载/88元)</option>
<option value="VIP4(一年任意下载/299元)">VIP4(一年任意下载/299元)</option>*@
</select>
<input type="hidden" id="Integral" name="Integral" />
</div>
<div class="pay-item">
<span class="pay-tit">支付类型:</span>
<select class="pay-text" id="PayForType" name="PayForType" datacol="yes" err="支付类型" checkexpession="NotNull">
<option value="">==请选择==</option>
<option value="1">微信支付</option>
<option value="2">支付宝支付</option>
</select>
</div>
<div class="pay-item">
<span class="pay-tit">上传支付凭证(支付截图):</span>
<input type="hidden" name="PayForUrl" id="PayForUrl" />
<input type="file" class="pay-file" name="PayForUrlFile" id="PayForUrlFile" datacol="yes" err="支付凭证" checkexpession="NotNull" />
<span style="color:#999;">格式为:.JPG|.JPEG|.PNG|.GIF|.BMP</span>
</div>
<input type="hidden" name="KeyValue" id="KeyValue" /> <div class="detail-czbtn" style="width:200px;">
<a href="javascript:;" onclick="SubPayData()" class="detail-btn detail-btn1">确认提交</a>
</div>
<div class="clear"></div>
</div>
</form>
</div> <script type="text/javascript">
var value = GetQuery('value').replace("null", "5");
var typev = GetQuery('typev').replace("null", "1");
var KeyValue = GetQuery('KeyValue').replace("null", "");
$(function () {
if (!!KeyValue) {
InitControl();
$("#KeyValue").val(KeyValue);
}
else {
$("#PayForContent").val(!!value ? value : 5);
$("#Integral").val(!!value ? value : 5);
$("#PayForType").val(!!typev ? typev : 1);
}
}); function InitControl() {
AjaxJson("/MemberCenterModule/MemberSystem/GetPayInit", { KeyValue: KeyValue }, function (data) {
SetWebControls(data, "#payForm");
});
}
//提交支付凭证
function SubPayData() {
if (!CheckDataValid('#payForm', true)) {
return false;
}
//提交表单
$("#payForm").ajaxSubmit({
dataType: "json",
beforeSubmit: function () {
layer.msg('正在提交信息,请稍后…', { icon: 16, shade: 0.2, time: 0 });
},
success: function (data) {
if (data.Success) {
layer.msg(data.Message, { icon: data.Code, time: 1000 }, function () {
window.location.href = "/MemberCenterModule/MemberSystem/Index";
}); }
else {
layer.alert(data.Message, { icon: data.Code });
}
}
}); }
</script>
页面效果如下:
ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(14)之会员中心管理的更多相关文章
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(13)之会员登录注册
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 会员中心,是我们与用户交 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(1)之数据库设计
本文主要讲解本项目网站所应用到的知识点,及数据库的相关设计: 一.知识点 (1)本项目主要采取ASP.NET MVC的编程模式,相信你已经了解到了MVC的具体含义是什么,这里不再赘述,有不了解的朋友, ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(16)之轻博客
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 项目到上面一步其实已经算 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目主要是一个素材的分 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(11)之支付管理及广告管理
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目属于个人项目,不支 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(9)之系统登录
前面我们已经做好了一个文章管理功能模块,接下来,我们回头来做登录窗口,登录不仅涉及到登录验证还涉及到登录日志还有缓存时长等. 对于缓存的相关设置,我们已经写好封装在Bobo.Utilities.dll ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(7)之扩展基类和区域创建以及文本编辑配置
一.扩展基类和区域创建 (1)在应用之前,我们先在表现层创建一个公共的系统扩展文件来(SystemExtension)存放我们需要延伸和扩展的方法类. 在常规的项目系统操作中,我们都需要用到增删查改的 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(2)之创建项目
我们在创建项目的时候一定要遵循层次和命名的原则,同时也要有统一的规范,无论是多人项目还是单人项目,能够让人看着一目了然并赏析悦目,做一个有追求的程序员. 例如IA.WebApp是视图控制器层(表现层) ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(8)之文章管理
到这一步,我们整个项目的核心搭建已经算是完成了,接下来就是我们业务功能的实际应用,也就是表现层的设计和实现,如果你是一个项目负责人,到这一步,接下来的工作就可以交给下面的兄弟去完成了,在这里我们用文章 ...
随机推荐
- TCP/IP协议学习
计算机网路学得不好,首先先放个OSI七层网络模型吧 在协议的控制下,上层对下层进行调用,下层对上层进行服务, 上下层间用交换原语交换信息.这样可以提高传输速率,并且保证数据安全,所以说其实每一层都有存 ...
- More Effective C++: 05技术(25-28)
25:将constructor 和 non-member functions 虚化 所谓 virtual constructor是某种函数,视其输入可产生不同类型的对象.比如下面的代码: class ...
- @codeforces - 932G@ Palindrome Partition
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个字符串 s,求有多少种方案可将其划分成偶数个段 \(p_ ...
- Python之整数类型
整数:18,73,84 每一个整数都有如下的功能:class int(object): """ int(x=0) -> int or long int(x, bas ...
- Selenium-------ActionChainApi接口详解
ActionChains UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,Selenium给我们提供了Ac ...
- Kafka Connect HDFS
概述 Kafka 的数据如何传输到HDFS?如果仔细思考,会发现这个问题并不简单. 不妨先想一下这两个问题? 1)为什么要将Kafka的数据传输到HDFS上? 2)为什么不直接写HDFS而要通过Kaf ...
- map的三种遍历方法!
map的三种遍历方法! 集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ /* * To change this template, choose Tools | Te ...
- python 常见包中的不定参数
- 基于MaxCompute的数仓数据质量管理
声明 本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导. 参考文献 <大数据之路——阿里巴巴大数据实践>——阿里巴巴数据技术及产品部 著. 背景及目的 数据对一个企业来说已 ...
- javascript简介 标签: javascript 2015-11-13 12:13 1712人阅读 评论(39)
JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...