忽略dll文件git

This commit is contained in:
“wanyongkang”
2023-07-29 10:19:42 +08:00
parent 7f97317bcc
commit b562aba2b1
3868 changed files with 63608 additions and 385427 deletions

View File

@@ -1,12 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "3.1.5",
"commands": [
"dotnet-ef"
]
}
}
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "3.1.5",
"commands": [
"dotnet-ef"
]
}
}
}

View File

@@ -1,17 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Host.Areas.m.Controllers
{
[AllowAnonymous]
[Area("m")]
[Route("m/[controller]/[action]")]
public abstract class MBaseController : Controller
{
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Host.Areas.m.Controllers
{
[AllowAnonymous]
[Area("m")]
[Route("m/[controller]/[action]")]
public abstract class MBaseController : Controller
{
}
}

View File

@@ -1,17 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace Host.Areas.m.Controllers
{
public class ProjectController : MBaseController
{
public IActionResult Index()
{
return Content("m/project");
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace Host.Areas.m.Controllers
{
public class ProjectController : MBaseController
{
public IActionResult Index()
{
return Content("m/project");
}
}
}

View File

@@ -1,89 +1,89 @@
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq.Expressions;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.EntitiesExtension;
using System.Threading.Tasks;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace Home.Controllers
{
public class ArticleController : MvcBaseController
{
ArticleService m_ArticleServce;
public ArticleController(ArticleService _ArticleServce)
{
m_ArticleServce = _ArticleServce;
}
[HttpGet]
public async Task<IActionResult> Index([FromQuery]ArticleSearchModel request)
{
request = request ?? new ArticleSearchModel();
Expression<Func<ArticleEntity, bool>> exp = m => 1 == 1;
if (request.Catalog > 0)
{
exp = exp.And(m => m.CatalogId == request.Catalog);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Title.Contains(request.KeyWord) || m.SubTitle.Contains(request.KeyWord));
}
var ret = await m_ArticleServce.Page(request.PageIndex, request.PageSize, exp);
return View(ret);
}
[HttpGet]
public async Task<IActionResult> Search([FromQuery]ArticleSearchModel request)
{
request = request ?? new ArticleSearchModel();
Expression<Func<ArticleEntity, bool>> exp = m => 1 == 1;
if (request.Catalog > 0)
{
exp = exp.And(m => m.CatalogId == request.Catalog);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Title.Contains(request.KeyWord) || m.SubTitle.Contains(request.KeyWord));
}
var ret = await m_ArticleServce.Page(request.PageIndex, request.PageSize, exp);
return View(ret);
}
[HttpGet]
public async Task<IActionResult> Info(int id)
{
var prev = await m_ArticleServce.Query(m => m.Id < id).OrderByDescending(m => m.Id).FirstOrDefaultAsync();
var ret = await m_ArticleServce.GetById(id);
var next = await m_ArticleServce.Query(m => m.Id > id).OrderBy(m => m.Id).FirstOrDefaultAsync();
return View(new ArticleInfoMode()
{
Prev = prev,
Info = ret,
Next = next
});
}
[HttpGet]
public IActionResult TaoBao()
{
return View();
}
}
}
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq.Expressions;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.EntitiesExtension;
using System.Threading.Tasks;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace Home.Controllers
{
public class ArticleController : MvcBaseController
{
ArticleService m_ArticleServce;
public ArticleController(ArticleService _ArticleServce)
{
m_ArticleServce = _ArticleServce;
}
[HttpGet]
public async Task<IActionResult> Index([FromQuery]ArticleSearchModel request)
{
request = request ?? new ArticleSearchModel();
Expression<Func<ArticleEntity, bool>> exp = m => 1 == 1;
if (request.Catalog > 0)
{
exp = exp.And(m => m.CatalogId == request.Catalog);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Title.Contains(request.KeyWord) || m.SubTitle.Contains(request.KeyWord));
}
var ret = await m_ArticleServce.Page(request.PageIndex, request.PageSize, exp);
return View(ret);
}
[HttpGet]
public async Task<IActionResult> Search([FromQuery]ArticleSearchModel request)
{
request = request ?? new ArticleSearchModel();
Expression<Func<ArticleEntity, bool>> exp = m => 1 == 1;
if (request.Catalog > 0)
{
exp = exp.And(m => m.CatalogId == request.Catalog);
}
if (request.KeyWord.Has())
{
exp = exp.And(m => m.Title.Contains(request.KeyWord) || m.SubTitle.Contains(request.KeyWord));
}
var ret = await m_ArticleServce.Page(request.PageIndex, request.PageSize, exp);
return View(ret);
}
[HttpGet]
public async Task<IActionResult> Info(int id)
{
var prev = await m_ArticleServce.Query(m => m.Id < id).OrderByDescending(m => m.Id).FirstOrDefaultAsync();
var ret = await m_ArticleServce.GetById(id);
var next = await m_ArticleServce.Query(m => m.Id > id).OrderBy(m => m.Id).FirstOrDefaultAsync();
return View(new ArticleInfoMode()
{
Prev = prev,
Info = ret,
Next = next
});
}
[HttpGet]
public IActionResult TaoBao()
{
return View();
}
}
}

View File

@@ -1,50 +1,50 @@
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.Extension;
namespace Home.Controllers
{
public class HomeController : MvcBaseController
{
ProductService m_ProductService;
ArticleService m_ArticleService;
ProductOrderService m_ProductOrderService;
public HomeController(ProductService _ProductService, ArticleService _ArticleService, ProductOrderService _ProductOrderService)
{
m_ProductService = _ProductService;
m_ArticleService = _ArticleService;
m_ProductOrderService = _ProductOrderService;
}
[Route("/")]
public async Task<IActionResult> Index()
{
var prodectList=await m_ProductService.Query(m=>m.OnLine==1).ToListAsync();
var model = prodectList.MapsTo<ProductModel>();
return View(model);
}
[Route("/h")]
public IActionResult Test()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
[Route("/Test1")]
public async Task Test1()
{
await m_ProductOrderService.TestProcessOrderAccount();
}
}
}
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.Extension;
namespace Home.Controllers
{
public class HomeController : MvcBaseController
{
ProductService m_ProductService;
ArticleService m_ArticleService;
ProductOrderService m_ProductOrderService;
public HomeController(ProductService _ProductService, ArticleService _ArticleService, ProductOrderService _ProductOrderService)
{
m_ProductService = _ProductService;
m_ArticleService = _ArticleService;
m_ProductOrderService = _ProductOrderService;
}
[Route("/")]
public async Task<IActionResult> Index()
{
var prodectList=await m_ProductService.Query(m=>m.OnLine==1).ToListAsync();
var model = prodectList.MapsTo<ProductModel>();
return View(model);
}
[Route("/h")]
public IActionResult Test()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
[Route("/Test1")]
public async Task Test1()
{
await m_ProductOrderService.TestProcessOrderAccount();
}
}
}

View File

@@ -1,141 +1,141 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Home.Controllers
{
public class LineListController : MvcBaseController
{
ProductRouteService m_ProductRouteService;
ProductService m_ProductService;
public LineListController(ProductRouteService _ProductRouteService, ProductService _ProductService)
{
m_ProductRouteService = _ProductRouteService;
m_ProductService = _ProductService;
}
[HttpGet]
public async Task<IActionResult> Index([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp =null;
if (request.ProductId > 0)
{
exp = m => m.ProductId == request.ProductId;
}
if (request.KeyWord.Has())
{
Expression<Func<ProductRouteEntity, bool>> filterExpr = m =>
m.Province.Contains(request.KeyWord)
|| m.City.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord)
|| m.ServerUrl.Contains(request.KeyWord);
if (exp == null)
exp = filterExpr;
else exp=exp.And(filterExpr);
}
var ret = await m_ProductRouteService.Query(exp).OrderBy(m=>m.Sort).ToListAsync();
var products = await m_ProductService.Query(m=>m.OnLine == 1).OrderBy(m=>m.Sort).ToListAsync();
ViewData["products"] = products;
return View(ret);
}
public async Task<IActionResult> Index2([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp =null;
if (request.ProductId > 0)
{
exp = m => m.ProductId == request.ProductId;
}
if (request.KeyWord.Has())
{
Expression<Func<ProductRouteEntity, bool>> filterExpr = m =>
m.Province.Contains(request.KeyWord)
|| m.City.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord)
|| m.ServerUrl.Contains(request.KeyWord);
if (exp == null)
exp = filterExpr;
else exp=exp.And(filterExpr);
}
var ret = await m_ProductRouteService.Query(exp).OrderBy(m=>m.Sort).ToListAsync();
var products = await m_ProductService.Query(m=>m.OnLine == 1).OrderBy(m=>m.Sort).ToListAsync();
ViewData["products"] = products;
return View(ret);
}
public async Task<IActionResult> Xieyi()
{
return View();
}
[HttpGet]
public async Task<IActionResult> Excel([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp = m => 1 == 1;
if (request.ProductId > 0)
{
exp = exp.And(m => m.ProductId == request.ProductId);
}
if (request.KeyWord.Has())
{
exp = exp.Or(m => m.Province.Contains(request.KeyWord));
exp = exp.Or(m => m.City.Contains(request.KeyWord));
exp = exp.Or(m => m.Name.Contains(request.KeyWord));
exp = exp.Or(m => m.KeyWord.Contains(request.KeyWord));
}
var ret = await m_ProductRouteService.Query(exp).ToListAsync();
var data = new ExcelData<ProductRouteEntity>
{
SheetName ="线路表",
Data = ret
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "ProductName", Title = "产品" },
new ExcelTitle { Property = "Province", Title = "省份" },
new ExcelTitle { Property = "City", Title = "城市" },
new ExcelTitle { Property = "Name", Title = "运营商" },
new ExcelTitle { Property = "ServerUrl", Title = "服务器" },
new ExcelTitle { Property = "BandWidth", Title = "实时带宽" },
new ExcelTitle { Property = "IpRemark", Title = "IP量" },
new ExcelTitle { Property = "Status", Title = "状态" },
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"线路表.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Pass.Vpn.Domain;
using Hncore.Pass.Vpn.Service;
using Home.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Home.Controllers
{
public class LineListController : MvcBaseController
{
ProductRouteService m_ProductRouteService;
ProductService m_ProductService;
public LineListController(ProductRouteService _ProductRouteService, ProductService _ProductService)
{
m_ProductRouteService = _ProductRouteService;
m_ProductService = _ProductService;
}
[HttpGet]
public async Task<IActionResult> Index([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp =null;
if (request.ProductId > 0)
{
exp = m => m.ProductId == request.ProductId;
}
if (request.KeyWord.Has())
{
Expression<Func<ProductRouteEntity, bool>> filterExpr = m =>
m.Province.Contains(request.KeyWord)
|| m.City.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord)
|| m.ServerUrl.Contains(request.KeyWord);
if (exp == null)
exp = filterExpr;
else exp=exp.And(filterExpr);
}
var ret = await m_ProductRouteService.Query(exp).OrderBy(m=>m.Sort).ToListAsync();
var products = await m_ProductService.Query(m=>m.OnLine == 1).OrderBy(m=>m.Sort).ToListAsync();
ViewData["products"] = products;
return View(ret);
}
public async Task<IActionResult> Index2([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp =null;
if (request.ProductId > 0)
{
exp = m => m.ProductId == request.ProductId;
}
if (request.KeyWord.Has())
{
Expression<Func<ProductRouteEntity, bool>> filterExpr = m =>
m.Province.Contains(request.KeyWord)
|| m.City.Contains(request.KeyWord)
|| m.Name.Contains(request.KeyWord)
|| m.ServerUrl.Contains(request.KeyWord);
if (exp == null)
exp = filterExpr;
else exp=exp.And(filterExpr);
}
var ret = await m_ProductRouteService.Query(exp).OrderBy(m=>m.Sort).ToListAsync();
var products = await m_ProductService.Query(m=>m.OnLine == 1).OrderBy(m=>m.Sort).ToListAsync();
ViewData["products"] = products;
return View(ret);
}
public async Task<IActionResult> Xieyi()
{
return View();
}
[HttpGet]
public async Task<IActionResult> Excel([FromQuery]LineSearchModel request)
{
request = request ?? new LineSearchModel();
Expression<Func<ProductRouteEntity, bool>> exp = m => 1 == 1;
if (request.ProductId > 0)
{
exp = exp.And(m => m.ProductId == request.ProductId);
}
if (request.KeyWord.Has())
{
exp = exp.Or(m => m.Province.Contains(request.KeyWord));
exp = exp.Or(m => m.City.Contains(request.KeyWord));
exp = exp.Or(m => m.Name.Contains(request.KeyWord));
exp = exp.Or(m => m.KeyWord.Contains(request.KeyWord));
}
var ret = await m_ProductRouteService.Query(exp).ToListAsync();
var data = new ExcelData<ProductRouteEntity>
{
SheetName ="线路表",
Data = ret
};
var title = new List<ExcelTitle>(){
new ExcelTitle { Property = "ProductName", Title = "产品" },
new ExcelTitle { Property = "Province", Title = "省份" },
new ExcelTitle { Property = "City", Title = "城市" },
new ExcelTitle { Property = "Name", Title = "运营商" },
new ExcelTitle { Property = "ServerUrl", Title = "服务器" },
new ExcelTitle { Property = "BandWidth", Title = "实时带宽" },
new ExcelTitle { Property = "IpRemark", Title = "IP量" },
new ExcelTitle { Property = "Status", Title = "状态" },
};
var fileBytes = ExcelHelper.ExportListToExcel(data, title);
var fileName = $"线路表.xlsx";
Response.Headers.Add("X-Suggested-Filename", fileName.UrlEncode());
return File(fileBytes, "application/octet-stream", fileName);
}
}
}

View File

@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Home.Controllers
{
[Controller]
[AllowAnonymous]
[Route("[Controller]/[Action]")]
public abstract class MvcBaseController : Controller
{
}
}
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Home.Controllers
{
[Controller]
[AllowAnonymous]
[Route("[Controller]/[Action]")]
public abstract class MvcBaseController : Controller
{
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,120 +1,120 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Extension;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Sells.Service;
using Hncore.Wx.Open;
using Home.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Senparc.NeuChar.App.Entities;
using Senparc.Weixin.MP;
using System;
using System.Threading.Tasks;
namespace Home.Controllers
{
[AllowAnonymous]
[Controller]
[Route("[Controller]/[Action]")]
public class WeiXinController : Controller
{
WxAppUserService m_WxAppUserService;
CouponService m_CouponService;
IConfiguration m_Configuration;
public WeiXinController(IConfiguration _Configuration
, WxAppUserService _WxAppUserService
, CouponService _CouponService)
{
m_WxAppUserService = _WxAppUserService;
m_CouponService = _CouponService;
m_Configuration = _Configuration;
}
[HttpGet]
[ActionName("Index")]
public ActionResult Get(string signature, string timestamp, string nonce, string echostr)
{
if (CheckSignature.Check(signature, timestamp, nonce, "hualian"))
{
return Content(echostr); //返回随机字符串则表示验证通过
}
else
{
return Content("failed");
}
}
/// <summary>
/// 最简化的处理流程(不加密)
/// </summary>
[HttpPost]
[ActionName("Index")]
public ActionResult Post(PostModel postModel)
{
if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, "hualian"))
{
return Content("参数错误!");
}
postModel.Token ="hualian";
postModel.EncodingAESKey = m_Configuration["WxApps:EncodingAESKey"];//根据自己后台的设置保持一致
postModel.AppId = m_Configuration["WxApps:AppID"];//根据自己后台的设置保持一致
var messageHandler = new MyMessageHandler(Request.Body, m_WxAppUserService,m_CouponService);
messageHandler.Execute();//执行微信处理过程
return Content(messageHandler.ResponseDocument.ToString());//v0.7-
//return new WeixinResult(messageHandler);//v0.8+
// return new FixWeixinBugWeixinResult(messageHandler);//v0.8+
}
/// <summary>
/// 微信后台推送过来的用户与公众号交互的信息 消息和事件
/// </summary>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <param name="encrypt_type"></param>
/// <param name="msg_signature"></param>
/// <returns></returns>
[HttpPost("{appid}"), AllowAnonymous]
public async Task<string> msg_notice(string appid, string timestamp, string nonce, string encrypt_type, string msg_signature)
{
LogHelper.Debug("公众号交互消息", $"appid={appid}{timestamp},{nonce},{encrypt_type},{msg_signature}");
var msg = await this.Request.Body.ReadAsStringAsync();
LogHelper.Debug("公众号交互消息-加密", msg);
var token = m_Configuration["WxOpen:Token"];
var decyptKey = m_Configuration["WxOpen:DecyptKey"];
var appID = m_Configuration["WxOpen:AppID"];
string decMsg = "";
var wxcpt = new WxOpenCrypt(token, decyptKey, appID);
var ret = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, msg, ref decMsg);
if (ret != 0)
{
LogHelper.Error("开放平台推送的消息-解密失败", ret);
return "faild";
}
var flag = false;
try
{
var requestMessage = MessageFactory.GetRequestEntity(decMsg);
if (requestMessage != null)
{
requestMessage.AppId = appid;
flag = await requestMessage.Handler();
}
}
catch (Exception ex)
{
LogHelper.Fatal("微信开放平台的消息-解析失败", ex.Message);
LogHelper.Error("开放平台推送的消息-解密的消息", decMsg);
flag = false;
}
return flag ? "success" : "faild";
}
}
}
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Extension;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Sells.Service;
using Hncore.Wx.Open;
using Home.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Senparc.NeuChar.App.Entities;
using Senparc.Weixin.MP;
using System;
using System.Threading.Tasks;
namespace Home.Controllers
{
[AllowAnonymous]
[Controller]
[Route("[Controller]/[Action]")]
public class WeiXinController : Controller
{
WxAppUserService m_WxAppUserService;
CouponService m_CouponService;
IConfiguration m_Configuration;
public WeiXinController(IConfiguration _Configuration
, WxAppUserService _WxAppUserService
, CouponService _CouponService)
{
m_WxAppUserService = _WxAppUserService;
m_CouponService = _CouponService;
m_Configuration = _Configuration;
}
[HttpGet]
[ActionName("Index")]
public ActionResult Get(string signature, string timestamp, string nonce, string echostr)
{
if (CheckSignature.Check(signature, timestamp, nonce, "hualian"))
{
return Content(echostr); //返回随机字符串则表示验证通过
}
else
{
return Content("failed");
}
}
/// <summary>
/// 最简化的处理流程(不加密)
/// </summary>
[HttpPost]
[ActionName("Index")]
public ActionResult Post(PostModel postModel)
{
if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, "hualian"))
{
return Content("参数错误!");
}
postModel.Token ="hualian";
postModel.EncodingAESKey = m_Configuration["WxApps:EncodingAESKey"];//根据自己后台的设置保持一致
postModel.AppId = m_Configuration["WxApps:AppID"];//根据自己后台的设置保持一致
var messageHandler = new MyMessageHandler(Request.Body, m_WxAppUserService,m_CouponService);
messageHandler.Execute();//执行微信处理过程
return Content(messageHandler.ResponseDocument.ToString());//v0.7-
//return new WeixinResult(messageHandler);//v0.8+
// return new FixWeixinBugWeixinResult(messageHandler);//v0.8+
}
/// <summary>
/// 微信后台推送过来的用户与公众号交互的信息 消息和事件
/// </summary>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <param name="encrypt_type"></param>
/// <param name="msg_signature"></param>
/// <returns></returns>
[HttpPost("{appid}"), AllowAnonymous]
public async Task<string> msg_notice(string appid, string timestamp, string nonce, string encrypt_type, string msg_signature)
{
LogHelper.Debug("公众号交互消息", $"appid={appid}{timestamp},{nonce},{encrypt_type},{msg_signature}");
var msg = await this.Request.Body.ReadAsStringAsync();
LogHelper.Debug("公众号交互消息-加密", msg);
var token = m_Configuration["WxOpen:Token"];
var decyptKey = m_Configuration["WxOpen:DecyptKey"];
var appID = m_Configuration["WxOpen:AppID"];
string decMsg = "";
var wxcpt = new WxOpenCrypt(token, decyptKey, appID);
var ret = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, msg, ref decMsg);
if (ret != 0)
{
LogHelper.Error("开放平台推送的消息-解密失败", ret);
return "faild";
}
var flag = false;
try
{
var requestMessage = MessageFactory.GetRequestEntity(decMsg);
if (requestMessage != null)
{
requestMessage.AppId = appid;
flag = await requestMessage.Handler();
}
}
catch (Exception ex)
{
LogHelper.Fatal("微信开放平台的消息-解析失败", ex.Message);
LogHelper.Error("开放平台推送的消息-解密的消息", decMsg);
flag = false;
}
return flag ? "success" : "faild";
}
}
}

View File

@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
COPY . .
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Host.dll"]

View File

@@ -1,66 +1,66 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<!--<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>-->
</PropertyGroup>
<ItemGroup>
<None Remove="sh.cmd" />
</ItemGroup>
<ItemGroup>
<Content Include="sh.cmd" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App">
<PrivateAssets Condition="'%(PackageReference.Version)' == ''">all</PrivateAssets>
<Publish Condition="'%(PackageReference.Version)' == ''">true</Publish>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
<PackageReference Include="Senparc.Weixin.MP" Version="16.9.0" />
<PackageReference Include="Senparc.Weixin.MP.MvcExtension" Version="4.1.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Infrastructure\Hncore.Infrastructure\Hncore.Infrastructure.csproj" />
<ProjectReference Include="..\Infrastructure\WxApi\WxApi.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.BaseInfo\Hncore.Pass.BaseInfo.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.PaymentCenter\Hncore.Pass.PaymentCenter.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Vpn\Hncore.Pass.Vpn.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Manage\Hncore.Pass.Manage.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.OSS\Hncore.Pass.OSS.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Sells\Hncore.Pass.Sells.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="Dockerfile">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="upload\readme.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Areas\m\Data\" />
<Folder Include="Areas\m\Models\" />
<Folder Include="Areas\m\Views\" />
<Folder Include="wwwroot\codes\" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\css\.DS_Store" />
<None Include="wwwroot\img\.DS_Store" />
<None Include="wwwroot\js\.DS_Store" />
<None Include="wwwroot\js\bootstrap.min.js" />
<None Include="wwwroot\js\jquery.min.js" />
<None Include="wwwroot\js\swiper.min.js" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1production_1json__JsonSchema="http://json.schemastore.org/bower" appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<!--<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>-->
</PropertyGroup>
<ItemGroup>
<None Remove="sh.cmd" />
</ItemGroup>
<ItemGroup>
<Content Include="sh.cmd" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App">
<PrivateAssets Condition="'%(PackageReference.Version)' == ''">all</PrivateAssets>
<Publish Condition="'%(PackageReference.Version)' == ''">true</Publish>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" />
<PackageReference Include="Senparc.Weixin.MP" Version="16.9.0" />
<PackageReference Include="Senparc.Weixin.MP.MvcExtension" Version="4.1.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Infrastructure\Hncore.Infrastructure\Hncore.Infrastructure.csproj" />
<ProjectReference Include="..\Infrastructure\WxApi\WxApi.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.BaseInfo\Hncore.Pass.BaseInfo.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.PaymentCenter\Hncore.Pass.PaymentCenter.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Vpn\Hncore.Pass.Vpn.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Manage\Hncore.Pass.Manage.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.OSS\Hncore.Pass.OSS.csproj" />
<ProjectReference Include="..\Services\Hncore.Pass.Sells\Hncore.Pass.Sells.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="Dockerfile">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="upload\readme.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Areas\m\Data\" />
<Folder Include="Areas\m\Models\" />
<Folder Include="Areas\m\Views\" />
<Folder Include="wwwroot\codes\" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\css\.DS_Store" />
<None Include="wwwroot\img\.DS_Store" />
<None Include="wwwroot\js\.DS_Store" />
<None Include="wwwroot\js\bootstrap.min.js" />
<None Include="wwwroot\js\jquery.min.js" />
<None Include="wwwroot\js\swiper.min.js" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1production_1json__JsonSchema="http://json.schemastore.org/bower" appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>

View File

@@ -1,20 +1,20 @@
using Hncore.Infrastructure.Extension;
using Hncore.Pass.Sells.Domain;
using Hncore.Pass.Vpn.Domain;
using Home.Models;
using Host.Models;
namespace Home.Map
{
public class MapConfig
{
public static void Config()
{
TinyMapperExtension.Binds<ProductModel, ProductEntity>();
TinyMapperExtension.Binds<TaoBaoNotifyModel, TaoBaoOrderEntity>();
TinyMapperExtension.Binds<TaoBaoRefundModel, TaoBaoRefundEntity>();
}
}
}
using Hncore.Infrastructure.Extension;
using Hncore.Pass.Sells.Domain;
using Hncore.Pass.Vpn.Domain;
using Home.Models;
using Host.Models;
namespace Home.Map
{
public class MapConfig
{
public static void Config()
{
TinyMapperExtension.Binds<ProductModel, ProductEntity>();
TinyMapperExtension.Binds<TaoBaoNotifyModel, TaoBaoOrderEntity>();
TinyMapperExtension.Binds<TaoBaoRefundModel, TaoBaoRefundEntity>();
}
}
}

View File

@@ -1,58 +1,58 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Razor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Host
{
public class MobileViewLocationExpander : IViewLocationExpander
{
public MobileViewLocationExpander()
{
}
private static Regex _detectmobilebrowserregex_b = new Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
private static Regex _detectmobilebrowserregex_v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline);
public void PopulateValues([FromServices]ViewLocationExpanderContext context)
{
var userAgent = context.ActionContext.HttpContext.Request.Headers["User-Agent"];
object area = "";
if (context.ActionContext.RouteData.Values.TryGetValue("area", out area) && area.ToString().Equals("admin", StringComparison.CurrentCultureIgnoreCase))
{
context.Values["mobile"] = "";
return;
}
if (IsMobile(userAgent))
{
context.Values["mobile"] = ".Mobile";
}
else
{
context.Values["mobile"] = "";
}
}
private bool IsMobile(string userAgent)
{
if (string.IsNullOrEmpty(userAgent))
return false;
if ((_detectmobilebrowserregex_b.IsMatch(userAgent) || _detectmobilebrowserregex_v.IsMatch(userAgent.Substring(0, 4))))
return true;
return false;
}
public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
return viewLocations.Select(f => f.Replace("/Views/", $"/Views{context.Values["mobile"]}/"));
}
}
}
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Razor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Host
{
public class MobileViewLocationExpander : IViewLocationExpander
{
public MobileViewLocationExpander()
{
}
private static Regex _detectmobilebrowserregex_b = new Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
private static Regex _detectmobilebrowserregex_v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline);
public void PopulateValues([FromServices]ViewLocationExpanderContext context)
{
var userAgent = context.ActionContext.HttpContext.Request.Headers["User-Agent"];
object area = "";
if (context.ActionContext.RouteData.Values.TryGetValue("area", out area) && area.ToString().Equals("admin", StringComparison.CurrentCultureIgnoreCase))
{
context.Values["mobile"] = "";
return;
}
if (IsMobile(userAgent))
{
context.Values["mobile"] = ".Mobile";
}
else
{
context.Values["mobile"] = "";
}
}
private bool IsMobile(string userAgent)
{
if (string.IsNullOrEmpty(userAgent))
return false;
if ((_detectmobilebrowserregex_b.IsMatch(userAgent) || _detectmobilebrowserregex_v.IsMatch(userAgent.Substring(0, 4))))
return true;
return false;
}
public virtual IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context,
IEnumerable<string> viewLocations)
{
return viewLocations.Select(f => f.Replace("/Views/", $"/Views{context.Values["mobile"]}/"));
}
}
}

View File

@@ -1,17 +1,17 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class AccountSearchModel : PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
public int ExpiredDay { get; set; } = -100;//OrderType
public int ProductId { get; set; } = 0;
public string PackageId { get; set; } = "0";
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class AccountSearchModel : PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
public int ExpiredDay { get; set; } = -100;//OrderType
public int ProductId { get; set; } = 0;
public string PackageId { get; set; } = "0";
}
}

View File

@@ -1,14 +1,14 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ArticleInfoMode
{
public ArticleEntity Prev { get; set; }
public ArticleEntity Info { get; set; }
public ArticleEntity Next { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ArticleInfoMode
{
public ArticleEntity Prev { get; set; }
public ArticleEntity Info { get; set; }
public ArticleEntity Next { get; set; }
}
}

View File

@@ -1,12 +1,12 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ArticleSearchModel : PageRequestBase
{
public ArticleCatalog Catalog { get; set; } = ArticleCatalog.Top;
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ArticleSearchModel : PageRequestBase
{
public ArticleCatalog Catalog { get; set; } = ArticleCatalog.Top;
}
}

View File

@@ -1,13 +1,13 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ChargeOrderPayModel
{
public UserChargeOrderEntity OrderInfo { get; set; }
public string PayData { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class ChargeOrderPayModel
{
public UserChargeOrderEntity OrderInfo { get; set; }
public string PayData { get; set; }
}
}

View File

@@ -1,11 +1,11 @@
using System;
namespace Home.Models
{
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
using System;
namespace Home.Models
{
public class ErrorViewModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
}

View File

@@ -1,11 +1,11 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class LineSearchModel : PageRequestBase
{
public int ProductId { get; set; } = 0;
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class LineSearchModel : PageRequestBase
{
public int ProductId { get; set; } = 0;
}
}

View File

@@ -1,12 +1,12 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class OrderPayModel
{
public ProductOrderEntity OrderInfo { get; set; }
public string PayData { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class OrderPayModel
{
public ProductOrderEntity OrderInfo { get; set; }
public string PayData { get; set; }
}
}

View File

@@ -1,18 +1,18 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class OrderSearchModel: PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
public int? OrderType { get; set; } = 0;//OrderType
public int ProductId { get; set; } = 0;
public string PackageId { get; set; } = "0";
public int IsRefund { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class OrderSearchModel: PageRequestBase
{
public DateTime? BTime { get; set; }
public DateTime? ETime { get; set; }
public int? OrderType { get; set; } = 0;//OrderType
public int ProductId { get; set; } = 0;
public string PackageId { get; set; } = "0";
public int IsRefund { get; set; }
}
}

View File

@@ -1,15 +1,15 @@
namespace Home.Models
{
public class OriginAccountAuthRequest
{
public int ProductId { get; set; }
public string Account { get; set; }
public string Pwd { get; set; }
public int StartNum { get; set; } = 0;
public int Count { get; set; } = 0;
}
}
namespace Home.Models
{
public class OriginAccountAuthRequest
{
public int ProductId { get; set; }
public string Account { get; set; }
public string Pwd { get; set; }
public int StartNum { get; set; } = 0;
public int Count { get; set; } = 0;
}
}

View File

@@ -1,18 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class ProductModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Image { get; set; }
public int Sort { get; set; } = 0;
public string Content { get; set; }
public string Profile { get; set; }
public string Identify { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class ProductModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Image { get; set; }
public int Sort { get; set; } = 0;
public string Content { get; set; }
public string Profile { get; set; }
public string Identify { get; set; }
}
}

View File

@@ -1,16 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class PhoneModel
{
public string Phone { get; set; }
public string Pwd { get; set; }
public string Code { get; set; }
public string Wx { get; set; }
public string QQ { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class PhoneModel
{
public string Phone { get; set; }
public string Pwd { get; set; }
public string Code { get; set; }
public string Wx { get; set; }
public string QQ { get; set; }
}
}

View File

@@ -1,58 +1,58 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Host.Models
{
public class TaoBaoNotifyModel
{
public string Platform { get; set; }
public string PlatformUserId { get; set; }
public string ReceiverName { get; set; }
public string ReceiverMobile { get; set; }
public string ReceiverPhone { get; set; }
public string ReceiverAddress { get; set; }
public string BuyerArea { get; set; }
public string Tid { get; set; }
public string Status { get; set; }
public string SellerNick { get; set; }
public string BuyerNick { get; set; }
public object Type { get; set; }
public string BuyerMessage { get; set; }
public string Price { get; set; }
public int Num { get; set; }
public string TotalFee { get; set; }
public string Payment { get; set; }
public string PayTime { get; set; }
public object PicPath { get; set; }
public object PostFee { get; set; }
public string Created { get; set; }
public object TradeFrom { get; set; }
public List<TaoBaoOrder> Orders { get; set; }
public string SellerMemo { get; set; }
public int SellerFlag { get; set; }
public string CreditCardFee { get; set; }
}
public class TaoBaoOrder
{
public string Oid { get; set; }
public long NumIid { get; set; }
public string OuterIid { get; set; }
public string OuterSkuId { get; set; }
public string Title { get; set; }
public string Price { get; set; }
public int Num { get; set; }
public string TotalFee { get; set; }
public string Payment { get; set; }
public string PicPath { get; set; }
public string SkuId { get; set; }
public string SkuPropertiesName { get; set; }
public string DivideOrderFee { get; set; }
public string PartMjzDiscount { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Host.Models
{
public class TaoBaoNotifyModel
{
public string Platform { get; set; }
public string PlatformUserId { get; set; }
public string ReceiverName { get; set; }
public string ReceiverMobile { get; set; }
public string ReceiverPhone { get; set; }
public string ReceiverAddress { get; set; }
public string BuyerArea { get; set; }
public string Tid { get; set; }
public string Status { get; set; }
public string SellerNick { get; set; }
public string BuyerNick { get; set; }
public object Type { get; set; }
public string BuyerMessage { get; set; }
public string Price { get; set; }
public int Num { get; set; }
public string TotalFee { get; set; }
public string Payment { get; set; }
public string PayTime { get; set; }
public object PicPath { get; set; }
public object PostFee { get; set; }
public string Created { get; set; }
public object TradeFrom { get; set; }
public List<TaoBaoOrder> Orders { get; set; }
public string SellerMemo { get; set; }
public int SellerFlag { get; set; }
public string CreditCardFee { get; set; }
}
public class TaoBaoOrder
{
public string Oid { get; set; }
public long NumIid { get; set; }
public string OuterIid { get; set; }
public string OuterSkuId { get; set; }
public string Title { get; set; }
public string Price { get; set; }
public int Num { get; set; }
public string TotalFee { get; set; }
public string Payment { get; set; }
public string PicPath { get; set; }
public string SkuId { get; set; }
public string SkuPropertiesName { get; set; }
public string DivideOrderFee { get; set; }
public string PartMjzDiscount { get; set; }
}
}

View File

@@ -1,26 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Host.Models
{
public class TaoBaoRefundModel
{
public string RefundId { get; set; }
public string BuyerNick { get; set; }
public string RefundFee { get; set; }
public string Oid { get; set; }
public string Tid { get; set; }
public string RefundPhase { get; set; }
public string BillType { get; set; }
public string SellerNick { get; set; }
public string Modified { get; set; }
public string Phone { get; set; }
public int status { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Host.Models
{
public class TaoBaoRefundModel
{
public string RefundId { get; set; }
public string BuyerNick { get; set; }
public string RefundFee { get; set; }
public string Oid { get; set; }
public string Tid { get; set; }
public string RefundPhase { get; set; }
public string BillType { get; set; }
public string SellerNick { get; set; }
public string Modified { get; set; }
public string Phone { get; set; }
public int status { get; set; }
}
}

View File

@@ -1,15 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UpdateAccountPwdModel
{
public int ProductId { get; set; }
public int UserId { get; set; }
public string Account { get; set; }
public string Pwd { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UpdateAccountPwdModel
{
public int ProductId { get; set; }
public int UserId { get; set; }
public string Account { get; set; }
public string Pwd { get; set; }
}
}

View File

@@ -1,14 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UpdatePwdModel
{
public string OldPwd { get; set; }
public string NewPwd { get; set; }
public string ConfirmPwd { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UpdatePwdModel
{
public string OldPwd { get; set; }
public string NewPwd { get; set; }
public string ConfirmPwd { get; set; }
}
}

View File

@@ -1,46 +1,46 @@
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Vpn.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UserHomeModel
{
public User UserModel { get; set; }
public AccountModel AccountModel { get; set; } = new AccountModel();
public List<ArticleEntity> TopNewsModel { get; set; }
public StatisticModel Statistic { get; set; } = new StatisticModel();
}
public class AccountModel
{
public int TotalCount { get; set; }
public int ExpriedCount { get; set; }
}
public class StatisticModel
{
public decimal TodayExpend { get; set; }
public decimal TodayRefund { get; set; }
public decimal TodayCharege { get; set; }
public decimal MonthExpend { get; set; }
public decimal MonthRefund { get; set; }
public decimal MonthCharege { get; set; }
public decimal YearExpend { get; set; }
}
}
using Hncore.Pass.BaseInfo.Models;
using Hncore.Pass.Vpn.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Home.Models
{
public class UserHomeModel
{
public User UserModel { get; set; }
public AccountModel AccountModel { get; set; } = new AccountModel();
public List<ArticleEntity> TopNewsModel { get; set; }
public StatisticModel Statistic { get; set; } = new StatisticModel();
}
public class AccountModel
{
public int TotalCount { get; set; }
public int ExpriedCount { get; set; }
}
public class StatisticModel
{
public decimal TodayExpend { get; set; }
public decimal TodayRefund { get; set; }
public decimal TodayCharege { get; set; }
public decimal MonthExpend { get; set; }
public decimal MonthRefund { get; set; }
public decimal MonthCharege { get; set; }
public decimal YearExpend { get; set; }
}
}

View File

@@ -1,113 +1,113 @@
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.MP.Entities;
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Senparc.Weixin.MP.MessageContexts;
using Senparc.NeuChar.Entities;
using Senparc.Weixin.MP.Entities.Request;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Sells.Service;
using Hncore.Wx.Open;
using Hncore.Infrastructure.Common;
namespace Home.Models
{
public class MyMessageHandler : MessageHandler<DefaultMpMessageContext>
{
WxAppUserService m_WxAppUserService;
CouponService m_CouponService;
public MyMessageHandler(Stream inputStream
, WxAppUserService _WxAppUserService
, CouponService _CouponService
, PostModel postModel = null
, int maxRecordCount = 0) : base(inputStream, postModel)
{
m_WxAppUserService = _WxAppUserService;
m_CouponService = _CouponService;
}
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
{
string openid = requestMessage.FromUserName;
if (requestMessage.Content == "Hi")
{
var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "hello";
return responseMessage;
}
return base.OnTextRequest(requestMessage);
}
/// <summary>
/// 菜单按钮
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
{
switch (requestMessage.EventKey)
{
case "haibao": return null;
}
return base.OnEvent_ClickRequest(requestMessage);
}
/// <summary>
/// 关注
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
{
LogHelper.Info("OnEvent_SubscribeRequest", requestMessage.FromUserName);
string appId = requestMessage.ToUserName;
string openid = requestMessage.FromUserName;
var appWxinfo = m_WxAppUserService.GetByOpenId(openid);
if (appWxinfo == null)
{
var mpUserInfo = WxOpenApi.GetUserinfoByOpenId(appId, openid).Result;
var wx = new Hncore.Pass.BaseInfo.Models.WxAppUserEntity()
{
Appid = requestMessage.ToUserName,
UserId = 0,
HeadImgUrl = mpUserInfo.headimgurl,
NickName = mpUserInfo.nickname,
City = mpUserInfo.city,
Country = mpUserInfo.country,
Openid = openid,
UserName = mpUserInfo.nickname,
IsSubscribe=1,
};
m_WxAppUserService.Add(wx).Wait();
}
else if (appWxinfo.UserId>0 &&appWxinfo.IsSubscribe == 0)
{
appWxinfo.IsSubscribe = 1;
m_WxAppUserService.Update(appWxinfo).Wait();
m_CouponService.Give(5, "", appWxinfo.UserId, 1, Hncore.Pass.Sells.Domain.Enums.CouponOriginType.MP, "关注公众号赠送").Wait();
}
return base.OnEvent_SubscribeRequest(requestMessage);
}
/// <summary>
/// 默认消息
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
{
// var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
// responseMessage.Content = "Hi";
//return responseMessage;
return null;
}
}
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.MP.Entities;
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using Senparc.Weixin.MP.MessageContexts;
using Senparc.NeuChar.Entities;
using Senparc.Weixin.MP.Entities.Request;
using Hncore.Pass.BaseInfo.Service;
using Hncore.Pass.Sells.Service;
using Hncore.Wx.Open;
using Hncore.Infrastructure.Common;
namespace Home.Models
{
public class MyMessageHandler : MessageHandler<DefaultMpMessageContext>
{
WxAppUserService m_WxAppUserService;
CouponService m_CouponService;
public MyMessageHandler(Stream inputStream
, WxAppUserService _WxAppUserService
, CouponService _CouponService
, PostModel postModel = null
, int maxRecordCount = 0) : base(inputStream, postModel)
{
m_WxAppUserService = _WxAppUserService;
m_CouponService = _CouponService;
}
public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
{
string openid = requestMessage.FromUserName;
if (requestMessage.Content == "Hi")
{
var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
responseMessage.Content = "hello";
return responseMessage;
}
return base.OnTextRequest(requestMessage);
}
/// <summary>
/// 菜单按钮
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
{
switch (requestMessage.EventKey)
{
case "haibao": return null;
}
return base.OnEvent_ClickRequest(requestMessage);
}
/// <summary>
/// 关注
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
{
LogHelper.Info("OnEvent_SubscribeRequest", requestMessage.FromUserName);
string appId = requestMessage.ToUserName;
string openid = requestMessage.FromUserName;
var appWxinfo = m_WxAppUserService.GetByOpenId(openid);
if (appWxinfo == null)
{
var mpUserInfo = WxOpenApi.GetUserinfoByOpenId(appId, openid).Result;
var wx = new Hncore.Pass.BaseInfo.Models.WxAppUserEntity()
{
Appid = requestMessage.ToUserName,
UserId = 0,
HeadImgUrl = mpUserInfo.headimgurl,
NickName = mpUserInfo.nickname,
City = mpUserInfo.city,
Country = mpUserInfo.country,
Openid = openid,
UserName = mpUserInfo.nickname,
IsSubscribe=1,
};
m_WxAppUserService.Add(wx).Wait();
}
else if (appWxinfo.UserId>0 &&appWxinfo.IsSubscribe == 0)
{
appWxinfo.IsSubscribe = 1;
m_WxAppUserService.Update(appWxinfo).Wait();
m_CouponService.Give(5, "", appWxinfo.UserId, 1, Hncore.Pass.Sells.Domain.Enums.CouponOriginType.MP, "关注公众号赠送").Wait();
}
return base.OnEvent_SubscribeRequest(requestMessage);
}
/// <summary>
/// 默认消息
/// </summary>
/// <param name="requestMessage"></param>
/// <returns></returns>
public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
{
// var responseMessage = this.CreateResponseMessage<ResponseMessageText>();
// responseMessage.Content = "Hi";
//return responseMessage;
return null;
}
}
}

View File

@@ -1,18 +1,18 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class WxUserCallbackInfo
{
public string openid { get; set; }
public string nickname { get; set; }
public string sex { get; set; }
public string province { get; set; }
public string city { get; set; }
public string country { get; set; }
public string headimgurl { get; set; }
public string unionid { get; set; }
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using System;
namespace Home.Models
{
public class WxUserCallbackInfo
{
public string openid { get; set; }
public string nickname { get; set; }
public string sex { get; set; }
public string province { get; set; }
public string city { get; set; }
public string country { get; set; }
public string headimgurl { get; set; }
public string unionid { get; set; }
}
}

View File

@@ -1,32 +1,32 @@
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using System;
using System.Text;
namespace Host
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args){
var hsot = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
if (args.Length > 0)
{
if (args[0] == "-u")
{
hsot.UseUrls(args[1]);
}
}
return hsot;
}
// .UseStartup<Etor.PSIP.BaseInfo.Startup>();
// .UseStartup<Etor.PSIP.Manage.Startup>();
}
}
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using System;
using System.Text;
namespace Host
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args){
var hsot = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
if (args.Length > 0)
{
if (args[0] == "-u")
{
hsot.UseUrls(args[1]);
}
}
return hsot;
}
// .UseStartup<Etor.PSIP.BaseInfo.Startup>();
// .UseStartup<Etor.PSIP.Manage.Startup>();
}
}

View File

@@ -1,33 +1,33 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60989",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Host": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5000"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"publishAllPorts": true
}
}
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:60989",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Host": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5000"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"publishAllPorts": true
}
}
}

View File

@@ -1,12 +1,12 @@
Scaffolding has generated all the files and added the required dependencies.
However the Application's Startup code may required additional changes for things to work end to end.
Add the following code to the Configure method in your Application's Startup class if not already done:
app.UseMvc(routes =>
{
routes.MapRoute(
name : "areas",
template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
Scaffolding has generated all the files and added the required dependencies.
However the Application's Startup code may required additional changes for things to work end to end.
Add the following code to the Configure method in your Application's Startup class if not already done:
app.UseMvc(routes =>
{
routes.MapRoute(
name : "areas",
template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});

View File

@@ -1,131 +1,131 @@
using Hncore.Infrastructure.AliYun;
using Hncore.Infrastructure.WebApi;
using Hncore.Wx.Open;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Net.Http;
using System.Text;
using Hncore.Wx.Open;
using Senparc.Weixin.MP.Containers;
using Senparc.CO2NET.RegisterServices;
using Senparc.Weixin.RegisterServices;
using Microsoft.Extensions.Options;
using Senparc.CO2NET;
using Senparc.Weixin;
using Senparc.Weixin.Entities;
using Senparc.Weixin.MP;
namespace Host
{
public class Startup
{
public IConfiguration Configuration { get; }
Hncore.Pass.BaseInfo.Startup _BaseInfoStartup;
Hncore.Pass.Manage.Startup _ManageStartup;
Hncore.Pass.OSS.Startup _OssStartup;
Hncore.Pass.Vpn.Startup _CourseStartup;
Hncore.Pass.Sells.Startup _SellStartup;
Hncore.Pass.PaymentCenter.Startup _PaymentCenterStartup;
public Startup(IHostingEnvironment env)
{
Configuration = env.UseAppsettings();
_BaseInfoStartup = new Hncore.Pass.BaseInfo.Startup(env);
_ManageStartup = new Hncore.Pass.Manage.Startup(env);
_OssStartup = new Hncore.Pass.OSS.Startup(env);
_CourseStartup= new Hncore.Pass.Vpn.Startup(env);
_SellStartup = new Hncore.Pass.Sells.Startup(env);
_PaymentCenterStartup = new Hncore.Pass.PaymentCenter.Startup(env);
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddWxApi();
//删除cookie需要
//services.Configure<CookiePolicyOptions>(options =>
//{
// options.CheckConsentNeeded = context => false;
// options.MinimumSameSitePolicy = SameSiteMode.None;
//});
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new MobileViewLocationExpander());
});
services.AddSingleton<AliDayu>();
_OssStartup.ConfigureServices(services);
_ManageStartup.ConfigureServices(services);
_CourseStartup.ConfigureServices(services);
_SellStartup.ConfigureServices(services);
_PaymentCenterStartup.ConfigureServices(services);
//foreach(var service in services)
//{
// Console.WriteLine(service.ServiceType.FullName);
//}
services.AddSenparcGlobalServices(Configuration)//Senparc.CO2NET 全局注册
.AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注册
return _BaseInfoStartup.ConfigureServices(services);
}
public void Configure(IApplicationBuilder app
, IApplicationLifetime applicationLifetime
,ILoggerFactory loggerFactory
, IHostingEnvironment env
, IHttpClientFactory httpFactory
, IServiceProvider serviceProvider
,IOptions<SenparcSetting> senparcSetting
, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
{
app.UseStaticFiles();
_ManageStartup.Configure(app, env, loggerFactory, applicationLifetime);
_BaseInfoStartup.Configure(app, applicationLifetime, loggerFactory);
_CourseStartup.Configure(app, applicationLifetime,loggerFactory);
_OssStartup.Configure(app, applicationLifetime, loggerFactory);
_SellStartup.Configure(app, applicationLifetime, loggerFactory);
_PaymentCenterStartup.Configure(app, applicationLifetime, loggerFactory);
Home.Map.MapConfig.Config();
app.MapWhen(context =>
{
return context.Request.Path.Value.StartsWith("/admin");
}, appBuilder =>
{
var option = new RewriteOptions();
option.AddRewrite(".*", "/admin/index.html", true);
appBuilder.UseRewriter(option);
appBuilder.UseStaticFiles();
//appBuilder.Run(async c =>
//{
// var file = env.WebRootFileProvider.GetFileInfo("index.html");
// c.Response.ContentType = "text/html";
// using (var fileStream = new FileStream(file.PhysicalPath, FileMode.Open, FileAccess.Read))
// {
// await StreamCopyOperation.CopyToAsync(fileStream, c.Response.Body, null, BufferSize, c.RequestAborted);
// }
//});
});
app.UseWxApi();
//关于 UseSenparcGlobal() 的更多用法见 CO2NET Demohttps://github.com/Senparc/Senparc.CO2NET/blob/master/Sample/Senparc.CO2NET.Sample.netcore/Startup.cs
//IRegisterService register = RegisterService.Start(env, senparcSetting.Value)
// .UseSenparcGlobal();
//register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value)
// .RegisterMpAccount(senparcWeixinSetting.Value, "【盛派网络小助手】公众号");
AccessTokenContainer.RegisterAsync(Configuration["WxApps:AppID"], Configuration["WxApps:AppSecret"]);
}
}
}
using Hncore.Infrastructure.AliYun;
using Hncore.Infrastructure.WebApi;
using Hncore.Wx.Open;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Rewrite;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Net.Http;
using System.Text;
using Hncore.Wx.Open;
using Senparc.Weixin.MP.Containers;
using Senparc.CO2NET.RegisterServices;
using Senparc.Weixin.RegisterServices;
using Microsoft.Extensions.Options;
using Senparc.CO2NET;
using Senparc.Weixin;
using Senparc.Weixin.Entities;
using Senparc.Weixin.MP;
namespace Host
{
public class Startup
{
public IConfiguration Configuration { get; }
Hncore.Pass.BaseInfo.Startup _BaseInfoStartup;
Hncore.Pass.Manage.Startup _ManageStartup;
Hncore.Pass.OSS.Startup _OssStartup;
Hncore.Pass.Vpn.Startup _CourseStartup;
Hncore.Pass.Sells.Startup _SellStartup;
Hncore.Pass.PaymentCenter.Startup _PaymentCenterStartup;
public Startup(IHostingEnvironment env)
{
Configuration = env.UseAppsettings();
_BaseInfoStartup = new Hncore.Pass.BaseInfo.Startup(env);
_ManageStartup = new Hncore.Pass.Manage.Startup(env);
_OssStartup = new Hncore.Pass.OSS.Startup(env);
_CourseStartup= new Hncore.Pass.Vpn.Startup(env);
_SellStartup = new Hncore.Pass.Sells.Startup(env);
_PaymentCenterStartup = new Hncore.Pass.PaymentCenter.Startup(env);
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddWxApi();
//删除cookie需要
//services.Configure<CookiePolicyOptions>(options =>
//{
// options.CheckConsentNeeded = context => false;
// options.MinimumSameSitePolicy = SameSiteMode.None;
//});
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new MobileViewLocationExpander());
});
services.AddSingleton<AliDayu>();
_OssStartup.ConfigureServices(services);
_ManageStartup.ConfigureServices(services);
_CourseStartup.ConfigureServices(services);
_SellStartup.ConfigureServices(services);
_PaymentCenterStartup.ConfigureServices(services);
//foreach(var service in services)
//{
// Console.WriteLine(service.ServiceType.FullName);
//}
services.AddSenparcGlobalServices(Configuration)//Senparc.CO2NET 全局注册
.AddSenparcWeixinServices(Configuration);//Senparc.Weixin 注册
return _BaseInfoStartup.ConfigureServices(services);
}
public void Configure(IApplicationBuilder app
, IApplicationLifetime applicationLifetime
,ILoggerFactory loggerFactory
, IHostingEnvironment env
, IHttpClientFactory httpFactory
, IServiceProvider serviceProvider
,IOptions<SenparcSetting> senparcSetting
, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
{
app.UseStaticFiles();
_ManageStartup.Configure(app, env, loggerFactory, applicationLifetime);
_BaseInfoStartup.Configure(app, applicationLifetime, loggerFactory);
_CourseStartup.Configure(app, applicationLifetime,loggerFactory);
_OssStartup.Configure(app, applicationLifetime, loggerFactory);
_SellStartup.Configure(app, applicationLifetime, loggerFactory);
_PaymentCenterStartup.Configure(app, applicationLifetime, loggerFactory);
Home.Map.MapConfig.Config();
app.MapWhen(context =>
{
return context.Request.Path.Value.StartsWith("/admin");
}, appBuilder =>
{
var option = new RewriteOptions();
option.AddRewrite(".*", "/admin/index.html", true);
appBuilder.UseRewriter(option);
appBuilder.UseStaticFiles();
//appBuilder.Run(async c =>
//{
// var file = env.WebRootFileProvider.GetFileInfo("index.html");
// c.Response.ContentType = "text/html";
// using (var fileStream = new FileStream(file.PhysicalPath, FileMode.Open, FileAccess.Read))
// {
// await StreamCopyOperation.CopyToAsync(fileStream, c.Response.Body, null, BufferSize, c.RequestAborted);
// }
//});
});
app.UseWxApi();
//关于 UseSenparcGlobal() 的更多用法见 CO2NET Demohttps://github.com/Senparc/Senparc.CO2NET/blob/master/Sample/Senparc.CO2NET.Sample.netcore/Startup.cs
//IRegisterService register = RegisterService.Start(env, senparcSetting.Value)
// .UseSenparcGlobal();
//register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value)
// .RegisterMpAccount(senparcWeixinSetting.Value, "【盛派网络小助手】公众号");
AccessTokenContainer.RegisterAsync(Configuration["WxApps:AppID"], Configuration["WxApps:AppSecret"]);
}
}
}

View File

@@ -1,28 +1,28 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PagerModel
{
public int Total { get; set; }
public int PageSize { get; set; } = 50;
public int PageIndex { get; set; } = 1;
public string Param { get; set; }
public int TotalPage { get => (int)Math.Ceiling(this.Total / (this.PageSize * 1.0d)); }
}
public class PagerViewComponent: ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(PagerModel model)
{
return View(model);
}
}
}
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Vpn.Domain;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PagerModel
{
public int Total { get; set; }
public int PageSize { get; set; } = 50;
public int PageIndex { get; set; } = 1;
public string Param { get; set; }
public int TotalPage { get => (int)Math.Ceiling(this.Total / (this.PageSize * 1.0d)); }
}
public class PagerViewComponent: ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(PagerModel model)
{
return View(model);
}
}
}

View File

@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PayOkViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PayOkViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}

View File

@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PayWaitViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class PayWaitViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}

View File

@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class RedirecctLoginViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace ViewComponents
{
public class RedirecctLoginViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
}

View File

@@ -1,68 +1,68 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="jiaocheng">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/m/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action ="info" asp-controller="article" asp-route-id="4"><img src="~/m/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/m/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/m/img/pc.png"></a></p>
<p>windows电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="21"><img src="~/img/pc.png"></a></p>
<p>MAC电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="10"><img src="~/img/pc.png"></a></p>
<p>软路由教程</p>
</div>
</div>
<div class="newsList">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="@(type==1?"active":"")"><a href="?Catalog=1">聚IP头条</a></li>
<li role="presentation" class="@(type==2?"active":"")"><a href="?Catalog=2">优惠活动</a></li>
<li role="presentation" class="@(type==3?"active":"")"><a href="?Catalog=3">常见问题</a></li>
<li role="presentation" class="@(type==4?"active":"")"><a href="?Catalog=4">新手教程</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="news">
@foreach (var item in Model.List)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">@item.Title</a><span>@item.CreateTime.ToString("yyyy.MM.dd")</span></li>
}
</ul>
</div>
@*<div role="tabpanel" class="tab-pane" id="profile">2</div>
<div role="tabpanel" class="tab-pane" id="messages">3</div>
<div role="tabpanel" class="tab-pane" id="settings">4</div>*@
</div>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="jiaocheng">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/m/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action ="info" asp-controller="article" asp-route-id="4"><img src="~/m/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/m/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/m/img/pc.png"></a></p>
<p>windows电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="21"><img src="~/img/pc.png"></a></p>
<p>MAC电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="10"><img src="~/img/pc.png"></a></p>
<p>软路由教程</p>
</div>
</div>
<div class="newsList">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="@(type==1?"active":"")"><a href="?Catalog=1">聚IP头条</a></li>
<li role="presentation" class="@(type==2?"active":"")"><a href="?Catalog=2">优惠活动</a></li>
<li role="presentation" class="@(type==3?"active":"")"><a href="?Catalog=3">常见问题</a></li>
<li role="presentation" class="@(type==4?"active":"")"><a href="?Catalog=4">新手教程</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="news">
@foreach (var item in Model.List)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">@item.Title</a><span>@item.CreateTime.ToString("yyyy.MM.dd")</span></li>
}
</ul>
</div>
@*<div role="tabpanel" class="tab-pane" id="profile">2</div>
<div role="tabpanel" class="tab-pane" id="messages">3</div>
<div role="tabpanel" class="tab-pane" id="settings">4</div>*@
</div>
</div>

View File

@@ -1,45 +1,45 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="jiaocheng">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/m/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/m/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/m/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/m/img/pc.png"></a></p>
<p>windows电脑教程</p>
</div>
</div>
<div class="newsList">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active">
<ul class="news">
@foreach (var item in Model.List)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">@item.Title</a><span>@item.CreateTime.ToString("yyyy.MM.dd")</span></li>
}
</ul>
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="jiaocheng">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/m/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/m/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/m/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/m/img/pc.png"></a></p>
<p>windows电脑教程</p>
</div>
</div>
<div class="newsList">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active">
<ul class="news">
@foreach (var item in Model.List)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">@item.Title</a><span>@item.CreateTime.ToString("yyyy.MM.dd")</span></li>
}
</ul>
</div>
</div>
</div>

View File

@@ -1,44 +1,44 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@model ArticleInfoMode
@{
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="lujing">
<a href="/">首页</a>><span>@Model.Info.CatalogId.GetEnumDisplayName()</span>
</div>
<div class="lineBar">
</div>
<div class="dmain">
<p class="dtit">@Model.Info.Title</p>
@if(@Model.Info.Id == 3){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 4){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E5%AE%89%E5%8D%93%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 5){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
<p class="dtime grayText">@Model.Info.CreateTime.ToString("yyyy.MM.dd")</p>
<p class="dcon">
@Html.Raw(Model.Info.Content)
</p>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@model ArticleInfoMode
@{
}
<div class="quanjushousuo">
<form asp-action="Search" asp-controller="Article" method="get">
<p><input type="text" name="KeyWord" placeholder="请输入问题关键词" /><button type="submit" class="btnOrange">搜索全部</button></p>
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</form>
</div>
<div class="lujing">
<a href="/">首页</a>><span>@Model.Info.CatalogId.GetEnumDisplayName()</span>
</div>
<div class="lineBar">
</div>
<div class="dmain">
<p class="dtit">@Model.Info.Title</p>
@if(@Model.Info.Id == 3){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 4){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E5%AE%89%E5%8D%93%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 5){
<div class="container" style="text-align: center;">
<h1 style="font-size: 2em;">视频教程</h1>
<video controls="controls" height="70%" name="media"><source src="http://mp4.juip.com/%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
<p class="dtime grayText">@Model.Info.CreateTime.ToString("yyyy.MM.dd")</p>
<p class="dcon">
@Html.Raw(Model.Info.Content)
</p>
</div>

View File

@@ -1,39 +1,39 @@
<div class="container-fluid tAd">
<img src="~/img/tBanner.png">
</div>
<div class="container-fluid taobao_tintro text-center">
<p>您可通过淘宝付款系统自动赠送1元无限制优惠券。</p>
<p>购买任意套餐都可以使用相当于天卡半价每隔30天可参加一次即得1张。</p>
</div>
<div class="container tPeitu">
<img src="~/img/peitu.png">
</div>
<div class="container ttishi text-center">
—— 为方便充值及开通,请选择自己需要的产品的对应店铺 ——
</div>
<div class="container">
<div class="row tlink">
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8bWrye7I&id=537279953649&abbucket=4
" target="_blank"><img src="~/img/t1.png"></a>
</div>
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8b9jMT39&id=557842664450&abbucket=4
" target="_blank"><img src="~/img/t2.png"></a>
</div>
</div>
<div class="row tlink">
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8b9jMT39&id=557842664450&abbucket=4
" target="_blank"><img src="~/img/t3.png"></a>
</div>
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.28.72145f8bwi5F1r&id=613389354570&abbucket=4" target="_blank"><img src="~/img/t4.png"></a>
</div>
</div>
<div class="container-fluid tAd">
<img src="~/img/tBanner.png">
</div>
<div class="container-fluid taobao_tintro text-center">
<p>您可通过淘宝付款系统自动赠送1元无限制优惠券。</p>
<p>购买任意套餐都可以使用相当于天卡半价每隔30天可参加一次即得1张。</p>
</div>
<div class="container tPeitu">
<img src="~/img/peitu.png">
</div>
<div class="container ttishi text-center">
—— 为方便充值及开通,请选择自己需要的产品的对应店铺 ——
</div>
<div class="container">
<div class="row tlink">
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8bWrye7I&id=537279953649&abbucket=4
" target="_blank"><img src="~/img/t1.png"></a>
</div>
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8b9jMT39&id=557842664450&abbucket=4
" target="_blank"><img src="~/img/t2.png"></a>
</div>
</div>
<div class="row tlink">
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.8.5a165f8b9jMT39&id=557842664450&abbucket=4
" target="_blank"><img src="~/img/t3.png"></a>
</div>
<div class="col-lg-3 col-xs-6 col-sm-6">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.28.72145f8bwi5F1r&id=613389354570&abbucket=4" target="_blank"><img src="~/img/t4.png"></a>
</div>
</div>
</div>

View File

@@ -1,400 +1,400 @@
@model List<ProductModel>
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer
@using Hncore.Pass.Vpn.Service
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject ArticleService m_ArticleService
@inject IConfiguration m_Configuration
@{
ViewData["Title"] = "聚IP JUIP.COM-千万动态ip切换自建机房ip代理覆盖全国多款市面热销产品";
Layout = "_Layout";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var articleNews = await m_ArticleService.GetTop(12, ArticleCatalog.Top);
var activityNews = await m_ArticleService.GetTop(12, ArticleCatalog.Activity);
var helpsNews = await m_ArticleService.GetTop(12, ArticleCatalog.Help);
var QANews = await m_ArticleService.GetTop(12, ArticleCatalog.QA);
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
var epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
var countStr = epoch.ToString().Substring(0, 8);
}
<style>
.swiper-container-youshi .swiper-slide-active{
background:rgba(0,0,0.8);
}
.notice {
position: fixed;
width: 90%;
height: auto;
left: 27%;
top: 27%;
margin-left: -200px;
margin-top: -160px;
z-index: 3;
background: #fff;
border-radius: 10px;
box-shadow: 0px 6px 8px 6px #ccc;
display: flex;
flex-direction: row;
flex-wrap: wrap;
padding: 30px;
z-index: 10000000;
}
.notice p{
font-size: 25px;
}
</style>
<div style="display: none;">
<h1>自动换ip软件有什么用使用换ip软件的好处让你想不到</h1>
<p>许多业内人士人经常使用“换ip的软件”和“动态代理ip”这两个词。有时我们的计算机容易受到攻击。在这种情况下将突出显示IP地址更改工具的作用。它可以保护我们的计算机地址免受攻击。或者一些技术合作伙伴在自己的爬虫项目中使用此类换ip的软件时也会使用此类换ip的软件。换ip的软件的很大效果是可以隐藏实际ip地址。</p>
<p>许多朋友需要这项技术来保护计算机的安全。你能改一下ip地址吗答案是肯定的但操作相当麻烦因此生成了动态ip代理软件。您可以找到要更改的ip代理服务器例如我们的动态IP代理。</p>
<h1>如何为动态IP选择软件需要考虑哪些方面</h1>
<p>首先必须确保换ip的软件合法、合规并且IP地址也是合法的。换ip的软件是一种已获得批准证书的软件在全国主要城市拥有大量动态IP节点。第二换ip的软件稳定也很重要。您使用的动态代理IP就是您的使用它可以很好地确保您的Internet网络的稳定性。</p>
<p>最后让客户放心的售后服务也不容忽视。换ip的软件甚至客户服务和售后都是技术性的为客户提供比较好的方式。因此在购买相关换ip的软件时我们必须擦亮眼睛选择更多。</p>
<h2>换ip的软件优势</h2>
<p>1.换ip的软件技术资深程序员精心设计每个功能并不断更新和改进。</p>
<p>2.换ip的软件强大功能全面强大不断开发更多功能换ip的软件及时升级</p>
<p>3.换ip的软件使用方便均采用人性化设计智能化管理。只要我们能操作计算机我们就能操作我们的软件。此外我们还有一个换ip的软件教程。我们可以在阅读后操作换ip的软件</p>
<p>4.换ip的软件四个保证持续发展保证、技术服务保证、问题整改保证、真正授权保证让您的网络推广完全无忧</p>
<p>5.换ip的软件简单方便动态固态IP地址一键刷新一键批量测速自由选择全国线路自由选择全球ip代理和本地ip代理一键快速连接ip软件</p>
<h1>动态ip代理软件有什么特点选哪家动态ip代理软件公司更好</h1>
<p>合格的动态ip代理有哪些特点目前市场上有很多动态IP软件质量参差不齐。合格动态ip代理的特点是什么IP是一个网民的地址。有时网民需要多次更换IP。此时需要动态IP更改软件。</p>
<p>动态ip代理非常适合注册、验证、投票、运行号码、挂断、在线赚钱、推广、微信、微博、QQ、YY、QT、电子邮件、声誉、手机、PV等</p>
<p>动态ip代理比较明显的功能是自动更改IP地址智能分配IP并在每次断开和重新连接时自动更改IP。它具有IP容量大、速度快、稳定性高、安全性高等特点。您不必担心IP复制。</p>
<p>网络上有许多动态IP代理软件。从众多的动态IP代理软件中选择合适的软件是非常重要的。如何找到比较合适的动态IP代理服务提供商</p>
<p>1.动态IP代理还取决于它能否提供完美的服务。如果买后没有人进行售后服务使用中就会出现问题无处可寻所以完善的售后服务也很重要。</p>
<p>2.好的动态IP代理取决于IP的来源。如果在互联网上直接扫描IP质量很差使用时会发生冲突。因此最好使用自建服务器的代理这样获得的动态IP代理非常稳定。</p>
<p>这样我相信您可以找到适合自己使用的动态IP代理资源。动态IP代理软件更安全、更快。动态IP代理是你网络工作的好帮手</p>
  
<h1>如何电脑换ip软件让网站达到盈利的目的</h1>
 <p>IP地址是互联网接入的基本条件。我们都是通过IP地址上网的。计算机只有一个固定的IP地址。然而长期使用IP地址是非常不安全的并且会导致很多安全风险。</p>
  <p>互联网上存在一定的风险。用户在互联网上浏览网页时会留下自己的信息。这些信息大部分是私人信息。如果个人信息被恶意的人窃取这是非常危险的。因此必须加强网站的安全性能。只有这样才能保证用户的信息安全。熟悉互联网技术的人会定期更换IP因为他们知道将个人信息留在互联网上非常不安全可能会被犯罪分子窃取这也会危及他们自己的财产因此他们必须经常更换。</p>
  <p>确保个人信息安全的常用方法是自动更换IP地址。有许多电脑换ip软件可以在Internet上使用。除了确保我们的信息安全电脑换ip软件也可以用来赚取一些利润。</p>
  <p>现在很多人会自己开发一个网站。开发一个网站并不难。在学习了这个方法之后它非常简单。我们可以在互联网上看到各种各样的网站。这些网站中有些是由公司存档的有些是由个人存档的。这些网站可以为人们提供很多信息。电脑换ip软件方法是获得更多的浏览量。只要你的观点上升这意味着这个网站特别受欢迎。在这个时候你可以在网站上做一些广告或者用广告费赚一些钱。然而赚钱的前提是网站可以有浏览量。只有好的网站才能吸引人现在人们对网站的要求越来越高。糟糕的网页无法吸引人。只有想出一些方法这些网页才能继续发展。</p>
  <p>很多人会使用电脑换ip软件来实现web代理。Web代理有很多优点。它不仅可以保护用户的安全上网而且可以提高上网速度。用户在上网时非常关注个人隐私保护。他们不希望自己的个人隐私被泄露因此只有一个安全的网站才能让他们感到放心在使用电脑换ip软件后网站变得更加封闭。整个网络使用一个IP这是最安全的不会有安全风险。使用代理IP软件后您会发现网站上的信息根本没有泄露用户在浏览网页时会更加轻松。即使他们输入了一些个人信息也没关系。如果网站继续这样发展它将获得更多的收入。电脑换ip软件只需点击自动切换快速更换无需网卡IP地址可以随意更改</p>
</div>
<div class="banner">
<div class="buttonList">
<div class="item">
<a asp-action="soft" asp-controller="product"> <button type="button" class="btnBlue">客户端下载</button></a>
</div>
<div class="item">
<a asp-action="index" asp-controller="linelist"> <button type="button" class="btnBlue">IP线路表</button></a>
</div>
<div class="item">
<a asp-action="index" asp-controller="product"> <button type="button" class="btnOrange">免费试用</button></a>
</div>
</div>
</div>
<div class="titProducts">
<p>PRODUCTS</p>
<p>产品介绍</p>
</div>
<div class="conProducts">
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
@foreach (var item in Model.Where(m => m.Sort != 1000))
{
<div class="swiper-slide">
<div class="productCard">
@*<div class="item">
<img src="@P(item.Image)" />
</div>*@
<div class="item pName">
@item.Name
</div>
<div class="item">
@item.Profile
</div>
<div class="item showLine">
<a asp-action="index" asp-controller="linelist" asp-route-ProductId="@item.Id">查看线路表→</a>
</div>
<div class="item">
<a asp-action="index" asp-controller="product" asp-route-id="@item.Id"><button type="button" class="btnBlue">测试与购买</button></a>
</div>
</div>
</div>
}
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</div>
<div class="youshi">
<!-- Swiper -->
<div class="swiper-container-youshi">
<div class="swiper-wrapper">
<div class="swiper-slide" style="background-image:url(./m/img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y1.png">
</div>
<div class="item">
全网产品最多IP库最大
</div>
<div class="item">
旗下有强子IP老鹰IP先锋IP星星IP等十几种动态IP多产品组合畅享IP库翻倍可用IP超1亿
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y2.png">
</div>
<div class="item">
全设备全协议支持
</div>
<div class="item">
支持安卓iOS电脑windowslinux等系统。支持IPL2TPSSTP等协议
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y3.png">
</div>
<div class="item">
用户独享宽带
</div>
<div class="item">
一号一拨绝不超拨快速切换平均带宽6-10兆最高可达50兆
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y4.png">
</div>
<div class="item">
价低质优,免费测试
</div>
<div class="item">
全自营机房一手资源,价低质优,量大可联系客服获取最低价
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y5.png">
</div>
<div class="item">
专属产品定制
</div>
<div class="item">
支持定制独立服务器,可针对特定的项目需求定制专用产品
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y6.png">
</div>
<div class="item">
专业的服务团队
</div>
<div class="item">
资深售前售后1对1指导7*24小时实时响应竭诚为您服务
</div>
</div>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
</div>
</div>
<div class="map">
</div>
<div class="use">
</div>
<div class="titProducts">
<p>INFORMATION</p>
<p>教程&咨询</p>
</div>
<div class="newsList">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">聚IP头条</a></li>
<li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">常见问题</a></li>
<li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">新手教程</a></li>
<li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">优惠活动</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="news">
@foreach (var item in articleNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="profile">
<ul class="news">
@foreach (var item in activityNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="messages">
<ul class="news">
@foreach (var item in QANews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="settings">
<ul class="news">
@foreach (var item in helpsNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
</div>
</div>
<div class="qixia">
<p>旗下产品</p>
<ul>
@foreach (var item in Model.Where(m => m.Sort != 1000))
{
<li><a asp-action="index" asp-controller="product" asp-route-id="@item.Id">@item.Name</a></li>
}
</ul>
</div>
<div class="linkus" style="display: block;">
<div class="item">
<p>联系我们</p>
<p>企业电话400 800 9925</p>
<p>客服QQ800101003</p>
<p>客服微信-售前:</p>
<img width="300px" src="~/img/kf_sq.jpg?123"><br>
<p>客服微信-售后:</p>
<img width="300px" src="~/img/kf_sh.jpg?1231">
<p>工作时间周一到周日8:30-23:00</p>
</div>
<div class="item">
<p>大客户/商务合作</p>
<p>电话/微信177 9666 8888</p>
<p>QQ70177252</p>
</div>
</div>
<div class="ewm">
<p><img src="~/m/img/ewm.png"></p>
<p class="banquan">copyright 2020 聚IP JUIP.COM 版权所有</p>
</div>
<div class="notice">
<div style="font-size: 15px;">
<p style="margin-top: 0px;text-align:center;width:100%;margin-bottom: 10px;color:red;background-color:#FFFF00;">公告</p>
<div style="color: red;text-align:center;">
<p>杜绝电信诈骗及任何违法行为</p>
<p>所有IP产品已记录日志,均保留6个月以上</p>
<p>发现违法行为直接提交网监部门处理</p>
</div>
<p style="margin-top: 10px;font-weight:bold;text-align:center;">聚IP兔年新春复工助力活动</p>
<div style="padding-left: 20px;">
@* <p>1.动态IP一毛钱一天每用户限一次~</p> *@
<p>1.新上蘑菇IP周卡送1天月卡送5天双月卡送1个月多买多送~</p>
<p>2.其他产品均有<span style="color: red;font-size:1.5em;font-weight:bold;">7.5</span>折活动~</p>
<p>3.需求5个以上可联系客服设置优惠折扣</p>
</div>
</div>
<p >
<a style="margin-left: 200%;margin-top:20px;cursor:pointer;font-size:25px;" onclick="know()" type="button" class="btn btn-primary" >我知道了</a>
</p>
</div>
<script type="text/javascript">
$('#myTabs a').click(function (e) {
e.preventDefault()
$(this).tab('show')
})
//var alert_info = "聚IP春节公告\n1春节不打烊自助购买24小时正常运行仅2月10日至2月18日人工在线时间为早10点到晚22点在此期间联系人工请尽量联系企业Q号号码为800101003其他联系方式可能回复不及时紧急联系电话为4008009925转1号线。\n2请勿相信外界谣言聚IP始终保持诚信经营对用户负责到底更不会出现跑路的情况\n312月10日-12月25日期间公司无人工客服在线给您造成不便敬请谅解为表达歉意因此公司特推出动态IP 一毛钱一天,有史以来最大的折扣和赠送力度!\n4并保证最低价买贵双倍退差价。同时聚IP将继续为您提供优质的服务\n5无人工值守期间极客IP大约一周无法使用其他产品都运行正常使用极客IP的客户可联系客服补时间。若使用除极客外的其他产品因无人工客服给您造成影响可联系客服说明情况我们将根据情况给您适当的补偿\n祝各位用户万事顺利生意兴隆新年快乐";
//alert(alert_info);
</script>
<!-- Initialize Swiper -->
<script>
var swiper = new Swiper('.swiper-container', {
slidesPerView: 3,
spaceBetween: 30,
slidesPerGroup: 1,
loop: false,
loopFillGroupWithBlank: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
</script>
<script>
var swiper = new Swiper('.swiper-container-youshi', {
effect: 'coverflow',
grabCursor: true,
centeredSlides: true,
slidesPerView: 'auto',
coverflowEffect: {
rotate: 50,
stretch: 0,
depth: 100,
modifier: 1,
slideShadows: true,
},
pagination: {
el: '.swiper-pagination',
},
});
$('.notice').hide();
@* self.setTimeout(function(){ *@
$('.notice').show();
@* },3000) *@
function know() {
$('.notice').hide();
}
</script>
@model List<ProductModel>
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer
@using Hncore.Pass.Vpn.Service
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject ArticleService m_ArticleService
@inject IConfiguration m_Configuration
@{
ViewData["Title"] = "聚IP JUIP.COM-千万动态ip切换自建机房ip代理覆盖全国多款市面热销产品";
Layout = "_Layout";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var articleNews = await m_ArticleService.GetTop(12, ArticleCatalog.Top);
var activityNews = await m_ArticleService.GetTop(12, ArticleCatalog.Activity);
var helpsNews = await m_ArticleService.GetTop(12, ArticleCatalog.Help);
var QANews = await m_ArticleService.GetTop(12, ArticleCatalog.QA);
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
var epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
var countStr = epoch.ToString().Substring(0, 8);
}
<style>
.swiper-container-youshi .swiper-slide-active{
background:rgba(0,0,0.8);
}
.notice {
position: fixed;
width: 90%;
height: auto;
left: 27%;
top: 27%;
margin-left: -200px;
margin-top: -160px;
z-index: 3;
background: #fff;
border-radius: 10px;
box-shadow: 0px 6px 8px 6px #ccc;
display: flex;
flex-direction: row;
flex-wrap: wrap;
padding: 30px;
z-index: 10000000;
}
.notice p{
font-size: 25px;
}
</style>
<div style="display: none;">
<h1>自动换ip软件有什么用使用换ip软件的好处让你想不到</h1>
<p>许多业内人士人经常使用“换ip的软件”和“动态代理ip”这两个词。有时我们的计算机容易受到攻击。在这种情况下将突出显示IP地址更改工具的作用。它可以保护我们的计算机地址免受攻击。或者一些技术合作伙伴在自己的爬虫项目中使用此类换ip的软件时也会使用此类换ip的软件。换ip的软件的很大效果是可以隐藏实际ip地址。</p>
<p>许多朋友需要这项技术来保护计算机的安全。你能改一下ip地址吗答案是肯定的但操作相当麻烦因此生成了动态ip代理软件。您可以找到要更改的ip代理服务器例如我们的动态IP代理。</p>
<h1>如何为动态IP选择软件需要考虑哪些方面</h1>
<p>首先必须确保换ip的软件合法、合规并且IP地址也是合法的。换ip的软件是一种已获得批准证书的软件在全国主要城市拥有大量动态IP节点。第二换ip的软件稳定也很重要。您使用的动态代理IP就是您的使用它可以很好地确保您的Internet网络的稳定性。</p>
<p>最后让客户放心的售后服务也不容忽视。换ip的软件甚至客户服务和售后都是技术性的为客户提供比较好的方式。因此在购买相关换ip的软件时我们必须擦亮眼睛选择更多。</p>
<h2>换ip的软件优势</h2>
<p>1.换ip的软件技术资深程序员精心设计每个功能并不断更新和改进。</p>
<p>2.换ip的软件强大功能全面强大不断开发更多功能换ip的软件及时升级</p>
<p>3.换ip的软件使用方便均采用人性化设计智能化管理。只要我们能操作计算机我们就能操作我们的软件。此外我们还有一个换ip的软件教程。我们可以在阅读后操作换ip的软件</p>
<p>4.换ip的软件四个保证持续发展保证、技术服务保证、问题整改保证、真正授权保证让您的网络推广完全无忧</p>
<p>5.换ip的软件简单方便动态固态IP地址一键刷新一键批量测速自由选择全国线路自由选择全球ip代理和本地ip代理一键快速连接ip软件</p>
<h1>动态ip代理软件有什么特点选哪家动态ip代理软件公司更好</h1>
<p>合格的动态ip代理有哪些特点目前市场上有很多动态IP软件质量参差不齐。合格动态ip代理的特点是什么IP是一个网民的地址。有时网民需要多次更换IP。此时需要动态IP更改软件。</p>
<p>动态ip代理非常适合注册、验证、投票、运行号码、挂断、在线赚钱、推广、微信、微博、QQ、YY、QT、电子邮件、声誉、手机、PV等</p>
<p>动态ip代理比较明显的功能是自动更改IP地址智能分配IP并在每次断开和重新连接时自动更改IP。它具有IP容量大、速度快、稳定性高、安全性高等特点。您不必担心IP复制。</p>
<p>网络上有许多动态IP代理软件。从众多的动态IP代理软件中选择合适的软件是非常重要的。如何找到比较合适的动态IP代理服务提供商</p>
<p>1.动态IP代理还取决于它能否提供完美的服务。如果买后没有人进行售后服务使用中就会出现问题无处可寻所以完善的售后服务也很重要。</p>
<p>2.好的动态IP代理取决于IP的来源。如果在互联网上直接扫描IP质量很差使用时会发生冲突。因此最好使用自建服务器的代理这样获得的动态IP代理非常稳定。</p>
<p>这样我相信您可以找到适合自己使用的动态IP代理资源。动态IP代理软件更安全、更快。动态IP代理是你网络工作的好帮手</p>
  
<h1>如何电脑换ip软件让网站达到盈利的目的</h1>
 <p>IP地址是互联网接入的基本条件。我们都是通过IP地址上网的。计算机只有一个固定的IP地址。然而长期使用IP地址是非常不安全的并且会导致很多安全风险。</p>
  <p>互联网上存在一定的风险。用户在互联网上浏览网页时会留下自己的信息。这些信息大部分是私人信息。如果个人信息被恶意的人窃取这是非常危险的。因此必须加强网站的安全性能。只有这样才能保证用户的信息安全。熟悉互联网技术的人会定期更换IP因为他们知道将个人信息留在互联网上非常不安全可能会被犯罪分子窃取这也会危及他们自己的财产因此他们必须经常更换。</p>
  <p>确保个人信息安全的常用方法是自动更换IP地址。有许多电脑换ip软件可以在Internet上使用。除了确保我们的信息安全电脑换ip软件也可以用来赚取一些利润。</p>
  <p>现在很多人会自己开发一个网站。开发一个网站并不难。在学习了这个方法之后它非常简单。我们可以在互联网上看到各种各样的网站。这些网站中有些是由公司存档的有些是由个人存档的。这些网站可以为人们提供很多信息。电脑换ip软件方法是获得更多的浏览量。只要你的观点上升这意味着这个网站特别受欢迎。在这个时候你可以在网站上做一些广告或者用广告费赚一些钱。然而赚钱的前提是网站可以有浏览量。只有好的网站才能吸引人现在人们对网站的要求越来越高。糟糕的网页无法吸引人。只有想出一些方法这些网页才能继续发展。</p>
  <p>很多人会使用电脑换ip软件来实现web代理。Web代理有很多优点。它不仅可以保护用户的安全上网而且可以提高上网速度。用户在上网时非常关注个人隐私保护。他们不希望自己的个人隐私被泄露因此只有一个安全的网站才能让他们感到放心在使用电脑换ip软件后网站变得更加封闭。整个网络使用一个IP这是最安全的不会有安全风险。使用代理IP软件后您会发现网站上的信息根本没有泄露用户在浏览网页时会更加轻松。即使他们输入了一些个人信息也没关系。如果网站继续这样发展它将获得更多的收入。电脑换ip软件只需点击自动切换快速更换无需网卡IP地址可以随意更改</p>
</div>
<div class="banner">
<div class="buttonList">
<div class="item">
<a asp-action="soft" asp-controller="product"> <button type="button" class="btnBlue">客户端下载</button></a>
</div>
<div class="item">
<a asp-action="index" asp-controller="linelist"> <button type="button" class="btnBlue">IP线路表</button></a>
</div>
<div class="item">
<a asp-action="index" asp-controller="product"> <button type="button" class="btnOrange">免费试用</button></a>
</div>
</div>
</div>
<div class="titProducts">
<p>PRODUCTS</p>
<p>产品介绍</p>
</div>
<div class="conProducts">
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
@foreach (var item in Model.Where(m => m.Sort != 1000))
{
<div class="swiper-slide">
<div class="productCard">
@*<div class="item">
<img src="@P(item.Image)" />
</div>*@
<div class="item pName">
@item.Name
</div>
<div class="item">
@item.Profile
</div>
<div class="item showLine">
<a asp-action="index" asp-controller="linelist" asp-route-ProductId="@item.Id">查看线路表→</a>
</div>
<div class="item">
<a asp-action="index" asp-controller="product" asp-route-id="@item.Id"><button type="button" class="btnBlue">测试与购买</button></a>
</div>
</div>
</div>
}
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</div>
<div class="youshi">
<!-- Swiper -->
<div class="swiper-container-youshi">
<div class="swiper-wrapper">
<div class="swiper-slide" style="background-image:url(./m/img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y1.png">
</div>
<div class="item">
全网产品最多IP库最大
</div>
<div class="item">
旗下有强子IP老鹰IP先锋IP星星IP等十几种动态IP多产品组合畅享IP库翻倍可用IP超1亿
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y2.png">
</div>
<div class="item">
全设备全协议支持
</div>
<div class="item">
支持安卓iOS电脑windowslinux等系统。支持IPL2TPSSTP等协议
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y3.png">
</div>
<div class="item">
用户独享宽带
</div>
<div class="item">
一号一拨绝不超拨快速切换平均带宽6-10兆最高可达50兆
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y4.png">
</div>
<div class="item">
价低质优,免费测试
</div>
<div class="item">
全自营机房一手资源,价低质优,量大可联系客服获取最低价
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y5.png">
</div>
<div class="item">
专属产品定制
</div>
<div class="item">
支持定制独立服务器,可针对特定的项目需求定制专用产品
</div>
</div>
</div>
<div class="swiper-slide" style="background-image:url(./img/youshi-bg.png)">
<div class="youshiList">
<div class="item">
<img src="~/m/img/y6.png">
</div>
<div class="item">
专业的服务团队
</div>
<div class="item">
资深售前售后1对1指导7*24小时实时响应竭诚为您服务
</div>
</div>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
</div>
</div>
<div class="map">
</div>
<div class="use">
</div>
<div class="titProducts">
<p>INFORMATION</p>
<p>教程&咨询</p>
</div>
<div class="newsList">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">聚IP头条</a></li>
<li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">常见问题</a></li>
<li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">新手教程</a></li>
<li role="presentation"><a href="#settings" aria-controls="settings" role="tab" data-toggle="tab">优惠活动</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="news">
@foreach (var item in articleNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="profile">
<ul class="news">
@foreach (var item in activityNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="messages">
<ul class="news">
@foreach (var item in QANews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
<div role="tabpanel" class="tab-pane" id="settings">
<ul class="news">
@foreach (var item in helpsNews)
{
<li><a asp-action="info" asp-controller="article" asp-route-id="@item.Id"><span>@item.CreateTime.ToString("yyyy.MM.dd")</span>@item.Title</a></li>
}
</ul>
</div>
</div>
</div>
<div class="qixia">
<p>旗下产品</p>
<ul>
@foreach (var item in Model.Where(m => m.Sort != 1000))
{
<li><a asp-action="index" asp-controller="product" asp-route-id="@item.Id">@item.Name</a></li>
}
</ul>
</div>
<div class="linkus" style="display: block;">
<div class="item">
<p>联系我们</p>
<p>企业电话400 800 9925</p>
<p>客服QQ800101003</p>
<p>客服微信-售前:</p>
<img width="300px" src="~/img/kf_sq.jpg?123"><br>
<p>客服微信-售后:</p>
<img width="300px" src="~/img/kf_sh.jpg?1231">
<p>工作时间周一到周日8:30-23:00</p>
</div>
<div class="item">
<p>大客户/商务合作</p>
<p>电话/微信177 9666 8888</p>
<p>QQ70177252</p>
</div>
</div>
<div class="ewm">
<p><img src="~/m/img/ewm.png"></p>
<p class="banquan">copyright 2020 聚IP JUIP.COM 版权所有</p>
</div>
<div class="notice">
<div style="font-size: 15px;">
<p style="margin-top: 0px;text-align:center;width:100%;margin-bottom: 10px;color:red;background-color:#FFFF00;">公告</p>
<div style="color: red;text-align:center;">
<p>杜绝电信诈骗及任何违法行为</p>
<p>所有IP产品已记录日志,均保留6个月以上</p>
<p>发现违法行为直接提交网监部门处理</p>
</div>
<p style="margin-top: 10px;font-weight:bold;text-align:center;">聚IP兔年新春复工助力活动</p>
<div style="padding-left: 20px;">
@* <p>1.动态IP一毛钱一天每用户限一次~</p> *@
<p>1.新上蘑菇IP周卡送1天月卡送5天双月卡送1个月多买多送~</p>
<p>2.其他产品均有<span style="color: red;font-size:1.5em;font-weight:bold;">7.5</span>折活动~</p>
<p>3.需求5个以上可联系客服设置优惠折扣</p>
</div>
</div>
<p >
<a style="margin-left: 200%;margin-top:20px;cursor:pointer;font-size:25px;" onclick="know()" type="button" class="btn btn-primary" >我知道了</a>
</p>
</div>
<script type="text/javascript">
$('#myTabs a').click(function (e) {
e.preventDefault()
$(this).tab('show')
})
//var alert_info = "聚IP春节公告\n1春节不打烊自助购买24小时正常运行仅2月10日至2月18日人工在线时间为早10点到晚22点在此期间联系人工请尽量联系企业Q号号码为800101003其他联系方式可能回复不及时紧急联系电话为4008009925转1号线。\n2请勿相信外界谣言聚IP始终保持诚信经营对用户负责到底更不会出现跑路的情况\n312月10日-12月25日期间公司无人工客服在线给您造成不便敬请谅解为表达歉意因此公司特推出动态IP 一毛钱一天,有史以来最大的折扣和赠送力度!\n4并保证最低价买贵双倍退差价。同时聚IP将继续为您提供优质的服务\n5无人工值守期间极客IP大约一周无法使用其他产品都运行正常使用极客IP的客户可联系客服补时间。若使用除极客外的其他产品因无人工客服给您造成影响可联系客服说明情况我们将根据情况给您适当的补偿\n祝各位用户万事顺利生意兴隆新年快乐";
//alert(alert_info);
</script>
<!-- Initialize Swiper -->
<script>
var swiper = new Swiper('.swiper-container', {
slidesPerView: 3,
spaceBetween: 30,
slidesPerGroup: 1,
loop: false,
loopFillGroupWithBlank: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
</script>
<script>
var swiper = new Swiper('.swiper-container-youshi', {
effect: 'coverflow',
grabCursor: true,
centeredSlides: true,
slidesPerView: 'auto',
coverflowEffect: {
rotate: 50,
stretch: 0,
depth: 100,
modifier: 1,
slideShadows: true,
},
pagination: {
el: '.swiper-pagination',
},
});
$('.notice').hide();
@* self.setTimeout(function(){ *@
$('.notice').show();
@* },3000) *@
function know() {
$('.notice').hide();
}
</script>

View File

@@ -1,377 +1,377 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@model List<ProductRouteEntity>
@{
var pid = this.Context.Request.GetInt("ProductId");
var product = ViewData["products"] as List<ProductEntity>;
var currentProduct = (await m_ProductService.GetById(pid)) ?? new ProductEntity();
var lineTotalCount = Model.Count;
var lineCount = Model.Where(m => m.Status == "正常").Count();
}
<div id="app">
<div class="quanjushousuo">
<p><input type="text" v-model="search_all_data" name="KeyWord" placeholder="输入地区/名称/服务器" id="KeyWord" /><button type="submit" v-on:click="search_all()" class="btnOrange">搜索全部</button></p>
<p><img src="~/m/img/shuju.png"> 实时总线路:{{ count }}条 <img src="~/m/img/shuju.png"> 实时可用线路:{{ use_count }}条</p>
<p>所有线路均支持:【电脑/安卓/苹果】【IP/L2TP/SSTP】</p>
</div>
<div class="zhilian">
<div class="item">
<span class="btnZhilian">
<a asp-index="" asp-controller="article" asp-route-Catalog="4"><img src="~/m/img/zhilian.png">直连教程</a>
</span>
</div>
<div class="item">
<p class="grayText" style="font-size: 25px;">线路表与账号必须为同一产品才能使用</p>
</div>
</div>
<div style="color: red;" v-if="product_id ==1|| product_id==2">
<p style="text-align:center;">
<span style="font-size: 20px;color:#FF0033;">{{search_field}}</span> 用服务器地址直连用户请注意:
</p>
<p>因电信联通机房限制此协议会存在个别地区直连无法连接电脑客户端和安卓APP不受影响。</p>
<p v-if="product_id ==1">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连温州的那账号框就输入zx1234@zjwz服务器输入任意一个全国混拨的服务器则会连接到温州。</p>
<p v-if="product_id==2">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连三亚的那账号框就输入zx1234@hnsy服务器输入任意一个全国混拨的服务器则会连接到三亚。</p>
</div>
<div style="color: red;text-align:center;font-size:20px;" v-if="product_id ==22">
<p>静态线路里面名称不带宽带字样的线路ip是相对固定不变的。</p>
<p>只要线路名称里面带“宽带”两个字的是完全模拟家庭宽带网络的线路和家庭宽度网络一样一般1-2天不等自动换一次ip</p>
</div>
<div class="lineBar"></div>
<div class="cpList">
<ul>
@foreach (var item in product.Where(m => m.Id != 3 && m.Id != 7 && m.Id != 9&& m.Id != 20&& m.Id != 21))
{
<li v-on:click="select_product(@item.Id)" id="product-@item.Id" class="item @(item.Id==pid?"cpActive":"")" a-pid="@item.Id" a-name="@item.Name">@item.Name</li>
}
</ul>
</div>
<div class="dangqianshousuo">
<p>
<input type="hidden" name="ProductId" id="ProductId" value="@pid" />
<input type="text" v-model="search_product_data" name="KeyWord" placeholder="输入地区/名称/服务器" id="KeyWord" />
<button v-on:click="search_product()" type="submit" class="btnBlue">搜索当前</button>
</p>
</div>
<div class="daochu">
<div class="item">
<p><img src="~/m/img/miyao.png"> L2TP密钥{{l2tp}}</p>
<p><img src="~/m/img/dk.png"> SSTP端口{{sstp}}</p>
</div>
<div class="item">
<span v-on:click="export_data()"><img src="~/m/img/excel.png"> 导出Excel</span>
</div>
</div>
<div class="tableTit">
<div class="item">
地区
</div>
<div class="item">
<span v-if="product_id ==19">剩余拨数:</span>
<span v-else="product_id ==19">运营商:</span>
</div>
<div class="item">
服务器域名
</div>
<div class="item">
详情
</div>
</div>
<div class="cityData" v-for="site in table_data" :style="(site.online=='故障')?'color:#ec5656;':''">
<div class="item" v-if="site.online==null" style="color:#993399">{{site.city}}</div>
<div class="item" v-if="site.online!=null">{{site.city}}</div>
<div class="item">{{site.supply}}</div>
<div class="item">{{site.nasname}}</div>
<div class="item">
<button type="button" v-on:click="detail(site)" class="btnDetail">详情</button>
</div>
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>产品:</td>
<td>{{info.name}}</td>
</tr>
<tr>
<td>城市:</td>
<td>{{info.city}}</td>
</tr>
<tr>
<td v-if="product_id ==19">剩余拨数:</td>
<td v-else="product_id ==19">运营商:</td>
<td>{{info.supply}}</td>
</tr>
<tr>
<td>服务器域名:</td>
<td>{{info.nasname}}</td>
</tr>
<tr>
<td>IP量</td>
<td>{{info.ip}}</td>
</tr>
<tr>
<td>实时带宽:</td>
<td>{{info.daikuan}}</td>
</tr>
<tr>
<td>维护状态:</td>
<td>{{info.online}}</td>
</tr>
<tr>
@* <td>负载状态:</td> *@
<td v-if="product_id ==1|| product_id==2">特征码:</td>
<td v-else="product_id ==1|| product_id==2">负载状态:</td>
<td>{{info.status}}</td>
</tr>
</table>
<div v-on:click="back()" class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
table_data: [],
search_all_data: '',
search_product_data:'',
product_id:0,
l2tp:'',
search_field:'',
sstp:'',
info: {},
count:'0',
use_count:'0',
},
computed: {
},
watch: {
},
created: function () {
this.select_product(0);
},
methods: {
select_product(ProductId){
this.product_id = ProductId;
let datalist = [];
let count = 0;
let use_count = 0;
$("li").removeClass("cpActive");
$("#product-"+ProductId).addClass("cpActive");
switch(ProductId){
case 2:
this.l2tp = '123';
this.search_field = '讯连IP';
this.sstp = '1500';
break;
case 4:
this.l2tp = '123456';
this.search_field = '金瑞IP';
this.sstp = '4438';
break;
case 5:
this.l2tp = '123';
this.search_field = '老鹰IP';
this.sstp = '4430';
break;
case 6:
this.l2tp = '123';
this.search_field = '先锋IP';
this.sstp = '6665';
break;
case 10:
this.l2tp = '88';
this.search_field = '无限-单窗口单ip';
this.sstp = '';
break;
case 13:
this.l2tp = '123456';
this.search_field = '极客IP';
this.sstp = '4433';
break;
case 17:
this.l2tp = '123456';
this.search_field = '西瓜IP';
this.sstp = '4433';
break;
case 14:
this.l2tp = '1234';
this.search_field = '天天IP';
this.sstp = '4430';
break;
case 15:
this.l2tp = '66';
this.search_field = '共享IP';
this.sstp = '888';
break;
case 16:
this.l2tp = '8899';
this.search_field = '实惠IP';
this.sstp = '不支持';
break;
case 1:
this.l2tp = '888888';
this.search_field = '强子IP';
this.sstp = '1500';
break;
case 8:
this.l2tp = '88';
this.search_field = '星星IP';
this.sstp = '6666';
break;
case 18:
this.l2tp = '8899';
this.search_field = '蘑菇IP';
this.sstp = '4430';
break;
case 22:
this.l2tp = '888888';
this.search_field = '火狐IP';
this.sstp = '5908';
break;
case 23:
this.l2tp = '888888';
this.search_field = '云牛IP';
this.sstp = '5908';
break;
case 25:
this.l2tp = '888888';
this.search_field = '强子静态IP';
this.sstp = '1500';
break;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/display.php?product=' + ProductId,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
count = res.count;
use_count = res.use_count;
}
});
this.table_data = datalist;
this.count = count;
this.use_count = use_count;
},
search_all(){
if(!this.search_all_data){
this.select_product(0);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=1&info=' + this.search_all_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
search_product(){
if(!this.search_product_data){
this.select_product(this.product_id);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=0&productid='+this.product_id+'&info=' + this.search_product_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
export_data(){
switch(this.product_id){
case 0:
self.location.href='http://php-api.juip.com/script/linedata/data/download/all.csv';
break;
case 2:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xunlian.csv';
break;
case 4:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jinrui.csv';
break;
case 5:
self.location.href='http://php-api.juip.com/script/linedata/data/download/laoying.csv';
break;
case 6:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xianfeng.csv';
break;
case 10:
self.location.href='http://php-api.juip.com/script/linedata/data/download/wuxian.csv';
break;
case 13:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jike.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 14:
self.location.href='http://php-api.juip.com/script/linedata/data/download/tiantian.csv';
break;
case 15:
self.location.href='http://php-api.juip.com/script/linedata/data/download/gongxiang.csv';
break;
case 16:
self.location.href='http://php-api.juip.com/script/linedata/data/download/shihui.csv';
break;
case 1:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzi.csv';
break;
case 8:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xingxing.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 19:
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
break;
case 25:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzijt.csv';
break;
}
},
detail(r){
$(".layerTable").show();
this.info= r;
},
back(){
$(".layerTable").hide();
}
}
})
</script>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@model List<ProductRouteEntity>
@{
var pid = this.Context.Request.GetInt("ProductId");
var product = ViewData["products"] as List<ProductEntity>;
var currentProduct = (await m_ProductService.GetById(pid)) ?? new ProductEntity();
var lineTotalCount = Model.Count;
var lineCount = Model.Where(m => m.Status == "正常").Count();
}
<div id="app">
<div class="quanjushousuo">
<p><input type="text" v-model="search_all_data" name="KeyWord" placeholder="输入地区/名称/服务器" id="KeyWord" /><button type="submit" v-on:click="search_all()" class="btnOrange">搜索全部</button></p>
<p><img src="~/m/img/shuju.png"> 实时总线路:{{ count }}条 <img src="~/m/img/shuju.png"> 实时可用线路:{{ use_count }}条</p>
<p>所有线路均支持:【电脑/安卓/苹果】【IP/L2TP/SSTP】</p>
</div>
<div class="zhilian">
<div class="item">
<span class="btnZhilian">
<a asp-index="" asp-controller="article" asp-route-Catalog="4"><img src="~/m/img/zhilian.png">直连教程</a>
</span>
</div>
<div class="item">
<p class="grayText" style="font-size: 25px;">线路表与账号必须为同一产品才能使用</p>
</div>
</div>
<div style="color: red;" v-if="product_id ==1|| product_id==2">
<p style="text-align:center;">
<span style="font-size: 20px;color:#FF0033;">{{search_field}}</span> 用服务器地址直连用户请注意:
</p>
<p>因电信联通机房限制此协议会存在个别地区直连无法连接电脑客户端和安卓APP不受影响。</p>
<p v-if="product_id ==1">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连温州的那账号框就输入zx1234@zjwz服务器输入任意一个全国混拨的服务器则会连接到温州。</p>
<p v-if="product_id==2">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连三亚的那账号框就输入zx1234@hnsy服务器输入任意一个全国混拨的服务器则会连接到三亚。</p>
</div>
<div style="color: red;text-align:center;font-size:20px;" v-if="product_id ==22">
<p>静态线路里面名称不带宽带字样的线路ip是相对固定不变的。</p>
<p>只要线路名称里面带“宽带”两个字的是完全模拟家庭宽带网络的线路和家庭宽度网络一样一般1-2天不等自动换一次ip</p>
</div>
<div class="lineBar"></div>
<div class="cpList">
<ul>
@foreach (var item in product.Where(m => m.Id != 3 && m.Id != 7 && m.Id != 9&& m.Id != 20&& m.Id != 21))
{
<li v-on:click="select_product(@item.Id)" id="product-@item.Id" class="item @(item.Id==pid?"cpActive":"")" a-pid="@item.Id" a-name="@item.Name">@item.Name</li>
}
</ul>
</div>
<div class="dangqianshousuo">
<p>
<input type="hidden" name="ProductId" id="ProductId" value="@pid" />
<input type="text" v-model="search_product_data" name="KeyWord" placeholder="输入地区/名称/服务器" id="KeyWord" />
<button v-on:click="search_product()" type="submit" class="btnBlue">搜索当前</button>
</p>
</div>
<div class="daochu">
<div class="item">
<p><img src="~/m/img/miyao.png"> L2TP密钥{{l2tp}}</p>
<p><img src="~/m/img/dk.png"> SSTP端口{{sstp}}</p>
</div>
<div class="item">
<span v-on:click="export_data()"><img src="~/m/img/excel.png"> 导出Excel</span>
</div>
</div>
<div class="tableTit">
<div class="item">
地区
</div>
<div class="item">
<span v-if="product_id ==19">剩余拨数:</span>
<span v-else="product_id ==19">运营商:</span>
</div>
<div class="item">
服务器域名
</div>
<div class="item">
详情
</div>
</div>
<div class="cityData" v-for="site in table_data" :style="(site.online=='故障')?'color:#ec5656;':''">
<div class="item" v-if="site.online==null" style="color:#993399">{{site.city}}</div>
<div class="item" v-if="site.online!=null">{{site.city}}</div>
<div class="item">{{site.supply}}</div>
<div class="item">{{site.nasname}}</div>
<div class="item">
<button type="button" v-on:click="detail(site)" class="btnDetail">详情</button>
</div>
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>产品:</td>
<td>{{info.name}}</td>
</tr>
<tr>
<td>城市:</td>
<td>{{info.city}}</td>
</tr>
<tr>
<td v-if="product_id ==19">剩余拨数:</td>
<td v-else="product_id ==19">运营商:</td>
<td>{{info.supply}}</td>
</tr>
<tr>
<td>服务器域名:</td>
<td>{{info.nasname}}</td>
</tr>
<tr>
<td>IP量</td>
<td>{{info.ip}}</td>
</tr>
<tr>
<td>实时带宽:</td>
<td>{{info.daikuan}}</td>
</tr>
<tr>
<td>维护状态:</td>
<td>{{info.online}}</td>
</tr>
<tr>
@* <td>负载状态:</td> *@
<td v-if="product_id ==1|| product_id==2">特征码:</td>
<td v-else="product_id ==1|| product_id==2">负载状态:</td>
<td>{{info.status}}</td>
</tr>
</table>
<div v-on:click="back()" class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
table_data: [],
search_all_data: '',
search_product_data:'',
product_id:0,
l2tp:'',
search_field:'',
sstp:'',
info: {},
count:'0',
use_count:'0',
},
computed: {
},
watch: {
},
created: function () {
this.select_product(0);
},
methods: {
select_product(ProductId){
this.product_id = ProductId;
let datalist = [];
let count = 0;
let use_count = 0;
$("li").removeClass("cpActive");
$("#product-"+ProductId).addClass("cpActive");
switch(ProductId){
case 2:
this.l2tp = '123';
this.search_field = '讯连IP';
this.sstp = '1500';
break;
case 4:
this.l2tp = '123456';
this.search_field = '金瑞IP';
this.sstp = '4438';
break;
case 5:
this.l2tp = '123';
this.search_field = '老鹰IP';
this.sstp = '4430';
break;
case 6:
this.l2tp = '123';
this.search_field = '先锋IP';
this.sstp = '6665';
break;
case 10:
this.l2tp = '88';
this.search_field = '无限-单窗口单ip';
this.sstp = '';
break;
case 13:
this.l2tp = '123456';
this.search_field = '极客IP';
this.sstp = '4433';
break;
case 17:
this.l2tp = '123456';
this.search_field = '西瓜IP';
this.sstp = '4433';
break;
case 14:
this.l2tp = '1234';
this.search_field = '天天IP';
this.sstp = '4430';
break;
case 15:
this.l2tp = '66';
this.search_field = '共享IP';
this.sstp = '888';
break;
case 16:
this.l2tp = '8899';
this.search_field = '实惠IP';
this.sstp = '不支持';
break;
case 1:
this.l2tp = '888888';
this.search_field = '强子IP';
this.sstp = '1500';
break;
case 8:
this.l2tp = '88';
this.search_field = '星星IP';
this.sstp = '6666';
break;
case 18:
this.l2tp = '8899';
this.search_field = '蘑菇IP';
this.sstp = '4430';
break;
case 22:
this.l2tp = '888888';
this.search_field = '火狐IP';
this.sstp = '5908';
break;
case 23:
this.l2tp = '888888';
this.search_field = '云牛IP';
this.sstp = '5908';
break;
case 25:
this.l2tp = '888888';
this.search_field = '强子静态IP';
this.sstp = '1500';
break;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/display.php?product=' + ProductId,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
count = res.count;
use_count = res.use_count;
}
});
this.table_data = datalist;
this.count = count;
this.use_count = use_count;
},
search_all(){
if(!this.search_all_data){
this.select_product(0);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=1&info=' + this.search_all_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
search_product(){
if(!this.search_product_data){
this.select_product(this.product_id);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=0&productid='+this.product_id+'&info=' + this.search_product_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
export_data(){
switch(this.product_id){
case 0:
self.location.href='http://php-api.juip.com/script/linedata/data/download/all.csv';
break;
case 2:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xunlian.csv';
break;
case 4:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jinrui.csv';
break;
case 5:
self.location.href='http://php-api.juip.com/script/linedata/data/download/laoying.csv';
break;
case 6:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xianfeng.csv';
break;
case 10:
self.location.href='http://php-api.juip.com/script/linedata/data/download/wuxian.csv';
break;
case 13:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jike.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 14:
self.location.href='http://php-api.juip.com/script/linedata/data/download/tiantian.csv';
break;
case 15:
self.location.href='http://php-api.juip.com/script/linedata/data/download/gongxiang.csv';
break;
case 16:
self.location.href='http://php-api.juip.com/script/linedata/data/download/shihui.csv';
break;
case 1:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzi.csv';
break;
case 8:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xingxing.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 19:
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
break;
case 25:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzijt.csv';
break;
}
},
detail(r){
$(".layerTable").show();
this.info= r;
},
back(){
$(".layerTable").hide();
}
}
})
</script>

View File

@@ -1,431 +1,431 @@
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var defaultPackage = Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
@* <div class="cpBanner">
<img src="~/m/img/cpBanner.png">
</div> *@
<div class="cpBanner" style="background-image: url(/img/acBanner_1.png?11231);background-repeat:round;background-size:auto auto;height:360px;">
<div class="row" style="color:white;width:calc(100vw-1px);text-align:center;padding-top:10px;">
<div class="col-md-8 " style="padding-top:1.5%;">
<h2 >十余种全网知名旗舰产品低价热销</h2>
<h1 style="font-size:45px;">淘宝动态IP销量排名NO.1</h1>
<h4 style="color: #e45b4b;">已完美对接淘宝、淘宝付款后、金额将自动充值到您的会员余额中</h4>
<a target="_blank" href="https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.45e51debbIPZJ7&ft=t&id=644774449094"><h4 style="color: #e45b4b;">欢迎淘宝下单每次下单都会随机赠送优惠券最低54元<br>优惠券支持所有套餐!<span style="color:#FFFF00;">点击去淘宝店铺付款&nbsp;<span class="glyphicon glyphicon-arrow-right"></span></span></h4></a>
</div>
<div class="col-md-3 col-md-offset-1" style="padding-top:2%;">
<h1>需求<span style="color: red;font-size:49px;">五个</span>以上</h1>
<h2>联系客服设置优惠价</h2>
<a target="_blank" href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true"><h3 style="color: #e45b4b;">>>>联系客服<<<</h3></a>
</div>
</div>
</div>
<div class="cpNav">
<div class="item">
<ul class="nav nav-tabs cpName" role="tablist">
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>动态独享IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
@foreach (var item in Model)
{
if(item.Product.Id == 18) {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;"><span style="color: red;font-weight:bold;">送 </span>@item.Product.Name<span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">8折</span></a>
</li>
} else if(item.Product.Id == 14) {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" id="p14" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name</a>
</li>
}
else if(item.Product.Id == 22) {
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>静态IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
}
else if(item.Product.Id == 21) {
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>单窗口单IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
} else {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
}
}
</ul>
</div>
<script>
$("#select-7").on('click',function(){
alert('请注意无尽IP仅供电脑端使用');
});
$("#select-19").on('click',function(){
alert('本产品为独享每个账号对应一个宽带拨号永不超载保证了网速及稳定性。使用时只需设置这个唯一的服务器1.hhip.vip在账号列表中点击切换地区即可任意组合自己需要的地区。本产品灵活便捷欢迎选购');
});
</script>
<div class="item">
<div class="tab-content">
@foreach (var item in Model)
{
<div role="tabpanel" class="tab-pane @(item.Product.Id==defaultProduct.Id?"active":"")" id="@item.Product.Id">
<p class="texing">@item.Product.Name</p>
<ul class="texingList">
@foreach (var str in item.Product.ContentLine)
{
<li>·@str</li>
}
</ul>
<script>
$(".p_type").hide();
$("#p14").click(function () {
$(".type14").show();
for (var i=1034;i<1046;i++){
$("#package-"+i).hide();
}
});
function ttzhizun() {
$("#package-89").show();
$("#package-69").show();
$("#package-70").show();
$("#package-71").show();
$("#package-1022").show();
$("#package-1023").show();
for (var i=1034;i<1046;i++){
$("#package-"+i).hide();
}
$(".ttzx").css('background-color','#FF9900');
$(".ttgj").css('background-color','white');
$(".ttpt").css('background-color','white');
}
function ttgaoji() {
$(".ttgj").css('background-color','#FF9900');
$(".ttzx").css('background-color','white');
$(".ttpt").css('background-color','white');
$("#package-89").hide();
$("#package-69").hide();
$("#package-70").hide();
$("#package-71").hide();
$("#package-1022").hide();
$("#package-1023").hide();
for (var i=1040;i<1046;i++){
$("#package-"+i).hide();
}
for (var i=1034;i<1040;i++){
$("#package-"+i).show();
}
}
function ttputong() {
$(".ttpt").css('background-color','#FF9900');
$(".ttzx").css('background-color','white');
$(".ttgj").css('background-color','white');
$("#package-89").hide();
$("#package-69").hide();
$("#package-70").hide();
$("#package-71").hide();
$("#package-1022").hide();
$("#package-1023").hide();
for (var i=1040;i<1046;i++){
$("#package-"+i).show();
}
for (var i=1034;i<1040;i++){
$("#package-"+i).hide();
}
}
var wjdxtype = 1;
function wjdxphone() {
$("#dxaz").css('background-color','#FF9900');
$("#dxdn").css('background-color','white');
wjdxtype = 1;
for (var i=1048;i<1051;i++){
$("#package-"+i).show();
}
for (var i=1051;i<1060;i++){
$("#package-"+i).hide();
}
}
wjdxphone();
function wjdxpc() {
$("#dxaz").css('background-color','white');
$("#dxdn").css('background-color','#FF9900');
wjdxtype = 2;
for (var i=1048;i<1054;i++){
$("#package-"+i).hide();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).hide();
}
for (var i=1054;i<1057;i++){
$("#package-"+i).show();
}
}
function wjdxpt() {
$("#dxpt").css('background-color','#FF9900');
$("#dxgj").css('background-color','white');
if (wjdxtype == 1) {
for (var i=1051;i<1060;i++){
$("#package-"+i).hide();
}
for (var i=1048;i<1051;i++){
$("#package-"+i).show();
}
} else if (wjdxtype == 2) {
for (var i=1048;i<1054;i++){
$("#package-"+i).hide();
}
for (var i=1054;i<1057;i++){
$("#package-"+i).show();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).hide();
}
}
}
function wjdxgj() {
$("#dxpt").css('background-color','white');
$("#dxgj").css('background-color','#FF9900');
if (wjdxtype == 1) {
for (var i=1048;i<1051;i++){
$("#package-"+i).hide();
}
for (var i=1051;i<1054;i++){
$("#package-"+i).show();
}
for (var i=1054;i<1060;i++){
$("#package-"+i).hide();
}
} else if (wjdxtype == 2) {
for (var i=1048;i<1057;i++){
$("#package-"+i).hide();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).show();
}
}
}
//1 安卓、苹果 2 pc
var wjgxtype = 1;
function wjgxphone() {
$("#gxaz").css('background-color','#FF9900');
$("#gxdn").css('background-color','white');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
wjgxtype = 1;
for (var i=1060;i<1063;i++){
$("#package-"+i).show();
}
for (var i=1063;i<1072;i++){
$("#package-"+i).hide();
}
}
wjgxphone();
function wjgxpc() {
$("#gxaz").css('background-color','white');
$("#gxdn").css('background-color','#FF9900');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
wjgxtype = 2;
for (var i=1060;i<1066;i++){
$("#package-"+i).hide();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).hide();
}
for (var i=1066;i<1069;i++){
$("#package-"+i).show();
}
}
function wjgxpt() {
$("#gxpt").css('background-color','#FF9900');
$("#gxgj").css('background-color','white');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
if (wjgxtype == 1) {
for (var i=1060;i<1063;i++){
$("#package-"+i).show();
}
for (var i=1063;i<1072;i++){
$("#package-"+i).hide();
}
} else if (wjgxtype == 2) {
for (var i=1060;i<1066;i++){
$("#package-"+i).hide();
}
for (var i=1066;i<1069;i++){
$("#package-"+i).show();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).hide();
}
}
}
function wjgxgj() {
$("#gxpt").css('background-color','white');
$("#gxgj").css('background-color','#FF9900');
$("#wjgxgd").addClass("active");
$("#wjgxpt").removeClass("active");
if (wjgxtype == 1) {
for (var i=1060;i<1063;i++){
$("#package-"+i).hide();
}
for (var i=1063;i<1066;i++){
$("#package-"+i).show();
}
for (var i=1066;i<1072;i++){
$("#package-"+i).hide();
}
} else if (wjgxtype == 2) {
for (var i=1060;i<1069;i++){
$("#package-"+i).hide();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).show();
}
}
}
</script>
<p style="color: #ec6e58;font-size:30px;font-weight: bold;background-color:#FFFF00">
需求5个以上可以联系客服设置优惠价;
开通后有任何问题可无理由退款,并支持自助提现
退款规则:购买价格-使用天数*天卡价格
</p>
<div class="p_type @("type"+item.Product.Id)" style="padding-top: 10px;">
<button type="button" onclick="ttzhizun()" class="btn btn-default btn-lg ttzx" style="background-color: #FF9900;font-size:1.5em;">尊享版</button>
<button type="button" onclick="ttgaoji()" class="btn btn-default btn-lg ttgj" style="background-color: white;font-size:1.5em;">高级版</button>
<button type="button" onclick="ttputong()" class="btn btn-default btn-lg ttpt" style="background-color: white;font-size:1.5em;">普通版</button>
</div>
@if (item.Product.Id == 20) {
<div style="margin: 5px;">
<button type="button" onclick="wjdxphone()" id="dxaz" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">安卓/苹果</button>
<button type="button" onclick="wjdxpc()" id="dxdn" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">电脑</button>
</div>
<div style="margin: 5px;">
<button type="button" onclick="wjdxpt()" id="dxpt" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">普通版-5兆</button>
<button type="button" onclick="wjdxgj()" id="dxgj" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">高端版-10兆</button>
</div>
}
@if (item.Product.Id == 21) {
<div style="margin: 5px;">
<button type="button" onclick="wjgxphone()" id="gxaz" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">安卓/苹果</button>
<button type="button" onclick="wjgxpc()" id="gxdn" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">电脑</button>
</div>
<div style="margin: 5px;">
<button type="button" onclick="wjgxpt()" id="gxpt" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">普通版</button>
<button type="button" onclick="wjgxgj()" id="gxgj" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">极速版</button>
</div>
}
@foreach (var package in item.Packages.Where(m => m.Status == 1&&(m.TenantId==1157||m.TenantId==9999||m.TenantId==10000)).OrderBy(m => m.TenantId))
{
if (package.IsTest == 1)
{
<a asp-action="test" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.ProductId">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p>@package.Name</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>0.00</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
else
{
@if(package.Price == 0.1M){
<a asp-action="buy" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.Id">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#FFFF00;">@package.Name 首单</p>
<p>@(Math.Round(package.Price/package.DayCount,2))元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
else {
<a asp-action="buy" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.Id">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#FFFF00;">@package.Name</p>
<p>@(Math.Round(package.Price/package.DayCount,2))元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
@if((package.Id == 64||package.Id == 1004)&&package.Price<60){
<p>¥<span>60.00</span></p>
} else {
<p>¥<span>@package.Price</span></p>
}
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
}
}
</div>
}
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var defaultPackage = Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
@* <div class="cpBanner">
<img src="~/m/img/cpBanner.png">
</div> *@
<div class="cpBanner" style="background-image: url(/img/acBanner_1.png?11231);background-repeat:round;background-size:auto auto;height:360px;">
<div class="row" style="color:white;width:calc(100vw-1px);text-align:center;padding-top:10px;">
<div class="col-md-8 " style="padding-top:1.5%;">
<h2 >十余种全网知名旗舰产品低价热销</h2>
<h1 style="font-size:45px;">淘宝动态IP销量排名NO.1</h1>
<h4 style="color: #e45b4b;">已完美对接淘宝、淘宝付款后、金额将自动充值到您的会员余额中</h4>
<a target="_blank" href="https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.45e51debbIPZJ7&ft=t&id=644774449094"><h4 style="color: #e45b4b;">欢迎淘宝下单每次下单都会随机赠送优惠券最低54元<br>优惠券支持所有套餐!<span style="color:#FFFF00;">点击去淘宝店铺付款&nbsp;<span class="glyphicon glyphicon-arrow-right"></span></span></h4></a>
</div>
<div class="col-md-3 col-md-offset-1" style="padding-top:2%;">
<h1>需求<span style="color: red;font-size:49px;">五个</span>以上</h1>
<h2>联系客服设置优惠价</h2>
<a target="_blank" href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true"><h3 style="color: #e45b4b;">>>>联系客服<<<</h3></a>
</div>
</div>
</div>
<div class="cpNav">
<div class="item">
<ul class="nav nav-tabs cpName" role="tablist">
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>动态独享IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
@foreach (var item in Model)
{
if(item.Product.Id == 18) {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;"><span style="color: red;font-weight:bold;">送 </span>@item.Product.Name<span style="color: #f64e3d;font-weight:bold;float:right;padding-right: 5px;">8折</span></a>
</li>
} else if(item.Product.Id == 14) {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" id="p14" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name</a>
</li>
}
else if(item.Product.Id == 22) {
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>静态IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
}
else if(item.Product.Id == 21) {
<li >
<a style="color:#0098fb"><span class="glyphicon glyphicon-arrow-down"></span>单窗口单IP<span class="glyphicon glyphicon-arrow-down"></span></a>
</li>
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
} else {
<li role="presentation" class="@(item.Product.Id==defaultProduct.Id?"active":"")">
<a href="#@item.Product.Id" role="tab" data-toggle="tab" style="font-size: 25px;">@item.Product.Name </a>
</li>
}
}
</ul>
</div>
<script>
$("#select-7").on('click',function(){
alert('请注意无尽IP仅供电脑端使用');
});
$("#select-19").on('click',function(){
alert('本产品为独享每个账号对应一个宽带拨号永不超载保证了网速及稳定性。使用时只需设置这个唯一的服务器1.hhip.vip在账号列表中点击切换地区即可任意组合自己需要的地区。本产品灵活便捷欢迎选购');
});
</script>
<div class="item">
<div class="tab-content">
@foreach (var item in Model)
{
<div role="tabpanel" class="tab-pane @(item.Product.Id==defaultProduct.Id?"active":"")" id="@item.Product.Id">
<p class="texing">@item.Product.Name</p>
<ul class="texingList">
@foreach (var str in item.Product.ContentLine)
{
<li>·@str</li>
}
</ul>
<script>
$(".p_type").hide();
$("#p14").click(function () {
$(".type14").show();
for (var i=1034;i<1046;i++){
$("#package-"+i).hide();
}
});
function ttzhizun() {
$("#package-89").show();
$("#package-69").show();
$("#package-70").show();
$("#package-71").show();
$("#package-1022").show();
$("#package-1023").show();
for (var i=1034;i<1046;i++){
$("#package-"+i).hide();
}
$(".ttzx").css('background-color','#FF9900');
$(".ttgj").css('background-color','white');
$(".ttpt").css('background-color','white');
}
function ttgaoji() {
$(".ttgj").css('background-color','#FF9900');
$(".ttzx").css('background-color','white');
$(".ttpt").css('background-color','white');
$("#package-89").hide();
$("#package-69").hide();
$("#package-70").hide();
$("#package-71").hide();
$("#package-1022").hide();
$("#package-1023").hide();
for (var i=1040;i<1046;i++){
$("#package-"+i).hide();
}
for (var i=1034;i<1040;i++){
$("#package-"+i).show();
}
}
function ttputong() {
$(".ttpt").css('background-color','#FF9900');
$(".ttzx").css('background-color','white');
$(".ttgj").css('background-color','white');
$("#package-89").hide();
$("#package-69").hide();
$("#package-70").hide();
$("#package-71").hide();
$("#package-1022").hide();
$("#package-1023").hide();
for (var i=1040;i<1046;i++){
$("#package-"+i).show();
}
for (var i=1034;i<1040;i++){
$("#package-"+i).hide();
}
}
var wjdxtype = 1;
function wjdxphone() {
$("#dxaz").css('background-color','#FF9900');
$("#dxdn").css('background-color','white');
wjdxtype = 1;
for (var i=1048;i<1051;i++){
$("#package-"+i).show();
}
for (var i=1051;i<1060;i++){
$("#package-"+i).hide();
}
}
wjdxphone();
function wjdxpc() {
$("#dxaz").css('background-color','white');
$("#dxdn").css('background-color','#FF9900');
wjdxtype = 2;
for (var i=1048;i<1054;i++){
$("#package-"+i).hide();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).hide();
}
for (var i=1054;i<1057;i++){
$("#package-"+i).show();
}
}
function wjdxpt() {
$("#dxpt").css('background-color','#FF9900');
$("#dxgj").css('background-color','white');
if (wjdxtype == 1) {
for (var i=1051;i<1060;i++){
$("#package-"+i).hide();
}
for (var i=1048;i<1051;i++){
$("#package-"+i).show();
}
} else if (wjdxtype == 2) {
for (var i=1048;i<1054;i++){
$("#package-"+i).hide();
}
for (var i=1054;i<1057;i++){
$("#package-"+i).show();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).hide();
}
}
}
function wjdxgj() {
$("#dxpt").css('background-color','white');
$("#dxgj").css('background-color','#FF9900');
if (wjdxtype == 1) {
for (var i=1048;i<1051;i++){
$("#package-"+i).hide();
}
for (var i=1051;i<1054;i++){
$("#package-"+i).show();
}
for (var i=1054;i<1060;i++){
$("#package-"+i).hide();
}
} else if (wjdxtype == 2) {
for (var i=1048;i<1057;i++){
$("#package-"+i).hide();
}
for (var i=1057;i<1060;i++){
$("#package-"+i).show();
}
}
}
//1 安卓、苹果 2 pc
var wjgxtype = 1;
function wjgxphone() {
$("#gxaz").css('background-color','#FF9900');
$("#gxdn").css('background-color','white');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
wjgxtype = 1;
for (var i=1060;i<1063;i++){
$("#package-"+i).show();
}
for (var i=1063;i<1072;i++){
$("#package-"+i).hide();
}
}
wjgxphone();
function wjgxpc() {
$("#gxaz").css('background-color','white');
$("#gxdn").css('background-color','#FF9900');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
wjgxtype = 2;
for (var i=1060;i<1066;i++){
$("#package-"+i).hide();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).hide();
}
for (var i=1066;i<1069;i++){
$("#package-"+i).show();
}
}
function wjgxpt() {
$("#gxpt").css('background-color','#FF9900');
$("#gxgj").css('background-color','white');
$("#wjgxgd").removeClass("active");
$("#wjgxpt").addClass("active");
if (wjgxtype == 1) {
for (var i=1060;i<1063;i++){
$("#package-"+i).show();
}
for (var i=1063;i<1072;i++){
$("#package-"+i).hide();
}
} else if (wjgxtype == 2) {
for (var i=1060;i<1066;i++){
$("#package-"+i).hide();
}
for (var i=1066;i<1069;i++){
$("#package-"+i).show();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).hide();
}
}
}
function wjgxgj() {
$("#gxpt").css('background-color','white');
$("#gxgj").css('background-color','#FF9900');
$("#wjgxgd").addClass("active");
$("#wjgxpt").removeClass("active");
if (wjgxtype == 1) {
for (var i=1060;i<1063;i++){
$("#package-"+i).hide();
}
for (var i=1063;i<1066;i++){
$("#package-"+i).show();
}
for (var i=1066;i<1072;i++){
$("#package-"+i).hide();
}
} else if (wjgxtype == 2) {
for (var i=1060;i<1069;i++){
$("#package-"+i).hide();
}
for (var i=1069;i<1072;i++){
$("#package-"+i).show();
}
}
}
</script>
<p style="color: #ec6e58;font-size:30px;font-weight: bold;background-color:#FFFF00">
需求5个以上可以联系客服设置优惠价;
开通后有任何问题可无理由退款,并支持自助提现
退款规则:购买价格-使用天数*天卡价格
</p>
<div class="p_type @("type"+item.Product.Id)" style="padding-top: 10px;">
<button type="button" onclick="ttzhizun()" class="btn btn-default btn-lg ttzx" style="background-color: #FF9900;font-size:1.5em;">尊享版</button>
<button type="button" onclick="ttgaoji()" class="btn btn-default btn-lg ttgj" style="background-color: white;font-size:1.5em;">高级版</button>
<button type="button" onclick="ttputong()" class="btn btn-default btn-lg ttpt" style="background-color: white;font-size:1.5em;">普通版</button>
</div>
@if (item.Product.Id == 20) {
<div style="margin: 5px;">
<button type="button" onclick="wjdxphone()" id="dxaz" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">安卓/苹果</button>
<button type="button" onclick="wjdxpc()" id="dxdn" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">电脑</button>
</div>
<div style="margin: 5px;">
<button type="button" onclick="wjdxpt()" id="dxpt" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">普通版-5兆</button>
<button type="button" onclick="wjdxgj()" id="dxgj" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">高端版-10兆</button>
</div>
}
@if (item.Product.Id == 21) {
<div style="margin: 5px;">
<button type="button" onclick="wjgxphone()" id="gxaz" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">安卓/苹果</button>
<button type="button" onclick="wjgxpc()" id="gxdn" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">电脑</button>
</div>
<div style="margin: 5px;">
<button type="button" onclick="wjgxpt()" id="gxpt" class="btn btn-default btn-lg" style="background-color: #FF9900;font-size:1.5em;">普通版</button>
<button type="button" onclick="wjgxgj()" id="gxgj" class="btn btn-default btn-lg" style="background-color: white;font-size:1.5em;">极速版</button>
</div>
}
@foreach (var package in item.Packages.Where(m => m.Status == 1&&(m.TenantId==1157||m.TenantId==9999||m.TenantId==10000)).OrderBy(m => m.TenantId))
{
if (package.IsTest == 1)
{
<a asp-action="test" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.ProductId">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p>@package.Name</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>0.00</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
else
{
@if(package.Price == 0.1M){
<a asp-action="buy" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.Id">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#FFFF00;">@package.Name 首单</p>
<p>@(Math.Round(package.Price/package.DayCount,2))元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
else {
<a asp-action="buy" id="@("package-"+package.Id)" asp-controller="product" asp-route-id="@package.Id">
<div class="card color_@((item.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#FFFF00;">@package.Name</p>
<p>@(Math.Round(package.Price/package.DayCount,2))元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
@if((package.Id == 64||package.Id == 1004)&&package.Price<60){
<p>¥<span>60.00</span></p>
} else {
<p>¥<span>@package.Price</span></p>
}
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
}
}
</div>
}
</div>
</div>
</div>

View File

@@ -1,143 +1,143 @@
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model ProductWithPackageResponse
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var defaultProduct = Model.Product;
var defaultPackage = Model.Packages.FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
@* <div class="cpBanner">
<img src="~/m/img/cpBanner.png">
</div> *@
<div class="cpBanner" style="background-image: url(/img/acBanner_1.png?11231);background-repeat:round;background-size:auto auto;height:330px;">
<div class="row" style="color:white;width:calc(100vw-1px);text-align:center;padding-top:10px;">
<div class="col-md-8 " style="padding-top:1.5%;">
<h2 >十余种全网知名旗舰产品低价热销</h2>
<h1 style="font-size:45px;">淘宝动态IP销量排名NO.1</h1>
<h4 style="color: #e45b4b;">已完美对接淘宝、淘宝付款后、金额将自动充值到您的会员余额中</h4>
<a target="_blank" href="https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.45e51debbIPZJ7&ft=t&id=644774449094"><h4 style="color: #e45b4b;">欢迎淘宝下单每次下单都会随机赠送优惠券最低54元<br>优惠券支持所有套餐!<span style="color:#FFFF00;">点击去淘宝店铺付款&nbsp;<span class="glyphicon glyphicon-arrow-right"></span></span></h4></a>
</div>
<div class="col-md-3 col-md-offset-1" style="padding-top:2%;">
<h1>需求<span style="color: red;font-size:49px;">五个</span>以上</h1>
<h2>联系客服设置优惠价</h2>
<a target="_blank" href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true"><h3 style="color: #e45b4b;">>>>联系客服<<<</h3></a>
</div>
</div>
</div>
<div class="cpNav">
<div class="item">
<ul class="nav nav-tabs cpName" role="tablist">
<li role="presentation" class="active">
<a href="#@Model.Product.Id">@Model.Product.Name</a>
</li>
</ul>
</div>
<div class="item">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="@Model.Product.Id">
<p class="texing">@Model.Product.Name</p>
<ul class="texingList">
<p>·不限速网速最高可达50兆</p>
<p>·支持手机,电脑,模拟器</p>
<p>·200多个城市+全国混波量ip千万级</p>
<p>·带宽6-10兆</p>
<p>·断开再链接换ip</p>
</ul>
@foreach (var package in Model.Packages.Where(m=>m.IsTest==0&&m.Status==1 && m.Id != 21&& m.Id != 20).OrderBy(m => m.TenantId))
{
@if(package.Id == 101||package.Id == 103||package.Id == 104||(package.Id>103)){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name </p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
@* else if(package.Id == 19){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name 送10天</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} *@
@* else if(package.Id == 63||package.Id == 64||package.Id == 65||package.Id == 66||package.Id == 67||package.Id == 13||package.Id == 14||package.Id == 15||package.Id == 16){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name 85折</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} *@
else if(package.Id == 100 || package.Id == 102){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name </p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} else if(package.Id != 88) {
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p>@package.Name</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
@if((package.Id == 64||package.Id == 1004)&&package.Price<60){
<p>¥<span>60.00</span></p>
} else {
<p>¥<span>@package.Price</span></p>
}
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
}
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model ProductWithPackageResponse
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var defaultProduct = Model.Product;
var defaultPackage = Model.Packages.FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
@* <div class="cpBanner">
<img src="~/m/img/cpBanner.png">
</div> *@
<div class="cpBanner" style="background-image: url(/img/acBanner_1.png?11231);background-repeat:round;background-size:auto auto;height:330px;">
<div class="row" style="color:white;width:calc(100vw-1px);text-align:center;padding-top:10px;">
<div class="col-md-8 " style="padding-top:1.5%;">
<h2 >十余种全网知名旗舰产品低价热销</h2>
<h1 style="font-size:45px;">淘宝动态IP销量排名NO.1</h1>
<h4 style="color: #e45b4b;">已完美对接淘宝、淘宝付款后、金额将自动充值到您的会员余额中</h4>
<a target="_blank" href="https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.45e51debbIPZJ7&ft=t&id=644774449094"><h4 style="color: #e45b4b;">欢迎淘宝下单每次下单都会随机赠送优惠券最低54元<br>优惠券支持所有套餐!<span style="color:#FFFF00;">点击去淘宝店铺付款&nbsp;<span class="glyphicon glyphicon-arrow-right"></span></span></h4></a>
</div>
<div class="col-md-3 col-md-offset-1" style="padding-top:2%;">
<h1>需求<span style="color: red;font-size:49px;">五个</span>以上</h1>
<h2>联系客服设置优惠价</h2>
<a target="_blank" href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true"><h3 style="color: #e45b4b;">>>>联系客服<<<</h3></a>
</div>
</div>
</div>
<div class="cpNav">
<div class="item">
<ul class="nav nav-tabs cpName" role="tablist">
<li role="presentation" class="active">
<a href="#@Model.Product.Id">@Model.Product.Name</a>
</li>
</ul>
</div>
<div class="item">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="@Model.Product.Id">
<p class="texing">@Model.Product.Name</p>
<ul class="texingList">
<p>·不限速网速最高可达50兆</p>
<p>·支持手机,电脑,模拟器</p>
<p>·200多个城市+全国混波量ip千万级</p>
<p>·带宽6-10兆</p>
<p>·断开再链接换ip</p>
</ul>
@foreach (var package in Model.Packages.Where(m=>m.IsTest==0&&m.Status==1 && m.Id != 21&& m.Id != 20).OrderBy(m => m.TenantId))
{
@if(package.Id == 101||package.Id == 103||package.Id == 104||(package.Id>103)){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name </p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
@* else if(package.Id == 19){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name 送10天</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} *@
@* else if(package.Id == 63||package.Id == 64||package.Id == 65||package.Id == 66||package.Id == 67||package.Id == 13||package.Id == 14||package.Id == 15||package.Id == 16){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name 85折</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} *@
else if(package.Id == 100 || package.Id == 102){
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p style="font-size: 35px;color:#f64e3d;">@package.Name </p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
<p>¥<span>@package.Price</span></p>
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
} else if(package.Id != 88) {
<a asp-action="rebuy" asp-controller="Product" asp-route-packageId="@package.Id" asp-route-accounts=@ViewBag.accounts>
<div class="card color_@((Model.Packages.IndexOf(package)+1)%5)">
<div class="item">
<p>@package.Name</p>
<p>@(package.DayPrice)元/天</p>
<p>@package.Profile</p>
</div>
<div class="item">
@if((package.Id == 64||package.Id == 1004)&&package.Price<60){
<p>¥<span>60.00</span></p>
} else {
<p>¥<span>@package.Price</span></p>
}
<p style="color: #FF9900;text-decoration: line-through">原价:@package.LinePrice 元</p>
</div>
</div>
</a>
}
}
</div>
</div>
</div>
</div>

View File

@@ -1,66 +1,66 @@
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject IConfiguration m_Configuration
@model List<ProductEntity>
@{
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div class="col-sm-4">
</div>
<div class="col-sm-4 text-center">
<p class="simg"><img src="~/img/img_soft.png"></p>
<p class="sintro">软件和账户必须为同一产品才能使用</p>
</div>
<div class="col-sm-4 text-right">
<a href="#" class="jiaocheng">使用教程→</a>
</div>
</div>
</div>
</div>
<div class="softList">
@foreach (var item in Model.Where(m=>m.Sort!=1000 && m.Id!=12 && m.Id!=21 && m.OnLine==1).OrderBy(m => m.Sort))
{
<div class="item">
@*<p><img src="@P(item.Image)"></p>*@
@if (item.Id != 20){
<p>@item.Name</p>
<p><a href="@item.SimulatorDownloadUrl"> <button type="button" class="btnBlue">SSTP客户端下载</button></a></p>
}
@if (!string.IsNullOrEmpty(item.DroidDownloadUrl)){
<p>@item.Name</p>
<p><a href="@item.DroidDownloadUrl"> <button type="button" class="btnBlue">安卓APP</button></a></p>
<br>
} else if (item.Id == 20) {
<p>无极</p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E5%AE%89%E5%8D%93-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.apk"> <button type="button" class="btnBlue">无极安卓共享独享通用</button></a></p>
<p><a href="https://apps.apple.com/cn/app/jie-zou-da-shi/id1448657437"> <button type="button" class="btnBlue">ios客户端</button></a></p>
}
</div>
}
<div class="item" style="height: auto;">
@*<p><img src="@P(item.Image)"></p>*@
<p>代理商专用客户端</p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%20-%20%E4%BB%A3%E7%90%86%E7%89%88.zip"> <button type="button" class="btnBlue">西瓜IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">西瓜IP-安卓</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E4%BB%A3%E7%90%86%E7%89%88%203.5.rar"> <button type="button" class="btnBlue">极客IP-电脑版</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">极客IP-安卓</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">迅连IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">讯连IP-安卓端</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">强子IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">强子IP-安卓端</button></a></p>
<p><a href="http://app.cn98.net:8000/huohupubnet.apk"> <button type="button" class="btnBlue">火狐IP-安卓端</button></a></p>
<p><a href="http://app.ipsoft168.com:8000/yunniupubdtip.apk"> <button type="button" class="btnBlue">云牛IP-安卓端</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%98%9F%E6%98%9FIP%E7%94%B5%E8%84%91%E7%AB%AF-4.10%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">星星IP-电脑端</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%98%91%E8%8F%87IP-2-17.zip"> <button type="button" class="btnBlue">蘑菇IP-电脑端</button></a></p><br>
</div>
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject IConfiguration m_Configuration
@model List<ProductEntity>
@{
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div class="col-sm-4">
</div>
<div class="col-sm-4 text-center">
<p class="simg"><img src="~/img/img_soft.png"></p>
<p class="sintro">软件和账户必须为同一产品才能使用</p>
</div>
<div class="col-sm-4 text-right">
<a href="#" class="jiaocheng">使用教程→</a>
</div>
</div>
</div>
</div>
<div class="softList">
@foreach (var item in Model.Where(m=>m.Sort!=1000 && m.Id!=12 && m.Id!=21 && m.OnLine==1).OrderBy(m => m.Sort))
{
<div class="item">
@*<p><img src="@P(item.Image)"></p>*@
@if (item.Id != 20){
<p>@item.Name</p>
<p><a href="@item.SimulatorDownloadUrl"> <button type="button" class="btnBlue">SSTP客户端下载</button></a></p>
}
@if (!string.IsNullOrEmpty(item.DroidDownloadUrl)){
<p>@item.Name</p>
<p><a href="@item.DroidDownloadUrl"> <button type="button" class="btnBlue">安卓APP</button></a></p>
<br>
} else if (item.Id == 20) {
<p>无极</p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E5%AE%89%E5%8D%93-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.apk"> <button type="button" class="btnBlue">无极安卓共享独享通用</button></a></p>
<p><a href="https://apps.apple.com/cn/app/jie-zou-da-shi/id1448657437"> <button type="button" class="btnBlue">ios客户端</button></a></p>
}
</div>
}
<div class="item" style="height: auto;">
@*<p><img src="@P(item.Image)"></p>*@
<p>代理商专用客户端</p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%20-%20%E4%BB%A3%E7%90%86%E7%89%88.zip"> <button type="button" class="btnBlue">西瓜IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">西瓜IP-安卓</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E4%BB%A3%E7%90%86%E7%89%88%203.5.rar"> <button type="button" class="btnBlue">极客IP-电脑版</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">极客IP-安卓</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">迅连IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">讯连IP-安卓端</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">强子IP-电脑版</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btnBlue">强子IP-安卓端</button></a></p>
<p><a href="http://app.cn98.net:8000/huohupubnet.apk"> <button type="button" class="btnBlue">火狐IP-安卓端</button></a></p>
<p><a href="http://app.ipsoft168.com:8000/yunniupubdtip.apk"> <button type="button" class="btnBlue">云牛IP-安卓端</button></a></p>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%98%9F%E6%98%9FIP%E7%94%B5%E8%84%91%E7%AB%AF-4.10%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btnBlue">星星IP-电脑端</button></a></p><br>
<p><a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%98%91%E8%8F%87IP-2-17.zip"> <button type="button" class="btnBlue">蘑菇IP-电脑端</button></a></p><br>
</div>
</div>

View File

@@ -1,129 +1,129 @@
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Common
@model PackageInfoResponse
@inject IConfiguration m_Configuration
@inject Hncore.Pass.Vpn.Service.ProductAccountService m_AccountService
@{
ViewData["Title"] = "购买产品";
var t = this.Context.Request.GetInt("t");
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
var randomPwd = ValidateCodeHelper.MakeNumCode(3).ToLower();
var randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
while (m_AccountService.Exist(m => m.Account == randomAccount))
{
randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
}
}
<vc:redirecct-login></vc:redirecct-login>
<script type="text/javascript">
$(function () {
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定前往 用户主页、个人信息 实名认证。');
window.location.href="/User/IndexInfo";
}
}
});
});
</script>
<div class="cpTop">
<p class="choose">当前已选产品:</p>
<div class="kArea">
<div class="cpKuang">
<div class="item">
<p><img src="@P(Model.Product.Image)"></p>
<p>@Model.Product.Name</p>
</div>
<div class="item">
<p class="kaci">@Model.Package.Name</p>
<p class="grayText">@(Model.Package.DayPrice)元/天</p>
<p class="grayText">@Model.Package.Profile</p>
</div>
<div class="item">
¥ <span class="price">@Model.Package.Price</span>
</div>
</div>
</div>
<div class="chongxin">
<div class="item redText">
*请确认好所需产品,买错产品换货将产生费用
</div>
<div class="item">
<a asp-action="index" asp-controller="product"><button type="button" class="btnBlue">返回重新选择</button></a>
</div>
</div>
</div>
<div class="biaodan">
IP账号前缀<input type="text" name="" id="account" value="@randomAccount" />
</div>
<div class="biaodan">
IP账号密码<input type="text" name="" id="pwd" value="@randomPwd" />
</div>
<p class="grayText text-center shengyu">剩余试用次数:<span>@(Model.RestTimes)</span></p>
<p class="text-center redText tip"></p>
<p class="text-center">
@if (Model.RestTimes > 0 && Model.Package.Status == 1)
{
<button type="button" class="btnBlue large" onclick="create()">领取试用</button>
}
@if (Model.Package.Status == 0)
{
<span style="color:red;">
该产品暂不能测试
</span>
}
</p>
@section Scripts{
<script>
function create() {
var data = {
ProductId:@(Model.Product.Id),
PackageId: @(Model.Package.Id),
Account: $('#account').val(),
Pwd: $('#pwd').val()
};
if (data.Account == '' || data.Pwd == '') {
$(".tip").text("账户和密码不能为空");
return;
}
$.ajax({
type: 'POST',
url: '/api/course/v1/productaccount/CreateTestAccount',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("领取成功")
window.location.href = "/user/myaccounts";
} else {
$(".tip").text(res.Message);
}
},
dataType: "json"
});
}
</script>
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Common
@model PackageInfoResponse
@inject IConfiguration m_Configuration
@inject Hncore.Pass.Vpn.Service.ProductAccountService m_AccountService
@{
ViewData["Title"] = "购买产品";
var t = this.Context.Request.GetInt("t");
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
var randomPwd = ValidateCodeHelper.MakeNumCode(3).ToLower();
var randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
while (m_AccountService.Exist(m => m.Account == randomAccount))
{
randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
}
}
<vc:redirecct-login></vc:redirecct-login>
<script type="text/javascript">
$(function () {
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定前往 用户主页、个人信息 实名认证。');
window.location.href="/User/IndexInfo";
}
}
});
});
</script>
<div class="cpTop">
<p class="choose">当前已选产品:</p>
<div class="kArea">
<div class="cpKuang">
<div class="item">
<p><img src="@P(Model.Product.Image)"></p>
<p>@Model.Product.Name</p>
</div>
<div class="item">
<p class="kaci">@Model.Package.Name</p>
<p class="grayText">@(Model.Package.DayPrice)元/天</p>
<p class="grayText">@Model.Package.Profile</p>
</div>
<div class="item">
¥ <span class="price">@Model.Package.Price</span>
</div>
</div>
</div>
<div class="chongxin">
<div class="item redText">
*请确认好所需产品,买错产品换货将产生费用
</div>
<div class="item">
<a asp-action="index" asp-controller="product"><button type="button" class="btnBlue">返回重新选择</button></a>
</div>
</div>
</div>
<div class="biaodan">
IP账号前缀<input type="text" name="" id="account" value="@randomAccount" />
</div>
<div class="biaodan">
IP账号密码<input type="text" name="" id="pwd" value="@randomPwd" />
</div>
<p class="grayText text-center shengyu">剩余试用次数:<span>@(Model.RestTimes)</span></p>
<p class="text-center redText tip"></p>
<p class="text-center">
@if (Model.RestTimes > 0 && Model.Package.Status == 1)
{
<button type="button" class="btnBlue large" onclick="create()">领取试用</button>
}
@if (Model.Package.Status == 0)
{
<span style="color:red;">
该产品暂不能测试
</span>
}
</p>
@section Scripts{
<script>
function create() {
var data = {
ProductId:@(Model.Product.Id),
PackageId: @(Model.Package.Id),
Account: $('#account').val(),
Pwd: $('#pwd').val()
};
if (data.Account == '' || data.Pwd == '') {
$(".tip").text("账户和密码不能为空");
return;
}
$.ajax({
type: 'POST',
url: '/api/course/v1/productaccount/CreateTestAccount',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("领取成功")
window.location.href = "/user/myaccounts";
} else {
$(".tip").text(res.Message);
}
},
dataType: "json"
});
}
</script>
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,387 +1,387 @@
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@model PackageInfoResponse
@inject UserService m_UserService
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
<script src="~/js/vue.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
$(function () {
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定前往 用户主页、个人信息 实名认证。');
window.location.href="/User/IndexInfo";
}
}
});
</script>
<vc:redirecct-login></vc:redirecct-login>
<vc:pay-wait></vc:pay-wait>
<div id="app">
<div class="cpTop">
<p class="choose">当前已选产品:</p>
<div class="kArea">
<div class="cpKuang">
<div class="item">
<p><img src="~/@Model.Product.Image"></p>
<p>@Model.Product.Name</p>
</div>
<div class="item">
<p class="kaci">@Model.Package.Name</p>
<p class="grayText">@(Model.Package.DayPrice)元/天</p>
<p class="grayText">@Model.Package.Profile</p>
</div>
<div class="item">
¥ <span class="price">@Model.Package.Price</span>
</div>
</div>
</div>
<div class="chongxin">
<div class="item redText">
*请确认好所需产品,买错产品换货将产生费用
</div>
<div class="item">
<button type="button" class="btnBlue" onclick="history.go(-1)">返回重新选择</button>
</div>
</div>
</div>
<!-- con -->
<div class="container zhuce">
<div class="reg_tab">
<div class="item dan active_dan">
续费
</div>
</div>
</div>
<div class="conDan">
<div class="row">
<div class="col-sm-5 col-xs-5">
IP产品账号
</div>
<div class="col-sm-7 col-xs-7 shuru">
<input type="text" v-model="OneBuyModel.Account" disabled />
</div>
</div>
@*<div class="row">
<div class="col-sm-5 col-xs-5">
IP账号密码
</div>
<div class="col-sm-7 col-xs-7 shuru">
<input type="text" v-model="OneBuyModel.Pwd" />
</div>
</div>*@
<div class="row">
<div class="col-sm-5 col-xs-5">
连接数:
</div>
<div class="col-sm-7 col-xs-7">
<div class="jiajian">
<div class="item">
</div>
<div class="item">
<span>{{OneBuyModel.ConnectCount}}</span>
</div>
<div class="item">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
选择优惠券:
</div>
<div class="col-sm-7 col-xs-7 select">
<select class="chooseYhq" v-model="OneBuyModel.CouponId">
<option value="0">请选择优惠券</option>
<option v-for="item in Coupons" :value="item.Id">{{item.Name}}</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
余额:
</div>
<div class="col-sm-7 col-xs-7">
<div class="">
当前账户余额<span class="blueText">@(userEntity.RestAmount)</span>元
<a href="/User/Index">前往充值</a>
</div>
</div>
</div>
<div class="row" v-if="showPayType">
<div class="col-sm-5 col-xs-5">
支付方式:
</div>
<div class="col-sm-7 col-xs-7 pay">
<div class="radio" v-on:click="OneBuyModel.OPayType=100">
<input id="zhifubaopay_s1" name="OPayType" type="radio" v-model="OneBuyModel.OPayType" value="100">
<label for="zhifubaopay_s1" class="radio-label"><img src="~/m/img/zfb.png"> 支付宝支付</label>
</div>
<div class="radio" v-on:click="OneBuyModel.OPayType=70">
<input id="weixinpay_s1" name="OPayType" type="radio" v-model="OneBuyModel.OPayType" value="70">
<label for="weixinpay_s1" class="radio-label"><img src="~/m/img/wx.png"> 微信支付</label>
</div>
<div class="radio" >
<input id="UseAccountAmount" name="OPayType" type="radio" v-model="OneBuyModel.UseAccountAmount" value="1">
<label for="UseAccountAmount" class="radio-label" style="line-height:150%"> 余额支付</label>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
总金额:
</div>
<div class="col-sm-7 col-xs-7">
<span>{{TotalAmount}}</span>元
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
应付款:
</div>
<div class="col-sm-7 col-xs-7">
<span class="yingfu" style="font-size: 35px;font-weight: bold;">{{PayAmount}}</span>元
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
</div>
<div class="col-sm-7 col-xs-7">
<p>{{auto_discount_text}}</p>
</div>
</div>
<p class="grayText songquan">淘宝每次下单获得优惠券</p>
<p class="grayText songquan" style="color:red">{{Tip}}</p>
<div class="ok">
<button type="button" class="pay-botton btnPay" v-on:click="onePay">确认支付</button>
</div>
</div>
</div>
<div id="aliPayBox" style="display:none"></div>
@section Scripts{
<script>
var productId =@(Model.Product.Id);
var app = new Vue({
el: '#app',
data: {
auto_discount_text:'',
showPayType: true,
Tip:'',
RestAmount: @(userEntity.RestAmount),
Coupons: [],
SelectCoupon: {},
OrderInfo: {},
OneBuyModel: {
Price:@(Model.Package.Price),
PackageId:@(Model.Package.Id),
OrderType: @ViewBag.orderType,
Account: '@ViewBag.accounts',
CouponAmount: 0,
Pwd: '',
ConnectCount: @(ViewBag.ConnectCount),
CouponId: 0,
UseAccountAmount: 0,
OPayType: 100,
PayChannel:40,
}
},
computed: {
TotalAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count;
return total.toFixed(2);
},
PayAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var restAmout = this.OneBuyModel.UseAccountAmount == 1 ? this.RestAmount : 0;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount ;
total= total < 0 ? 0 : total;
total = parseFloat(total.toFixed(2));
//最低价
var min_cost = @(Model.Package.MinPrice) * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount;
if(total<min_cost){
total = min_cost;
}
return total.toFixed(2);
}
},
watch: {
'OneBuyModel.CouponId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
var totalAmount = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount;
for (var i = 0; i < this.Coupons.length; i++) {
var item = this.Coupons[i];
if (totalAmount < item.AllowMinAmount) {
continue;
}
if (item.Id == newValue) {
if (item.CouponType == 1) {//满减
this.OneBuyModel.CouponAmount = item.CouponValue;
} else {
//亲 请勿非法操作呦^.^ 请按照正常的流程操作 我们后台是有记录滴
if($(".kaci").text() == '天卡'){
this.OneBuyModel.CouponAmount = totalAmount * item.CouponValue * 0.1;
} else {
alert('非天卡无效');
this.OneBuyModel.CouponId = '0';
}
}
return;
} else {
this.OneBuyModel.CouponAmount = 0;
}
}
},
immediate: true
},
'OneBuyModel.OPayType': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
var wx = 10;
if (isWeiXin()) wx = 20;
this.OneBuyModel.PayChannel = newValue == 70 ? wx : 40;
},
immediate: true
}
},
mounted: function () {
if (isWeiXin()) {
this.OneBuyModel.PayChannel = 20;
this.OneBuyModel.OPayType = 70;
this.showPayType = false;
}
this.getCoupons();
},
methods: {
getCoupons: function () {
var that = this;
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
console.log(res);
if (res.Code == 10000) {
that.Coupons = res.Data.map(m => m.Coupon);
}
}
})
},
onePay: function () {
$(".pay-botton").hide();
if (this.OneBuyModel.UseAccountAmount) {
if (this.RestAmount < this.PayAmount){
alert('余额不足,请充值。您也可以使用微信、支付宝支付。');return;
} else {
this.RestAmount = this.RestAmount - this.PayAmount;
}
}
var that = this;
if (this.OneBuyModel.UseAccountAmount === true) this.OneBuyModel.UseAccountAmount = 1;
if (this.OneBuyModel.UseAccountAmount === false) this.OneBuyModel.UseAccountAmount = 0;
var that = this;
showPayWait();
$.ajax({
type: 'POST',
url: '/product/CreateOrder',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(this.OneBuyModel),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
hidePayWait();
that.payCallback(res.Data)
//that.isPay(res.Data.OrderInfo.OrderNo);
} else {
//that.Tip = res.Message;
tipPayWait(res.Message);
}
}
});
},
payCallback: function (data) {
this.OrderInfo = data.OrderInfo;
if (!data.PayData) { alert("下单成功"); return; }
var payChannel = this.OrderInfo.PayChannel;
if (payChannel == 10) {
this.h5WxPay(data.PayData)
} else if (payChannel == 20) {
this.jsWxPay(data.PayData);
} else if (payChannel == 40) {
this.aliPay(data.PayData);
}
},
h5WxPay(payData) {
window.location.href = payData;
},
jsWxPay(payData) {
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
JSON.parse(payData),
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
window.location.href = "/User/MyAccounts";
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
} else {
alert("支付失败" + res.err_msg);
}
});
},
aliPay(payData) {
$("#aliPayBox").html(payData);
},
isPay: function (orderNo) {
var handler = setInterval(function () {
var url = '/product/IsPay?orderNo=' + orderNo;
$.ajax({
type: 'GET',
url: url,
success: function (res) {
if (res.Code == 10000 && res.Data == 1) {
clearInterval(handler);
// $(".payMask").hide();
window.location.href = "/user/myaccounts";
}
}
})
}, 3000)
}
}
})
</script>
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@model PackageInfoResponse
@inject UserService m_UserService
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
<script src="~/js/vue.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
$(function () {
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定前往 用户主页、个人信息 实名认证。');
window.location.href="/User/IndexInfo";
}
}
});
</script>
<vc:redirecct-login></vc:redirecct-login>
<vc:pay-wait></vc:pay-wait>
<div id="app">
<div class="cpTop">
<p class="choose">当前已选产品:</p>
<div class="kArea">
<div class="cpKuang">
<div class="item">
<p><img src="~/@Model.Product.Image"></p>
<p>@Model.Product.Name</p>
</div>
<div class="item">
<p class="kaci">@Model.Package.Name</p>
<p class="grayText">@(Model.Package.DayPrice)元/天</p>
<p class="grayText">@Model.Package.Profile</p>
</div>
<div class="item">
¥ <span class="price">@Model.Package.Price</span>
</div>
</div>
</div>
<div class="chongxin">
<div class="item redText">
*请确认好所需产品,买错产品换货将产生费用
</div>
<div class="item">
<button type="button" class="btnBlue" onclick="history.go(-1)">返回重新选择</button>
</div>
</div>
</div>
<!-- con -->
<div class="container zhuce">
<div class="reg_tab">
<div class="item dan active_dan">
续费
</div>
</div>
</div>
<div class="conDan">
<div class="row">
<div class="col-sm-5 col-xs-5">
IP产品账号
</div>
<div class="col-sm-7 col-xs-7 shuru">
<input type="text" v-model="OneBuyModel.Account" disabled />
</div>
</div>
@*<div class="row">
<div class="col-sm-5 col-xs-5">
IP账号密码
</div>
<div class="col-sm-7 col-xs-7 shuru">
<input type="text" v-model="OneBuyModel.Pwd" />
</div>
</div>*@
<div class="row">
<div class="col-sm-5 col-xs-5">
连接数:
</div>
<div class="col-sm-7 col-xs-7">
<div class="jiajian">
<div class="item">
</div>
<div class="item">
<span>{{OneBuyModel.ConnectCount}}</span>
</div>
<div class="item">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
选择优惠券:
</div>
<div class="col-sm-7 col-xs-7 select">
<select class="chooseYhq" v-model="OneBuyModel.CouponId">
<option value="0">请选择优惠券</option>
<option v-for="item in Coupons" :value="item.Id">{{item.Name}}</option>
</select>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
余额:
</div>
<div class="col-sm-7 col-xs-7">
<div class="">
当前账户余额<span class="blueText">@(userEntity.RestAmount)</span>元
<a href="/User/Index">前往充值</a>
</div>
</div>
</div>
<div class="row" v-if="showPayType">
<div class="col-sm-5 col-xs-5">
支付方式:
</div>
<div class="col-sm-7 col-xs-7 pay">
<div class="radio" v-on:click="OneBuyModel.OPayType=100">
<input id="zhifubaopay_s1" name="OPayType" type="radio" v-model="OneBuyModel.OPayType" value="100">
<label for="zhifubaopay_s1" class="radio-label"><img src="~/m/img/zfb.png"> 支付宝支付</label>
</div>
<div class="radio" v-on:click="OneBuyModel.OPayType=70">
<input id="weixinpay_s1" name="OPayType" type="radio" v-model="OneBuyModel.OPayType" value="70">
<label for="weixinpay_s1" class="radio-label"><img src="~/m/img/wx.png"> 微信支付</label>
</div>
<div class="radio" >
<input id="UseAccountAmount" name="OPayType" type="radio" v-model="OneBuyModel.UseAccountAmount" value="1">
<label for="UseAccountAmount" class="radio-label" style="line-height:150%"> 余额支付</label>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
总金额:
</div>
<div class="col-sm-7 col-xs-7">
<span>{{TotalAmount}}</span>元
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
应付款:
</div>
<div class="col-sm-7 col-xs-7">
<span class="yingfu" style="font-size: 35px;font-weight: bold;">{{PayAmount}}</span>元
</div>
</div>
<div class="row">
<div class="col-sm-5 col-xs-5">
</div>
<div class="col-sm-7 col-xs-7">
<p>{{auto_discount_text}}</p>
</div>
</div>
<p class="grayText songquan">淘宝每次下单获得优惠券</p>
<p class="grayText songquan" style="color:red">{{Tip}}</p>
<div class="ok">
<button type="button" class="pay-botton btnPay" v-on:click="onePay">确认支付</button>
</div>
</div>
</div>
<div id="aliPayBox" style="display:none"></div>
@section Scripts{
<script>
var productId =@(Model.Product.Id);
var app = new Vue({
el: '#app',
data: {
auto_discount_text:'',
showPayType: true,
Tip:'',
RestAmount: @(userEntity.RestAmount),
Coupons: [],
SelectCoupon: {},
OrderInfo: {},
OneBuyModel: {
Price:@(Model.Package.Price),
PackageId:@(Model.Package.Id),
OrderType: @ViewBag.orderType,
Account: '@ViewBag.accounts',
CouponAmount: 0,
Pwd: '',
ConnectCount: @(ViewBag.ConnectCount),
CouponId: 0,
UseAccountAmount: 0,
OPayType: 100,
PayChannel:40,
}
},
computed: {
TotalAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count;
return total.toFixed(2);
},
PayAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var restAmout = this.OneBuyModel.UseAccountAmount == 1 ? this.RestAmount : 0;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount ;
total= total < 0 ? 0 : total;
total = parseFloat(total.toFixed(2));
//最低价
var min_cost = @(Model.Package.MinPrice) * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount;
if(total<min_cost){
total = min_cost;
}
return total.toFixed(2);
}
},
watch: {
'OneBuyModel.CouponId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
var totalAmount = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount;
for (var i = 0; i < this.Coupons.length; i++) {
var item = this.Coupons[i];
if (totalAmount < item.AllowMinAmount) {
continue;
}
if (item.Id == newValue) {
if (item.CouponType == 1) {//满减
this.OneBuyModel.CouponAmount = item.CouponValue;
} else {
//亲 请勿非法操作呦^.^ 请按照正常的流程操作 我们后台是有记录滴
if($(".kaci").text() == '天卡'){
this.OneBuyModel.CouponAmount = totalAmount * item.CouponValue * 0.1;
} else {
alert('非天卡无效');
this.OneBuyModel.CouponId = '0';
}
}
return;
} else {
this.OneBuyModel.CouponAmount = 0;
}
}
},
immediate: true
},
'OneBuyModel.OPayType': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
var wx = 10;
if (isWeiXin()) wx = 20;
this.OneBuyModel.PayChannel = newValue == 70 ? wx : 40;
},
immediate: true
}
},
mounted: function () {
if (isWeiXin()) {
this.OneBuyModel.PayChannel = 20;
this.OneBuyModel.OPayType = 70;
this.showPayType = false;
}
this.getCoupons();
},
methods: {
getCoupons: function () {
var that = this;
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
console.log(res);
if (res.Code == 10000) {
that.Coupons = res.Data.map(m => m.Coupon);
}
}
})
},
onePay: function () {
$(".pay-botton").hide();
if (this.OneBuyModel.UseAccountAmount) {
if (this.RestAmount < this.PayAmount){
alert('余额不足,请充值。您也可以使用微信、支付宝支付。');return;
} else {
this.RestAmount = this.RestAmount - this.PayAmount;
}
}
var that = this;
if (this.OneBuyModel.UseAccountAmount === true) this.OneBuyModel.UseAccountAmount = 1;
if (this.OneBuyModel.UseAccountAmount === false) this.OneBuyModel.UseAccountAmount = 0;
var that = this;
showPayWait();
$.ajax({
type: 'POST',
url: '/product/CreateOrder',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(this.OneBuyModel),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
hidePayWait();
that.payCallback(res.Data)
//that.isPay(res.Data.OrderInfo.OrderNo);
} else {
//that.Tip = res.Message;
tipPayWait(res.Message);
}
}
});
},
payCallback: function (data) {
this.OrderInfo = data.OrderInfo;
if (!data.PayData) { alert("下单成功"); return; }
var payChannel = this.OrderInfo.PayChannel;
if (payChannel == 10) {
this.h5WxPay(data.PayData)
} else if (payChannel == 20) {
this.jsWxPay(data.PayData);
} else if (payChannel == 40) {
this.aliPay(data.PayData);
}
},
h5WxPay(payData) {
window.location.href = payData;
},
jsWxPay(payData) {
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
JSON.parse(payData),
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
window.location.href = "/User/MyAccounts";
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
} else {
alert("支付失败" + res.err_msg);
}
});
},
aliPay(payData) {
$("#aliPayBox").html(payData);
},
isPay: function (orderNo) {
var handler = setInterval(function () {
var url = '/product/IsPay?orderNo=' + orderNo;
$.ajax({
type: 'GET',
url: url,
success: function (res) {
if (res.Code == 10000 && res.Data == 1) {
clearInterval(handler);
// $(".payMask").hide();
window.location.href = "/user/myaccounts";
}
}
})
}, 3000)
}
}
})
</script>
}

View File

@@ -1,35 +1,35 @@
@using Hncore.Infrastructure.Extension
@model ViewComponents.PagerModel
@{
Model.PageIndex = Model.PageIndex == 0 ? 1 : Model.PageIndex;
var q = this.Context.Request.Remove("PageIndex");
if (string.IsNullOrEmpty(q))
{
q = "?";
}
else
{
q += "&";
}
}
@if (Model.TotalPage > 1)
{
<ul class="pagination">
@if (Model.PageIndex > 1)
{
string href = $"{q}PageIndex={Model.PageIndex - 1}";
<li class="page-item"><a class="page-link" href="@href">上一页</a></li>
}
@for (var i = 1; i <= Model.TotalPage; i++)
{
<li class="page-item"><a class="page-link @(Model.PageIndex==i?"fenyeActive2":"")" href="@(q)PageIndex=@i">@i</a></li>
}
@if (Model.PageIndex < Model.TotalPage)
{
string href = $"{q}PageIndex={Model.PageIndex + 1}";
<li class="page-item"><a class="page-link" href="@href">下一页</a></li>
}
</ul>
}
@using Hncore.Infrastructure.Extension
@model ViewComponents.PagerModel
@{
Model.PageIndex = Model.PageIndex == 0 ? 1 : Model.PageIndex;
var q = this.Context.Request.Remove("PageIndex");
if (string.IsNullOrEmpty(q))
{
q = "?";
}
else
{
q += "&";
}
}
@if (Model.TotalPage > 1)
{
<ul class="pagination">
@if (Model.PageIndex > 1)
{
string href = $"{q}PageIndex={Model.PageIndex - 1}";
<li class="page-item"><a class="page-link" href="@href">上一页</a></li>
}
@for (var i = 1; i <= Model.TotalPage; i++)
{
<li class="page-item"><a class="page-link @(Model.PageIndex==i?"fenyeActive2":"")" href="@(q)PageIndex=@i">@i</a></li>
}
@if (Model.PageIndex < Model.TotalPage)
{
string href = $"{q}PageIndex={Model.PageIndex + 1}";
<li class="page-item"><a class="page-link" href="@href">下一页</a></li>
}
</ul>
}

View File

@@ -1,79 +1,79 @@
<style>
/* 支付等待弹窗开始 */
.paywait {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
.errorTip{
margin-top:30px;
color:red;
}
/* 支付等待弹窗结束 */
</style>
<!-- 支付等待 -->
<div class="paywait">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/paywait.png">
</div>
<div class="row plFour">
<div class="col-lg-12 text-center loadingBox">
<img src="~/img/loading.gif" style="width:100px;height:20px">
<p>账号检测中请耐心等待</p>
</div>
<div class="col-lg-12 text-center errorTip">
</div>
</div>
</div>
<script>
function showPayWait() {
$(".popmask").show()
$(".paywait").show();
$(".loadingBox").show();
$(".errorTip").text("");
}
function hidePayWait() {
$(".popmask").hide()
$(".paywait").hide();
}
function tipPayWait(info) {
showPayWait();
$(".loadingBox").hide();
$(".errorTip").text(info)
}
$(".plClose").on("click", function () { hidePayWait() })
</script>
<!-- 支付等待弹窗结束 -->
<style>
/* 支付等待弹窗开始 */
.paywait {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
.errorTip{
margin-top:30px;
color:red;
}
/* 支付等待弹窗结束 */
</style>
<!-- 支付等待 -->
<div class="paywait">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/paywait.png">
</div>
<div class="row plFour">
<div class="col-lg-12 text-center loadingBox">
<img src="~/img/loading.gif" style="width:100px;height:20px">
<p>账号检测中请耐心等待</p>
</div>
<div class="col-lg-12 text-center errorTip">
</div>
</div>
</div>
<script>
function showPayWait() {
$(".popmask").show()
$(".paywait").show();
$(".loadingBox").show();
$(".errorTip").text("");
}
function hidePayWait() {
$(".popmask").hide()
$(".paywait").hide();
}
function tipPayWait(info) {
showPayWait();
$(".loadingBox").hide();
$(".errorTip").text(info)
}
$(".plClose").on("click", function () { hidePayWait() })
</script>
<!-- 支付等待弹窗结束 -->

View File

@@ -1,44 +1,44 @@
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@using Hncore.Infrastructure.Common
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@inject UserService m_UserService
@{
var act = this.Context.Request.Get("act");
var WxAppId = m_Configuration["WxApps:AppID"];
var BaseUrl = m_Configuration["Service_BaseUrl"];
var requestUrl =this.Context.Request.GetUrl().UrlEncode();
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
@if (user == null)
{
<script>
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger')!=-1) {
return true;
} else {
return false;
}
}
if (!isWeiXin() || "login" =="@act") {
window.location.href = "/User/WebLogin?redirect=@requestUrl";
} else {
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl=@requestUrl";
}
</script>
}
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@using Hncore.Infrastructure.Common
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@inject UserService m_UserService
@{
var act = this.Context.Request.Get("act");
var WxAppId = m_Configuration["WxApps:AppID"];
var BaseUrl = m_Configuration["Service_BaseUrl"];
var requestUrl =this.Context.Request.GetUrl().UrlEncode();
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
@if (user == null)
{
<script>
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger')!=-1) {
return true;
} else {
return false;
}
}
if (!isWeiXin() || "login" =="@act") {
window.location.href = "/User/WebLogin?redirect=@requestUrl";
} else {
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl=@requestUrl";
}
</script>
}

View File

@@ -1,25 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@@ -1,25 +1,25 @@
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
Use this space to summarize your privacy and cookie use policy. <a asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
<span aria-hidden="true">Accept</span>
</button>
</div>
<script>
(function () {
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
button.addEventListener("click", function (event) {
document.cookie = button.dataset.cookieString;
}, false);
})();
</script>
}
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
Use this space to summarize your privacy and cookie use policy. <a asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
<span aria-hidden="true">Accept</span>
</button>
</div>
<script>
(function () {
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
button.addEventListener("click", function (event) {
document.cookie = button.dataset.cookieString;
}, false);
})();
</script>
}

View File

@@ -1,221 +1,221 @@
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var url_s = this.Context.Request.Path;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta content="yes" name="apple-touch-fullscreen" />
<meta content="telephone=no,email=no" name="format-detection" />
<meta content="maximum-dpr=2" name="flexible" />
@if(url_s == "/product/index"){
<meta name="Keywords" Content="动态ip代理软件,动态代理ip">
<meta name="Description" Content="聚IP助力企业开工全部动态ip代理软件、动态代理ip等产品量大从优一对一专人客服指导。">
<title>动态ip代理软件_动态代理ip-聚IP</title>
}
else if(url_s == "/LineList/index"){
<meta name="Keywords" Content="l2tp,sstp,pptp,IP线路表">
<meta name="Description" Content="聚IP全部线路表API接口五分钟更新一次确保l2tp、sstp、pptp等IP线路流畅。">
<title>l2tp_sstp_pptp_IP线路表-聚IP</title>
}
else if(url_s == "/product/soft"){
<meta name="Keywords" Content="电脑换ip软件,自动换ip软件">
<meta name="Description" Content="聚IP支持电脑换ip软件、自动换ip软件下载。">
<title>电脑换ip软件_自动换ip软件下载-聚IP</title>
}
else if(url_s == "/article/index"){
<meta name="Keywords" Content="换ip的软件,动态ip代理,教程&咨询">
<meta name="Description" Content="聚IP提供换ip的软件、动态ip代理等详细教程在线指导。">
<title>换ip的软件_动态ip代理_教程&咨询-聚IP</title>
}
else {
<meta name="Keywords" Content="动态ip软件,动态代理ip,sstp,换ip的软件,电脑换ip软件,pptp,L2TP,动态ip代理,动态ip,自动换ip软件">
<meta name="Description" Content="聚IP提供动态代理ip、电脑换ip软件、自动换ip软件、sstp、pptp及L2TP代理服务全国多个城市几十种动态ip任您选择高品质ip资源期待与您合作。">
<title>动态代理ip_电脑换ip软件_自动换ip软件_sstp_pptp_L2TP-聚IP</title>
}
<link rel="stylesheet" type="text/css" href="~/m/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/bootstrap.css" />
<link rel="Shortcut Icon" href="/img/favicon.ico" type="image/x-icon" />
<script src="~/m/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
<script src="~/js/vue.js"></script>
<script src="~/m/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/m/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$.ajaxSetup({
complete: function (XMLHttpRequest, textStatus) {
console.log(textStatus);
//var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (textStatus == "parsererror") {
//如果超时就处理 ,指定要跳转的页面(比如登陆页)
window.location.href="/user/weblogin"
}
}
});
$(function () {
$(".btnNav").click(function () {
$(".mask").fadeIn();
console.log(1)
});
$(".btnClose").click(function () {
$(".mask").fadeOut();
console.log(2)
});
$(".on_q").click(function () {
$(".side_q").toggle();
});
//$(".item_on_q").mouseover(function () {
// $(".side_q").stop().show();
//});
//$(".item_on_q").mouseleave(function () {
// $(".side_q").stop().hide();
//});
//$(".on_wx").click(function () {
// $(".side_kefu").toggle();
//});
$(".item_on_wx").mouseover(function () {
$(".side_kefu").stop().fadeIn();
});
$(".item_on_wx").mouseleave(function () {
$(".side_kefu").stop().fadeOut();
});
$(".on_gzh").mouseover(function () {
$(".side_gzh").stop().fadeIn();
});
$(".on_gzh").mouseleave(function () {
$(".side_gzh").stop().fadeOut();
});
$(".on_tel").mouseover(function () {
$(".side_tel").stop().fadeIn();
});
$(".on_tel").mouseleave(function () {
$(".side_tel").stop().fadeOut();
});
})
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') != -1) {
return true;
} else {
return false;
}
}
</script>
</head>
<body>
<div class="popmask"></div>
<div class="sideBar">
<div class="item item_on_q">
<a href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true" target="_blank">
<img src="~/img/qq.png" class="on_q"> <div class="kefu_tit">QQ</div>
</a>
</div>
<div class="item item_on_wx">
<a href="https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f" style="color: #0862fe;">
<img src="~/img/weixin.png" class="on_wx"><div class="kefu_tit">微信</div>
</a>
</div>
<div class="item">
<img src="~/img/gzh.png" class="on_gzh"><div class="kefu_tit">公众号</div>
<div class="side_gzh">
<p><img src="~/img/ewm.png"></p>
<p style="color:#f90">实时响应 在线时间 8:30-23:00</p>
<p style="color:#f90">关注公众号可获取免费的到期提醒服务</p>
</div>
</div>
<div class="item">
<img src="~/img/tel.png" class="on_tel"><div class="kefu_tit">电话</div>
<div class="side_tel">
<p><b>400 800 9925</b></p>
<p>实时接通</p>
<p>电话值班时间 8:30-23:00</p>
</div>
</div>
<div class="item">
<a href="#top"><img src="~/img/top.png"></a>
</div>
</div>
<!-- 弹窗导航 -->
<div class="mask">
<ul class="layNav">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a> </li>
<li><a asp-action="index" asp-controller="LineList" asp-route-Catalog="1">线路表</a> </li>
<li><a asp-action="soft" asp-controller="product">软件下载</a> </li>
<li><a asp-action="index" asp-controller="article">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
@* <li><a asp-action="taobao" asp-controller="article">淘宝充值活动</a></li> *@
@if (user != null)
{
<li><a asp-action="index" asp-controller="user">个人中心</a></li>
<li><a asp-action="LoginOut" asp-controller="user">退出</a></li>
}
else
{
<li><a asp-action="WebLogin" asp-controller="user">登录</a></li>
}
<li><img src="~/m/img/close.png" class="btnClose"></li>
</ul>
</div>
<div class="mynav">
<div class="item">
<img src="~/m/img/back.png" onclick="history.go(-1)">
</div>
<div class="item mlogo">
<img src="~/m/img/logo.png">
</div>
<div class="item">
<img src="~/m/img/nav.png" class="btnNav">
</div>
</div>
@RenderBody()
@RenderSection("Scripts", required: false)
<!-- WPA start -->
@* <script id="qd28521381485d6faa97edf5ad07d7e159f6cb902af0" src="https://wp.qiye.qq.com/qidian/2852138148/5d6faa97edf5ad07d7e159f6cb902af0" charset="utf-8" async defer></script> *@
<!-- WPA end -->
<div data-toggle="popovers" data-html="true" data-content="<div style='font-size:2em;'><p><a style='color: #0862fe;' href='https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true' target='_blank'>
<img style='width:1.5em;' src='/img/q.png'> QQ在线客服
</a><p><a href='https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f' style='color: #0862fe;'><img src='/img/weixin.png' style='background-color:green;width:1.5em;'> 微信在线客服</a></p></div>" data-placement="top" class="row" id="djkf" style="background-color: white; width:300px;height:85px;position: fixed;z-index: 2000000000;bottom: 200px;right: 0px;cursor:pointer;">
<style>
.top{
padding: 0;
}
</style>
<div class="col-xs-4" style="padding:0;">
<img width="85" src="http://p.qpic.cn/qidian_pic/2852138148/2020071743d6537e611d9ff953f27cbb7430dbe7/0"/>
</div>
<div class="col-xs-8 " style="padding:0;">
<h4><span class="glyphicon glyphicon-user" style="padding:10px 0 0 5px;color:#12b7f5;"></span>在线咨询</h4>
<p style="padding:5px 0 0 10px;">8:30-23:00</p>
</div>
<script>$(function () { $("[data-toggle='popovers']").popover(); });</script>
</div>
</body>
</html>
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var url_s = this.Context.Request.Path;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta content="yes" name="apple-touch-fullscreen" />
<meta content="telephone=no,email=no" name="format-detection" />
<meta content="maximum-dpr=2" name="flexible" />
@if(url_s == "/product/index"){
<meta name="Keywords" Content="动态ip代理软件,动态代理ip">
<meta name="Description" Content="聚IP助力企业开工全部动态ip代理软件、动态代理ip等产品量大从优一对一专人客服指导。">
<title>动态ip代理软件_动态代理ip-聚IP</title>
}
else if(url_s == "/LineList/index"){
<meta name="Keywords" Content="l2tp,sstp,pptp,IP线路表">
<meta name="Description" Content="聚IP全部线路表API接口五分钟更新一次确保l2tp、sstp、pptp等IP线路流畅。">
<title>l2tp_sstp_pptp_IP线路表-聚IP</title>
}
else if(url_s == "/product/soft"){
<meta name="Keywords" Content="电脑换ip软件,自动换ip软件">
<meta name="Description" Content="聚IP支持电脑换ip软件、自动换ip软件下载。">
<title>电脑换ip软件_自动换ip软件下载-聚IP</title>
}
else if(url_s == "/article/index"){
<meta name="Keywords" Content="换ip的软件,动态ip代理,教程&咨询">
<meta name="Description" Content="聚IP提供换ip的软件、动态ip代理等详细教程在线指导。">
<title>换ip的软件_动态ip代理_教程&咨询-聚IP</title>
}
else {
<meta name="Keywords" Content="动态ip软件,动态代理ip,sstp,换ip的软件,电脑换ip软件,pptp,L2TP,动态ip代理,动态ip,自动换ip软件">
<meta name="Description" Content="聚IP提供动态代理ip、电脑换ip软件、自动换ip软件、sstp、pptp及L2TP代理服务全国多个城市几十种动态ip任您选择高品质ip资源期待与您合作。">
<title>动态代理ip_电脑换ip软件_自动换ip软件_sstp_pptp_L2TP-聚IP</title>
}
<link rel="stylesheet" type="text/css" href="~/m/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/bootstrap.css" />
<link rel="Shortcut Icon" href="/img/favicon.ico" type="image/x-icon" />
<script src="~/m/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
<script src="~/js/vue.js"></script>
<script src="~/m/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/m/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$.ajaxSetup({
complete: function (XMLHttpRequest, textStatus) {
console.log(textStatus);
//var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (textStatus == "parsererror") {
//如果超时就处理 ,指定要跳转的页面(比如登陆页)
window.location.href="/user/weblogin"
}
}
});
$(function () {
$(".btnNav").click(function () {
$(".mask").fadeIn();
console.log(1)
});
$(".btnClose").click(function () {
$(".mask").fadeOut();
console.log(2)
});
$(".on_q").click(function () {
$(".side_q").toggle();
});
//$(".item_on_q").mouseover(function () {
// $(".side_q").stop().show();
//});
//$(".item_on_q").mouseleave(function () {
// $(".side_q").stop().hide();
//});
//$(".on_wx").click(function () {
// $(".side_kefu").toggle();
//});
$(".item_on_wx").mouseover(function () {
$(".side_kefu").stop().fadeIn();
});
$(".item_on_wx").mouseleave(function () {
$(".side_kefu").stop().fadeOut();
});
$(".on_gzh").mouseover(function () {
$(".side_gzh").stop().fadeIn();
});
$(".on_gzh").mouseleave(function () {
$(".side_gzh").stop().fadeOut();
});
$(".on_tel").mouseover(function () {
$(".side_tel").stop().fadeIn();
});
$(".on_tel").mouseleave(function () {
$(".side_tel").stop().fadeOut();
});
})
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') != -1) {
return true;
} else {
return false;
}
}
</script>
</head>
<body>
<div class="popmask"></div>
<div class="sideBar">
<div class="item item_on_q">
<a href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true" target="_blank">
<img src="~/img/qq.png" class="on_q"> <div class="kefu_tit">QQ</div>
</a>
</div>
<div class="item item_on_wx">
<a href="https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f" style="color: #0862fe;">
<img src="~/img/weixin.png" class="on_wx"><div class="kefu_tit">微信</div>
</a>
</div>
<div class="item">
<img src="~/img/gzh.png" class="on_gzh"><div class="kefu_tit">公众号</div>
<div class="side_gzh">
<p><img src="~/img/ewm.png"></p>
<p style="color:#f90">实时响应 在线时间 8:30-23:00</p>
<p style="color:#f90">关注公众号可获取免费的到期提醒服务</p>
</div>
</div>
<div class="item">
<img src="~/img/tel.png" class="on_tel"><div class="kefu_tit">电话</div>
<div class="side_tel">
<p><b>400 800 9925</b></p>
<p>实时接通</p>
<p>电话值班时间 8:30-23:00</p>
</div>
</div>
<div class="item">
<a href="#top"><img src="~/img/top.png"></a>
</div>
</div>
<!-- 弹窗导航 -->
<div class="mask">
<ul class="layNav">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a> </li>
<li><a asp-action="index" asp-controller="LineList" asp-route-Catalog="1">线路表</a> </li>
<li><a asp-action="soft" asp-controller="product">软件下载</a> </li>
<li><a asp-action="index" asp-controller="article">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
@* <li><a asp-action="taobao" asp-controller="article">淘宝充值活动</a></li> *@
@if (user != null)
{
<li><a asp-action="index" asp-controller="user">个人中心</a></li>
<li><a asp-action="LoginOut" asp-controller="user">退出</a></li>
}
else
{
<li><a asp-action="WebLogin" asp-controller="user">登录</a></li>
}
<li><img src="~/m/img/close.png" class="btnClose"></li>
</ul>
</div>
<div class="mynav">
<div class="item">
<img src="~/m/img/back.png" onclick="history.go(-1)">
</div>
<div class="item mlogo">
<img src="~/m/img/logo.png">
</div>
<div class="item">
<img src="~/m/img/nav.png" class="btnNav">
</div>
</div>
@RenderBody()
@RenderSection("Scripts", required: false)
<!-- WPA start -->
@* <script id="qd28521381485d6faa97edf5ad07d7e159f6cb902af0" src="https://wp.qiye.qq.com/qidian/2852138148/5d6faa97edf5ad07d7e159f6cb902af0" charset="utf-8" async defer></script> *@
<!-- WPA end -->
<div data-toggle="popovers" data-html="true" data-content="<div style='font-size:2em;'><p><a style='color: #0862fe;' href='https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true' target='_blank'>
<img style='width:1.5em;' src='/img/q.png'> QQ在线客服
</a><p><a href='https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f' style='color: #0862fe;'><img src='/img/weixin.png' style='background-color:green;width:1.5em;'> 微信在线客服</a></p></div>" data-placement="top" class="row" id="djkf" style="background-color: white; width:300px;height:85px;position: fixed;z-index: 2000000000;bottom: 200px;right: 0px;cursor:pointer;">
<style>
.top{
padding: 0;
}
</style>
<div class="col-xs-4" style="padding:0;">
<img width="85" src="http://p.qpic.cn/qidian_pic/2852138148/2020071743d6537e611d9ff953f27cbb7430dbe7/0"/>
</div>
<div class="col-xs-8 " style="padding:0;">
<h4><span class="glyphicon glyphicon-user" style="padding:10px 0 0 5px;color:#12b7f5;"></span>在线咨询</h4>
<p style="padding:5px 0 0 10px;">8:30-23:00</p>
</div>
<script>$(function () { $("[data-toggle='popovers']").popover(); });</script>
</div>
</body>
</html>

View File

@@ -1,86 +1,86 @@
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta content="yes" name="apple-touch-fullscreen" />
<meta content="telephone=no,email=no" name="format-detection" />
<meta content="maximum-dpr=2" name="flexible" />
<title>聚IP JUIP.COM-产品购买</title>
<link rel="stylesheet" type="text/css" href="~/m/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/bootstrap.css" />
<link href="~/m/css/LCalendar.css" rel="stylesheet" />
<link rel="Shortcut Icon" href="/img/favicon.ico" type="image/x-icon" />
<script src="~/m/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
<script src="~/js/vue.js"></script>
<script src="~/m/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/m/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function () {
$(".btnNav").click(function () {
$(".mask").fadeIn();
console.log(1)
});
$(".btnClose").click(function () {
$(".mask").fadeOut();
console.log(2)
})
})
</script>
</head>
<body>
<vc:redirecct-login></vc:redirecct-login>
<!-- 弹窗导航 -->
<div class="mask">
<ul class="layNav">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a> </li>
<li><a asp-action="index" asp-controller="LineList">线路表</a> </li>
<li><a asp-action="soft" asp-controller="product">软件下载</a> </li>
<li><a asp-action="index" asp-controller="article">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
<li>
@if (user != null)
{
<a asp-action="index" asp-controller="user">个人中心</a>
}
else
{
<a asp-action="WebLogin" asp-controller="user">登录</a>
}
</li>
<li><img src="~/m/img/close.png" class="btnClose"></li>
</ul>
</div>
<div class="mynav">
<div class="item">
<img src="~/m/img/back.png" onclick="history.go(-1)">
</div>
<div class="item">
<img src="~/m/img/logo.png">
</div>
<div class="item">
<img src="~/m/img/nav.png" class="btnNav">
</div>
</div>
@RenderBody()
@RenderSection("Scripts", required: false)
</body>
</html>
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta content="yes" name="apple-touch-fullscreen" />
<meta content="telephone=no,email=no" name="format-detection" />
<meta content="maximum-dpr=2" name="flexible" />
<title>聚IP JUIP.COM-产品购买</title>
<link rel="stylesheet" type="text/css" href="~/m/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/m/css/bootstrap.css" />
<link href="~/m/css/LCalendar.css" rel="stylesheet" />
<link rel="Shortcut Icon" href="/img/favicon.ico" type="image/x-icon" />
<script src="~/m/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
<script src="~/js/vue.js"></script>
<script src="~/m/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/m/js/bootstrap.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function () {
$(".btnNav").click(function () {
$(".mask").fadeIn();
console.log(1)
});
$(".btnClose").click(function () {
$(".mask").fadeOut();
console.log(2)
})
})
</script>
</head>
<body>
<vc:redirecct-login></vc:redirecct-login>
<!-- 弹窗导航 -->
<div class="mask">
<ul class="layNav">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a> </li>
<li><a asp-action="index" asp-controller="LineList">线路表</a> </li>
<li><a asp-action="soft" asp-controller="product">软件下载</a> </li>
<li><a asp-action="index" asp-controller="article">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
<li>
@if (user != null)
{
<a asp-action="index" asp-controller="user">个人中心</a>
}
else
{
<a asp-action="WebLogin" asp-controller="user">登录</a>
}
</li>
<li><img src="~/m/img/close.png" class="btnClose"></li>
</ul>
</div>
<div class="mynav">
<div class="item">
<img src="~/m/img/back.png" onclick="history.go(-1)">
</div>
<div class="item">
<img src="~/m/img/logo.png">
</div>
<div class="item">
<img src="~/m/img/nav.png" class="btnNav">
</div>
</div>
@RenderBody()
@RenderSection("Scripts", required: false)
</body>
</html>

View File

@@ -1,18 +1,18 @@
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>

View File

@@ -1,60 +1,60 @@
@{
Layout = "_Layout";
}
<div id="app" style="margin-top: 10%;">
<table class="table">
<caption>提现管理</caption>
<thead>
<tr>
<th>提现金额</th>
<th>支付宝账号</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr v-for="info in tableData">
<td>{{info.money}}</td>
<td>{{info.alipay_account}}</td>
<td>{{info.status}}</td>
</tr>
</tbody>
</table>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
tableData: [],
},
created:function(){
this.post();
},
methods:{
post:function(){
var param = [];
let cashOutData = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/order/CashOutIndex/getData',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(cashOutData),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == 10000) {
param = res.data;
}
}
});
this.tableData = param;
}
}
});
@{
Layout = "_Layout";
}
<div id="app" style="margin-top: 10%;">
<table class="table">
<caption>提现管理</caption>
<thead>
<tr>
<th>提现金额</th>
<th>支付宝账号</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr v-for="info in tableData">
<td>{{info.money}}</td>
<td>{{info.alipay_account}}</td>
<td>{{info.status}}</td>
</tr>
</tbody>
</table>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
tableData: [],
},
created:function(){
this.post();
},
methods:{
post:function(){
var param = [];
let cashOutData = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/order/CashOutIndex/getData',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(cashOutData),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == 10000) {
param = res.data;
}
}
});
this.tableData = param;
}
}
});
</script>

View File

@@ -1,81 +1,81 @@
@using Home.Models
@model UserHomeModel
@{
Layout = "_Layout";
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">找回密码</p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="username" value="" placeholder="手机号" /></p>
<p><img src="~/m/img/password.png"><input type="text" name="" id="password" value="" placeholder="请输入新密码" /></p>
<p class="yzm"><img src="~/m/img/yanzhengma.png"><input type="text" name="" id="yanzhengma" value="" placeholder="验证码" /><button type="button" class="btnBlue" onclick="getCode(this)">获取验证码</button></p>
</div>
<p><button type="button" class="btnLogin" onclick="reg()">找回密码</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">已有账号?<a asp-action="WebLogin" asp-controller="User">立即登录</a></p>
</div>
<script>
var time = 60;
function getCode(_self) {
var name = $("#username").val()
if(name == '') { alert('手机号不能为空'); return; }
if (!timing(_self)) return;
var url = '/User/SendPhoneCodevefy?key=FindUser_Code&phone=' + name;
$.ajax({
type: 'POST',
url: url,
contentType: "application/json",
success: function (res) {
alert(res.Message)
//if (res.Code == 10000) {
// alert(res.Message)
//}
}
});
}
function timing(_self) {
if (time != 60) return false
var timerHandler = setInterval(function () {
time--;
if (time <= 1) {
clearInterval(timerHandler);
time = 60;
$(_self).text("获取验证码")
} else {
$(_self).text(time + "s");
}
}, 1000)
return true;
}
function reg() {
var name = $("#username").val()
var pwd = $("#password").val()
var code = $("#yanzhengma").val()
if (name == '') { alert('手机号不能为空'); return; }
if (code == '') { alert('验证码不能为空'); return; }
var data = { Phone: name, Pwd: pwd, Code: code };
$.ajax({
type: 'POST',
url: '/User/FindPwd',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("密码重置成功,请重新登录")
window.location.href="/User/WebLogin"
} else {
alert(res.Message)
}
}
});
}
@using Home.Models
@model UserHomeModel
@{
Layout = "_Layout";
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">找回密码</p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="username" value="" placeholder="手机号" /></p>
<p><img src="~/m/img/password.png"><input type="text" name="" id="password" value="" placeholder="请输入新密码" /></p>
<p class="yzm"><img src="~/m/img/yanzhengma.png"><input type="text" name="" id="yanzhengma" value="" placeholder="验证码" /><button type="button" class="btnBlue" onclick="getCode(this)">获取验证码</button></p>
</div>
<p><button type="button" class="btnLogin" onclick="reg()">找回密码</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">已有账号?<a asp-action="WebLogin" asp-controller="User">立即登录</a></p>
</div>
<script>
var time = 60;
function getCode(_self) {
var name = $("#username").val()
if(name == '') { alert('手机号不能为空'); return; }
if (!timing(_self)) return;
var url = '/User/SendPhoneCodevefy?key=FindUser_Code&phone=' + name;
$.ajax({
type: 'POST',
url: url,
contentType: "application/json",
success: function (res) {
alert(res.Message)
//if (res.Code == 10000) {
// alert(res.Message)
//}
}
});
}
function timing(_self) {
if (time != 60) return false
var timerHandler = setInterval(function () {
time--;
if (time <= 1) {
clearInterval(timerHandler);
time = 60;
$(_self).text("获取验证码")
} else {
$(_self).text(time + "s");
}
}, 1000)
return true;
}
function reg() {
var name = $("#username").val()
var pwd = $("#password").val()
var code = $("#yanzhengma").val()
if (name == '') { alert('手机号不能为空'); return; }
if (code == '') { alert('验证码不能为空'); return; }
var data = { Phone: name, Pwd: pwd, Code: code };
$.ajax({
type: 'POST',
url: '/User/FindPwd',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("密码重置成功,请重新登录")
window.location.href="/User/WebLogin"
} else {
alert(res.Message)
}
}
});
}
</script>

View File

@@ -1,62 +1,62 @@
@using Home.Models
@using Hncore.Pass.BaseInfo.Response
@model UserHomeModel
@{
Layout = "_Layout";
}
<vc:redirecct-login></vc:redirecct-login>
<div class="ptop">
<a class="pname">@Model.UserModel.LoginCode</a>
</div>
<ul class="plist">
<li><img src="~/m/img/p1.png"><a asp-action="indexInfo" asp-controller="user">个人信息<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a asp-action="myaccounts" asp-controller="user">IP账号管理<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a asp-action="mymoney" asp-controller="user">资金明细<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a href="/user/rosorder">软路由订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p1.png"><a asp-action="myorders" asp-controller="user">我的订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p2.png"><a asp-action="myrefundorders" asp-controller="user">退货订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p4.png"><a asp-action="mycoupons" asp-controller="user">我的优惠券&nbsp;<span style="background-color: red;font-size:25px;" class="badge" id="coupon_num"></span><img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p4.png"></span><a asp-action="cashout" asp-controller="user">提现管理<img src="~/m/img/arrow.png"></a></li>
</ul>
<script>
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
$("#coupon_num").text(res.Data.length);
}
})
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
var is_realname = getQueryString('realname');
if(is_realname){
let data = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
url: 'http://php-api.juip.com/api/test/aliGetResult',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
}
});
}
</script>
@using Home.Models
@using Hncore.Pass.BaseInfo.Response
@model UserHomeModel
@{
Layout = "_Layout";
}
<vc:redirecct-login></vc:redirecct-login>
<div class="ptop">
<a class="pname">@Model.UserModel.LoginCode</a>
</div>
<ul class="plist">
<li><img src="~/m/img/p1.png"><a asp-action="indexInfo" asp-controller="user">个人信息<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a asp-action="myaccounts" asp-controller="user">IP账号管理<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a asp-action="mymoney" asp-controller="user">资金明细<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p3.png"><a href="/user/rosorder">软路由订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p1.png"><a asp-action="myorders" asp-controller="user">我的订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p2.png"><a asp-action="myrefundorders" asp-controller="user">退货订单<img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p4.png"><a asp-action="mycoupons" asp-controller="user">我的优惠券&nbsp;<span style="background-color: red;font-size:25px;" class="badge" id="coupon_num"></span><img src="~/m/img/arrow.png"></a></li>
<li><img src="~/m/img/p4.png"></span><a asp-action="cashout" asp-controller="user">提现管理<img src="~/m/img/arrow.png"></a></li>
</ul>
<script>
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
$("#coupon_num").text(res.Data.length);
}
})
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
var is_realname = getQueryString('realname');
if(is_realname){
let data = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
url: 'http://php-api.juip.com/api/test/aliGetResult',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
}
});
}
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -1,73 +1,73 @@
@using Home.Models
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@model UserHomeModel
@{
Layout = "_Layout";
var BaseUrl = m_Configuration["Service_BaseUrl"];
var WxAppId = m_Configuration["WxApps:AppID"];
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">用户登录</p>
<p><span class="xinyonghu">新用户免费赠送3次测试机会</span></p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="rLogin_Name" value="" placeholder="淘宝名/会员手机号" /></p>
<p><img src="~/m/img/password.png"><input type="password" name="" id="rLogin_Pwd" value="" placeholder="密码" /></p>
</div>
<p>@*<span><input type="checkbox" name="" id="" value="" />自动登录</span>*@<span class="pull-right"><a asp-action="FindPwd" asp-controller="User">忘记密码?</a></span></p>
<p class="denglu"><button type="button" class="btnLogin" onclick="login()">登录</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">还没有账号?<a asp-action="Regist" asp-controller="User">立即注册</a></p>
</div>
<script>
var redirect = "@ViewBag.redirect" || "/user/index";
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
}
function login() {
var name = $("#rLogin_Name").val()
var pwd = $("#rLogin_Pwd").val()
var data = { Logincode: name, Password: pwd, Code: 1 };
$.ajax({
type: 'POST',
url: '/user/login',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
loginSuccess(res.Data.User)
} else {
alert(res.Message)
}
}
});
}
function loginSuccess(user) {
if (!isWeiXin()) {
window.location.href = redirect;
return;
}
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl=" + redirect + "&state=" + user.Id;
//if (!user.OpenId) {
//} else {
// window.location.href = "/User/Index";
//}
}
@using Home.Models
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@model UserHomeModel
@{
Layout = "_Layout";
var BaseUrl = m_Configuration["Service_BaseUrl"];
var WxAppId = m_Configuration["WxApps:AppID"];
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">用户登录</p>
<p><span class="xinyonghu">新用户免费赠送3次测试机会</span></p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="rLogin_Name" value="" placeholder="淘宝名/会员手机号" /></p>
<p><img src="~/m/img/password.png"><input type="password" name="" id="rLogin_Pwd" value="" placeholder="密码" /></p>
</div>
<p>@*<span><input type="checkbox" name="" id="" value="" />自动登录</span>*@<span class="pull-right"><a asp-action="FindPwd" asp-controller="User">忘记密码?</a></span></p>
<p class="denglu"><button type="button" class="btnLogin" onclick="login()">登录</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">还没有账号?<a asp-action="Regist" asp-controller="User">立即注册</a></p>
</div>
<script>
var redirect = "@ViewBag.redirect" || "/user/index";
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
}
function login() {
var name = $("#rLogin_Name").val()
var pwd = $("#rLogin_Pwd").val()
var data = { Logincode: name, Password: pwd, Code: 1 };
$.ajax({
type: 'POST',
url: '/user/login',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
loginSuccess(res.Data.User)
} else {
alert(res.Message)
}
}
});
}
function loginSuccess(user) {
if (!isWeiXin()) {
window.location.href = redirect;
return;
}
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl=" + redirect + "&state=" + user.Id;
//if (!user.OpenId) {
//} else {
// window.location.href = "/User/Index";
//}
}
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -1,68 +1,68 @@
@using Hncore.Pass.Sells.Model
@model List<UserCouponModel>
@{
Layout = "_UserLayout";
Func<UserCouponModel, string> format = (item) =>
{
if (item.IsExpired) return "已过期";
if (item.IsUsed) return "已使用";
return "可使用";
};
}
<div class="kong">
</div>
@foreach (var item in Model)
{
<div class="yhq">
@if (item.Coupon.CouponType == ECouponType.Discount)
{
<div class="item">
<span class="jiage">@(item.Coupon.CouponValue)折</span> <span class="zhuangtai">@format(item)</span>
</div>
}
@if (item.Coupon.CouponType == ECouponType.Minus)
{
<div class="item">
<span class="jiage">¥@(item.Coupon.CouponValue)</span><span class="zhuangtai">@format(item)</span>
</div>
}
<div class="item">
<p>@item.Coupon.Name</p>
<p>使用规则:<span>@(item.Coupon.AllowMinAmount > 0 ? $"满{item.Coupon.AllowMinAmount}元可用" : "无限制")</span></p>
<p>有效时间:<span>@(item.Orgin.StartTime.Value.ToString("yyyy.MM.dd"))至@(item.Orgin.EndTime.Value.ToString("yyyy.MM.dd"))</span></p>
<p>获取途径:<span>@(item.Orgin.Remark)</span></p>
</div>
</div>
}
@*<div class="yhq">
<div class="item">
<span class="jiage">¥6</span><span class="zhuangtai">可使用</span>
</div>
<div class="item">
<p>优惠券名称</p>
<p>使用规则:<span>无限制</span></p>
<p>有效时间:<span>2020.1.1至2020.3.1</span></p>
<p>获取途径:<span>淘宝下单赠送</span></p>
</div>
</div>
<div class="yhq gray">
<div class="item">
<span class="jiage">¥6</span><span class="zhuangtai">已使用</span>
</div>
<div class="item">
<p>优惠券名称</p>
<p>使用规则:<span>无限制</span></p>
<p>有效时间:<span>2020.1.1至2020.3.1</span></p>
<p>获取途径:<span>淘宝下单赠送</span></p>
</div>
</div>*@
@using Hncore.Pass.Sells.Model
@model List<UserCouponModel>
@{
Layout = "_UserLayout";
Func<UserCouponModel, string> format = (item) =>
{
if (item.IsExpired) return "已过期";
if (item.IsUsed) return "已使用";
return "可使用";
};
}
<div class="kong">
</div>
@foreach (var item in Model)
{
<div class="yhq">
@if (item.Coupon.CouponType == ECouponType.Discount)
{
<div class="item">
<span class="jiage">@(item.Coupon.CouponValue)折</span> <span class="zhuangtai">@format(item)</span>
</div>
}
@if (item.Coupon.CouponType == ECouponType.Minus)
{
<div class="item">
<span class="jiage">¥@(item.Coupon.CouponValue)</span><span class="zhuangtai">@format(item)</span>
</div>
}
<div class="item">
<p>@item.Coupon.Name</p>
<p>使用规则:<span>@(item.Coupon.AllowMinAmount > 0 ? $"满{item.Coupon.AllowMinAmount}元可用" : "无限制")</span></p>
<p>有效时间:<span>@(item.Orgin.StartTime.Value.ToString("yyyy.MM.dd"))至@(item.Orgin.EndTime.Value.ToString("yyyy.MM.dd"))</span></p>
<p>获取途径:<span>@(item.Orgin.Remark)</span></p>
</div>
</div>
}
@*<div class="yhq">
<div class="item">
<span class="jiage">¥6</span><span class="zhuangtai">可使用</span>
</div>
<div class="item">
<p>优惠券名称</p>
<p>使用规则:<span>无限制</span></p>
<p>有效时间:<span>2020.1.1至2020.3.1</span></p>
<p>获取途径:<span>淘宝下单赠送</span></p>
</div>
</div>
<div class="yhq gray">
<div class="item">
<span class="jiage">¥6</span><span class="zhuangtai">已使用</span>
</div>
<div class="item">
<p>优惠券名称</p>
<p>使用规则:<span>无限制</span></p>
<p>有效时间:<span>2020.1.1至2020.3.1</span></p>
<p>获取途径:<span>淘宝下单赠送</span></p>
</div>
</div>*@

View File

@@ -1,289 +1,289 @@
@using Hncore.Infrastructure.Data
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ProductOrderEntity>
@{
Layout = "_UserLayout";
Func<string, string> cut = word =>
{
if (word.Length > 15)
return word.Substring(0, 15) + "...";
return word;
};
}
<div id="app">
<form asp-action="myorders" asp-controller="user" method="get">
<div class="chaxun2">
<input type="text" v-model="searchModel.KeyWord" /><button type="button" class="btnOrange" v-on:click="search">查询</button>
</div>
<div class="row riqi">
<div class="col-sm-4 col-xs-4">
日期查询:
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="start_date" id="start_date" v-model="searchModel.BTime" placeholder="选择开始日期" readonly="readonly" />
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="end_date" id="end_date" v-model="searchModel.ETime" placeholder="选择结束日期" readonly="readonly" />
</div>
</div>
<div class="row shaixuan">
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.OrderType">
<option value="0">全部类型</option>
<option value="1">新开</option>
<option value="2">续费</option>
<option value="3">批量新开</option>
<option value="4">批量续费</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.ProductId">
<option value="0">全部产品</option>
<option v-for="item in productWithPackage" :value="item.Product.Id">{{item.Product.Name}}</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.PackageId">
<option value="0">全部套餐</option>
<option value="测试卡">测试卡</option>
<option value="天卡">天卡</option>
<option value="周卡">周卡</option>
<option value="月卡">月卡</option>
<option value="月卡(活动)">月卡(活动)</option>
<option value="双月卡(活动)">双月卡(活动)</option>
<option value="季卡">季卡</option>
<option value="季卡(活动)">季卡(活动)</option>
<option value="年卡">年卡</option>
</select>
</div>
</div>
</form>
<table border="0" cellspacing="0" cellpadding="0" class="orderTable">
<tr><th>类型</th><th>产品</th><th>套餐</th><th>详情</th></tr>
@foreach (var item in Model.List)
{
<tr>
<td>@item.OrderType.GetEnumDisplayName()</td>
<td>@item.ProductName</td>
<td>@item.PackageName</td>
<td>
<button type="button" class="btnXq toDetail" onclick="showDetail(this)"
a-date="@item.CreateTime.ToString("yyyy.MM.dd")"
a-orderno="@item.OrderNo"
a-ordertype="@item.OrderType.GetEnumDisplayName()"
a-product="@item.ProductName"
a-package="@item.PackageName"
a-price="@item.DayPrice"
a-conncount="@(item.AccountCount*item.ConnectCount)"
a-account="@item.Accounts"
a-orderamount="@item.OrderAmount"
a-couponamount="@item.CouponAmount"
a-payamount="@item.PaymentAmount">
详情
</button>
</td>
</tr>
}
</table>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>日期:</td>
<td>{{currentOrder.date}}</td>
</tr>
<tr>
<td>订单编号:</td>
<td>{{currentOrder.orderno}}</td>
</tr>
<tr>
<td>类型:</td>
<td>{{currentOrder.ordertype}}</td>
</tr>
<tr>
<td>产品:</td>
<td>{{currentOrder.product}}</td>
</tr>
<tr>
<td>套餐:</td>
<td>{{currentOrder.package}}</td>
</tr>
<tr>
<td>单价:</td>
<td>{{currentOrder.price}}</td>
</tr>
<tr>
<td>总连接数:</td>
<td>{{currentOrder.conncount}}</td>
</tr>
<tr>
<td>账号:</td>
<td>{{currentOrder.account}}</td>
</tr>
<tr>
<td>订单金额:</td>
<td>{{currentOrder.orderamount}}</td>
</tr>
<tr>
<td>优惠金额:</td>
<td>{{currentOrder.couponamount}}</td>
</tr>
<tr>
<td>实付金额:</td>
<td>{{currentOrder.payamount}}</td>
</tr>
</table>
<div class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script src="~/m/js/LCalendar.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
productWithPackage: [],
packages: [],
searchModel: {
OrderType:0,
ProductId:@this.Context.Request.GetInt("ProductId"),
PackageId:"0",
KeyWord:'',
BTime: '@this.Context.Request.Get("BTime")',
ETime: '@this.Context.Request.Get("ETime")',
},
oneAuthModel: {
ProductId: 0,
Account: "",
Pwd:""
},
mutilAuthModel: {
ProductId: 0,
Account: "",
Pwd: "",
StartNum: 0,
Count:0
},
currentOrder: {
date:"",
orderno:"",
ordertype:"",
product:"",
package:"",
price:"",
conncount:"",
account:"",
orderamount:"",
couponamount:"",
payamount:""
}
},
computed: {
},
watch: {
'searchModel.ProductId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
for (var i = 0; i < this.productWithPackage.length; i++) {
var item = this.productWithPackage[i];
if (item.Product.Id == newValue) {
this.packages = item.Packages
return;
}
}
},
immediate: true
}
},
created: function () {
this.getProducts();
},
methods: {
getProducts() {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/product/ProductWithPackage',
success: function (res) {
if (res.Code == 10000) {
that.productWithPackage = res.Data;
}
}
});
},
search() {
var ps = [];
this.searchModel.BTime = $("#BTime").val();
this.searchModel.ETime = $("#ETime").val();
for (var item in this.searchModel) {
var p = item + "=" + this.searchModel[item];
ps.push(p);
}
window.location.href = "?" + ps.join("&");
},
setOrderInfo(info) {
this.currentOrder = info;
}
}
})
function showDetail(_self) {
var currentOrder = {
date: $(_self).attr('a-date'),
orderno: $(_self).attr('a-orderno'),
ordertype: $(_self).attr('a-ordertype'),
product: $(_self).attr('a-product'),
package: $(_self).attr('a-package'),
price: $(_self).attr('a-price'),
conncount: $(_self).attr('a-conncount'),
account: $(_self).attr('a-account'),
orderamount: $(_self).attr('a-orderamount'),
couponamount: $(_self).attr('a-couponamount'),
payamount: $(_self).attr('a-payamount'),
}
app.setOrderInfo(currentOrder);
$(_self).show();
}
</script>
<script type="text/javascript">
var calendar = new LCalendar();
calendar.init({
'trigger': '#start_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
var calendar = new LCalendar();
calendar.init({
'trigger': '#end_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
$(".toDetail").click(function () {
showDetail($(this))
$(".layerTable").show();
});
$(".back").click(function () {
$(".layerTable").hide();
})
</script>
@using Hncore.Infrastructure.Data
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ProductOrderEntity>
@{
Layout = "_UserLayout";
Func<string, string> cut = word =>
{
if (word.Length > 15)
return word.Substring(0, 15) + "...";
return word;
};
}
<div id="app">
<form asp-action="myorders" asp-controller="user" method="get">
<div class="chaxun2">
<input type="text" v-model="searchModel.KeyWord" /><button type="button" class="btnOrange" v-on:click="search">查询</button>
</div>
<div class="row riqi">
<div class="col-sm-4 col-xs-4">
日期查询:
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="start_date" id="start_date" v-model="searchModel.BTime" placeholder="选择开始日期" readonly="readonly" />
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="end_date" id="end_date" v-model="searchModel.ETime" placeholder="选择结束日期" readonly="readonly" />
</div>
</div>
<div class="row shaixuan">
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.OrderType">
<option value="0">全部类型</option>
<option value="1">新开</option>
<option value="2">续费</option>
<option value="3">批量新开</option>
<option value="4">批量续费</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.ProductId">
<option value="0">全部产品</option>
<option v-for="item in productWithPackage" :value="item.Product.Id">{{item.Product.Name}}</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.PackageId">
<option value="0">全部套餐</option>
<option value="测试卡">测试卡</option>
<option value="天卡">天卡</option>
<option value="周卡">周卡</option>
<option value="月卡">月卡</option>
<option value="月卡(活动)">月卡(活动)</option>
<option value="双月卡(活动)">双月卡(活动)</option>
<option value="季卡">季卡</option>
<option value="季卡(活动)">季卡(活动)</option>
<option value="年卡">年卡</option>
</select>
</div>
</div>
</form>
<table border="0" cellspacing="0" cellpadding="0" class="orderTable">
<tr><th>类型</th><th>产品</th><th>套餐</th><th>详情</th></tr>
@foreach (var item in Model.List)
{
<tr>
<td>@item.OrderType.GetEnumDisplayName()</td>
<td>@item.ProductName</td>
<td>@item.PackageName</td>
<td>
<button type="button" class="btnXq toDetail" onclick="showDetail(this)"
a-date="@item.CreateTime.ToString("yyyy.MM.dd")"
a-orderno="@item.OrderNo"
a-ordertype="@item.OrderType.GetEnumDisplayName()"
a-product="@item.ProductName"
a-package="@item.PackageName"
a-price="@item.DayPrice"
a-conncount="@(item.AccountCount*item.ConnectCount)"
a-account="@item.Accounts"
a-orderamount="@item.OrderAmount"
a-couponamount="@item.CouponAmount"
a-payamount="@item.PaymentAmount">
详情
</button>
</td>
</tr>
}
</table>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>日期:</td>
<td>{{currentOrder.date}}</td>
</tr>
<tr>
<td>订单编号:</td>
<td>{{currentOrder.orderno}}</td>
</tr>
<tr>
<td>类型:</td>
<td>{{currentOrder.ordertype}}</td>
</tr>
<tr>
<td>产品:</td>
<td>{{currentOrder.product}}</td>
</tr>
<tr>
<td>套餐:</td>
<td>{{currentOrder.package}}</td>
</tr>
<tr>
<td>单价:</td>
<td>{{currentOrder.price}}</td>
</tr>
<tr>
<td>总连接数:</td>
<td>{{currentOrder.conncount}}</td>
</tr>
<tr>
<td>账号:</td>
<td>{{currentOrder.account}}</td>
</tr>
<tr>
<td>订单金额:</td>
<td>{{currentOrder.orderamount}}</td>
</tr>
<tr>
<td>优惠金额:</td>
<td>{{currentOrder.couponamount}}</td>
</tr>
<tr>
<td>实付金额:</td>
<td>{{currentOrder.payamount}}</td>
</tr>
</table>
<div class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script src="~/m/js/LCalendar.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
productWithPackage: [],
packages: [],
searchModel: {
OrderType:0,
ProductId:@this.Context.Request.GetInt("ProductId"),
PackageId:"0",
KeyWord:'',
BTime: '@this.Context.Request.Get("BTime")',
ETime: '@this.Context.Request.Get("ETime")',
},
oneAuthModel: {
ProductId: 0,
Account: "",
Pwd:""
},
mutilAuthModel: {
ProductId: 0,
Account: "",
Pwd: "",
StartNum: 0,
Count:0
},
currentOrder: {
date:"",
orderno:"",
ordertype:"",
product:"",
package:"",
price:"",
conncount:"",
account:"",
orderamount:"",
couponamount:"",
payamount:""
}
},
computed: {
},
watch: {
'searchModel.ProductId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
for (var i = 0; i < this.productWithPackage.length; i++) {
var item = this.productWithPackage[i];
if (item.Product.Id == newValue) {
this.packages = item.Packages
return;
}
}
},
immediate: true
}
},
created: function () {
this.getProducts();
},
methods: {
getProducts() {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/product/ProductWithPackage',
success: function (res) {
if (res.Code == 10000) {
that.productWithPackage = res.Data;
}
}
});
},
search() {
var ps = [];
this.searchModel.BTime = $("#BTime").val();
this.searchModel.ETime = $("#ETime").val();
for (var item in this.searchModel) {
var p = item + "=" + this.searchModel[item];
ps.push(p);
}
window.location.href = "?" + ps.join("&");
},
setOrderInfo(info) {
this.currentOrder = info;
}
}
})
function showDetail(_self) {
var currentOrder = {
date: $(_self).attr('a-date'),
orderno: $(_self).attr('a-orderno'),
ordertype: $(_self).attr('a-ordertype'),
product: $(_self).attr('a-product'),
package: $(_self).attr('a-package'),
price: $(_self).attr('a-price'),
conncount: $(_self).attr('a-conncount'),
account: $(_self).attr('a-account'),
orderamount: $(_self).attr('a-orderamount'),
couponamount: $(_self).attr('a-couponamount'),
payamount: $(_self).attr('a-payamount'),
}
app.setOrderInfo(currentOrder);
$(_self).show();
}
</script>
<script type="text/javascript">
var calendar = new LCalendar();
calendar.init({
'trigger': '#start_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
var calendar = new LCalendar();
calendar.init({
'trigger': '#end_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
$(".toDetail").click(function () {
showDetail($(this))
$(".layerTable").show();
});
$(".back").click(function () {
$(".layerTable").hide();
})
</script>

View File

@@ -1,281 +1,281 @@
@using Hncore.Infrastructure.Data
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ProductOrderEntity>
@{
Layout = "_UserLayout";
}
<div id="app">
<form asp-action="myorders" asp-controller="user" method="get">
<div class="chaxun2">
<input type="text" v-model="searchModel.KeyWord" /><button type="button" class="btnOrange" v-on:click="search">查询</button>
</div>
<div class="row riqi">
<div class="col-sm-4 col-xs-4">
日期查询:
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="start_date" id="start_date" v-model="searchModel.BTime" placeholder="选择开始日期" readonly="readonly" />
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="end_date" id="end_date" v-model="searchModel.ETime" placeholder="选择结束日期" readonly="readonly" />
</div>
</div>
<div class="row shaixuan">
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.OrderType">
<option value="0">全部类型</option>
<option value="1">新开</option>
<option value="2">续费</option>
<option value="3">批量新开</option>
<option value="4">批量续费</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.ProductId">
<option value="0">全部产品</option>
<option v-for="item in productWithPackage" :value="item.Product.Id">{{item.Product.Name}}</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.PackageId">
<option value="0">全部套餐</option>
<option value="测试卡">测试卡</option>
<option value="天卡">天卡</option>
<option value="周卡">周卡</option>
<option value="月卡">月卡</option>
<option value="月卡(活动)">月卡(活动)</option>
<option value="双月卡(活动)">双月卡(活动)</option>
<option value="季卡">季卡</option>
<option value="季卡(活动)">季卡(活动)</option>
<option value="年卡">年卡</option>
</select>
</div>
</div>
</form>
<table border="0" cellspacing="0" cellpadding="0" class="orderTable">
<tr><th>类型</th><th>产品</th><th>套餐</th><th>详情</th></tr>
@foreach (var item in Model.List)
{
<tr>
<td>@item.OrderType.GetEnumDisplayName()</td>
<td>@item.ProductName</td>
<td>@item.PackageName</td>
<td>
<button type="button" class="btnXq toDetail" onclick="showDetail(this)"
a-date="@item.CreateTime.ToString("yyyy.MM.dd")"
a-orderno="@item.OrderNo"
a-ordertype="@item.OrderType.GetEnumDisplayName()"
a-product="@item.ProductName"
a-package="@item.PackageName"
a-price="@item.DayPrice"
a-dayprice="@item.DayPrice"
a-conncount="@(item.AccountCount*item.ConnectCount)"
a-account="@item.Accounts"
a-orderamount="@item.OrderAmount"
a-refundamount="@item.RefundAmount"
a-payamount="@item.PaymentAmount"
a-refundresttime="@item.RefundRestTime">
详情
</button>
</td>
</tr>
}
</table>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>日期:</td>
<td>{{currentOrder.date}}</td>
</tr>
<tr>
<td>订单编号:</td>
<td>{{currentOrder.orderno}}</td>
</tr>
<tr>
<td>类型:</td>
<td>{{currentOrder.ordertype}}</td>
</tr>
<tr>
<td>产品:</td>
<td>{{currentOrder.product}}</td>
</tr>
<tr>
<td>套餐:</td>
<td>{{currentOrder.package}}</td>
</tr>
<tr>
<td>总连接数:</td>
<td>{{currentOrder.conncount}}</td>
</tr>
<tr>
<td>账号:</td>
<td>{{currentOrder.account}}</td>
</tr>
<tr>
<td>退款单价:</td>
<td>{{currentOrder.dayprice}}</td>
</tr>
<tr>
<td>退款时长:</td>
<td>{{currentOrder.refundresttime}}</td>
</tr>
<tr>
<td>实付金额:</td>
<td>{{currentOrder.payamount}}</td>
</tr>
<tr>
<td>退款金额:</td>
<td>{{currentOrder.refundamount}}</td>
</tr>
</table>
<div class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script src="~/m/js/LCalendar.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
productWithPackage: [],
packages: [],
searchModel: {
OrderType:0,
ProductId:@this.Context.Request.GetInt("ProductId"),
PackageId:"0",
KeyWord:'',
BTime: '@this.Context.Request.Get("BTime")',
ETime: '@this.Context.Request.Get("ETime")',
},
oneAuthModel: {
ProductId: 0,
Account: "",
Pwd:""
},
mutilAuthModel: {
ProductId: 0,
Account: "",
Pwd: "",
StartNum: 0,
Count:0
},
currentOrder: {
date:"",
orderno:"",
ordertype:"",
product:"",
package:"",
price:"",
conncount:"",
account:"",
orderamount:"",
couponamount:"",
payamount:"",
refundamount:""
}
},
computed: {
},
watch: {
'searchModel.ProductId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
for (var i = 0; i < this.productWithPackage.length; i++) {
var item = this.productWithPackage[i];
if (item.Product.Id == newValue) {
this.packages = item.Packages
return;
}
}
},
immediate: true
}
},
created: function () {
this.getProducts();
},
methods: {
getProducts() {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/product/ProductWithPackage',
success: function (res) {
if (res.Code == 10000) {
that.productWithPackage = res.Data;
}
}
});
},
search() {
var ps = [];
this.searchModel.BTime = $("#BTime").val();
this.searchModel.ETime = $("#ETime").val();
for (var item in this.searchModel) {
var p = item + "=" + this.searchModel[item];
ps.push(p);
}
window.location.href = "?" + ps.join("&");
},
setOrderInfo(info) {
this.currentOrder = info;
}
}
})
function showDetail(_self) {
var currentOrder = {
date: $(_self).attr('a-date'),
orderno: $(_self).attr('a-orderno'),
ordertype: $(_self).attr('a-ordertype'),
product: $(_self).attr('a-product'),
package: $(_self).attr('a-package'),
dayprice: $(_self).attr('a-dayprice'),
conncount: $(_self).attr('a-conncount'),
account: $(_self).attr('a-account'),
orderamount: $(_self).attr('a-orderamount'),
couponamount: $(_self).attr('a-couponamount'),
payamount: $(_self).attr('a-payamount'),
refundresttime: $(_self).attr('a-refundresttime'),
payamount: $(_self).attr('a-payamount'),
refundamount: $(_self).attr('a-refundamount'),
}
app.setOrderInfo(currentOrder);
$(_self).show();
}
</script>
<script type="text/javascript">
var calendar = new LCalendar();
calendar.init({
'trigger': '#start_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
var calendar = new LCalendar();
calendar.init({
'trigger': '#end_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
$(".toDetail").click(function () {
showDetail($(this))
$(".layerTable").show();
});
$(".back").click(function () {
$(".layerTable").hide();
})
</script>
@using Hncore.Infrastructure.Data
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ProductOrderEntity>
@{
Layout = "_UserLayout";
}
<div id="app">
<form asp-action="myorders" asp-controller="user" method="get">
<div class="chaxun2">
<input type="text" v-model="searchModel.KeyWord" /><button type="button" class="btnOrange" v-on:click="search">查询</button>
</div>
<div class="row riqi">
<div class="col-sm-4 col-xs-4">
日期查询:
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="start_date" id="start_date" v-model="searchModel.BTime" placeholder="选择开始日期" readonly="readonly" />
</div>
<div class="col-sm-4 col-xs-4">
<input type="text" name="end_date" id="end_date" v-model="searchModel.ETime" placeholder="选择结束日期" readonly="readonly" />
</div>
</div>
<div class="row shaixuan">
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.OrderType">
<option value="0">全部类型</option>
<option value="1">新开</option>
<option value="2">续费</option>
<option value="3">批量新开</option>
<option value="4">批量续费</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.ProductId">
<option value="0">全部产品</option>
<option v-for="item in productWithPackage" :value="item.Product.Id">{{item.Product.Name}}</option>
</select>
</div>
<div class="col-sm-4 col-xs-4">
<select @@change="search" v-model="searchModel.PackageId">
<option value="0">全部套餐</option>
<option value="测试卡">测试卡</option>
<option value="天卡">天卡</option>
<option value="周卡">周卡</option>
<option value="月卡">月卡</option>
<option value="月卡(活动)">月卡(活动)</option>
<option value="双月卡(活动)">双月卡(活动)</option>
<option value="季卡">季卡</option>
<option value="季卡(活动)">季卡(活动)</option>
<option value="年卡">年卡</option>
</select>
</div>
</div>
</form>
<table border="0" cellspacing="0" cellpadding="0" class="orderTable">
<tr><th>类型</th><th>产品</th><th>套餐</th><th>详情</th></tr>
@foreach (var item in Model.List)
{
<tr>
<td>@item.OrderType.GetEnumDisplayName()</td>
<td>@item.ProductName</td>
<td>@item.PackageName</td>
<td>
<button type="button" class="btnXq toDetail" onclick="showDetail(this)"
a-date="@item.CreateTime.ToString("yyyy.MM.dd")"
a-orderno="@item.OrderNo"
a-ordertype="@item.OrderType.GetEnumDisplayName()"
a-product="@item.ProductName"
a-package="@item.PackageName"
a-price="@item.DayPrice"
a-dayprice="@item.DayPrice"
a-conncount="@(item.AccountCount*item.ConnectCount)"
a-account="@item.Accounts"
a-orderamount="@item.OrderAmount"
a-refundamount="@item.RefundAmount"
a-payamount="@item.PaymentAmount"
a-refundresttime="@item.RefundRestTime">
详情
</button>
</td>
</tr>
}
</table>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
<!-- 弹窗详情 -->
<div class="layerTable">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td>日期:</td>
<td>{{currentOrder.date}}</td>
</tr>
<tr>
<td>订单编号:</td>
<td>{{currentOrder.orderno}}</td>
</tr>
<tr>
<td>类型:</td>
<td>{{currentOrder.ordertype}}</td>
</tr>
<tr>
<td>产品:</td>
<td>{{currentOrder.product}}</td>
</tr>
<tr>
<td>套餐:</td>
<td>{{currentOrder.package}}</td>
</tr>
<tr>
<td>总连接数:</td>
<td>{{currentOrder.conncount}}</td>
</tr>
<tr>
<td>账号:</td>
<td>{{currentOrder.account}}</td>
</tr>
<tr>
<td>退款单价:</td>
<td>{{currentOrder.dayprice}}</td>
</tr>
<tr>
<td>退款时长:</td>
<td>{{currentOrder.refundresttime}}</td>
</tr>
<tr>
<td>实付金额:</td>
<td>{{currentOrder.payamount}}</td>
</tr>
<tr>
<td>退款金额:</td>
<td>{{currentOrder.refundamount}}</td>
</tr>
</table>
<div class="back">
<img src="~/m/img/arrowback.png"> 返回列表
</div>
</div>
</div>
<script src="~/m/js/LCalendar.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
productWithPackage: [],
packages: [],
searchModel: {
OrderType:0,
ProductId:@this.Context.Request.GetInt("ProductId"),
PackageId:"0",
KeyWord:'',
BTime: '@this.Context.Request.Get("BTime")',
ETime: '@this.Context.Request.Get("ETime")',
},
oneAuthModel: {
ProductId: 0,
Account: "",
Pwd:""
},
mutilAuthModel: {
ProductId: 0,
Account: "",
Pwd: "",
StartNum: 0,
Count:0
},
currentOrder: {
date:"",
orderno:"",
ordertype:"",
product:"",
package:"",
price:"",
conncount:"",
account:"",
orderamount:"",
couponamount:"",
payamount:"",
refundamount:""
}
},
computed: {
},
watch: {
'searchModel.ProductId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
for (var i = 0; i < this.productWithPackage.length; i++) {
var item = this.productWithPackage[i];
if (item.Product.Id == newValue) {
this.packages = item.Packages
return;
}
}
},
immediate: true
}
},
created: function () {
this.getProducts();
},
methods: {
getProducts() {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/product/ProductWithPackage',
success: function (res) {
if (res.Code == 10000) {
that.productWithPackage = res.Data;
}
}
});
},
search() {
var ps = [];
this.searchModel.BTime = $("#BTime").val();
this.searchModel.ETime = $("#ETime").val();
for (var item in this.searchModel) {
var p = item + "=" + this.searchModel[item];
ps.push(p);
}
window.location.href = "?" + ps.join("&");
},
setOrderInfo(info) {
this.currentOrder = info;
}
}
})
function showDetail(_self) {
var currentOrder = {
date: $(_self).attr('a-date'),
orderno: $(_self).attr('a-orderno'),
ordertype: $(_self).attr('a-ordertype'),
product: $(_self).attr('a-product'),
package: $(_self).attr('a-package'),
dayprice: $(_self).attr('a-dayprice'),
conncount: $(_self).attr('a-conncount'),
account: $(_self).attr('a-account'),
orderamount: $(_self).attr('a-orderamount'),
couponamount: $(_self).attr('a-couponamount'),
payamount: $(_self).attr('a-payamount'),
refundresttime: $(_self).attr('a-refundresttime'),
payamount: $(_self).attr('a-payamount'),
refundamount: $(_self).attr('a-refundamount'),
}
app.setOrderInfo(currentOrder);
$(_self).show();
}
</script>
<script type="text/javascript">
var calendar = new LCalendar();
calendar.init({
'trigger': '#start_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
var calendar = new LCalendar();
calendar.init({
'trigger': '#end_date', //标签id
'type': 'date', //date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择,
'minDate': (new Date().getFullYear() - 3) + '-' + 1 + '-' + 1, //最小日期
'maxDate': (new Date().getFullYear() + 3) + '-' + 12 + '-' + 31 //最大日期
});
$(".toDetail").click(function () {
showDetail($(this))
$(".layerTable").show();
});
$(".back").click(function () {
$(".layerTable").hide();
})
</script>

View File

@@ -1,149 +1,149 @@
@using Home.Models
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Pass.Vpn.Model
@using Hncore.Infrastructure.Extension
@model List<OriginAccountOnlineModel>
@{
Layout = "_Layout";
var productId = this.Context.Request.GetInt("productId");
}
<style type="text/css">
body {
background: #f5f5f5;
}
.msg {
margin-top: 1.466666rem;
}
.lineBar {
background: #3c5eb5;
width: 5px;
height: 30px;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
.accout_tit {
height: 1.2rem;
line-height: 1.2rem;
border-bottom: 1px solid #eee;
font-size: 30px;
}
.model {
display: flex;
flex-direction: row;
width: 100%;
height: 0.933333rem;
line-height: 0.933333rem;
background: #fff;
flex-wrap: wrap;
height: auto;
}
.model .item {
border-bottom: 1px solid #f5f5f5;
height: 0.933333rem;
line-height: 0.933333rem;
}
.model .item:nth-child(odd) {
width: 30%;
text-align: right;
}
.model .item:nth-child(even) {
width: 70%;
text-align: center;
color: #ccc;
}
.red {
color: red;
}
.inputBox {
width: 330px;
}
</style>
<vc:redirecct-login></vc:redirecct-login>
<div class="container msg">
@if (Model.Count == 0)
{
<div class="red" style="text-align:center">暂无数据</div>
}
@foreach (var item in Model)
{
<div class="accout_tit"><span class="lineBar"></span>#@(Model.IndexOf(item)+1) <button class="btnXq" onclick="killout(@item.Id)">强制离线</button> </div>
<div class="model">
<div class="item">
账号:
</div>
<div class="item">
@item.Account
</div>
<div class="item">
登录时间:
</div>
<div class="item">
@item.LoginTime
</div>
<div class="item">
在线时间:
</div>
<div class="item">
@item.OnlineTime
</div>
<div class="item">
服务器Ip
</div>
<div class="item">
@item.ServerIP
</div>
<div class="item">
登录ip
</div>
<div class="item">
@item.LoginIP
</div>
<div class="item">
上/下行:
</div>
<div class="item">
@item.UpStream / @item.UpStream
</div>
</div>
}
</div>
<script>
/** 表单序列化成json字符串的方法 */
function form2JsonString(formId) {
var paramArray = $('#' + formId).serializeArray();
var jsonObj = {};
$(paramArray).each(function () {
jsonObj[this.name] = this.value;
});
console.log(jsonObj);
return JSON.stringify(jsonObj);
}
function killout(productId,id) {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/productaccount/KillOut?productId=@productId&id=' + id,
success: function (res) {
if (res.Code == 10000) {
alert("操作成功");
window.location.reload();
}
}
});
}
</script>
@using Home.Models
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Pass.Vpn.Model
@using Hncore.Infrastructure.Extension
@model List<OriginAccountOnlineModel>
@{
Layout = "_Layout";
var productId = this.Context.Request.GetInt("productId");
}
<style type="text/css">
body {
background: #f5f5f5;
}
.msg {
margin-top: 1.466666rem;
}
.lineBar {
background: #3c5eb5;
width: 5px;
height: 30px;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
.accout_tit {
height: 1.2rem;
line-height: 1.2rem;
border-bottom: 1px solid #eee;
font-size: 30px;
}
.model {
display: flex;
flex-direction: row;
width: 100%;
height: 0.933333rem;
line-height: 0.933333rem;
background: #fff;
flex-wrap: wrap;
height: auto;
}
.model .item {
border-bottom: 1px solid #f5f5f5;
height: 0.933333rem;
line-height: 0.933333rem;
}
.model .item:nth-child(odd) {
width: 30%;
text-align: right;
}
.model .item:nth-child(even) {
width: 70%;
text-align: center;
color: #ccc;
}
.red {
color: red;
}
.inputBox {
width: 330px;
}
</style>
<vc:redirecct-login></vc:redirecct-login>
<div class="container msg">
@if (Model.Count == 0)
{
<div class="red" style="text-align:center">暂无数据</div>
}
@foreach (var item in Model)
{
<div class="accout_tit"><span class="lineBar"></span>#@(Model.IndexOf(item)+1) <button class="btnXq" onclick="killout(@item.Id)">强制离线</button> </div>
<div class="model">
<div class="item">
账号:
</div>
<div class="item">
@item.Account
</div>
<div class="item">
登录时间:
</div>
<div class="item">
@item.LoginTime
</div>
<div class="item">
在线时间:
</div>
<div class="item">
@item.OnlineTime
</div>
<div class="item">
服务器Ip
</div>
<div class="item">
@item.ServerIP
</div>
<div class="item">
登录ip
</div>
<div class="item">
@item.LoginIP
</div>
<div class="item">
上/下行:
</div>
<div class="item">
@item.UpStream / @item.UpStream
</div>
</div>
}
</div>
<script>
/** 表单序列化成json字符串的方法 */
function form2JsonString(formId) {
var paramArray = $('#' + formId).serializeArray();
var jsonObj = {};
$(paramArray).each(function () {
jsonObj[this.name] = this.value;
});
console.log(jsonObj);
return JSON.stringify(jsonObj);
}
function killout(productId,id) {
var that = this;
$.ajax({
type: 'GET',
url: '/api/course/v1/productaccount/KillOut?productId=@productId&id=' + id,
success: function (res) {
if (res.Code == 10000) {
alert("操作成功");
window.location.reload();
}
}
});
}
</script>

View File

@@ -1,102 +1,102 @@
@using Home.Models
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@model UserHomeModel
@{
Layout = "_Layout";
var BaseUrl = m_Configuration["Service_BaseUrl"];
var WxAppId = m_Configuration["WxApps:AppID"];
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">用户注册</p>
<p><span class="xinyonghu">新用户免费赠送3次测试机会</span></p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="username" value="" placeholder="* 手机号" /></p>
<p><img src="~/m/img/password.png"><input type="password" name="" id="password" value="" placeholder="* 密码" /></p>
<p class="yzm"><img src="~/m/img/yanzhengma.png"><input type="text" name="" id="yanzhengma" value="" placeholder="* 验证码" /><button type="button" class="btnBlue" onclick="getCode(this)">获取验证码</button></p>
<p><img src="~/m/img/phone.png"><input type="text" name="" id="wxhao" value="" placeholder="微信号(选填)" /></p>
<p><img src="~/m/img/phone.png"><input type="text" name="" id="wxhao" value="" placeholder="QQ号(选填)" /></p>
</div>
<p class="xieyi"><input type="checkbox" name="" id="xieyi" checked value="" />我同意<span><a href="/LineList/xieyi" target="_blank">《聚IP JUIP.COM用户注册协议》</a></span></p>
<p><button type="button" class="btnLogin" onclick="reg()">注册</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">已有账号?<a href="/User/WebLogin">立即登录</a></p>
</div>
<script>
var redirect = "@ViewBag.redirect" || "/user/index";
var time = 60;
function getCode(_self) {
var name = $("#username").val()
if(name == '') { alert('手机号不能为空'); return; }
if (!timing(_self)) return;
var url = '/user/SendPhoneCodevefy?key=User_Code&phone=' + name;
$.ajax({
type: 'POST',
url: url,
contentType: "application/json",
success: function (res) {
alert(res.Message)
}
});
}
function timing(_self) {
if (time != 60) return false
var timerHandler = setInterval(function () {
time--;
if (time <= 1) {
clearInterval(timerHandler);
time = 60;
$(_self).text("获取验证码")
} else {
$(_self).text(time + "s");
}
}, 1000)
return true;
}
function reg() {
if(!$("input[type='checkbox']").is(':checked')){
alert('请认真阅读用户注册协议后勾选 我同意 方可注册!');
return;
}
var name = $("#username").val()
var pwd = $("#password").val()
var code = $("#yanzhengma").val()
if (name == '') { alert('手机号不能为空'); return; }
if (code == '') { alert('验证码不能为空'); return; }
var wx = $("#wxhao").val()
var qq = $("#qqhao").val()
var data = { Phone: name, Pwd: pwd, Code: code, Wx: wx, QQ: qq };
$.ajax({
type: 'POST',
url: '/user/Regist',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
loginSuccess(res.Data.User)
} else {
alert(res.Message)
}
}
});
}
function loginSuccess(user) {
if (!isWeiXin()) {
window.location.href = redirect;
return;
}
if (!user.OpenId) {
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl="+redirect+"&state="+user.Id;
}
}
@using Home.Models
@using Microsoft.Extensions.Configuration
@using Hncore.Infrastructure.Extension
@inject IConfiguration m_Configuration
@model UserHomeModel
@{
Layout = "_Layout";
var BaseUrl = m_Configuration["Service_BaseUrl"];
var WxAppId = m_Configuration["WxApps:AppID"];
}
<div class="loginArea">
<div class="loginTop">
<p> <img src="~/m/img/logoBlue.png"></p>
<p class="logoTit">用户注册</p>
<p><span class="xinyonghu">新用户免费赠送3次测试机会</span></p>
</div>
<div class="loginCenter">
<p><img src="~/m/img/phone.png"><input type="text" name="" id="username" value="" placeholder="* 手机号" /></p>
<p><img src="~/m/img/password.png"><input type="password" name="" id="password" value="" placeholder="* 密码" /></p>
<p class="yzm"><img src="~/m/img/yanzhengma.png"><input type="text" name="" id="yanzhengma" value="" placeholder="* 验证码" /><button type="button" class="btnBlue" onclick="getCode(this)">获取验证码</button></p>
<p><img src="~/m/img/phone.png"><input type="text" name="" id="wxhao" value="" placeholder="微信号(选填)" /></p>
<p><img src="~/m/img/phone.png"><input type="text" name="" id="wxhao" value="" placeholder="QQ号(选填)" /></p>
</div>
<p class="xieyi"><input type="checkbox" name="" id="xieyi" checked value="" />我同意<span><a href="/LineList/xieyi" target="_blank">《聚IP JUIP.COM用户注册协议》</a></span></p>
<p><button type="button" class="btnLogin" onclick="reg()">注册</button></p>
<p class="tixing">*手机号不是IP账号请登录后开通IP账号*</p>
<p class="bianjie">已有账号?<a href="/User/WebLogin">立即登录</a></p>
</div>
<script>
var redirect = "@ViewBag.redirect" || "/user/index";
var time = 60;
function getCode(_self) {
var name = $("#username").val()
if(name == '') { alert('手机号不能为空'); return; }
if (!timing(_self)) return;
var url = '/user/SendPhoneCodevefy?key=User_Code&phone=' + name;
$.ajax({
type: 'POST',
url: url,
contentType: "application/json",
success: function (res) {
alert(res.Message)
}
});
}
function timing(_self) {
if (time != 60) return false
var timerHandler = setInterval(function () {
time--;
if (time <= 1) {
clearInterval(timerHandler);
time = 60;
$(_self).text("获取验证码")
} else {
$(_self).text(time + "s");
}
}, 1000)
return true;
}
function reg() {
if(!$("input[type='checkbox']").is(':checked')){
alert('请认真阅读用户注册协议后勾选 我同意 方可注册!');
return;
}
var name = $("#username").val()
var pwd = $("#password").val()
var code = $("#yanzhengma").val()
if (name == '') { alert('手机号不能为空'); return; }
if (code == '') { alert('验证码不能为空'); return; }
var wx = $("#wxhao").val()
var qq = $("#qqhao").val()
var data = { Phone: name, Pwd: pwd, Code: code, Wx: wx, QQ: qq };
$.ajax({
type: 'POST',
url: '/user/Regist',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
loginSuccess(res.Data.User)
} else {
alert(res.Message)
}
}
});
}
function loginSuccess(user) {
if (!isWeiXin()) {
window.location.href = redirect;
return;
}
if (!user.OpenId) {
window.location.href = "@(BaseUrl)User/MP_GetUserInfo?appid=@WxAppId&callbakUrl="+redirect+"&state="+user.Id;
}
}
</script>

View File

@@ -1,4 +1,4 @@
@using Home
@using Home.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Host
@using Home
@using Home.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Host

View File

@@ -1,3 +1,3 @@
@{
Layout = "_Layout";
}
@{
Layout = "_Layout";
}

View File

@@ -1,149 +1,149 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid conBg">
<div class="container">
<div class="fourModel">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/img/pc.png"></a></p>
<p>Windows电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="21"><img src="~/img/pc.png"></a></p>
<p>MAC电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="10"><img src="~/img/pc.png"></a></p>
<p>软路由教程</p>
</div>
</div>
<div class="mylist">
<ul class="nav nav-tabs newsList" role="tablist">
<li role="presentation" class="@(type==1?"active":"")"><a href="?Catalog=1"><img src="~/img/tab1.png">聚头条</a></li>
<li role="presentation" class="@(type==2?"active":"")"><a href="?Catalog=2"> <img src="~/img/tab2.png">优惠活动</a></li>
<li role="presentation" class="@(type==3?"active":"")"><a href="?Catalog=3"><img src="~/img/tab3.png">常见问题</a></li>
<li role="presentation" class="@(type==4?"active":"")"><a href="?Catalog=4"><img src="~/img/tab4.png">新手教程</a></li>
@*<li role="presentation" class="@(type==0?"active":"")"><a href="?Catalog=0"><img src="~/img/tab4.png">全部</a></li>*@
</ul>
<div class="tab-content listcon">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="listUl">
@foreach (var item in Model.List)
{
<li>
<div class="newsTit">
<div class="item">
@item.Title
</div>
<div class="item">
@item.CreateTime.ToString("yyyy.MM.dd")
</div>
</div>
<p class="gaiyao">@item.SubTitle</p>
<p><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">查看全文→</a></p>
</li>
}
@*<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>*@
</ul>
</div>
</div>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
@*<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">上一页</a></li>
<li class="page-item"><a class="page-link fenyeActive" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">下一页</a></li>
</ul>*@
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid conBg">
<div class="container">
<div class="fourModel">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/img/pc.png"></a></p>
<p>Windows电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="21"><img src="~/img/pc.png"></a></p>
<p>MAC电脑教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="10"><img src="~/img/pc.png"></a></p>
<p>软路由教程</p>
</div>
</div>
<div class="mylist">
<ul class="nav nav-tabs newsList" role="tablist">
<li role="presentation" class="@(type==1?"active":"")"><a href="?Catalog=1"><img src="~/img/tab1.png">聚头条</a></li>
<li role="presentation" class="@(type==2?"active":"")"><a href="?Catalog=2"> <img src="~/img/tab2.png">优惠活动</a></li>
<li role="presentation" class="@(type==3?"active":"")"><a href="?Catalog=3"><img src="~/img/tab3.png">常见问题</a></li>
<li role="presentation" class="@(type==4?"active":"")"><a href="?Catalog=4"><img src="~/img/tab4.png">新手教程</a></li>
@*<li role="presentation" class="@(type==0?"active":"")"><a href="?Catalog=0"><img src="~/img/tab4.png">全部</a></li>*@
</ul>
<div class="tab-content listcon">
<div role="tabpanel" class="tab-pane active" id="home">
<ul class="listUl">
@foreach (var item in Model.List)
{
<li>
<div class="newsTit">
<div class="item">
@item.Title
</div>
<div class="item">
@item.CreateTime.ToString("yyyy.MM.dd")
</div>
</div>
<p class="gaiyao">@item.SubTitle</p>
<p><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">查看全文→</a></p>
</li>
}
@*<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>
<li>
<div class="newsTit">
<div class="item">
如何查看IP代理地址是否启动成功
</div>
<div class="item">
2020.1.1
</div>
</div>
<p class="gaiyao">概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字概要文字</p>
<p><a href="#">查看全文→</a></p>
</li>*@
</ul>
</div>
</div>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
@*<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">上一页</a></li>
<li class="page-item"><a class="page-link fenyeActive" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">下一页</a></li>
</ul>*@
</div>
</div>
</div>
</div>

View File

@@ -1,77 +1,77 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid conBg">
<div class="container">
<div class="fourModel">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/img/pc.png"></a></p>
<p>Windows电脑教程</p>
</div>
</div>
<div class="mylist">
<div class="tab-content listcon">
<div role="tabpanel" class="tab-pane active">
<ul class="listUl">
@foreach (var item in Model.List)
{
<li>
<div class="newsTit">
<div class="item">
@item.Title
</div>
<div class="item">
@item.CreateTime.ToString("yyyy.MM.dd")
</div>
</div>
<p class="gaiyao">@item.SubTitle</p>
<p><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">查看全文→</a></p>
</li>
}
</ul>
</div>
</div>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Data
@using Hncore.Infrastructure.Extension
@using ViewComponents
@model PageData<ArticleEntity>
@{
var type = this.Context.Request.GetInt("Catalog");
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid conBg">
<div class="container">
<div class="fourModel">
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="3"><img src="~/img/ios.png"></a></p>
<p>苹果手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="4"><img src="~/img/az.png"></a></p>
<p>安卓手机教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="5"><img src="~/img/mnq.png"></a></p>
<p>安卓模拟器教程</p>
</div>
<div class="item">
<p><a asp-action="info" asp-controller="article" asp-route-id="6"><img src="~/img/pc.png"></a></p>
<p>Windows电脑教程</p>
</div>
</div>
<div class="mylist">
<div class="tab-content listcon">
<div role="tabpanel" class="tab-pane active">
<ul class="listUl">
@foreach (var item in Model.List)
{
<li>
<div class="newsTit">
<div class="item">
@item.Title
</div>
<div class="item">
@item.CreateTime.ToString("yyyy.MM.dd")
</div>
</div>
<p class="gaiyao">@item.SubTitle</p>
<p><a asp-action="info" asp-controller="article" asp-route-id="@item.Id">查看全文→</a></p>
</li>
}
</ul>
</div>
</div>
<div class="fenye">
@await Component.InvokeAsync("Pager", new PagerModel() { Total = Model.RowCount, PageIndex = this.Context.Request.GetInt("PageIndex") })
</div>
</div>
</div>
</div>

View File

@@ -1,77 +1,77 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@model ArticleInfoMode
@{
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid newsCon">
<div class="container">
<ol class="breadcrumb">
<li><a href="#">教程&咨询</a></li>
@*<li><a href="#" class="active">华连头条</a></li>*@
</ol>
</div>
<div class="container articleTit">
<h3>@Model.Info.Title</h3>
<p class="grayText">@Model.Info.CreateTime.ToString("yyyy.MM.dd")</p>
</div>
@if(@Model.Info.Id == 3){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 4){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E5%AE%89%E5%8D%93%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 5){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
<div class="container articleCon">
@*<img src="img/wenzhangpeitu.png">*@
@Html.Raw(Model.Info.Content)
</div>
<div class="container preNext">
<div class="row">
@if (Model.Prev != null)
{
<div class="col-lg-6 text-left">
上一条:<a asp-action="info" asp-controller="article" asp-route-Id="@Model.Prev.Id">@Model.Prev.Title</a>
</div>
}
@if (Model.Next != null)
{
<div class="col-lg-6 text-right">
下一条:<a asp-action="info" asp-controller="article" asp-route-Id="@Model.Next.Id">@Model.Next.Title</a>
</div>
}
</div>
</div>
</div>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@model ArticleInfoMode
@{
}
<div class="container-fluid softBg">
<div class="container">
<form asp-action="Search" asp-controller="Article" method="get">
<div class="row">
<div class="col-lg-3 zxbz">
<img src="~/img/img_news.png">
</div>
<div class="col-lg-6 searchInput">
<input type="text" name="KeyWord" />
<p class="hot">搜索热词:<span>账号无法登录</span><span>如何充值</span></p>
</div>
<div class="col-lg-3 searchBtn text-left">
<button type="submit" class="btn btn-search">立即搜索</button>
</div>
</div>
</form>
</div>
</div>
<div class="container-fluid newsCon">
<div class="container">
<ol class="breadcrumb">
<li><a href="#">教程&咨询</a></li>
@*<li><a href="#" class="active">华连头条</a></li>*@
</ol>
</div>
<div class="container articleTit">
<h3>@Model.Info.Title</h3>
<p class="grayText">@Model.Info.CreateTime.ToString("yyyy.MM.dd")</p>
</div>
@if(@Model.Info.Id == 3){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E8%8B%B9%E6%9E%9C%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 4){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E5%AE%89%E5%8D%93%E6%89%8B%E6%9C%BA%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
@if(@Model.Info.Id == 5){
<div class="container" style="text-align: center;">
<h1>视频教程</h1>
<video controls="controls" height="500" name="media"><source src="http://mp4.juip.com/%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%95%99%E7%A8%8B.mp4" type="video/mp4"></video>
</div>
}
<div class="container articleCon">
@*<img src="img/wenzhangpeitu.png">*@
@Html.Raw(Model.Info.Content)
</div>
<div class="container preNext">
<div class="row">
@if (Model.Prev != null)
{
<div class="col-lg-6 text-left">
上一条:<a asp-action="info" asp-controller="article" asp-route-Id="@Model.Prev.Id">@Model.Prev.Title</a>
</div>
}
@if (Model.Next != null)
{
<div class="col-lg-6 text-right">
下一条:<a asp-action="info" asp-controller="article" asp-route-Id="@Model.Next.Id">@Model.Next.Title</a>
</div>
}
</div>
</div>
</div>

View File

@@ -1,34 +1,34 @@
<div class="container-fluid tAd">
<a href="#taobaodian"> <img src="~/img/tBanner.png"></a>
</div>
<div class="container-fluid tintro text-center" style="font-size:18px">
<p>您付款后并未直接开通账号,因系统无法判定您是新开账号还是续费,也无法判定您想定制什么账号和密码。</p>
<p>所以会把您付款金额充进官网,然后在官网新开账号或是续费,用余额支付即可。</p>
<p>当然您也可以付款后联系我们帮您开通或续费。</p>
</div>
<div class="container tPeitu">
<img src="~/img/peitu.png">
</div>
<div class="container ttishi text-center" style="font-size: 20px;">
——以下店铺任选一个,在淘宝所需金额,系统将自动为您充值,下单时收货人的手机号要与官网会员号一致——
</div>
<div class="container" id="taobaodian">
<div class="row tlink">
<div class="col-lg-4">
<a href="https://item.taobao.com/item.htm?spm=a230r.1.14.37.74175197C4nNeX&id=623503691377" target="_blank"><img src="~/img/t1.png"></a>
</div>
<div class="col-lg-4">
<a href="https://shop466932443.taobao.com/search.htm?spm=a1z10.1-c.0.0.2feb535aiwF0iN&search=y&orderType=hotsell_desc" target="_blank"><img src="~/img/t2.png"></a>
</div>
<div class="col-lg-4">
<a href="https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-16678284713.15.13c8364aciVbN7&id=624222057325" target="_blank"><img src="~/img/t3.png"></a>
</div>
@*<div class="col-lg-3">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.28.72145f8bwi5F1r&id=613389354570&abbucket=4" target="_blank"><img src="~/img/t4.png"></a>
</div>*@
</div>
<div class="container-fluid tAd">
<a href="#taobaodian"> <img src="~/img/tBanner.png"></a>
</div>
<div class="container-fluid tintro text-center" style="font-size:18px">
<p>您付款后并未直接开通账号,因系统无法判定您是新开账号还是续费,也无法判定您想定制什么账号和密码。</p>
<p>所以会把您付款金额充进官网,然后在官网新开账号或是续费,用余额支付即可。</p>
<p>当然您也可以付款后联系我们帮您开通或续费。</p>
</div>
<div class="container tPeitu">
<img src="~/img/peitu.png">
</div>
<div class="container ttishi text-center" style="font-size: 20px;">
——以下店铺任选一个,在淘宝所需金额,系统将自动为您充值,下单时收货人的手机号要与官网会员号一致——
</div>
<div class="container" id="taobaodian">
<div class="row tlink">
<div class="col-lg-4">
<a href="https://item.taobao.com/item.htm?spm=a230r.1.14.37.74175197C4nNeX&id=623503691377" target="_blank"><img src="~/img/t1.png"></a>
</div>
<div class="col-lg-4">
<a href="https://shop466932443.taobao.com/search.htm?spm=a1z10.1-c.0.0.2feb535aiwF0iN&search=y&orderType=hotsell_desc" target="_blank"><img src="~/img/t2.png"></a>
</div>
<div class="col-lg-4">
<a href="https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-16678284713.15.13c8364aciVbN7&id=624222057325" target="_blank"><img src="~/img/t3.png"></a>
</div>
@*<div class="col-lg-3">
<a href="https://item.taobao.com/item.htm?spm=a230r.7195193.1997079397.28.72145f8bwi5F1r&id=613389354570&abbucket=4" target="_blank"><img src="~/img/t4.png"></a>
</div>*@
</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@using Hncore.Infrastructure.Common
<vc:pay-wait></vc:pay-wait>
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@using Hncore.Infrastructure.Common
<vc:pay-wait></vc:pay-wait>

View File

@@ -1,384 +1,384 @@
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@model List<ProductRouteEntity>
@{
var pid = this.Context.Request.GetInt("ProductId");
var product = ViewData["products"] as List<ProductEntity>;
var currentProduct =(await m_ProductService.GetById(pid)) ?? new ProductEntity();
var lineTotalCount = Model.Count;
var lineCount = Model.Where(m=>m.Status== "正常").Count();
}
<style>
.blueLine img {
display: inline !important;
}
</style>
<div id="app">
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div style="float: left;" class="col-lg-3 zxbz">
<img src="~/img/img_xinalu.png">
</div>
<div style="float: left;" class="col-lg-5 searchInput">
<span style="float: left;width:10%;margin-top:60px;height:40px;line-height:200%" class="input-group-addon">全部</span>
<input style="float: left;width:90%;margin-top:60px;border: none;border-radius:0px" class="form-control" v-on:keyup.13="search_all()" type="text" v-model="search_all_data" name="KeyWord" placeholder="输入地区/名称/服务器" />
</div>
<div class="col-lg-2 searchBtn text-left">
<button v-on:click="search_all()" class="btn btn-search">搜索全部</button>
</div>
<div class="col-lg-2">
<span class="btnZhilian cursor"><a asp-index="" asp-controller="article" asp-route-Catalog="4" style="color:white"><img src="~/img/zhilian.png">直连教程</a></span>
</div>
</div>
<div class="row">
<div class="col-lg-3">
</div>
<div class="col-lg-9">
<p class="hot"><img src="~/img/shuju.png">实时总线路:{{count}}条<img src="~/img/shuju.png">实时可用线路:{{use_count}}条 所有线路均支持:【电脑/安卓/苹果】【IP/L2TP/SSTP】</p>
</div>
</div>
</div>
</div>
<div class="container">
<p style="text-align: center;font-size: 25px;color:red;">*****公告*****</p>
<p style="text-align: center;font-size: 20px;">*聚IP商城全线服务器都已更新可显示实时维护状态及服务器负载情况*</p>
<p class="xianluIntro" style="text-align: center;font-size: 25px;">*线路表和账号必须为同一产品才能使用。</p>
<div class="xianlu">
@foreach (var item in product.Where(m => m.Id != 3 && m.Id != 7 && m.Id != 9&& m.Id != 20&& m.Id != 21))
{
<div v-on:click="select_product(@item.Id)" id="product-@item.Id" class="item @(item.Id==pid?"blueLine":"")" a-pid="@item.Id" a-name="@item.Name">
<span>@item.Name</span><img src="~/img/check.png">
</div>
}
</div>
</div>
<div class="container">
<div class="row">
<p class="col-lg-12" style="background-color: #FFFF00; color:#FF0033;text-align:center;margin-bottom:30px;">{{search_field}} ------线路表API接口每5分钟更新一次,禁止频繁访问!http://php-api.juip.com/script/linedata/display.php?product={{product_id}}</p>
<div style="color: red;line-height:50%;" v-if="product_id ==1|| product_id==2">
<p style="text-align:center;">
<span style="font-size: 20px;color:#FF0033;">{{search_field}}</span> 用服务器地址直连用户请注意:
</p>
<p>因电信联通机房限制此协议会存在个别地区直连无法连接电脑客户端和安卓APP不受影响。</p>
<p v-if="product_id ==1">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连温州的那账号框就输入zx1234@zjwz服务器输入任意一个全国混拨的服务器则会连接到温州。</p>
<p v-if="product_id==2">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连三亚的那账号框就输入zx1234@hnsy服务器输入任意一个全国混拨的服务器则会连接到三亚。</p>
</div>
<div style="color: #CC3333;line-height:50%;text-align:center;font-size:20px;" v-if="product_id ==19">
<p>该产品切记一定要指定一下地区,不然会没有网络</p>
</div>
<div style="color: red;line-height:50%;text-align:center;font-size:20px;" v-if="product_id ==22">
<p>静态线路里面名称不带宽带字样的线路ip是相对固定不变的。</p>
<p>只要线路名称里面带“宽带”两个字的是完全模拟家庭宽带网络的线路和家庭宽度网络一样一般1-2天不等自动换一次ip</p>
</div>
</div>
<div class="row">
<div class="col-lg-2 miyao">
<p><img src="~/img/miyao.png"> L2TP密钥<b style="color:red;">{{l2tp}}</b></p>
<p><img src="~/img/dk.png"> SSTP端口<b style="color:red;">{{sstp}}</b></p>
</div>
<div class="col-lg-10">
<span style="float: left;width:10%;height:34px;line-height:150%" class="input-group-addon">{{search_field}}</span>
<input style="width:40%" v-on:keyup.13="search_product()" type="text" v-model="search_product_data" name="KeyWord" class="searchDq" placeholder="输入地区/名称/服务器" />
<button v-on:click="search_product()" class="btn btn-primary">搜索当前线路表</button>
<span class="daochu" v-on:click="export_data()" ><img src="~/img/excel.png">导出Excel</span>
</div>
</div>
</div>
<div class="container" >
<table class="table table-striped xianluTable" style="margin-bottom: 10px;">
<tr>
<th>产品</th>
<th>城市</th>
<th v-if="product_id ==19">剩余拨数</th>
<th v-else="product_id ==19">运营商</th>
<th>服务器域名</th>
<th>IP量</th>
<th>实时带宽</th>
<th>维护状态</th>
<th v-if="product_id ==1|| product_id==2">特征码</th>
<th v-else="product_id ==1|| product_id==2">负载状态</th>
</tr>
<tr v-for="site in table_data" :style="(site.online=='故障')?'color:#ec5656;':''">
<td>{{site.name}}</td>
<td colspan="7" v-if="!site.nasname" style="color:#339933;font-weight:bold;">{{site.city}}</td>
<td v-if="site.nasname">{{site.city}}</td>
<td v-if="site.nasname">{{site.supply}}</td>
<td v-if="site.nasname">{{site.nasname}}</td>
<td v-if="site.nasname">{{site.ip}}</td>
<td v-if="site.nasname">{{site.daikuan}}</td>
<td v-if="site.nasname">{{site.online}}</td>
<td v-if="site.nasname">{{site.status}}</td>
</tr>
</table>
<div v-if="!is_all && (product_id == 0)" class="text-center" style="margin-bottom: 20px;">
<button @@click="get_index_data()" type="button" class="btn btn-link" style="font-size:25px;">
------------------------------------------更多
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-chevron-double-down" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M1.646 6.646a.5.5 0 0 1 .708 0L8 12.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/>
<path fill-rule="evenodd" d="M1.646 2.646a.5.5 0 0 1 .708 0L8 8.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/>
</svg>
------------------------------------------
</button>
</div>
</div>
</div>
<script src="~/js/vue.js"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
table_data: [],
search_all_data: '',
search_product_data:'',
product_id:0,
l2tp:'',
search_field:'全部',
sstp:'',
count:0,
use_count:0,
all_data: [],
is_all: false
},
computed: {
},
watch: {
},
created: function () {
this.select_product(0);
},
methods: {
select_product(ProductId){
this.product_id = ProductId;
let datalist = [];
let count = 0;
let use_count = 0;
$("div").removeClass("blueLine");
$("#product-"+ProductId).addClass("blueLine");
switch(ProductId){
case 2:
this.l2tp = '123';
this.search_field = '讯连IP';
this.sstp = '1500';
break;
case 4:
this.l2tp = '123456';
this.search_field = '金瑞IP';
this.sstp = '4438';
break;
case 5:
this.l2tp = '123';
this.search_field = '老鹰IP';
this.sstp = '4430';
break;
case 6:
this.l2tp = '123';
this.search_field = '先锋IP';
this.sstp = '6665';
break;
case 10:
this.l2tp = '88';
this.search_field = '无限-单窗口单ip';
this.sstp = '';
break;
case 13:
this.l2tp = '123456';
this.search_field = '极客IP';
this.sstp = '4433';
break;
case 17:
this.l2tp = '123456';
this.search_field = '西瓜IP';
this.sstp = '4433';
break;
case 14:
this.l2tp = '1234';
this.search_field = '天天IP';
this.sstp = '4430';
break;
case 15:
this.l2tp = '66';
this.search_field = '共享IP';
this.sstp = '888';
break;
case 16:
this.l2tp = '8899';
this.search_field = '实惠IP';
this.sstp = '不支持';
break;
case 1:
this.l2tp = '888888';
this.search_field = '强子IP';
this.sstp = '1500';
break;
case 8:
this.l2tp = '88';
this.search_field = '星星IP';
this.sstp = '6666';
break;
case 18:
this.l2tp = '8899';
this.search_field = '蘑菇IP';
this.sstp = '4430';
break;
case 22:
this.l2tp = '888888';
this.search_field = '火狐IP';
this.sstp = '5908';
break;
case 23:
this.l2tp = '888888';
this.search_field = '云牛IP';
this.sstp = '5908';
break;
case 25:
this.l2tp = '888888';
this.search_field = '强子静态IP';
this.sstp = '1500';
break;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/display.php?product=' + ProductId,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
count = res.count;
use_count = res.use_count;
}
});
if (ProductId == 0){
this.all_data = datalist;
let now_data = [];
for (let i = 0;i<50;i++){
now_data[i] = datalist[i];
}
this.table_data = now_data;
} else {
this.table_data = datalist;
}
this.count = count;
if(ProductId != 16){
this.use_count = use_count;
} else {
this.use_count = count;
}
},
get_index_data(){
this.table_data = this.all_data;
this.is_all = true;
},
search_all(){
this.is_all = true;
if(!this.search_all_data){
this.select_product(0);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=1&info=' + this.search_all_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
search_product(){
if(!this.search_product_data){
this.select_product(this.product_id);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=0&productid='+this.product_id+'&info=' + this.search_product_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
export_data(){
switch(this.product_id){
case 0:
self.location.href='http://php-api.juip.com/script/linedata/data/download/all.csv';
break;
case 2:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xunlian.csv';
break;
case 4:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jinrui.csv';
break;
case 5:
self.location.href='http://php-api.juip.com/script/linedata/data/download/laoying.csv';
break;
case 6:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xianfeng.csv';
break;
case 10:
self.location.href='http://php-api.juip.com/script/linedata/data/download/wuxian.csv';
break;
case 13:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jike.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 14:
self.location.href='http://php-api.juip.com/script/linedata/data/download/tiantian.csv';
break;
case 15:
self.location.href='http://php-api.juip.com/script/linedata/data/download/gongxiang.csv';
break;
case 16:
self.location.href='http://php-api.juip.com/script/linedata/data/download/shihui.csv';
break;
case 1:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzi.csv';
break;
case 8:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xingxing.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 22:
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
break;
case 23:
self.location.href='http://php-api.juip.com/script/linedata/data/download/yunniu.csv';
break;
case 25:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzijt.csv';
break;
}
}
}
})
</script>
@using Hncore.Pass.Vpn.Domain
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.Vpn.Service
@inject ProductService m_ProductService
@model List<ProductRouteEntity>
@{
var pid = this.Context.Request.GetInt("ProductId");
var product = ViewData["products"] as List<ProductEntity>;
var currentProduct =(await m_ProductService.GetById(pid)) ?? new ProductEntity();
var lineTotalCount = Model.Count;
var lineCount = Model.Where(m=>m.Status== "正常").Count();
}
<style>
.blueLine img {
display: inline !important;
}
</style>
<div id="app">
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div style="float: left;" class="col-lg-3 zxbz">
<img src="~/img/img_xinalu.png">
</div>
<div style="float: left;" class="col-lg-5 searchInput">
<span style="float: left;width:10%;margin-top:60px;height:40px;line-height:200%" class="input-group-addon">全部</span>
<input style="float: left;width:90%;margin-top:60px;border: none;border-radius:0px" class="form-control" v-on:keyup.13="search_all()" type="text" v-model="search_all_data" name="KeyWord" placeholder="输入地区/名称/服务器" />
</div>
<div class="col-lg-2 searchBtn text-left">
<button v-on:click="search_all()" class="btn btn-search">搜索全部</button>
</div>
<div class="col-lg-2">
<span class="btnZhilian cursor"><a asp-index="" asp-controller="article" asp-route-Catalog="4" style="color:white"><img src="~/img/zhilian.png">直连教程</a></span>
</div>
</div>
<div class="row">
<div class="col-lg-3">
</div>
<div class="col-lg-9">
<p class="hot"><img src="~/img/shuju.png">实时总线路:{{count}}条<img src="~/img/shuju.png">实时可用线路:{{use_count}}条 所有线路均支持:【电脑/安卓/苹果】【IP/L2TP/SSTP】</p>
</div>
</div>
</div>
</div>
<div class="container">
<p style="text-align: center;font-size: 25px;color:red;">*****公告*****</p>
<p style="text-align: center;font-size: 20px;">*聚IP商城全线服务器都已更新可显示实时维护状态及服务器负载情况*</p>
<p class="xianluIntro" style="text-align: center;font-size: 25px;">*线路表和账号必须为同一产品才能使用。</p>
<div class="xianlu">
@foreach (var item in product.Where(m => m.Id != 3 && m.Id != 7 && m.Id != 9&& m.Id != 20&& m.Id != 21))
{
<div v-on:click="select_product(@item.Id)" id="product-@item.Id" class="item @(item.Id==pid?"blueLine":"")" a-pid="@item.Id" a-name="@item.Name">
<span>@item.Name</span><img src="~/img/check.png">
</div>
}
</div>
</div>
<div class="container">
<div class="row">
<p class="col-lg-12" style="background-color: #FFFF00; color:#FF0033;text-align:center;margin-bottom:30px;">{{search_field}} ------线路表API接口每5分钟更新一次,禁止频繁访问!http://php-api.juip.com/script/linedata/display.php?product={{product_id}}</p>
<div style="color: red;line-height:50%;" v-if="product_id ==1|| product_id==2">
<p style="text-align:center;">
<span style="font-size: 20px;color:#FF0033;">{{search_field}}</span> 用服务器地址直连用户请注意:
</p>
<p>因电信联通机房限制此协议会存在个别地区直连无法连接电脑客户端和安卓APP不受影响。</p>
<p v-if="product_id ==1">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连温州的那账号框就输入zx1234@zjwz服务器输入任意一个全国混拨的服务器则会连接到温州。</p>
<p v-if="product_id==2">解决方法IP账号后边输入@@特征码例如您的IP账号为zx1234要用sstp直连三亚的那账号框就输入zx1234@hnsy服务器输入任意一个全国混拨的服务器则会连接到三亚。</p>
</div>
<div style="color: #CC3333;line-height:50%;text-align:center;font-size:20px;" v-if="product_id ==19">
<p>该产品切记一定要指定一下地区,不然会没有网络</p>
</div>
<div style="color: red;line-height:50%;text-align:center;font-size:20px;" v-if="product_id ==22">
<p>静态线路里面名称不带宽带字样的线路ip是相对固定不变的。</p>
<p>只要线路名称里面带“宽带”两个字的是完全模拟家庭宽带网络的线路和家庭宽度网络一样一般1-2天不等自动换一次ip</p>
</div>
</div>
<div class="row">
<div class="col-lg-2 miyao">
<p><img src="~/img/miyao.png"> L2TP密钥<b style="color:red;">{{l2tp}}</b></p>
<p><img src="~/img/dk.png"> SSTP端口<b style="color:red;">{{sstp}}</b></p>
</div>
<div class="col-lg-10">
<span style="float: left;width:10%;height:34px;line-height:150%" class="input-group-addon">{{search_field}}</span>
<input style="width:40%" v-on:keyup.13="search_product()" type="text" v-model="search_product_data" name="KeyWord" class="searchDq" placeholder="输入地区/名称/服务器" />
<button v-on:click="search_product()" class="btn btn-primary">搜索当前线路表</button>
<span class="daochu" v-on:click="export_data()" ><img src="~/img/excel.png">导出Excel</span>
</div>
</div>
</div>
<div class="container" >
<table class="table table-striped xianluTable" style="margin-bottom: 10px;">
<tr>
<th>产品</th>
<th>城市</th>
<th v-if="product_id ==19">剩余拨数</th>
<th v-else="product_id ==19">运营商</th>
<th>服务器域名</th>
<th>IP量</th>
<th>实时带宽</th>
<th>维护状态</th>
<th v-if="product_id ==1|| product_id==2">特征码</th>
<th v-else="product_id ==1|| product_id==2">负载状态</th>
</tr>
<tr v-for="site in table_data" :style="(site.online=='故障')?'color:#ec5656;':''">
<td>{{site.name}}</td>
<td colspan="7" v-if="!site.nasname" style="color:#339933;font-weight:bold;">{{site.city}}</td>
<td v-if="site.nasname">{{site.city}}</td>
<td v-if="site.nasname">{{site.supply}}</td>
<td v-if="site.nasname">{{site.nasname}}</td>
<td v-if="site.nasname">{{site.ip}}</td>
<td v-if="site.nasname">{{site.daikuan}}</td>
<td v-if="site.nasname">{{site.online}}</td>
<td v-if="site.nasname">{{site.status}}</td>
</tr>
</table>
<div v-if="!is_all && (product_id == 0)" class="text-center" style="margin-bottom: 20px;">
<button @@click="get_index_data()" type="button" class="btn btn-link" style="font-size:25px;">
------------------------------------------更多
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-chevron-double-down" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M1.646 6.646a.5.5 0 0 1 .708 0L8 12.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/>
<path fill-rule="evenodd" d="M1.646 2.646a.5.5 0 0 1 .708 0L8 8.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"/>
</svg>
------------------------------------------
</button>
</div>
</div>
</div>
<script src="~/js/vue.js"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
table_data: [],
search_all_data: '',
search_product_data:'',
product_id:0,
l2tp:'',
search_field:'全部',
sstp:'',
count:0,
use_count:0,
all_data: [],
is_all: false
},
computed: {
},
watch: {
},
created: function () {
this.select_product(0);
},
methods: {
select_product(ProductId){
this.product_id = ProductId;
let datalist = [];
let count = 0;
let use_count = 0;
$("div").removeClass("blueLine");
$("#product-"+ProductId).addClass("blueLine");
switch(ProductId){
case 2:
this.l2tp = '123';
this.search_field = '讯连IP';
this.sstp = '1500';
break;
case 4:
this.l2tp = '123456';
this.search_field = '金瑞IP';
this.sstp = '4438';
break;
case 5:
this.l2tp = '123';
this.search_field = '老鹰IP';
this.sstp = '4430';
break;
case 6:
this.l2tp = '123';
this.search_field = '先锋IP';
this.sstp = '6665';
break;
case 10:
this.l2tp = '88';
this.search_field = '无限-单窗口单ip';
this.sstp = '';
break;
case 13:
this.l2tp = '123456';
this.search_field = '极客IP';
this.sstp = '4433';
break;
case 17:
this.l2tp = '123456';
this.search_field = '西瓜IP';
this.sstp = '4433';
break;
case 14:
this.l2tp = '1234';
this.search_field = '天天IP';
this.sstp = '4430';
break;
case 15:
this.l2tp = '66';
this.search_field = '共享IP';
this.sstp = '888';
break;
case 16:
this.l2tp = '8899';
this.search_field = '实惠IP';
this.sstp = '不支持';
break;
case 1:
this.l2tp = '888888';
this.search_field = '强子IP';
this.sstp = '1500';
break;
case 8:
this.l2tp = '88';
this.search_field = '星星IP';
this.sstp = '6666';
break;
case 18:
this.l2tp = '8899';
this.search_field = '蘑菇IP';
this.sstp = '4430';
break;
case 22:
this.l2tp = '888888';
this.search_field = '火狐IP';
this.sstp = '5908';
break;
case 23:
this.l2tp = '888888';
this.search_field = '云牛IP';
this.sstp = '5908';
break;
case 25:
this.l2tp = '888888';
this.search_field = '强子静态IP';
this.sstp = '1500';
break;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/display.php?product=' + ProductId,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
count = res.count;
use_count = res.use_count;
}
});
if (ProductId == 0){
this.all_data = datalist;
let now_data = [];
for (let i = 0;i<50;i++){
now_data[i] = datalist[i];
}
this.table_data = now_data;
} else {
this.table_data = datalist;
}
this.count = count;
if(ProductId != 16){
this.use_count = use_count;
} else {
this.use_count = count;
}
},
get_index_data(){
this.table_data = this.all_data;
this.is_all = true;
},
search_all(){
this.is_all = true;
if(!this.search_all_data){
this.select_product(0);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=1&info=' + this.search_all_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
search_product(){
if(!this.search_product_data){
this.select_product(this.product_id);
return;
}
$.ajax({
type: 'GET',
url: 'http://php-api.juip.com/script/linedata/search.php?type=0&productid='+this.product_id+'&info=' + this.search_product_data,
dataType: "json",
async:false,
success: function (res) {
datalist = res.data;
}
});
this.table_data = datalist;
},
export_data(){
switch(this.product_id){
case 0:
self.location.href='http://php-api.juip.com/script/linedata/data/download/all.csv';
break;
case 2:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xunlian.csv';
break;
case 4:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jinrui.csv';
break;
case 5:
self.location.href='http://php-api.juip.com/script/linedata/data/download/laoying.csv';
break;
case 6:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xianfeng.csv';
break;
case 10:
self.location.href='http://php-api.juip.com/script/linedata/data/download/wuxian.csv';
break;
case 13:
self.location.href='http://php-api.juip.com/script/linedata/data/download/jike.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 14:
self.location.href='http://php-api.juip.com/script/linedata/data/download/tiantian.csv';
break;
case 15:
self.location.href='http://php-api.juip.com/script/linedata/data/download/gongxiang.csv';
break;
case 16:
self.location.href='http://php-api.juip.com/script/linedata/data/download/shihui.csv';
break;
case 1:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzi.csv';
break;
case 8:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xingxing.csv';
break;
case 17:
self.location.href='http://php-api.juip.com/script/linedata/data/download/xigua.csv';
break;
case 18:
self.location.href='http://php-api.juip.com/script/linedata/data/download/mogu.csv';
break;
case 22:
self.location.href='http://php-api.juip.com/script/linedata/data/download/huohu.csv';
break;
case 23:
self.location.href='http://php-api.juip.com/script/linedata/data/download/yunniu.csv';
break;
case 25:
self.location.href='http://php-api.juip.com/script/linedata/data/download/qiangzijt.csv';
break;
}
}
}
})
</script>

View File

@@ -1,292 +1,292 @@
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var productPackages = Model.Where(m => m.Product.Id == defaultProduct.Id).FirstOrDefault().Packages.Where(p => p.Status == 1 && p.IsTest == 0);//.Select(m => m.Packages.Where(p => p.Status == 1 && p.IsTest == 0).FirstOrDefault());
var defaultPackage = productPackages.FirstOrDefault();// Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<style>
.clear {
clear: both;
}
.clearfix:after {
content: ".";
display: block;
visibility: hidden;
height: 0;
clear: both
}
.main-page {
margin: 0 auto;
width: 1170px;
padding-bottom:50px;
}
.main-page .left {
width:15%;
border-right: 1px #ccc solid;
margin-top: 25px;
padding-right:10px;
}
.main-page .left, .main-page .right {
float: left;
}
.main-page .nav-back {
height: 300px;
}
.main-page .nav {
position: relative;
margin-top: -300px;
width: 136px;
text-align: center;
font-size: 18px;
font-family: "微软雅黑";
color: #000;
}
.main-page .nav div {
height: 47px;
line-height: 47px;
margin-bottom: 8px;
border-radius: 2px;
cursor: pointer;
}
.main-page .nav div.on {
background: #0c215d;
color: #fff;
}
.main-page .right {
width: 85%;
height: 800px;
}
.main-page .content {
position: relative;
overflow: hidden;
}
.contentNew {
border:none;
}
.youhuiNew {
font-size:14px;
border:none;
text-align:center;
padding:5px 0;
color:red;
}
.mtop {
margin-top:30px;
}
</style>
<!-- ad -->
<div class="container-fluid ad">
<a asp-action="taobao" asp-controller="article"> <img src="~/img/acBanner.png"></a>
</div>
@*新布局*@
<p class="text-center tit"><img src="~/img/titi_choose.png"></p>
<div class="main-page">
<div class="left">
<div class="nav-back"></div>
<div class="nav">
@foreach (var item in Model)
{
<div class="productItem" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">@item.Product.Name</div>
}
</div>
</div>
<div class="right">
<div class="contentNew">
@foreach (var item in Model)
{
<div class="container stepOne packagebox" id="@("box"+item.Product.Id)">
<div class="container bg_taocan">
<div class="row">
<div class="col-lg-3 text-center photo">
<div class="photoK">
@*<img src="/@item.Product.Image">*@
<p>@item.Product.Name</p>
</div>
</div>
<div class="col-lg-6 intro">
<p>@item.Product.Name</p>
@foreach (var str in item.Product.ContentLine)
{
<p>·@str</p>
}
</div>
<div class="col-lg-3 text-center twoButton">
@if (user == null)
{
<p><button type="button" class="btn btn-warning testLogin" a-productId="@item.Product.Id">免费试用</button></p>
<p><button type="button" class="btn btn-warning reBuy">续费通道</button></p>
}
else
{
<p>
<a asp-action="test" asp-controller="product" asp-route-id="@item.Product.Id"><button type="button" class="btn btn-warning">免费试用</button></a>
</p>
<p>
<a asp-action="myaccounts" asp-controller="user"><button type="button" class="btn btn-warning">续费通道</button></a>
</p>
}
</div>
</div>
</div>
<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>
<div class="card">
@foreach (var package in item.Packages.Where(m => m.IsTest == 0 && m.Status == 1))
{
<div class="item packageitem" id="@("pkg"+package.Id)" a-pkg-id="@package.Id">
<p class="tianka">@package.Name</p>
<p><span class="price">@package.Price</span>元</p>
<p class="yuanjia">原价:<span>@package.LinePrice</span>元</p>
<p>@(package.DayPrice)元/天</p>
<p class="qixian">@package.Profile</p>
<img src="~/img/check.png" class="cardCheck">
</div>
}
</div>
<p class="youhuiNew mtop">需求5个以上可以联系客服设置优惠价</p>
<p class="youhuiNew">温馨提示:若您之前享优惠价,请联系客服帮你改价哦</p>
@if (user == null)
{
<p class="tijiao"><button type="button" class="btn btn-primary login">提交</button></p>
}
else
{
<p class="tijiao"><button type="button" class="btn btn-primary btn-submit">提交</button></p>
}
</div>
}
</div>
</div>
<div class="clear"></div>
</div>
@section Scripts{
<script type="text/javascript">
var currentPkgId = 0;
var testProductId = 0;
function select(id) {
var el = "#p" + id;
var packageBox = "#box" + id;
$(".packagebox").hide();
$(packageBox).show();
$(el).addClass("on");
$(el).siblings().removeClass("on");
var pkgid = $(el).attr("a-pkg-id");
selectPackage(pkgid);
}
function selectPackage(id) {
currentPkgId = id;
var el = "#pkg" + id;
//$(".packageitem").hide();
//$(el).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".cardCheck").show();
$(el).siblings().find(".cardCheck").hide();
}
function loginSuccess(data) {
window.location.href = "Buy?id=" + currentPkgId;
}
function testLoginSuccess(data) {
window.location.href = "Test?id=" + testProductId;
}
function reBuyLoginSuccess(data) {
window.location.href = "/User/MyAccounts";
}
$(function () {
$(".productItem").click(function () {
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".check").show();
//$(this).siblings().find(".check").hide();
var pid = $(this).attr('a-pid');
select(pid);
});
$(".card .item").click(function () {
currentPkgId = $(this).attr('a-pkg-id');
selectPackage(currentPkgId)
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".cardCheck").show();
//$(this).siblings().find(".cardCheck").hide();
})
$(".btn-submit").click(function () {
window.location.href = "Buy?id=" + currentPkgId;
})
$(".testLogin").click(function () {
loginCallback = testLoginSuccess;
testProductId = $(this).attr("a-productId");
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
$(".reBuy").click(function () {
loginCallback = reBuyLoginSuccess;
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
})
select(@defaultProduct.Id)
</script>
@*<script type="text/javascript">
$(".main-page .nav div").mouseenter(function () {
var $this = $(this);
var index = $this.index();
}).mouseleave(function () {
var $this = $(this);
var index = $this.index();
}).click(function () {
var $this = $(this);
var index = $this.index();
var l = -(index * 800);
$(".main-page .nav div").removeClass("on");
$(".main-page .nav div").eq(index).addClass("on");
$(".main-page .content .con-ggh:eq(0)").stop().animate({ "margin-top": l }, 500);
});
</script>*@
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var productPackages = Model.Where(m => m.Product.Id == defaultProduct.Id).FirstOrDefault().Packages.Where(p => p.Status == 1 && p.IsTest == 0);//.Select(m => m.Packages.Where(p => p.Status == 1 && p.IsTest == 0).FirstOrDefault());
var defaultPackage = productPackages.FirstOrDefault();// Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<style>
.clear {
clear: both;
}
.clearfix:after {
content: ".";
display: block;
visibility: hidden;
height: 0;
clear: both
}
.main-page {
margin: 0 auto;
width: 1170px;
padding-bottom:50px;
}
.main-page .left {
width:15%;
border-right: 1px #ccc solid;
margin-top: 25px;
padding-right:10px;
}
.main-page .left, .main-page .right {
float: left;
}
.main-page .nav-back {
height: 300px;
}
.main-page .nav {
position: relative;
margin-top: -300px;
width: 136px;
text-align: center;
font-size: 18px;
font-family: "微软雅黑";
color: #000;
}
.main-page .nav div {
height: 47px;
line-height: 47px;
margin-bottom: 8px;
border-radius: 2px;
cursor: pointer;
}
.main-page .nav div.on {
background: #0c215d;
color: #fff;
}
.main-page .right {
width: 85%;
height: 800px;
}
.main-page .content {
position: relative;
overflow: hidden;
}
.contentNew {
border:none;
}
.youhuiNew {
font-size:14px;
border:none;
text-align:center;
padding:5px 0;
color:red;
}
.mtop {
margin-top:30px;
}
</style>
<!-- ad -->
<div class="container-fluid ad">
<a asp-action="taobao" asp-controller="article"> <img src="~/img/acBanner.png"></a>
</div>
@*新布局*@
<p class="text-center tit"><img src="~/img/titi_choose.png"></p>
<div class="main-page">
<div class="left">
<div class="nav-back"></div>
<div class="nav">
@foreach (var item in Model)
{
<div class="productItem" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">@item.Product.Name</div>
}
</div>
</div>
<div class="right">
<div class="contentNew">
@foreach (var item in Model)
{
<div class="container stepOne packagebox" id="@("box"+item.Product.Id)">
<div class="container bg_taocan">
<div class="row">
<div class="col-lg-3 text-center photo">
<div class="photoK">
@*<img src="/@item.Product.Image">*@
<p>@item.Product.Name</p>
</div>
</div>
<div class="col-lg-6 intro">
<p>@item.Product.Name</p>
@foreach (var str in item.Product.ContentLine)
{
<p>·@str</p>
}
</div>
<div class="col-lg-3 text-center twoButton">
@if (user == null)
{
<p><button type="button" class="btn btn-warning testLogin" a-productId="@item.Product.Id">免费试用</button></p>
<p><button type="button" class="btn btn-warning reBuy">续费通道</button></p>
}
else
{
<p>
<a asp-action="test" asp-controller="product" asp-route-id="@item.Product.Id"><button type="button" class="btn btn-warning">免费试用</button></a>
</p>
<p>
<a asp-action="myaccounts" asp-controller="user"><button type="button" class="btn btn-warning">续费通道</button></a>
</p>
}
</div>
</div>
</div>
<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>
<div class="card">
@foreach (var package in item.Packages.Where(m => m.IsTest == 0 && m.Status == 1))
{
<div class="item packageitem" id="@("pkg"+package.Id)" a-pkg-id="@package.Id">
<p class="tianka">@package.Name</p>
<p><span class="price">@package.Price</span>元</p>
<p class="yuanjia">原价:<span>@package.LinePrice</span>元</p>
<p>@(package.DayPrice)元/天</p>
<p class="qixian">@package.Profile</p>
<img src="~/img/check.png" class="cardCheck">
</div>
}
</div>
<p class="youhuiNew mtop">需求5个以上可以联系客服设置优惠价</p>
<p class="youhuiNew">温馨提示:若您之前享优惠价,请联系客服帮你改价哦</p>
@if (user == null)
{
<p class="tijiao"><button type="button" class="btn btn-primary login">提交</button></p>
}
else
{
<p class="tijiao"><button type="button" class="btn btn-primary btn-submit">提交</button></p>
}
</div>
}
</div>
</div>
<div class="clear"></div>
</div>
@section Scripts{
<script type="text/javascript">
var currentPkgId = 0;
var testProductId = 0;
function select(id) {
var el = "#p" + id;
var packageBox = "#box" + id;
$(".packagebox").hide();
$(packageBox).show();
$(el).addClass("on");
$(el).siblings().removeClass("on");
var pkgid = $(el).attr("a-pkg-id");
selectPackage(pkgid);
}
function selectPackage(id) {
currentPkgId = id;
var el = "#pkg" + id;
//$(".packageitem").hide();
//$(el).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".cardCheck").show();
$(el).siblings().find(".cardCheck").hide();
}
function loginSuccess(data) {
window.location.href = "Buy?id=" + currentPkgId;
}
function testLoginSuccess(data) {
window.location.href = "Test?id=" + testProductId;
}
function reBuyLoginSuccess(data) {
window.location.href = "/User/MyAccounts";
}
$(function () {
$(".productItem").click(function () {
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".check").show();
//$(this).siblings().find(".check").hide();
var pid = $(this).attr('a-pid');
select(pid);
});
$(".card .item").click(function () {
currentPkgId = $(this).attr('a-pkg-id');
selectPackage(currentPkgId)
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".cardCheck").show();
//$(this).siblings().find(".cardCheck").hide();
})
$(".btn-submit").click(function () {
window.location.href = "Buy?id=" + currentPkgId;
})
$(".testLogin").click(function () {
loginCallback = testLoginSuccess;
testProductId = $(this).attr("a-productId");
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
$(".reBuy").click(function () {
loginCallback = reBuyLoginSuccess;
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
})
select(@defaultProduct.Id)
</script>
@*<script type="text/javascript">
$(".main-page .nav div").mouseenter(function () {
var $this = $(this);
var index = $this.index();
}).mouseleave(function () {
var $this = $(this);
var index = $this.index();
}).click(function () {
var $this = $(this);
var index = $this.index();
var l = -(index * 800);
$(".main-page .nav div").removeClass("on");
$(".main-page .nav div").eq(index).addClass("on");
$(".main-page .content .con-ggh:eq(0)").stop().animate({ "margin-top": l }, 500);
});
</script>*@
}

View File

@@ -1,197 +1,197 @@
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var productPackages = Model.Where(m => m.Product.Id == defaultProduct.Id).FirstOrDefault().Packages.Where(p=>p.Status == 1 && p.IsTest == 0);//.Select(m => m.Packages.Where(p => p.Status == 1 && p.IsTest == 0).FirstOrDefault());
var defaultPackage = productPackages.FirstOrDefault();// Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<!-- ad -->
<div class="container-fluid ad">
<a asp-action="taobao" asp-controller="article"> <img src="~/img/acBanner.png"></a>
</div>
<!-- con -->
<div class="container">
<p class="text-center tit"><img src="~/img/titi_choose.png"></p>
<div class="cpshow">
@foreach (var item in Model)
{
<div class="item" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">
<p class="cpimg"><img src="@P(item.Product.Image)" /></p>
<p>@item.Product.Name</p>
<img src="~/img/check.png" class="check">
</div>
}
</div>
</div>
<!-- form -->
@foreach (var item in Model)
{
<div class="container stepOne packagebox" id="@("box"+item.Product.Id)">
<div class="container bg_taocan">
<div class="row">
<div class="col-lg-3 text-center photo">
<div class="photoK">
<img src="/@item.Product.Image">
<p>@item.Product.Name</p>
</div>
</div>
<div class="col-lg-6 intro">
<p>@item.Product.Name</p>
@foreach (var str in item.Product.ContentLine)
{
<p>·@str</p>
}
@*<p>·不限速网速最高可达50兆</p>
<p>·支持手机,电脑,模拟器</p>
<p>·200多个城市+全国混波量ip千万级</p>
<p>·带宽6-10兆</p>
<p>·断开再链接换ip</p>*@
</div>
<div class="col-lg-3 text-center twoButton">
@if (user == null)
{
<p><button type="button" class="btn btn-warning testLogin" a-productId="@item.Product.Id">免费试用</button></p>
<p><button type="button" class="btn btn-warning reBuy">续费通道</button></p>
}
else
{
<p>
<a asp-action="test" asp-controller="product" asp-route-id="@item.Product.Id"><button type="button" class="btn btn-warning">免费试用</button></a>
</p>
<p>
<a asp-action="myaccounts" asp-controller="user"><button type="button" class="btn btn-warning">续费通道</button></a>
</p>
}
</div>
</div>
</div>
<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>
<div class="card">
@foreach (var package in item.Packages.Where(m => m.IsTest == 0 && m.Status == 1))
{
<div class="item packageitem" id="@("pkg"+package.Id)" a-pkg-id="@package.Id">
<p class="tianka">@package.Name</p>
<p><span class="price">@package.Price</span>元</p>
<p class="yuanjia">原价:<span>@package.LinePrice</span>元</p>
<p>@(package.DayPrice)元/天</p>
<p class="qixian">@package.Profile</p>
<img src="~/img/check.png" class="cardCheck">
</div>
}
</div>
<p class="youhui">需求5个以上可以联系客服设置优惠价</p>
<p class="youhui">温馨提示:若您之前享优惠价,请联系客服帮你改价哦</p>
@if (user == null)
{
<p class="tijiao"><button type="button" class="btn btn-primary login">提交</button></p>
}
else
{
<p class="tijiao"><button type="button" class="btn btn-primary btn-submit">提交</button></p>
}
</div>
}
@section Scripts{
<script type="text/javascript">
var currentPkgId = 0;
var testProductId = 0;
function select(id) {
var el = "#p" + id;
var el_box = "#box" + id;
$(".packagebox").hide();
$(el_box).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".check").show();
$(el).siblings().find(".check").hide();
var pkgid = $(el).attr("a-pkg-id");
selectPackage(pkgid);
}
function selectPackage(id) {
currentPkgId = id;
var el = "#pkg" + id;
//$(".packageitem").hide();
//$(el).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".cardCheck").show();
$(el).siblings().find(".cardCheck").hide();
}
function loginSuccess(data) {
window.location.href = "Buy?id=" + currentPkgId;
}
function testLoginSuccess(data) {
window.location.href = "Test?id=" + testProductId;
}
function reBuyLoginSuccess(data) {
window.location.href = "/User/MyAccounts";
}
$(function () {
$(".cpshow .item").click(function () {
$(this).addClass("kuang");
$(this).siblings().removeClass("kuang");
$(this).find(".check").show();
$(this).siblings().find(".check").hide();
var pid = $(this).attr('a-pid');
select(pid);
});
$(".card .item").click(function () {
currentPkgId = $(this).attr('a-pkg-id');
selectPackage(currentPkgId)
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".cardCheck").show();
//$(this).siblings().find(".cardCheck").hide();
})
$(".btn-submit").click(function () {
window.location.href = "Buy?id=" + currentPkgId;
})
$(".testLogin").click(function () {
loginCallback = testLoginSuccess;
testProductId = $(this).attr("a-productId");
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
$(".reBuy").click(function () {
loginCallback = reBuyLoginSuccess;
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
})
select(@defaultProduct.Id)
</script>
@using Hncore.Pass.Vpn.Response.Product
@using Microsoft.Extensions.Configuration
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@inject IConfiguration m_Configuration
@model List<ProductWithPackageResponse>
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
var pid = this.Context.Request.Query.ContainsKey("id") ? this.Context.Request.Query["id"].ToString() : "";
var defaultProduct = Model.Select(m => m.Product).FirstOrDefault();
if (pid == "")
{
pid = Model.Select(m => m.Product).FirstOrDefault().Id.ToString();
}
else
{
defaultProduct = Model.Select(m => m.Product).FirstOrDefault(m => m.Id.ToString() == pid);
}
var productPackages = Model.Where(m => m.Product.Id == defaultProduct.Id).FirstOrDefault().Packages.Where(p=>p.Status == 1 && p.IsTest == 0);//.Select(m => m.Packages.Where(p => p.Status == 1 && p.IsTest == 0).FirstOrDefault());
var defaultPackage = productPackages.FirstOrDefault();// Model.Where(m => m.Product.Id == defaultProduct.Id).Select(m => m.Packages.FirstOrDefault()).FirstOrDefault();
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<!-- ad -->
<div class="container-fluid ad">
<a asp-action="taobao" asp-controller="article"> <img src="~/img/acBanner.png"></a>
</div>
<!-- con -->
<div class="container">
<p class="text-center tit"><img src="~/img/titi_choose.png"></p>
<div class="cpshow">
@foreach (var item in Model)
{
<div class="item" id="@("p"+item.Product.Id)" a-pid="@item.Product.Id" a-pkg-id="@(item.Packages.FirstOrDefault(m=>m.Status==1).Id)">
<p class="cpimg"><img src="@P(item.Product.Image)" /></p>
<p>@item.Product.Name</p>
<img src="~/img/check.png" class="check">
</div>
}
</div>
</div>
<!-- form -->
@foreach (var item in Model)
{
<div class="container stepOne packagebox" id="@("box"+item.Product.Id)">
<div class="container bg_taocan">
<div class="row">
<div class="col-lg-3 text-center photo">
<div class="photoK">
<img src="/@item.Product.Image">
<p>@item.Product.Name</p>
</div>
</div>
<div class="col-lg-6 intro">
<p>@item.Product.Name</p>
@foreach (var str in item.Product.ContentLine)
{
<p>·@str</p>
}
@*<p>·不限速网速最高可达50兆</p>
<p>·支持手机,电脑,模拟器</p>
<p>·200多个城市+全国混波量ip千万级</p>
<p>·带宽6-10兆</p>
<p>·断开再链接换ip</p>*@
</div>
<div class="col-lg-3 text-center twoButton">
@if (user == null)
{
<p><button type="button" class="btn btn-warning testLogin" a-productId="@item.Product.Id">免费试用</button></p>
<p><button type="button" class="btn btn-warning reBuy">续费通道</button></p>
}
else
{
<p>
<a asp-action="test" asp-controller="product" asp-route-id="@item.Product.Id"><button type="button" class="btn btn-warning">免费试用</button></a>
</p>
<p>
<a asp-action="myaccounts" asp-controller="user"><button type="button" class="btn btn-warning">续费通道</button></a>
</p>
}
</div>
</div>
</div>
<p class="text-center nameSmall">—<span>@item.Product.Name</span>—</p>
<div class="card">
@foreach (var package in item.Packages.Where(m => m.IsTest == 0 && m.Status == 1))
{
<div class="item packageitem" id="@("pkg"+package.Id)" a-pkg-id="@package.Id">
<p class="tianka">@package.Name</p>
<p><span class="price">@package.Price</span>元</p>
<p class="yuanjia">原价:<span>@package.LinePrice</span>元</p>
<p>@(package.DayPrice)元/天</p>
<p class="qixian">@package.Profile</p>
<img src="~/img/check.png" class="cardCheck">
</div>
}
</div>
<p class="youhui">需求5个以上可以联系客服设置优惠价</p>
<p class="youhui">温馨提示:若您之前享优惠价,请联系客服帮你改价哦</p>
@if (user == null)
{
<p class="tijiao"><button type="button" class="btn btn-primary login">提交</button></p>
}
else
{
<p class="tijiao"><button type="button" class="btn btn-primary btn-submit">提交</button></p>
}
</div>
}
@section Scripts{
<script type="text/javascript">
var currentPkgId = 0;
var testProductId = 0;
function select(id) {
var el = "#p" + id;
var el_box = "#box" + id;
$(".packagebox").hide();
$(el_box).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".check").show();
$(el).siblings().find(".check").hide();
var pkgid = $(el).attr("a-pkg-id");
selectPackage(pkgid);
}
function selectPackage(id) {
currentPkgId = id;
var el = "#pkg" + id;
//$(".packageitem").hide();
//$(el).show()
$(el).addClass("kuang");
$(el).siblings().removeClass("kuang");
$(el).find(".cardCheck").show();
$(el).siblings().find(".cardCheck").hide();
}
function loginSuccess(data) {
window.location.href = "Buy?id=" + currentPkgId;
}
function testLoginSuccess(data) {
window.location.href = "Test?id=" + testProductId;
}
function reBuyLoginSuccess(data) {
window.location.href = "/User/MyAccounts";
}
$(function () {
$(".cpshow .item").click(function () {
$(this).addClass("kuang");
$(this).siblings().removeClass("kuang");
$(this).find(".check").show();
$(this).siblings().find(".check").hide();
var pid = $(this).attr('a-pid');
select(pid);
});
$(".card .item").click(function () {
currentPkgId = $(this).attr('a-pkg-id');
selectPackage(currentPkgId)
//$(this).addClass("kuang");
//$(this).siblings().removeClass("kuang");
//$(this).find(".cardCheck").show();
//$(this).siblings().find(".cardCheck").hide();
})
$(".btn-submit").click(function () {
window.location.href = "Buy?id=" + currentPkgId;
})
$(".testLogin").click(function () {
loginCallback = testLoginSuccess;
testProductId = $(this).attr("a-productId");
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
$(".reBuy").click(function () {
loginCallback = reBuyLoginSuccess;
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
});
})
select(@defaultProduct.Id)
</script>
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,178 +1,178 @@
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject IConfiguration m_Configuration
@model List<ProductEntity>
@{
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div class="col-lg-4">
</div>
<div class="col-lg-4 text-center">
<p class="simg"><img src="~/img/img_soft.png"></p>
<p class="sintro">软件和账户必须为同一产品才能使用</p>
</div>
<div class="col-lg-4 text-right">
<a href="#" class="jiaocheng">使用教程→</a>
</div>
</div>
</div>
</div>
<div class="container">
<div class="soft">
@foreach (var item in Model.Where(m=>m.Sort!=1000 && m.Id!=12 && m.Id!=21 && m.OnLine==1).OrderBy(m => m.Sort))
{
<div class="sitem">
<div class="smodel">
@if (item.Id == 20)
{
<div class="softName" style="width:200px;text-align:center;height:50px;">
无极-共享独享通用
</div>
} else {
<div class="softName" style="width:200px;text-align:center;height:50px;">
@item.Name
</div>
<div class="item">
<a href="@item.PcClientDownloadUrl"> <button type="button" class="btn btn-sdefault">Windows</button></a>
</div>
}
@if (!string.IsNullOrEmpty(item.DroidDownloadUrl))
{
<div class="item" >
<a href="@item.DroidDownloadUrl"> <button type="button" class="btn btn-sdefault">安卓APP</button></a>
</div>
<hr>
}
@if (item.Id != 3 && item.Id != 7 && item.Id != 9 && item.Id != 12 && item.Id != 20)
{
<div class="item">
<a href="@item.SimulatorDownloadUrl"> <button type="button" class="btn btn-sdefault">SSTP客户端</button></a>
</div>
}
@if (item.Id == 20)
{
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E5%AE%89%E5%8D%93-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.apk"> <button type="button" class="btn btn-sdefault">无极安卓<br>共享独享通用</button></a>
</div>
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E7%94%B5%E8%84%91-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.exe"> <button type="button" class="btn btn-sdefault">无极电脑<br>共享独享通用</button></a>
</div>
<br>
<br>
<br>
<div class="item">
<a id="ios_cc"> <button type="button" class="btn btn-sdefault">扫描下载<br>苹果客户端</button></a>
</div>
<div id="qrcode_s">
</div>
}
<p>免安装,下载后直接打开</p>
</div>
</div>
}
<div class="sitem" style="border: 1px solid red;">
<div class="smodel">
<div class="softName" style="width:200px;text-align:center;height:50px;">
通用版
</div>
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E9%80%9A%E7%94%A8%E5%8A%A8%E6%80%81IP%E7%99%BB%E5%BD%95%E5%99%A8.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">通用版电脑拨号器</button></a>
</div>
<p>免安装,下载后直接打开</p>
</div>
</div>
<div class="sitem">
</div>
<div class="sitem" style="border: 1px solid red;">
<div class="smodel">
<div class="softName" style="width:200px;text-align:center;height:50px;">
代理商专用客户端
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%20-%20%E4%BB%A3%E7%90%86%E7%89%88.zip"> <button type="button" class="btn btn-sdefault" style="width: auto;">西瓜IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">西瓜IP-安卓</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E4%BB%A3%E7%90%86%E7%89%88%203.5.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">极客IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">极客IP-安卓</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">迅连IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">讯连IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">强子IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">强子IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E7%81%AB%E7%8B%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%98%9F%E6%98%9FIP%E7%94%B5%E8%84%91%E7%AB%AF-4.10%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">星星IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%98%91%E8%8F%87IP-2-17.zip"> <button type="button" class="btn btn-sdefault" style="width: auto;">蘑菇IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://client.syssuper.com:8000/soft/huohupubnet.exe"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://app.cn98.net:8000/huohupubnet.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://client.ipsoft365.com:8000/soft/yunniupubdtip.exe"> <button type="button" class="btn btn-sdefault" style="width: auto;">云牛IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://app.ipsoft168.com:8000/yunniupubdtip.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">云牛IP-安卓端</button></a>
</div>
<p>免安装,下载后直接打开</p>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="https://static.runoob.com/assets/qrcode/qrcode.min.js"></script>
<script>
$("#ios_cc").hover(function(){
$("#qrcode_s").html('');
new QRCode(document.getElementById("qrcode_s"), {
text: 'https://apps.apple.com/cn/app/jie-zou-da-shi/id1448657437',
width : 500,
height : 500
});
},function(){
$("#qrcode_s").html('');
});
@using Hncore.Pass.Vpn.Domain
@using Microsoft.Extensions.Configuration
@inject IConfiguration m_Configuration
@model List<ProductEntity>
@{
var baseUrl = m_Configuration["BaseInfoUrl"];
Func<string, string> P = (path) => $"{baseUrl}{path}";
}
<div class="container-fluid softBg">
<div class="container">
<div class="row">
<div class="col-lg-4">
</div>
<div class="col-lg-4 text-center">
<p class="simg"><img src="~/img/img_soft.png"></p>
<p class="sintro">软件和账户必须为同一产品才能使用</p>
</div>
<div class="col-lg-4 text-right">
<a href="#" class="jiaocheng">使用教程→</a>
</div>
</div>
</div>
</div>
<div class="container">
<div class="soft">
@foreach (var item in Model.Where(m=>m.Sort!=1000 && m.Id!=12 && m.Id!=21 && m.OnLine==1).OrderBy(m => m.Sort))
{
<div class="sitem">
<div class="smodel">
@if (item.Id == 20)
{
<div class="softName" style="width:200px;text-align:center;height:50px;">
无极-共享独享通用
</div>
} else {
<div class="softName" style="width:200px;text-align:center;height:50px;">
@item.Name
</div>
<div class="item">
<a href="@item.PcClientDownloadUrl"> <button type="button" class="btn btn-sdefault">Windows</button></a>
</div>
}
@if (!string.IsNullOrEmpty(item.DroidDownloadUrl))
{
<div class="item" >
<a href="@item.DroidDownloadUrl"> <button type="button" class="btn btn-sdefault">安卓APP</button></a>
</div>
<hr>
}
@if (item.Id != 3 && item.Id != 7 && item.Id != 9 && item.Id != 12 && item.Id != 20)
{
<div class="item">
<a href="@item.SimulatorDownloadUrl"> <button type="button" class="btn btn-sdefault">SSTP客户端</button></a>
</div>
}
@if (item.Id == 20)
{
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E5%AE%89%E5%8D%93-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.apk"> <button type="button" class="btn btn-sdefault">无极安卓<br>共享独享通用</button></a>
</div>
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%97%A0%E6%9E%81%E7%94%B5%E8%84%91-%E5%85%B1%E4%BA%AB%E7%8B%AC%E4%BA%AB%E9%80%9A%E7%94%A8.exe"> <button type="button" class="btn btn-sdefault">无极电脑<br>共享独享通用</button></a>
</div>
<br>
<br>
<br>
<div class="item">
<a id="ios_cc"> <button type="button" class="btn btn-sdefault">扫描下载<br>苹果客户端</button></a>
</div>
<div id="qrcode_s">
</div>
}
<p>免安装,下载后直接打开</p>
</div>
</div>
}
<div class="sitem" style="border: 1px solid red;">
<div class="smodel">
<div class="softName" style="width:200px;text-align:center;height:50px;">
通用版
</div>
<div class="item">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E9%80%9A%E7%94%A8%E5%8A%A8%E6%80%81IP%E7%99%BB%E5%BD%95%E5%99%A8.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">通用版电脑拨号器</button></a>
</div>
<p>免安装,下载后直接打开</p>
</div>
</div>
<div class="sitem">
</div>
<div class="sitem" style="border: 1px solid red;">
<div class="smodel">
<div class="softName" style="width:200px;text-align:center;height:50px;">
代理商专用客户端
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%20-%20%E4%BB%A3%E7%90%86%E7%89%88.zip"> <button type="button" class="btn btn-sdefault" style="width: auto;">西瓜IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%A5%BF%E7%93%9CIP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">西瓜IP-安卓</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E4%BB%A3%E7%90%86%E7%89%88%203.5.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">极客IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%9E%81%E5%AE%A2IP%E5%AE%89%E5%8D%93%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">极客IP-安卓</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">迅连IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%AE%AF%E8%BF%9EIP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">讯连IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E7%94%B5%E8%84%91%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">强子IP-电脑版</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E5%BC%BA%E5%AD%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">强子IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E7%81%AB%E7%8B%90IP%E5%AE%89%E5%8D%93%E7%AB%AF-%E4%BB%A3%E7%90%86%E7%89%88.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E6%98%9F%E6%98%9FIP%E7%94%B5%E8%84%91%E7%AB%AF-4.10%E4%BB%A3%E7%90%86%E7%89%88.rar"> <button type="button" class="btn btn-sdefault" style="width: auto;">星星IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://wuxinxikehuduan.image.qiangzipptp.top/%E8%98%91%E8%8F%87IP-2-17.zip"> <button type="button" class="btn btn-sdefault" style="width: auto;">蘑菇IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://client.syssuper.com:8000/soft/huohupubnet.exe"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://app.cn98.net:8000/huohupubnet.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">火狐IP-安卓端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://client.ipsoft365.com:8000/soft/yunniupubdtip.exe"> <button type="button" class="btn btn-sdefault" style="width: auto;">云牛IP-电脑端</button></a>
</div>
<div class="item" style="margin-bottom: 5px;">
<a href="http://app.ipsoft168.com:8000/yunniupubdtip.apk"> <button type="button" class="btn btn-sdefault" style="width: auto;">云牛IP-安卓端</button></a>
</div>
<p>免安装,下载后直接打开</p>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="https://static.runoob.com/assets/qrcode/qrcode.min.js"></script>
<script>
$("#ios_cc").hover(function(){
$("#qrcode_s").html('');
new QRCode(document.getElementById("qrcode_s"), {
text: 'https://apps.apple.com/cn/app/jie-zou-da-shi/id1448657437',
width : 500,
height : 500
});
},function(){
$("#qrcode_s").html('');
});
</script>

View File

@@ -1,150 +1,150 @@
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Infrastructure.Common
@model PackageInfoResponse
@inject Hncore.Pass.Vpn.Service.ProductAccountService m_AccountService
@{
ViewData["Title"] = "领取试用";
var t = this.Context.Request.GetInt("t");
var randomPwd = ValidateCodeHelper.MakeNumCode(3).ToLower();
var randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
while (m_AccountService.Exist(m => m.Account == randomAccount))
{
randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
}
}
<script type="text/javascript">
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定进入实名认证。');
window.location.href="/User/Index";
}
}
});
</script>
<style>
.tip {
color: red;
text-align: center
}
</style>
<div class="container-fluid top">
<div class="container">
<div class="row">
<div class="col-lg-3 text-center">
当前已选产品:
</div>
<div class="col-lg-6">
<div class="selectCard">
@*<div class="item">
<p class="selectPhoto"> <img src="/@Model.Product.Image"></p>
<p>@Model.Product.Name</p>
</div>*@
<div class="item">
<p style="padding-top: 40px; font-size: 25px; font-weight: bold; color: #ee7a69;">@Model.Product.Name</p>
</div>
<div class="item">
<p class="sname">@Model.Package.Name</p>
<p class="sprice">0元</p>
<p class="stime">@Model.Package.Profile</p>
</div>
<div class="item">
<p class="zongjia"><span>@Model.Package.Price</span>元</p>
</div>
</div>
<p class="tishi tishika" style="text-align:center">*请务必选好所需商品,换货会产生费用</p>
</div>
<div class="col-lg-3">
<a asp-action="index" asp-controller="product">返回重新选择》</a>
</div>
</div>
</div>
</div>
<!-- 试用 -->
<div class="container biaodan">
<div class="row">
<div class="col-lg-3 text-right shuruname">
<p>IP账号名称</p>
<p>IP账号密码</p>
</div>
<div class="col-lg-4 text-left shuru">
<p><input type="text" name="" id="account" value="@randomAccount" /></p>
<p><input type="text" name="" id="pwd" value="@randomPwd" /></p>
<div class="btnlingqu">
<div class="item cishu">
剩余试用次数<span style="color:red">@(Model.RestTimes)</span>
</div>
<div style="text-align: center;">
<a href='http://www.juip.com/User/Index' class="item tip"></a>
</div>
<div class="item tijiao lingqu">
@if (Model.RestTimes > 0 && Model.Package.Status == 1)
{
<button type="button" class="btn btn-primary" onclick="create()">领取试用</button>
}
@if (Model.Package.Status == 0)
{
<span class="tip">
该产品暂不能测试
</span>
}
</div>
</div>
</div>
@*<div class="col-lg-5 text-left">
<p class="tishi chongfu">*此用户名重复,请重新输入</p>
</div>*@
</div>
</div>
@section Scripts{
<script>
function create() {
var data = {
ProductId:@(Model.Product.Id),
PackageId: @(Model.Package.Id),
Account: $('#account').val(),
Pwd: $('#pwd').val()
};
if (data.Account == '' || data.Pwd == '') {
$(".tip").text("账户和密码不能为空");
return;
}
$.ajax({
type: 'POST',
url: '/api/course/v1/productaccount/CreateTestAccount',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("领取成功")
window.location.href = "/user/myaccounts";
} else {
$(".tip").text(res.Message);
}
},
dataType: "json"
});
}
</script>
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Infrastructure.Common
@model PackageInfoResponse
@inject Hncore.Pass.Vpn.Service.ProductAccountService m_AccountService
@{
ViewData["Title"] = "领取试用";
var t = this.Context.Request.GetInt("t");
var randomPwd = ValidateCodeHelper.MakeNumCode(3).ToLower();
var randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
while (m_AccountService.Exist(m => m.Account == randomAccount))
{
randomAccount = ValidateCodeHelper.MakeCharCode(2).ToLower() + ValidateCodeHelper.MakeNumCode(4).ToLower();
}
}
<script type="text/javascript">
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定进入实名认证。');
window.location.href="/User/Index";
}
}
});
</script>
<style>
.tip {
color: red;
text-align: center
}
</style>
<div class="container-fluid top">
<div class="container">
<div class="row">
<div class="col-lg-3 text-center">
当前已选产品:
</div>
<div class="col-lg-6">
<div class="selectCard">
@*<div class="item">
<p class="selectPhoto"> <img src="/@Model.Product.Image"></p>
<p>@Model.Product.Name</p>
</div>*@
<div class="item">
<p style="padding-top: 40px; font-size: 25px; font-weight: bold; color: #ee7a69;">@Model.Product.Name</p>
</div>
<div class="item">
<p class="sname">@Model.Package.Name</p>
<p class="sprice">0元</p>
<p class="stime">@Model.Package.Profile</p>
</div>
<div class="item">
<p class="zongjia"><span>@Model.Package.Price</span>元</p>
</div>
</div>
<p class="tishi tishika" style="text-align:center">*请务必选好所需商品,换货会产生费用</p>
</div>
<div class="col-lg-3">
<a asp-action="index" asp-controller="product">返回重新选择》</a>
</div>
</div>
</div>
</div>
<!-- 试用 -->
<div class="container biaodan">
<div class="row">
<div class="col-lg-3 text-right shuruname">
<p>IP账号名称</p>
<p>IP账号密码</p>
</div>
<div class="col-lg-4 text-left shuru">
<p><input type="text" name="" id="account" value="@randomAccount" /></p>
<p><input type="text" name="" id="pwd" value="@randomPwd" /></p>
<div class="btnlingqu">
<div class="item cishu">
剩余试用次数<span style="color:red">@(Model.RestTimes)</span>
</div>
<div style="text-align: center;">
<a href='http://www.juip.com/User/Index' class="item tip"></a>
</div>
<div class="item tijiao lingqu">
@if (Model.RestTimes > 0 && Model.Package.Status == 1)
{
<button type="button" class="btn btn-primary" onclick="create()">领取试用</button>
}
@if (Model.Package.Status == 0)
{
<span class="tip">
该产品暂不能测试
</span>
}
</div>
</div>
</div>
@*<div class="col-lg-5 text-left">
<p class="tishi chongfu">*此用户名重复,请重新输入</p>
</div>*@
</div>
</div>
@section Scripts{
<script>
function create() {
var data = {
ProductId:@(Model.Product.Id),
PackageId: @(Model.Package.Id),
Account: $('#account').val(),
Pwd: $('#pwd').val()
};
if (data.Account == '' || data.Pwd == '') {
$(".tip").text("账户和密码不能为空");
return;
}
$.ajax({
type: 'POST',
url: '/api/course/v1/productaccount/CreateTestAccount',
contentType: "application/json",
data: JSON.stringify(data),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
alert("领取成功")
window.location.href = "/user/myaccounts";
} else {
$(".tip").text(res.Message);
}
},
dataType: "json"
});
}
</script>
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,444 +1,444 @@
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@model PackageInfoResponse
@inject UserService m_UserService
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
<script src="~/js/vue.js"></script>
<script type="text/javascript">
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定进入实名认证。');
window.location.href="/User/Index";
}
}
});
$(function () {
$('.spinner .btn:first-of-type').on('click', function () {
$('.spinner input').val(parseInt($('.spinner input').val(), 10) + 1);
});
$('.spinner .btn:last-of-type').on('click', function () {
$('.spinner input').val(parseInt($('.spinner input').val(), 10) - 1);
});
$(".dan").addClass("cu");
$(".dan").click(function () {
$(this).addClass("cu");
$(".pi").removeClass("cu");
$(".t1").show();
$(".t2").hide();
});
$(".pi").click(function () {
$(this).addClass("cu");
$(".dan").removeClass("cu");
$(".t1").hide();
$(".t2").show();
})
})
</script>
<vc:pay-wait></vc:pay-wait>
<vc:pay-ok></vc:pay-ok>
<div class="container-fluid top">
<div class="container">
<div class="row">
<div class="col-lg-3 text-center">
当前已选产品:
</div>
<div class="col-lg-6">
<div class="selectCard">
<div class="item">
<p style="padding-top: 40px; font-size: 25px; font-weight: bold; color: #ee7a69;">@Model.Product.Name</p>
</div>
<div class="item">
<p class="sname">@Model.Package.Name</p>
<p class="sprice">@(Model.Package.DayPrice)元/天</p>
<p class="stime">@Model.Package.Profile</p>
</div>
<div class="item">
@if(Model.Package.Price < 60 && (Model.Package.Id == 64||Model.Package.Id == 1004)){
<p class="zongjia"><span>60.00</span>元</p>
} else {
<p class="zongjia"><span>@Model.Package.Price</span>元</p>
}
</div>
</div>
<p class="tishi tishika" style="text-align:center">*请务必选好所需商品,换货会产生费用</p>
</div>
<div class="col-lg-3">
<a href="javascript:history.go(-1)">返回重新选择》</a>
</div>
</div>
</div>
</div>
<div id="app">
<!-- con -->
<div class="container zhuce">
<div class="reg_tab">
<div class="item dan active_dan">
续费
</div>
</div>
</div>
<div class="container t1">
<form action="~/product/CreateOrder" method="post" id="accountForm">
<input type="hidden" name="PackageId" value="@Model.Package.Id" />
<input type="hidden" name="OrderType" value="1" />
<div class="row">
<div class="col-lg-4 text-right">
IP产品账号
</div>
<div class="col-lg-4 regDan">
<input type="text" name="Account" value="" v-model="OneBuyModel.Account" disabled />
<p class="jinggao" id="sAccountTip"></p>
</div>
<div class="col-lg-4 text-left warnText">
<sapn class="grayText">支持10位以内字母数字</sapn>
</div>
</div>
@*<div class="row">
<div class="col-lg-4 text-right">
IP产品密码
</div>
<div class="col-lg-4 regDan">
<input type="text" name="Pwd" v-model="OneBuyModel.Pwd" />
</div>
<div class="col-lg-4 text-left">
<span class="grayText">支持6位以内字母数字</span>
</div>
</div>*@
<div class="row">
<div class="col-lg-4 text-right">
连接数:
</div>
<div class="col-lg-4">
<div class="buchang">
<div class="item">
{{OneBuyModel.ConnectCount}}
</div>
</div>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
选择优惠券:
</div>
<div class="col-lg-4 regDan">
<div class="dropdown">
<select name="" class="btn btn-default dropdown-toggle" v-model="OneBuyModel.CouponId">
<option value="0">请选择优惠券</option>
<option v-for="item in Coupons" :value="item.Id">{{item.Name}}</option>
</select>
</div>
</div>
<div class="col-lg-4 text-left">
<span class="grayText">淘宝每次下单获得优惠券</span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
余额:
</div>
<div class="col-lg-4">
当前账户余额<span class="blueText">@(userEntity.RestAmount)</span>元
<a href="/User/Index">前往充值</a>
</div>
<div class="col-lg-4">
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
支付方式:
</div>
<div class="col-lg-4 zhifufangshi">
<input id="zhifubaopay_s1" type="radio" name="OPayType" value="100" checked v-model="OneBuyModel.OPayType"> <img src="~/img/zfb.png"><label for="zhifubaopay_s1">支付宝支付</label>
<input id="weixinpay_s1" type="radio" name="OPayType" value="70" v-model="OneBuyModel.OPayType"> <img src="~/img/wx.png"><label for="weixinpay_s1">微信支付</label>
<input id="UseAccountAmount_s1" type="radio" name="OPayType" value="1" v-model="OneBuyModel.UseAccountAmount"> <label for="UseAccountAmount_s1">余额支付</label>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
总金额:
</div>
<div class="col-lg-4">
<span class="blueText">{{TotalAmount}}</span>元
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
应付款:
</div>
<div class="col-lg-4">
<span style="font-size: 30px;font-weight: bold;">{{PayAmount}}</span>元
<span>{{auto_discount_text}}</span>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<p class="ijiao-tip" style="color:red">{{Tip}}</p>
<p class="tijiao"><button class="btn btn-primary pay-botton" type="button" v-on:click="onePay">确认支付</button></p>
</form>
</div>
<!-- 支付弹窗开始 -->
<div class="payMask">
<div class="payCon">
<img src="~/img/close.png" class="payClose" v-on:click="close">
<p class="payTit"><img src="~/img/wx.png">微信支付 收银台</p>
<div class="row">
<div class="col-lg-6 text-center">
@*<p>订单将在25分钟后关闭请及时付款</p>*@
<p>
@*<img id="wxPayQr" src="img/ewm.png">*@
<div id="qrcode" style="width:200px;height:200px"></div>
</p>
@*<p>二维码已经失效,请刷新后重新扫码支付</p>*@
</div>
<div class="col-lg-6 text-left leftBorder">
<p>新开订单</p>
<p class="payPrice">¥<span>{{OrderInfo.OtherPayAmount}}</span></p>
<p>收款方聚IP</p>
<p>下单时间:<span>{{OrderInfo.CreateTime}}</span></p>
<p>订单号:<span>{{OrderInfo.OrderNo}}</span></p>
</div>
</div>
</div>
</div>
<!-- 支付弹窗结束 -->
<div id="aliPayBox" style="display:none"></div>
</div>
@section Scripts{
<script>
var productId =@(Model.Product.Id);
var app = new Vue({
el: '#app',
data: {
auto_discount_text:'',
payHandler: null,
Tip:'',
RestAmount: @(userEntity.RestAmount),
Coupons: [],
SelectCoupon: {},
OrderInfo: {},
OneBuyModel: {
Price:@(Model.Package.Price),
PackageId:@(Model.Package.Id),
OrderType: @ViewBag.orderType,
Account: '@ViewBag.accounts',
CouponAmount: 0,
Pwd: '',
ConnectCount: @(ViewBag.ConnectCount),
CouponId: 0,
UseAccountAmount: 0,
OPayType: 100,
PayChannel:50,
}
},
computed: {
TotalAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count;
//西瓜极客优惠券
if((@(Model.Package.Id) == 64||@(Model.Package.Id) == 1004) && @(Model.Package.Price)<60){
total = this.OneBuyModel.ConnectCount * 60.00 * count
}
return total.toFixed(2);
},
PayAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var restAmout = this.OneBuyModel.UseAccountAmount == 1 ? this.RestAmount : 0;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount ;
total= total < 0 ? 0 : total;
total = parseFloat(total.toFixed(2));
//最低价
var min_cost = @(Model.Package.MinPrice) * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount;
if(total<min_cost){
total = min_cost;
}
return total.toFixed(2);
}
},
watch: {
'OneBuyModel.CouponId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
if( this.OneBuyModel.CouponId == 10000000){
return;
}
var totalAmount = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount;
for (var i = 0; i < this.Coupons.length; i++) {
var item = this.Coupons[i];
if (totalAmount < item.AllowMinAmount) {
continue;
}
if (item.Id == newValue) {
if (item.CouponType == 1) {//满减
this.OneBuyModel.CouponAmount = item.CouponValue;
} else {
//亲 请勿非法操作呦^.^ 请按照正常的流程操作 我们后台是有记录滴
if($(".sname").text() == '天卡'){
this.OneBuyModel.CouponAmount = totalAmount * item.CouponValue * 0.1;
} else {
alert('非天卡无效');
this.OneBuyModel.CouponId = '0';
}
}
return;
}
}
},
immediate: true
},
'OneBuyModel.OPayType': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
this.OneBuyModel.UseAccountAmount = false;
this.OneBuyModel.PayChannel = newValue == 70 ? 30 : 50;
},
immediate: true
}
},
mounted: function () {
this.getCoupons();
},
created () {
this.OneBuyModel.CouponId = 10000000
},
methods: {
getCoupons: function () {
var that = this;
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
console.log(res);
if (res.Code == 10000) {
if(@(Model.Package.Id) == 64||@(Model.Package.Id) == 1004){
var coupon_json = {
"Coupon":{
"Id":10000000,
"Name":"极客-西瓜-满减劵",
}
}
res.Data.push(coupon_json);
}
that.Coupons = res.Data.map(m => m.Coupon);
}
}
})
},
onePay: function () {
$(".pay-botton").hide();
if (this.OneBuyModel.UseAccountAmount) {
if (this.RestAmount < this.PayAmount){
alert('余额不足,请充值。您也可以使用微信、支付宝支付。');return;
} else {
this.RestAmount = this.RestAmount - this.PayAmount;
}
}
var that = this;
if (this.OneBuyModel.UseAccountAmount === true) this.OneBuyModel.UseAccountAmount = 1;
if (this.OneBuyModel.UseAccountAmount === false) this.OneBuyModel.UseAccountAmount = 0;
showPayWait();
$.ajax({
type: 'POST',
url: '/product/CreateOrder',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(this.OneBuyModel),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
hidePayWait();
if (res.Data == "00") {
alert("续费成功");
} else {
that.payCallback(res.Data)
that.isPay(res.Data.OrderInfo.OrderNo);
}
} else {
//that.Tip = res.Message;
tipPayWait(res.Message);
}
}
});
},
payCallback: function (data) {
this.OrderInfo = data.OrderInfo;
var payType = this.OrderInfo.PayType;
if (payType == 70) {
$(".payMask").show();
$('#qrcode').qrcode(data.PayData);
} else if (payType == 100) {
$("#aliPayBox").html(data.PayData);
}
},
isPay: function (orderNo) {
var that = this;
this.payHandler = setInterval(function () {
var url = '/product/IsPay?orderNo=' + orderNo;
$.ajax({
type: 'GET',
url: url,
success: function (res) {
if (res.Code == 10000 && res.Data == 1) {
clearInterval(that.payHandler);
$(".payMask").hide();
showPayOk();
//window.location.href = "/user/myaccounts";
}
}
})
}, 3000)
},
close() {
clearInterval(this.payHandler);
$('.payMask').hide();
$('#qrcode').empty();
}
}
})
</script>
@using Hncore.Pass.Vpn.Response.Product
@using Hncore.Infrastructure.Extension
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@using Hncore.Pass.BaseInfo.Service
@model PackageInfoResponse
@inject UserService m_UserService
@{
ViewData["Title"] = "购买产品";
UserLoginModel user = null;
Hncore.Pass.BaseInfo.Models.User userEntity = new Hncore.Pass.BaseInfo.Models.User();
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
userEntity = await m_UserService.GetById(user.Id);
}
}
<script src="~/js/vue.js"></script>
<script type="text/javascript">
let realverify = {
cookie:document.cookie,
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/api/Realname/index',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(realverify),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == -10000) {
alert('接主管部门要求,会员需要实名认证方可使用该产品,点击确定进入实名认证。');
window.location.href="/User/Index";
}
}
});
$(function () {
$('.spinner .btn:first-of-type').on('click', function () {
$('.spinner input').val(parseInt($('.spinner input').val(), 10) + 1);
});
$('.spinner .btn:last-of-type').on('click', function () {
$('.spinner input').val(parseInt($('.spinner input').val(), 10) - 1);
});
$(".dan").addClass("cu");
$(".dan").click(function () {
$(this).addClass("cu");
$(".pi").removeClass("cu");
$(".t1").show();
$(".t2").hide();
});
$(".pi").click(function () {
$(this).addClass("cu");
$(".dan").removeClass("cu");
$(".t1").hide();
$(".t2").show();
})
})
</script>
<vc:pay-wait></vc:pay-wait>
<vc:pay-ok></vc:pay-ok>
<div class="container-fluid top">
<div class="container">
<div class="row">
<div class="col-lg-3 text-center">
当前已选产品:
</div>
<div class="col-lg-6">
<div class="selectCard">
<div class="item">
<p style="padding-top: 40px; font-size: 25px; font-weight: bold; color: #ee7a69;">@Model.Product.Name</p>
</div>
<div class="item">
<p class="sname">@Model.Package.Name</p>
<p class="sprice">@(Model.Package.DayPrice)元/天</p>
<p class="stime">@Model.Package.Profile</p>
</div>
<div class="item">
@if(Model.Package.Price < 60 && (Model.Package.Id == 64||Model.Package.Id == 1004)){
<p class="zongjia"><span>60.00</span>元</p>
} else {
<p class="zongjia"><span>@Model.Package.Price</span>元</p>
}
</div>
</div>
<p class="tishi tishika" style="text-align:center">*请务必选好所需商品,换货会产生费用</p>
</div>
<div class="col-lg-3">
<a href="javascript:history.go(-1)">返回重新选择》</a>
</div>
</div>
</div>
</div>
<div id="app">
<!-- con -->
<div class="container zhuce">
<div class="reg_tab">
<div class="item dan active_dan">
续费
</div>
</div>
</div>
<div class="container t1">
<form action="~/product/CreateOrder" method="post" id="accountForm">
<input type="hidden" name="PackageId" value="@Model.Package.Id" />
<input type="hidden" name="OrderType" value="1" />
<div class="row">
<div class="col-lg-4 text-right">
IP产品账号
</div>
<div class="col-lg-4 regDan">
<input type="text" name="Account" value="" v-model="OneBuyModel.Account" disabled />
<p class="jinggao" id="sAccountTip"></p>
</div>
<div class="col-lg-4 text-left warnText">
<sapn class="grayText">支持10位以内字母数字</sapn>
</div>
</div>
@*<div class="row">
<div class="col-lg-4 text-right">
IP产品密码
</div>
<div class="col-lg-4 regDan">
<input type="text" name="Pwd" v-model="OneBuyModel.Pwd" />
</div>
<div class="col-lg-4 text-left">
<span class="grayText">支持6位以内字母数字</span>
</div>
</div>*@
<div class="row">
<div class="col-lg-4 text-right">
连接数:
</div>
<div class="col-lg-4">
<div class="buchang">
<div class="item">
{{OneBuyModel.ConnectCount}}
</div>
</div>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
选择优惠券:
</div>
<div class="col-lg-4 regDan">
<div class="dropdown">
<select name="" class="btn btn-default dropdown-toggle" v-model="OneBuyModel.CouponId">
<option value="0">请选择优惠券</option>
<option v-for="item in Coupons" :value="item.Id">{{item.Name}}</option>
</select>
</div>
</div>
<div class="col-lg-4 text-left">
<span class="grayText">淘宝每次下单获得优惠券</span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
余额:
</div>
<div class="col-lg-4">
当前账户余额<span class="blueText">@(userEntity.RestAmount)</span>元
<a href="/User/Index">前往充值</a>
</div>
<div class="col-lg-4">
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
支付方式:
</div>
<div class="col-lg-4 zhifufangshi">
<input id="zhifubaopay_s1" type="radio" name="OPayType" value="100" checked v-model="OneBuyModel.OPayType"> <img src="~/img/zfb.png"><label for="zhifubaopay_s1">支付宝支付</label>
<input id="weixinpay_s1" type="radio" name="OPayType" value="70" v-model="OneBuyModel.OPayType"> <img src="~/img/wx.png"><label for="weixinpay_s1">微信支付</label>
<input id="UseAccountAmount_s1" type="radio" name="OPayType" value="1" v-model="OneBuyModel.UseAccountAmount"> <label for="UseAccountAmount_s1">余额支付</label>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
总金额:
</div>
<div class="col-lg-4">
<span class="blueText">{{TotalAmount}}</span>元
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<div class="row">
<div class="col-lg-4 text-right">
应付款:
</div>
<div class="col-lg-4">
<span style="font-size: 30px;font-weight: bold;">{{PayAmount}}</span>元
<span>{{auto_discount_text}}</span>
</div>
<div class="col-lg-4 text-left">
<span></span>
</div>
</div>
<p class="ijiao-tip" style="color:red">{{Tip}}</p>
<p class="tijiao"><button class="btn btn-primary pay-botton" type="button" v-on:click="onePay">确认支付</button></p>
</form>
</div>
<!-- 支付弹窗开始 -->
<div class="payMask">
<div class="payCon">
<img src="~/img/close.png" class="payClose" v-on:click="close">
<p class="payTit"><img src="~/img/wx.png">微信支付 收银台</p>
<div class="row">
<div class="col-lg-6 text-center">
@*<p>订单将在25分钟后关闭请及时付款</p>*@
<p>
@*<img id="wxPayQr" src="img/ewm.png">*@
<div id="qrcode" style="width:200px;height:200px"></div>
</p>
@*<p>二维码已经失效,请刷新后重新扫码支付</p>*@
</div>
<div class="col-lg-6 text-left leftBorder">
<p>新开订单</p>
<p class="payPrice">¥<span>{{OrderInfo.OtherPayAmount}}</span></p>
<p>收款方聚IP</p>
<p>下单时间:<span>{{OrderInfo.CreateTime}}</span></p>
<p>订单号:<span>{{OrderInfo.OrderNo}}</span></p>
</div>
</div>
</div>
</div>
<!-- 支付弹窗结束 -->
<div id="aliPayBox" style="display:none"></div>
</div>
@section Scripts{
<script>
var productId =@(Model.Product.Id);
var app = new Vue({
el: '#app',
data: {
auto_discount_text:'',
payHandler: null,
Tip:'',
RestAmount: @(userEntity.RestAmount),
Coupons: [],
SelectCoupon: {},
OrderInfo: {},
OneBuyModel: {
Price:@(Model.Package.Price),
PackageId:@(Model.Package.Id),
OrderType: @ViewBag.orderType,
Account: '@ViewBag.accounts',
CouponAmount: 0,
Pwd: '',
ConnectCount: @(ViewBag.ConnectCount),
CouponId: 0,
UseAccountAmount: 0,
OPayType: 100,
PayChannel:50,
}
},
computed: {
TotalAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count;
//西瓜极客优惠券
if((@(Model.Package.Id) == 64||@(Model.Package.Id) == 1004) && @(Model.Package.Price)<60){
total = this.OneBuyModel.ConnectCount * 60.00 * count
}
return total.toFixed(2);
},
PayAmount: function () {
var count = this.OneBuyModel.Account.split(',').length;
var restAmout = this.OneBuyModel.UseAccountAmount == 1 ? this.RestAmount : 0;
var total = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount ;
total= total < 0 ? 0 : total;
total = parseFloat(total.toFixed(2));
//最低价
var min_cost = @(Model.Package.MinPrice) * this.OneBuyModel.ConnectCount * count - this.OneBuyModel.CouponAmount;
if(total<min_cost){
total = min_cost;
}
return total.toFixed(2);
}
},
watch: {
'OneBuyModel.CouponId': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
if( this.OneBuyModel.CouponId == 10000000){
return;
}
var totalAmount = this.OneBuyModel.Price * this.OneBuyModel.ConnectCount;
for (var i = 0; i < this.Coupons.length; i++) {
var item = this.Coupons[i];
if (totalAmount < item.AllowMinAmount) {
continue;
}
if (item.Id == newValue) {
if (item.CouponType == 1) {//满减
this.OneBuyModel.CouponAmount = item.CouponValue;
} else {
//亲 请勿非法操作呦^.^ 请按照正常的流程操作 我们后台是有记录滴
if($(".sname").text() == '天卡'){
this.OneBuyModel.CouponAmount = totalAmount * item.CouponValue * 0.1;
} else {
alert('非天卡无效');
this.OneBuyModel.CouponId = '0';
}
}
return;
}
}
},
immediate: true
},
'OneBuyModel.OPayType': { //加引号监听对象里的属性
handler: function (newValue, oldValue) {
this.OneBuyModel.UseAccountAmount = false;
this.OneBuyModel.PayChannel = newValue == 70 ? 30 : 50;
},
immediate: true
}
},
mounted: function () {
this.getCoupons();
},
created () {
this.OneBuyModel.CouponId = 10000000
},
methods: {
getCoupons: function () {
var that = this;
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
console.log(res);
if (res.Code == 10000) {
if(@(Model.Package.Id) == 64||@(Model.Package.Id) == 1004){
var coupon_json = {
"Coupon":{
"Id":10000000,
"Name":"极客-西瓜-满减劵",
}
}
res.Data.push(coupon_json);
}
that.Coupons = res.Data.map(m => m.Coupon);
}
}
})
},
onePay: function () {
$(".pay-botton").hide();
if (this.OneBuyModel.UseAccountAmount) {
if (this.RestAmount < this.PayAmount){
alert('余额不足,请充值。您也可以使用微信、支付宝支付。');return;
} else {
this.RestAmount = this.RestAmount - this.PayAmount;
}
}
var that = this;
if (this.OneBuyModel.UseAccountAmount === true) this.OneBuyModel.UseAccountAmount = 1;
if (this.OneBuyModel.UseAccountAmount === false) this.OneBuyModel.UseAccountAmount = 0;
showPayWait();
$.ajax({
type: 'POST',
url: '/product/CreateOrder',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(this.OneBuyModel),
success: function (res) {
console.log(res);
if (res.Code == 10000) {
hidePayWait();
if (res.Data == "00") {
alert("续费成功");
} else {
that.payCallback(res.Data)
that.isPay(res.Data.OrderInfo.OrderNo);
}
} else {
//that.Tip = res.Message;
tipPayWait(res.Message);
}
}
});
},
payCallback: function (data) {
this.OrderInfo = data.OrderInfo;
var payType = this.OrderInfo.PayType;
if (payType == 70) {
$(".payMask").show();
$('#qrcode').qrcode(data.PayData);
} else if (payType == 100) {
$("#aliPayBox").html(data.PayData);
}
},
isPay: function (orderNo) {
var that = this;
this.payHandler = setInterval(function () {
var url = '/product/IsPay?orderNo=' + orderNo;
$.ajax({
type: 'GET',
url: url,
success: function (res) {
if (res.Code == 10000 && res.Data == 1) {
clearInterval(that.payHandler);
$(".payMask").hide();
showPayOk();
//window.location.href = "/user/myaccounts";
}
}
})
}, 3000)
},
close() {
clearInterval(this.payHandler);
$('.payMask').hide();
$('#qrcode').empty();
}
}
})
</script>
}

View File

@@ -1,35 +1,35 @@
@using Hncore.Infrastructure.Extension
@model ViewComponents.PagerModel
@{
Model.PageIndex= Model.PageIndex == 0 ? 1 : Model.PageIndex;
var q = this.Context.Request.Remove("PageIndex");
if (string.IsNullOrEmpty(q))
{
q = "?";
}
else
{
q = "?"+ q + "&";
}
}
@if (Model.TotalPage > 1)
{
<ul class="pagination">
@if (Model.PageIndex > 1)
{
string href = $"{q}PageIndex={Model.PageIndex - 1}";
<li class="page-item"><a class="page-link" href="@href">上一页</a></li>
}
@for (var i = 1; i <= Model.TotalPage; i++)
{
<li class="page-item"><a class="page-link @(Model.PageIndex==i?"fenyeActive2":"")" href="@(q)PageIndex=@i">@i</a></li>
}
@if (Model.PageIndex < Model.TotalPage)
{
string href = $"{q}PageIndex={Model.PageIndex + 1}";
<li class="page-item"><a class="page-link" href="@href">下一页</a></li>
}
</ul>
}
@using Hncore.Infrastructure.Extension
@model ViewComponents.PagerModel
@{
Model.PageIndex= Model.PageIndex == 0 ? 1 : Model.PageIndex;
var q = this.Context.Request.Remove("PageIndex");
if (string.IsNullOrEmpty(q))
{
q = "?";
}
else
{
q = "?"+ q + "&";
}
}
@if (Model.TotalPage > 1)
{
<ul class="pagination">
@if (Model.PageIndex > 1)
{
string href = $"{q}PageIndex={Model.PageIndex - 1}";
<li class="page-item"><a class="page-link" href="@href">上一页</a></li>
}
@for (var i = 1; i <= Model.TotalPage; i++)
{
<li class="page-item"><a class="page-link @(Model.PageIndex==i?"fenyeActive2":"")" href="@(q)PageIndex=@i">@i</a></li>
}
@if (Model.PageIndex < Model.TotalPage)
{
string href = $"{q}PageIndex={Model.PageIndex + 1}";
<li class="page-item"><a class="page-link" href="@href">下一页</a></li>
}
</ul>
}

View File

@@ -1,68 +1,68 @@
<style>
/* 支付成功弹窗开始 */
.paylayer {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
/* 支付成功弹窗结束 */
</style>
<!-- 支付成功弹窗开始 -->
<div class="paylayer">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/payBg.png">
</div>
<div class="row plFour">
<div class="col-lg-6 text-center">
<a asp-action="MyAccounts" asp-controller="User"> <img src="~/img/pl1.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="Index" asp-controller="LineList"> <img src="~/img/pl2.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="index" asp-controller="article" asp-route-Catalog="4"> <img src="~/img/pl3.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="soft" asp-controller="Product"> <img src="~/img/pl4.png"></a>
</div>
</div>
</div>
<script>
$(".plClose").on("click", function () { $(".paylayer").hide(); $(".popmask").hide() })
function showPayOk() {
$(".popmask").show()
$(".paylayer").show();
}
</script>
<!-- 支付成功弹窗结束 -->
<style>
/* 支付成功弹窗开始 */
.paylayer {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
/* 支付成功弹窗结束 */
</style>
<!-- 支付成功弹窗开始 -->
<div class="paylayer">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/payBg.png">
</div>
<div class="row plFour">
<div class="col-lg-6 text-center">
<a asp-action="MyAccounts" asp-controller="User"> <img src="~/img/pl1.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="Index" asp-controller="LineList"> <img src="~/img/pl2.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="index" asp-controller="article" asp-route-Catalog="4"> <img src="~/img/pl3.png"></a>
</div>
<div class="col-lg-6 text-center">
<a asp-action="soft" asp-controller="Product"> <img src="~/img/pl4.png"></a>
</div>
</div>
</div>
<script>
$(".plClose").on("click", function () { $(".paylayer").hide(); $(".popmask").hide() })
function showPayOk() {
$(".popmask").show()
$(".paylayer").show();
}
</script>
<!-- 支付成功弹窗结束 -->

View File

@@ -1,79 +1,79 @@
<style>
/* 支付等待弹窗开始 */
.paywait {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
.errorTip{
margin-top:30px;
color:red;
}
/* 支付等待弹窗结束 */
</style>
<!-- 支付等待 -->
<div class="paywait">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/paywait.png">
</div>
<div class="row plFour">
<div class="col-lg-12 text-center loadingBox">
<img src="~/img/loading.gif" style="width:100px;height:20px">
<p>账号检测中请耐心等待</p>
</div>
<div class="col-lg-12 text-center errorTip">
</div>
</div>
</div>
<script>
function showPayWait() {
$(".popmask").show()
$(".paywait").show();
$(".loadingBox").show();
$(".errorTip").text("");
}
function hidePayWait() {
$(".popmask").hide()
$(".paywait").hide();
}
function tipPayWait(info) {
showPayWait();
$(".loadingBox").hide();
$(".errorTip").text(info)
}
$(".plClose").on("click", function () { hidePayWait() })
</script>
<!-- 支付等待弹窗结束 -->
<style>
/* 支付等待弹窗开始 */
.paywait {
position: fixed;
z-index: 999;
width: 360px;
height: 500px;
top: 50%;
margin-top: -200px;
left: 50%;
margin-left: -180px;
display: none;
}
.plTop img {
width: 100%;
}
.plFour {
background: #fff;
margin: 0;
padding-bottom: 20px;
}
.plFour img {
width: 90%;
margin: 10px 0;
}
.plClose {
position: absolute;
top: 30px;
right: 10px;
z-index: 999;
}
.errorTip{
margin-top:30px;
color:red;
}
/* 支付等待弹窗结束 */
</style>
<!-- 支付等待 -->
<div class="paywait">
<img src="~/img/close.png" class="plClose">
<div class="plTop">
<img src="~/img/paywait.png">
</div>
<div class="row plFour">
<div class="col-lg-12 text-center loadingBox">
<img src="~/img/loading.gif" style="width:100px;height:20px">
<p>账号检测中请耐心等待</p>
</div>
<div class="col-lg-12 text-center errorTip">
</div>
</div>
</div>
<script>
function showPayWait() {
$(".popmask").show()
$(".paywait").show();
$(".loadingBox").show();
$(".errorTip").text("");
}
function hidePayWait() {
$(".popmask").hide()
$(".paywait").hide();
}
function tipPayWait(info) {
showPayWait();
$(".loadingBox").hide();
$(".errorTip").text(info)
}
$(".plClose").on("click", function () { hidePayWait() })
</script>
<!-- 支付等待弹窗结束 -->

View File

@@ -1,25 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@@ -1,25 +1,25 @@
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
Use this space to summarize your privacy and cookie use policy. <a asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
<span aria-hidden="true">Accept</span>
</button>
</div>
<script>
(function () {
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
button.addEventListener("click", function (event) {
document.cookie = button.dataset.cookieString;
}, false);
})();
</script>
}
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert">
Use this space to summarize your privacy and cookie use policy. <a asp-area="" asp-controller="Home" asp-action="Privacy">Learn More</a>.
<button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString">
<span aria-hidden="true">Accept</span>
</button>
</div>
<script>
(function () {
var button = document.querySelector("#cookieConsent button[data-cookie-string]");
button.addEventListener("click", function (event) {
document.cookie = button.dataset.cookieString;
}, false);
})();
</script>
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,203 +1,203 @@
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
string currentPath = this.Context.Request.Path.ToString().ToLower();
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>聚IP JUIP.COM</title>
<link rel="stylesheet" type="text/css" href="~/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="~/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/css/animate.min.css" />
<link href="~/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<script src="~/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/moment-with-locales.js"></script>
<script src="~/js/bootstrap-datetimepicker.min.js"></script>
<script src="~/js/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/jquery.qrcode.min.js" type="text/javascript" charset="utf-8"></script>
<script>
$(function () {
// 侧边栏
//$(".on_q").click(function () {
// $(".side_q").toggle();
//});
$(".item_on_q").mouseover(function () {
$(".side_q").stop().show();
});
$(".item_on_q").mouseleave(function () {
$(".side_q").stop().hide();
});
//$(".on_wx").click(function () {
// $(".side_kefu").toggle();
//});
$(".item_on_wx").mouseover(function () {
$(".side_kefu").stop().fadeIn();
});
$(".item_on_wx").mouseleave(function () {
$(".side_kefu").stop().fadeOut();
});
$(".on_gzh").mouseover(function () {
$(".side_gzh").stop().fadeIn();
});
$(".on_gzh").mouseleave(function () {
$(".side_gzh").stop().fadeOut();
});
$(".on_tel").mouseover(function () {
$(".side_tel").stop().fadeIn();
});
$(".on_tel").mouseleave(function () {
$(".side_tel").stop().fadeOut();
});
})
</script>
</head>
<body>
<div class="sideBar">
<div class="item item_on_q">
<a href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true" target="_blank">
<img src="~/img/qq.png" class="on_q"> <div class="kefu_tit">QQ</div>
</a>
</div>
<div class="item item_on_wx">
<a href="https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f" style="color: #0862fe;">
<img src="~/img/weixin.png" class="on_wx"><div class="kefu_tit">微信</div>
</a>
</div>
<div class="item">
<img src="~/img/gzh.png" class="on_gzh"><div class="kefu_tit">公众号</div>
<div class="side_gzh">
<p><img src="~/img/ewm.png"></p>
<p style="color:#f90">实时响应 在线时间 8:30-23:00</p>
<p style="color:#f90">关注公众号可获取免费的到期提醒服务</p>
</div>
</div>
<div class="item">
<img src="~/img/tel.png" class="on_tel"><div class="kefu_tit">电话</div>
<div class="side_tel">
<p><b>400 800 9925</b></p>
<p>实时接通</p>
<p>电话值班时间 8:30-23:00</p>
</div>
</div>
<div class="item">
<a href="#top"><img src="~/img/top.png"></a>
</div>
</div>
<div class="container-fluid nav nav_buy">
<div class="row">
<div class="col-lg-2 col-md-2 logo">
<a href="#"><img src="~/img/logo.png"></a>
</div>
<div class="col-lg-10 col-md-10">
<ul class="navList navList_buy pull-right">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a></li>
<li><a href="/LineList/index" ">IP线路表</a></li>
<li><a href="/product/soft">软件下载</a></li>
<li><a href="/article/index">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
<li>
<div class="item" style="display: inline-block;margin-right:20px;">
<a asp-action="index" style="border-radius:25px;background-color:#FF9900;padding:5px;" asp-controller="user">个人中心</a>
</div>
<div class="item" style="display: inline-block;">
<a asp-action="LoginOut" asp-controller="user">退出登录</a>
</div>
</li>
</ul>
</div>
</div>
</div>
<!-- main -->
<div class="container-fluid clearMargin">
<div class="col-lg-2 leftArea">
<div class="leftBar">
<div class="item @(currentPath=="/user/index"?"active_b":"")">
<img src="~/img/p1.png"><a href="/user/index">个人中心</a>
</div>
<div class="item @(currentPath=="/user/myaccounts"?"active_b":"")">
<img src="~/img/p4.png"><a href="/user/myaccounts">IP账号管理</a>
</div>
<div class="item @(currentPath=="/user/mymoney"?"active_b":"")">
<img src="~/img/p3.png"><a href="/user/mymoney">资金明细</a>
</div>
<div class="item @(currentPath=="/user/rosorder"?"active_b":"")">
<img src="~/img/p2.png"><a href="/user/rosorder">软路由订单</a>
</div>
<div class="item @(currentPath=="/user/myorders"?"active_b":"")">
<img src="~/img/p2.png"><a href="/user/myorders">订单管理</a>
</div>
<div class="item @(currentPath=="/user/myrefundorders"?"active_b":"")">
<img src="~/img/p3.png"><a href="/user/myrefundorders">退货订单管理</a>
</div>
<div class="item @(currentPath=="/user/mycoupons"?"active_b":"")">
<img src="~/img/p5.png"><a href="/user/mycoupons">我的优惠券&nbsp;<span style="background-color: red;" class="badge" id="coupon_num"></span></a>
</div>
<div class="item @(currentPath=="/user/cashout"?"active_b":"")">
<span class="glyphicon glyphicon-jpy" style="padding: 10px;"></span><a href="/user/cashout">提现管理</a>
</div>
</div>
</div>
<div class="col-lg-10 rightCon">
@RenderBody()
</div>
</div>
@* <script id="qd28521381485d6faa97edf5ad07d7e159f6cb902af0" src="https://wp.qiye.qq.com/qidian/2852138148/5d6faa97edf5ad07d7e159f6cb902af0" charset="utf-8" async defer></script> *@
<div data-toggle="popovers" data-html="true" data-content="<p><a style='color: #0862fe;' href='https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true' target='_blank'>
<img src='/img/q.png'> QQ在线客服
</a><p><a href='https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f' style='color: #0862fe;'><img src='/img/weixin.png' style='background-color:green;width:1.5em;'> 微信在线客服</a></p>" data-placement="top" class="row" id="djkf" style="background-color: white; width:255px;height:85px;position: fixed;z-index: 2000000000;bottom: 200px;right: 0px;cursor:pointer;">
<style>
.top{
padding: 0;
}
</style>
<div class="col-xs-4" style="padding:0;">
<img width="85" src="http://p.qpic.cn/qidian_pic/2852138148/2020071743d6537e611d9ff953f27cbb7430dbe7/0"/>
</div>
<div class="col-xs-8 " style="padding:0;">
<h4><span class="glyphicon glyphicon-user" style="padding:10px 0 0 25px;color:#12b7f5;"></span>在线咨询</h4>
<p class="text-center">服务时间 8:30-23:00</p>
</div>
<script>$(function () { $("[data-toggle='popovers']").popover(); });</script>
</div>
<script>
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
$("#coupon_num").text(res.Data.length);
}
})
</script>
@RenderSection("Scripts", required: false)
</body>
</html>
@using Hncore.Pass.BaseInfo.Response
@using Hncore.Infrastructure.Serializer;
@{
UserLoginModel user = null;
if (this.Context.Request.Cookies.TryGetValue("userInfo", out string userCookie))
{
user = userCookie.FromJsonTo<UserLoginModel>();
}
string currentPath = this.Context.Request.Path.ToString().ToLower();
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>聚IP JUIP.COM</title>
<link rel="stylesheet" type="text/css" href="~/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="~/css/base.css" />
<link rel="stylesheet" type="text/css" href="~/css/swiper.min.css" />
<link rel="stylesheet" type="text/css" href="~/css/animate.min.css" />
<link href="~/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<script src="~/js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/moment-with-locales.js"></script>
<script src="~/js/bootstrap-datetimepicker.min.js"></script>
<script src="~/js/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="~/js/jquery.qrcode.min.js" type="text/javascript" charset="utf-8"></script>
<script>
$(function () {
// 侧边栏
//$(".on_q").click(function () {
// $(".side_q").toggle();
//});
$(".item_on_q").mouseover(function () {
$(".side_q").stop().show();
});
$(".item_on_q").mouseleave(function () {
$(".side_q").stop().hide();
});
//$(".on_wx").click(function () {
// $(".side_kefu").toggle();
//});
$(".item_on_wx").mouseover(function () {
$(".side_kefu").stop().fadeIn();
});
$(".item_on_wx").mouseleave(function () {
$(".side_kefu").stop().fadeOut();
});
$(".on_gzh").mouseover(function () {
$(".side_gzh").stop().fadeIn();
});
$(".on_gzh").mouseleave(function () {
$(".side_gzh").stop().fadeOut();
});
$(".on_tel").mouseover(function () {
$(".side_tel").stop().fadeIn();
});
$(".on_tel").mouseleave(function () {
$(".side_tel").stop().fadeOut();
});
})
</script>
</head>
<body>
<div class="sideBar">
<div class="item item_on_q">
<a href="https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true" target="_blank">
<img src="~/img/qq.png" class="on_q"> <div class="kefu_tit">QQ</div>
</a>
</div>
<div class="item item_on_wx">
<a href="https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f" style="color: #0862fe;">
<img src="~/img/weixin.png" class="on_wx"><div class="kefu_tit">微信</div>
</a>
</div>
<div class="item">
<img src="~/img/gzh.png" class="on_gzh"><div class="kefu_tit">公众号</div>
<div class="side_gzh">
<p><img src="~/img/ewm.png"></p>
<p style="color:#f90">实时响应 在线时间 8:30-23:00</p>
<p style="color:#f90">关注公众号可获取免费的到期提醒服务</p>
</div>
</div>
<div class="item">
<img src="~/img/tel.png" class="on_tel"><div class="kefu_tit">电话</div>
<div class="side_tel">
<p><b>400 800 9925</b></p>
<p>实时接通</p>
<p>电话值班时间 8:30-23:00</p>
</div>
</div>
<div class="item">
<a href="#top"><img src="~/img/top.png"></a>
</div>
</div>
<div class="container-fluid nav nav_buy">
<div class="row">
<div class="col-lg-2 col-md-2 logo">
<a href="#"><img src="~/img/logo.png"></a>
</div>
<div class="col-lg-10 col-md-10">
<ul class="navList navList_buy pull-right">
<li><a href="/">首页</a></li>
<li><a href="/product/index">产品购买 <span style="color: red;">活动</span></a></li>
<li><a href="/LineList/index" ">IP线路表</a></li>
<li><a href="/product/soft">软件下载</a></li>
<li><a href="/article/index">教程&咨询</a></li>
<li><a href="/product/routeros">软路由购买</a></li>
<li><a href="http://vps.juip.com" style="color: red;">动态VPS</a></li>
<li>
<div class="item" style="display: inline-block;margin-right:20px;">
<a asp-action="index" style="border-radius:25px;background-color:#FF9900;padding:5px;" asp-controller="user">个人中心</a>
</div>
<div class="item" style="display: inline-block;">
<a asp-action="LoginOut" asp-controller="user">退出登录</a>
</div>
</li>
</ul>
</div>
</div>
</div>
<!-- main -->
<div class="container-fluid clearMargin">
<div class="col-lg-2 leftArea">
<div class="leftBar">
<div class="item @(currentPath=="/user/index"?"active_b":"")">
<img src="~/img/p1.png"><a href="/user/index">个人中心</a>
</div>
<div class="item @(currentPath=="/user/myaccounts"?"active_b":"")">
<img src="~/img/p4.png"><a href="/user/myaccounts">IP账号管理</a>
</div>
<div class="item @(currentPath=="/user/mymoney"?"active_b":"")">
<img src="~/img/p3.png"><a href="/user/mymoney">资金明细</a>
</div>
<div class="item @(currentPath=="/user/rosorder"?"active_b":"")">
<img src="~/img/p2.png"><a href="/user/rosorder">软路由订单</a>
</div>
<div class="item @(currentPath=="/user/myorders"?"active_b":"")">
<img src="~/img/p2.png"><a href="/user/myorders">订单管理</a>
</div>
<div class="item @(currentPath=="/user/myrefundorders"?"active_b":"")">
<img src="~/img/p3.png"><a href="/user/myrefundorders">退货订单管理</a>
</div>
<div class="item @(currentPath=="/user/mycoupons"?"active_b":"")">
<img src="~/img/p5.png"><a href="/user/mycoupons">我的优惠券&nbsp;<span style="background-color: red;" class="badge" id="coupon_num"></span></a>
</div>
<div class="item @(currentPath=="/user/cashout"?"active_b":"")">
<span class="glyphicon glyphicon-jpy" style="padding: 10px;"></span><a href="/user/cashout">提现管理</a>
</div>
</div>
</div>
<div class="col-lg-10 rightCon">
@RenderBody()
</div>
</div>
@* <script id="qd28521381485d6faa97edf5ad07d7e159f6cb902af0" src="https://wp.qiye.qq.com/qidian/2852138148/5d6faa97edf5ad07d7e159f6cb902af0" charset="utf-8" async defer></script> *@
<div data-toggle="popovers" data-html="true" data-content="<p><a style='color: #0862fe;' href='https://admin.qidian.qq.com/template/blue/mp/menu/qr-code-jump.html?linkType=0&env=ol&kfuin=2852138148&fid=299&key=f377ec024ca45115a03a7632c7bda230&cate=1&source=&isLBS=&isCustomEntry=&type=16&ftype=1&_type=wpa&qidian=true' target='_blank'>
<img src='/img/q.png'> QQ在线客服
</a><p><a href='https://work.weixin.qq.com/kfid/kfc458bc58e79e5093f' style='color: #0862fe;'><img src='/img/weixin.png' style='background-color:green;width:1.5em;'> 微信在线客服</a></p>" data-placement="top" class="row" id="djkf" style="background-color: white; width:255px;height:85px;position: fixed;z-index: 2000000000;bottom: 200px;right: 0px;cursor:pointer;">
<style>
.top{
padding: 0;
}
</style>
<div class="col-xs-4" style="padding:0;">
<img width="85" src="http://p.qpic.cn/qidian_pic/2852138148/2020071743d6537e611d9ff953f27cbb7430dbe7/0"/>
</div>
<div class="col-xs-8 " style="padding:0;">
<h4><span class="glyphicon glyphicon-user" style="padding:10px 0 0 25px;color:#12b7f5;"></span>在线咨询</h4>
<p class="text-center">服务时间 8:30-23:00</p>
</div>
<script>$(function () { $("[data-toggle='popovers']").popover(); });</script>
</div>
<script>
var url = '/api/sells/v1/coupon/GetAvailableCoupon';
$.ajax({
type: 'GET',
url: url,
success: function (res) {
$("#coupon_num").text(res.Data.length);
}
})
</script>
@RenderSection("Scripts", required: false)
</body>
</html>

View File

@@ -1,18 +1,18 @@
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>
<environment include="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment exclude="Development">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha256-F6h55Qw6sweK+t7SiOJX+2bpSAa3b/fnlrVCJvmEj1A=">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha256-9GycpJnliUjJDVDqP0UEu/bsm9U+3dnQUH8+3W10vkY=">
</script>
</environment>

View File

@@ -1,68 +1,68 @@
@{
Layout = "_UserLayout";
}
<div id="app">
<table class="table">
<caption>提现管理</caption>
<thead>
<tr>
<th>用户</th>
<th>提现金额</th>
<th>提现理由</th>
<th>支付宝账号</th>
<th>备注</th>
<th>状态</th>
<th>提现时间</th>
</tr>
</thead>
<tbody>
<tr v-for="info in tableData">
<td>{{info.username}}</td>
<td>{{info.money}}</td>
<td>{{info.reason}}</td>
<td>{{info.alipay_account}}</td>
<td>{{info.remark}}</td>
<td>{{info.status}}</td>
<td>{{info.create_time}}</td>
</tr>
</tbody>
</table>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
tableData: [],
},
created:function(){
this.post();
},
methods:{
post:function(){
var param = [];
let cashOutData = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/order/CashOutIndex/getData',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(cashOutData),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == 10000) {
param = res.data;
}
}
});
this.tableData = param;
}
}
});
@{
Layout = "_UserLayout";
}
<div id="app">
<table class="table">
<caption>提现管理</caption>
<thead>
<tr>
<th>用户</th>
<th>提现金额</th>
<th>提现理由</th>
<th>支付宝账号</th>
<th>备注</th>
<th>状态</th>
<th>提现时间</th>
</tr>
</thead>
<tbody>
<tr v-for="info in tableData">
<td>{{info.username}}</td>
<td>{{info.money}}</td>
<td>{{info.reason}}</td>
<td>{{info.alipay_account}}</td>
<td>{{info.remark}}</td>
<td>{{info.status}}</td>
<td>{{info.create_time}}</td>
</tr>
</tbody>
</table>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
tableData: [],
},
created:function(){
this.post();
},
methods:{
post:function(){
var param = [];
let cashOutData = {
cookie:document.cookie
}
$.ajax({
type: 'POST',
async:false,
url: 'http://php-api.juip.com/order/CashOutIndex/getData',
dataType: "json",
contentType: "application/json",
data: JSON.stringify(cashOutData),
beforeSend: function(xhr) {
xhr.withCredentials = true;
},
crossDomain: true,
success: function (res) {
if (res.Code == 10000) {
param = res.data;
}
}
});
this.tableData = param;
}
}
});
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
@{
ViewData["Title"] = "登录";
}
@section Scripts{
<script type="text/javascript">
loginCallback = function () {
window.location.href="/"
}
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
</script>
}
@{
ViewData["Title"] = "登录";
}
@section Scripts{
<script type="text/javascript">
loginCallback = function () {
window.location.href="/"
}
$(".mask").show();
$(".main").show();
$(".main").addClass("animated bounceInDown");
</script>
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More