169 lines
4.7 KiB
C#
169 lines
4.7 KiB
C#
using _29WxOrderWpf.CefHelper;
|
|
using _29WxOrderWpf.Commands;
|
|
using AllBase;
|
|
using CefSharp;
|
|
using CefSharp.Handler;
|
|
using CefSharp.Wpf;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using Work._29Tools.CefTools;
|
|
|
|
namespace _29WxOrderWpf.Ctrls.PDDInvoice.ViewModels;
|
|
|
|
public partial class PDDInvoiceViewModel
|
|
{
|
|
/// <summary>
|
|
/// 订单列表浏览器
|
|
/// </summary>
|
|
public ChromiumWebBrowser Browser { get; private set; }
|
|
/// <summary>
|
|
/// 内容浏览器
|
|
/// 订单详情
|
|
/// 发票详情
|
|
/// 申请发票
|
|
/// </summary>
|
|
public ChromiumWebBrowser BrowserDetail { get; private set; }
|
|
|
|
partial void InitBrowser()
|
|
{
|
|
BrowserZIndex = -1;
|
|
BrowserDetailZIndex = -1;
|
|
|
|
Browser = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false);
|
|
|
|
LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
|
|
//resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
|
|
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
|
|
Browser.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
|
|
Browser.LifeSpanHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
|
|
Browser.KeyboardHandler = new KeyboardHandler();
|
|
|
|
|
|
BrowserDetail = WPFCEFBrowser.CreateChromiumWebBrowser("about:blank", false);
|
|
LocalResourceRequestHandler detailResourceRequestHandler = new LocalResourceRequestHandler();
|
|
detailResourceRequestHandler.ResourceLoadCompleteEvent += DetailRequestHandler_ResourceLoadComplete;
|
|
BrowserDetail.RequestHandler = new LocalRequestHandler(resourceRequestHandler);
|
|
BrowserDetail.LifeSpanHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
|
|
BrowserDetail.KeyboardHandler = new KeyboardHandler();
|
|
}
|
|
|
|
public ICommand CloseOrderBrowserCommand => new DelegateCommand(HidenOrderBrowser);
|
|
public ICommand CloseInvoiceDetailCommand => new DelegateCommand(HidenOrderBrowserDetail);
|
|
|
|
public int BrowserZIndex
|
|
{
|
|
get => GetValue<int>();
|
|
set => SetValue(value);
|
|
}
|
|
public int BrowserDetailZIndex
|
|
{
|
|
get => GetValue<int>();
|
|
set => SetValue(value);
|
|
}
|
|
/// <summary>
|
|
/// 显示主浏览器
|
|
/// </summary>
|
|
public void ShowOrderBrowser()
|
|
{
|
|
BrowserZIndex = 10;
|
|
BrowserDetailZIndex = -1;
|
|
}
|
|
/// <summary>
|
|
/// 显示子浏览器
|
|
/// </summary>
|
|
public void ShowOrderBrowserDetail()
|
|
{
|
|
BrowserZIndex = -1;
|
|
BrowserDetailZIndex = 10;
|
|
}
|
|
public void HidenOrderBrowser()
|
|
{
|
|
BrowserZIndex = -1;
|
|
}
|
|
public void HidenOrderBrowserDetail()
|
|
{
|
|
BrowserDetailZIndex = -1;
|
|
}
|
|
public bool IsAutoScroll
|
|
{
|
|
get => GetValue<bool>();
|
|
set => SetValue(value);
|
|
}
|
|
private int top = 0;
|
|
private DateTime lastGetOrderDataTime = DateTime.Now;
|
|
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
|
|
{
|
|
if (url.StartsWith("https://mobile.yangkeduo.com/orders.html"))
|
|
{
|
|
//if (isAutoScroll == false)
|
|
//{
|
|
// StartAutoScroll();
|
|
//}
|
|
|
|
StartAutoScroll();
|
|
}
|
|
if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/aristotle/order_list_v"))
|
|
{
|
|
lastGetOrderDataTime = DateTime.Now;
|
|
parserData(responseData);
|
|
|
|
//File.WriteAllText(@$"E:\{Guid.NewGuid().ToString()}.txt", responseData);
|
|
}
|
|
}
|
|
public void StartAutoScroll()
|
|
{
|
|
if (IsAutoScroll) return;
|
|
IsAutoScroll = true;
|
|
_cancellationTokenSource = new CancellationTokenSource();
|
|
_ = autoScroll(_cancellationTokenSource.Token);
|
|
}
|
|
|
|
// 停止滚动
|
|
public void StopAutoScroll()
|
|
{
|
|
IsAutoScroll = false;
|
|
_cancellationTokenSource?.Cancel();
|
|
_cancellationTokenSource?.Dispose();
|
|
_cancellationTokenSource = null;
|
|
}
|
|
|
|
private async Task autoScroll(CancellationToken token)
|
|
{
|
|
while (IsAutoScroll && !token.IsCancellationRequested)
|
|
{
|
|
if ((DateTime.Now - lastGetOrderDataTime).Seconds > 30) StopAutoScroll();
|
|
|
|
top += Randomx.GetId(450, 600);
|
|
var jsStr = @"window.scroll({
|
|
top: " + top + @",
|
|
left: 0,
|
|
behavior: 'smooth' // 可选,使滚动平滑
|
|
});";
|
|
|
|
var client = Browser.GetDevToolsClient();
|
|
if (client != null)
|
|
{
|
|
var result = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
|
|
result.Wait(5000);
|
|
}
|
|
await Task.Delay(Randomx.GetId(100, 300));
|
|
//Thread.Sleep();
|
|
}
|
|
}
|
|
|
|
|
|
private void DetailRequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
|
|
{
|
|
if (url.StartsWith("https://mobile.yangkeduo.com/transac_return_compensation.html"))
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
}
|