Browse Source

加入新浏览器页面

master
С·æ 4 years ago
parent
commit
ba938de589
  1. 2
      客户端/齐越慧眼/齐越慧眼/ApiHelper.cs
  2. 63
      客户端/齐越慧眼/齐越慧眼/Properties/Resources.Designer.cs
  3. 120
      客户端/齐越慧眼/齐越慧眼/Properties/Resources.resx
  4. 8
      客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs
  5. 25
      客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs
  6. 65
      客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
  7. 15
      客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml
  8. 632
      客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs
  9. 27
      客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs
  10. 15
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/items/Index.vue
  11. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js
  12. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js.map
  13. 14
      客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj

2
客户端/齐越慧眼/齐越慧眼/ApiHelper.cs

@ -19,6 +19,8 @@ namespace 齐越慧眼
public static string JwtToken {
get
{
return
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzAwMDEzMTg2NjgyODgwIiwidGVhbUlkIjoiMTQxMDk1NTYwNDYxMjA5MTkwNCIsImV4cCI6MTY2ODQ5NzMzNX0.E8sbTNiG71Wy9rCg1ppAxO6IWnCFTiW3BRNGELT8r2E";
if (string.IsNullOrEmpty(jwtToken))
{
jwtToken = GetMemoryToken().Replace("\r\n","");

63
客户端/齐越慧眼/齐越慧眼/Properties/Resources.Designer.cs

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace .Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("齐越慧眼.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

120
客户端/齐越慧眼/齐越慧眼/Properties/Resources.resx

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

8
客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs

@ -36,10 +36,10 @@ namespace 齐越慧眼.UserControls
},
//RequestHandler =new MyRequestHandler()
//RequestHandler =new MyRequestHandler()
};
MyResourceRequestHandlerFactory myResourceRequestHandlerFactory = new MyResourceRequestHandlerFactory(this);
myResourceRequestHandlerFactory.Handlers.TryAdd("test",null);
myResourceRequestHandlerFactory.Handlers.TryAdd("test", null);
web.ResourceRequestHandlerFactory = myResourceRequestHandlerFactory;
@ -53,6 +53,7 @@ namespace 齐越慧眼.UserControls
web.StartNewWindow += Web_StartNewWindow;
web.TitleChanged += Web_TitleChanged;
web.AddressChanged += Web_AddressChanged;
}
private void Web_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
@ -562,7 +563,7 @@ namespace 齐越慧眼.UserControls
/// <returns></returns>
private bool Add1688OptionDiv()
{
///添加js事件
//添加js事件
DoJavaScript(@"
window.optClick= function (ele,type){
@ -597,6 +598,7 @@ namespace 齐越慧眼.UserControls
}
#endregion
private bool AddCss()
{
///添加css

25
客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs

@ -18,9 +18,11 @@ namespace 齐越慧眼.UserControls
/// </summary>
public partial class BrowerTabPanelControl : UserControl
{
public static BrowerTabPanelControl Main;
public BrowerTabPanelControl()
{
InitializeComponent();
Main = this;
}
public void InitTab()
@ -60,5 +62,28 @@ namespace 齐越慧眼.UserControls
NewTab("https://www.1688.com/?spm=a26352.13672862.searchbox.1.27bf6ae2slybzR");
//web.Load("https://www.1688.com/?spm=a26352.13672862.searchbox.1.27bf6ae2slybzR");
}
/// <summary>
/// 阿里巴巴以图搜索
/// </summary>
/// <param name="imgBase64"></param>
public void OpenSomePicItem(string imgBase64)
{
Application.Current.Dispatcher.Invoke(() =>
{
var item = new HandyControl.Controls.TabItem() { IsSelected = true };
item.Closed += (e, s) =>
{
var obj = e as HandyControl.Controls.TabItem;
var brower = obj.Content as SomeBrowerControl;
brower.Exit();
};
SomeBrowerControl browerControl = new SomeBrowerControl(imgBase64, item);
item.Content = browerControl;
tab.Items.Add(item);
});
}
}
}

65
客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs

@ -2,6 +2,10 @@
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Net;
using System.Text;
using System.Windows;
using System.Windows.Controls;
@ -38,7 +42,7 @@ namespace 齐越慧眼.UserControls
web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
web.JavascriptObjectRepository.Register("hyCoreModel", new CatsAsyncJS(), BindingOptions.DefaultBinder);
web.JavascriptObjectRepository.Register("hyCoreModel", new ItemsAsyncJS(), BindingOptions.DefaultBinder);
grid.Children.Add(web);
// web.ExecuteScriptAsyncWhenPageLoaded(@$"localStorage.setItem('user', '{{""token"":""{ApiHelper.JwtToken}""}}');window.getDatas(0);");
@ -82,4 +86,63 @@ namespace 齐越慧眼.UserControls
}
}
public class ItemsAsyncJS
{
public string getToken()
{
return ApiHelper.JwtToken;
}
public string getImgBase64(string url)
{
using (WebClient client = new WebClient())
{
byte[] arr= client.DownloadData(url.Replace("_.webp",""));
// string base64 = "data:image/jpeg;base64," + Convert.ToBase64String(arr);
//string[] imgStr = base64.Split(',');
//ajax在传输过程中会将+变为空格
//byte[] imageBytes = Convert.FromBase64String(imgStr[1].Replace(" ", "+"));
//System.IO.File.WriteAllBytes(System.Environment.CurrentDirectory+"\\1.jpg",imageBytes);
arr = GetSmallImgArr(arr);
BrowerTabPanelControl.Main.OpenSomePicItem(Convert.ToBase64String(arr));
return String.Empty;
}
}
public byte[] GetSmallImgArr(byte[] arr)
{
using (Bitmap ob = new Bitmap(new MemoryStream(arr, 0, arr.Length),false))
{
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[1];
qy[0] = 20;//设置压缩的比例1-100
EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
System.IO.MemoryStream stream = new System.IO.MemoryStream();
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo = null;
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICIinfo = arrayICI[x];
break;
}
}
ob.Save(stream, jpegICIinfo, ep);
return stream.ToArray();
}
}
}
}

15
客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml

@ -0,0 +1,15 @@
<UserControl x:Class="齐越慧眼.UserControls.SomeBrowerControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:齐越慧眼.UserControls"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<DockPanel>
<TextBox x:Name="txtUrl" DockPanel.Dock="Top" Keyboard.KeyUp="txtUrl_KeyUp"></TextBox>
<Grid x:Name="grid" DockPanel.Dock="Bottom" Margin="0 10 0 0">
</Grid>
</DockPanel>
</UserControl>

632
客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs

@ -0,0 +1,632 @@
using CefSharp;
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using .cefhelper;
using .Models;
namespace .UserControls
{
/// <summary>
/// BrowerControl.xaml 的交互逻辑
/// </summary>
public partial class SomeBrowerControl : UserControl
{
public HandyControl.Controls.TabItem Tab { get; set; }
public string Base64Img { get; set; }
public ExtChromiumBrowser web;
public SomeBrowerControl(string base64, HandyControl.Controls.TabItem tabItem)
{
InitializeComponent();
Tab = tabItem;
Base64Img = base64;
web = new ExtChromiumBrowser("https://www.1688.com/")
{
BrowserSettings =
{
DefaultEncoding = "UTF-8",
Plugins = CefState.Enabled,
//关于跨域限制
//WebSecurity = CefState.Disabled,
ApplicationCache = CefState.Enabled,
LocalStorage = CefState.Enabled
},
//RequestHandler =new MyRequestHandler()
};
MyResourceRequestHandlerFactory myResourceRequestHandlerFactory = new MyResourceRequestHandlerFactory(this);
myResourceRequestHandlerFactory.Handlers.TryAdd("test",null);
web.ResourceRequestHandlerFactory = myResourceRequestHandlerFactory;
grid.Children.Add(web);
Loaded += BrowerControl_Loaded;
web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
var cjs = new Cef2AsyncJS();
cjs.Brower = this;
web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
web.StartNewWindow += Web_StartNewWindow;
web.TitleChanged += Web_TitleChanged;
web.AddressChanged += Web_AddressChanged;
web.ExecuteScriptAsyncWhenPageLoaded("hyCoreModel.onLoad()");
this.KeyDown += BrowerControl_KeyDown;
}
private void BrowerControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.F12)
{
web.ShowDevTools();
}
}
private void Web_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Application.Current.Dispatcher.Invoke(()=> {
txtUrl.Text = e.NewValue.ToString();
});
}
public void Exit()
{
web.Dispose();
}
private void Web_TitleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Application.Current.Dispatcher.Invoke(() =>
{
Tab.Header = e.NewValue;
});
}
int nowPatlom = 0;
public void OnUrlEnd(string url)
{
if (url.Contains("/marketOfferResultViewService"))
{
Task.Factory.StartNew(() =>
{
var items= Get1688ShopIds();
while (items == Get1688ShopIds())
{
Thread.Sleep(100);
}
nowPatlom = 2;
lastUrl = "s.1688.com";
StartPage();
});
}
}
private void Web_StartNewWindow(object sender, NewWindowEventArgs e)
{
MainWindow.Main.brower.NewTab(e.Url);
//web.Load(e.Url);
}
private void BrowerControl_Loaded(object sender, RoutedEventArgs e)
{
Thread t = new Thread(() => {
IWebBrowser webBrowser = null;
Application.Current.Dispatcher.Invoke(() => {
webBrowser = web.WebBrowser;
});
while (webBrowser == null)
{
Thread.Sleep(100);
Application.Current.Dispatcher.Invoke(() => {
webBrowser = web.WebBrowser;
});
}
Application.Current.Dispatcher.Invoke(() => {
web.WebBrowser.LoadingStateChanged += WebBrowser_LoadingStateChanged;
});
});
t.Start();
}
private string lastUrl = string.Empty;
private void WebBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
{
if (lastUrl != e.Browser.MainFrame.Url)
{
lastUrl = e.Browser.MainFrame.Url;
//开始单页查询
if (lastUrl.StartsWith("https://s.taobao.com/search")|| lastUrl.StartsWith("https://search.jd.com/")||lastUrl.StartsWith("https://s.1688.com/selloffer/offer_search.htm"))
{
StartPage();
}
}
}
object doWorkObj = new object();
private void StartPage()
{
Thread t = new Thread(() =>
{
lock (doWorkObj)
{
if (string.IsNullOrEmpty(lastUrl))
return;
AddJquery();
DoWork();
}
});
t.Start();
}
object lockWork = new object();
private void DoWork()
{
lock (lockWork)
{
while (true)
{
if (string.IsNullOrEmpty(lastUrl))
break;
Task<JavascriptResponse> task = null;
Application.Current.Dispatcher.Invoke(() =>
{
task = web.EvaluateScriptAsPromiseAsync("return $(document.body).html();");
});
var result = task.Result;
//判断是否加载完成
if (result.Success)
{
AddCss();
Add1688OptionDiv();
Check1688PageItem();
break;
}
Thread.Sleep(100);
}
}
}
/// <summary>
/// 添加jq操作类
/// </summary>
/// <returns></returns>
private bool AddJquery()
{
return DoJavaScript("var script=document.createElement('script'); script.type='text/javascript'; script.src='https://code.jquery.com/jquery-1.12.4.min.js'; document.getElementsByTagName('head')[0].appendChild(script); ").isOk;
}
/// <summary>
/// 添加ajax请求拦截
/// </summary>
/// <returns></returns>
private bool AddAjaxHook()
{
return DoJavaScript(@"$(document).ajaxSuccess(function( event, xhr, settings ) {hyCoreModel.onAjaxHook(settings.url);});").isOk;
}
#region 阿里巴巴代码
private List<string> Get1688ShopIds()
{
var res = DoJavaScript(@"var ids=[]; $('ul#sm-offer-list div.normalcommon-offer-card').each(function(){ids.push($(this).attr(""data-aplus-report""))});return ids;");
List<string> reports = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(Newtonsoft.Json.JsonConvert.SerializeObject(res.result));
List<string> itemIds = new List<string>();
if (reports != null)
{
reports.ForEach(c =>
{
string objid = Regex.Match(c, "object_id\\@(.*?)\\^").Groups[1].Value;
itemIds.Add(objid);
});
}
return itemIds;
}
/// <summary>
/// 检测页面商品
/// </summary>
/// <returns></returns>
private void Check1688PageItem()
{
var res = DoJavaScript(@"var ids=[]; $('ul#sm-offer-list div.normalcommon-offer-card').each(function(){ids.push($(this).attr(""data-aplus-report""))});return ids;");
List<string> reports = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(Newtonsoft.Json.JsonConvert.SerializeObject(res.result));
List<string> itemIds = new List<string>();
List<string> shopIds = new List<string>();
if (reports != null)
{
reports.ForEach(c =>
{
string objid = Regex.Match(c, "object_id\\@(.*?)\\^").Groups[1].Value;
string shopId= Regex.Match(c, "object_member_id\\@(.*?)\\^").Groups[1].Value;
DoJavaScript(@$"$(""ul#sm-offer-list"").find('div[data-aplus-report=""{c}""]').attr(""data-sku"",""{objid}"")");
DoJavaScript(@$"$(""ul#sm-offer-list"").find('div[data-aplus-report=""{c}""]').attr(""data-shopId"",""{shopId}"")");
itemIds.Add(objid);
if(!shopIds.Contains(shopId))
shopIds.Add(shopId);
});
}
var result = ApiHelper.GetLabelByItemIds(itemIds, Models.ItemPlatform.ALBB);
if (result.isOk)
{
foreach (var item in result.datas)
{
//判断是否团队过滤
if (item.IsFilter)
{
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.myitemState').addClass(""falseBg"")");
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
}
else
{
//判断是否集团过滤
if (item.HasFilter)
{
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.myitemState').prepend('<div class=""smallfalseBg""></div>')");
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
}
}
//if (item.IsCompeting)
//{
// if ((int)BrowerControl.Main.DoJavaScript(@$"return $($('div#J_goodsList li[data-sku=""{item.GoodsId}""]')).find('.stateYellow').length").result <= 0)
// {
// DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.myitemState').prepend('<div style=""width:20%;height:20%"" class=""stateYellow"">合</div>')");
// }
// DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
//}
if (item.IsScreening)
{
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.myitemState').addClass(""trueBg"")");
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
}
if (item.IsAdded)
{
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.myitemState').addClass(""popBg"")");
DoJavaScript($@"$($('ul#sm-offer-list div[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
}
}
}
var alResult = ApiHelper.GetAlbbLabelByShopIds(shopIds);
if (alResult.isOk)
{
alResult.datas.ForEach(item => {
DoJavaScript($@"$($('ul#sm-offer-list div[data-shopId=""{item.ShopId}""]')).find('.myitemState').prepend('<div style=""width:20%;height:20%"" class=""stateYellow"">合</div>')");
DoJavaScript($@"$($('ul#sm-offer-list div[data-shopId=""{item.ShopId}""]')).find('.stateGraydiv').addClass(""divshow"")");
});
}
}
/// <summary>
/// 添加操作面板
/// </summary>
/// <returns></returns>
private bool Add1688OptionDiv()
{
//添加js事件
DoJavaScript(@"
window.optClick= function (ele,type){
var e=window.event || arguments.callee.caller.arguments[0];
e.preventDefault();
e.stopPropagation();
var infoDiv=$($(ele).parent().parent().parent().parent().parent().parent());
var itemid= infoDiv.attr(""data-sku"");
var price=infoDiv.find("".showPricec"").text();
var sales=infoDiv.find("".sale"").text();
var title=infoDiv.find("".mojar-element-title"").text();
var img=$(ele).parent().parent().find(""div.img"").css(""background-image"");
var shopId=infoDiv.attr(""data-shopId"");
hyCoreModel.set1688ItemData({itemid:itemid,price:price,sales:sales,title:title,img:img,type:type,shopId:shopId});
};
");
return DoJavaScript(@"$('ul#sm-offer-list').find('.myitemState').remove();$('ul#sm-offer-list').find('.myopdiv').remove();
$('ul#sm-offer-list div.normalcommon-offer-card .img-container div.img').append('
<div class=""myitemState"">
<div class=""stateGraydiv""></div></div>
<div class=""myopdiv"">
<div class=""bgYellow"" style=""display:flex;"" onclick=""optClick(this,4)""></div>
<div class=""bgZs"" style=""display:flex;"" onclick=""optClick(this,2)"" ></div>
<div class=""bgPig"" style=""display:flex;"" onclick=""optClick(this,1)""></div>
<div class=""bgGreen"" style=""display:flex;"" onclick=""optClick(this,0)""></div>
</div>
')").isOk;
}
#endregion
public void RunSomeAction()
{
DoJavaScript(@$"
window.lib.mtop.request({{
api: ""mtop.1688.imageService.putImage"",
data: JSON.stringify({{
imageBase64: ""{Base64Img}"",
appName: ""searchImageUpload"",
appKey: ""pvvljh1grxcmaay2vgpe9nb68gg9ueg2""
}}),
ecode: ""0"",
v: ""1.0"",
type: ""POST""
}}).then(res=>{{
hyCoreModel.onSomePicRes(res)
}})
");
}
private bool AddCss()
{
///添加css
return DoJavaScript(@"$('head').append('<style>
.myitemState
{
width:100%;
height:100%;
position: absolute;
left: 0px;
top: 0px;
z-index: 9999;
}
.trueBg
{
background: url(""nacollector://home/img/true.png"") no-repeat;
background-size: 100% 100%;
}
.popBg
{
background: url(""nacollector://home/img/pop.png"") no-repeat;
background-size: 100% 100%;
}
.falseBg
{
background: url(""nacollector://home/img/close.png"") no-repeat;
background-size: 100% 100%;
}
.smallfalseBg
{
width:78px;
height:78px;
bottom: 0px;
left: 0px;
top: unset;
background: url(""nacollector://home/img/close.png"") no-repeat;
background-size: 100% 100%;
position: absolute;
}
.stateGraydiv
{
width:100%;
height:100%;
display:none;
background-color: rgba(85, 85, 85, 0.45);
}
.divshow
{
display:block;
}
.myopdiv
{
width:85%;
height:100%;
display:none;
position: absolute;
top: 0px;
right:0px;
}
.myopdiv div {
width: 23%;
height: 20%;
display: inline-block;
cursor: pointer;
}
.pic-box:hover .myopdiv
{
display:unset;
}
.pic-box:hover .myitemState
{
display:none;
}
.p-img:hover .myitemState
{
display:none;
}
.p-img:hover .myopdiv
{
display:unset;
z-index:9999;
}
.img-container:hover .myitemState
{
display:none;
}
.img-container:hover .myopdiv
{
display:unset;
z-index:9999;
}
.bgGreen
{
background: rgba(99, 161, 3, 0.8);
font-size:20px;
color:red;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
float: right;
font-family: ""global-iconfont"";
font-weight: 999;
margin-right:5px;
}
.bgPig
{
background: rgba(236, 128, 141, 0.8);
font-size:20px;
color:red;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
float: right;
font-family: ""global-iconfont"";
font-weight: 999;
margin-right:5px;
}
.bgZs
{
background: rgba(194, 128, 255, 0.8);
font-size:20px;
color:red;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
float: right;
font-family: ""global-iconfont"";
font-weight: 999;
margin-right:5px;
}
.bgYellow
{
background: rgba(245, 154, 35, 0.8);
font-size:20px;
color:red;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
float: right;
font-family: ""global-iconfont"";
font-weight: 999;
}
.stateYellow
{
background: rgba(245, 154, 35, 0.8);
font-size:20px;
color:red;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
float: right;
font-family: ""global-iconfont"";
font-weight: 999;
}
</style>')".Replace("\n", "").Replace("\r\n", "")).isOk;
}
/// <summary>
/// 执行js
/// </summary>
/// <param name="js"></param>
/// <returns></returns>
public (bool isOk, object result) DoJavaScript(string js)
{
js = js.Replace("\n", "").Replace("\r\n", "").Replace(System.Environment.NewLine, "").Replace("\r", "");
Task<JavascriptResponse> task = null;
Application.Current.Dispatcher.Invoke(() =>
{
task = web.EvaluateScriptAsPromiseAsync(js);
});
var result = task.Result;
//判断是否加载完成
return (result.Success,result.Result);
}
private void txtUrl_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
web.Load(txtUrl.Text);
}
}
}
public class Cef2AsyncJS
{
public SomeBrowerControl Brower { get; set; }
public void onAjaxHook(string url)
{
Brower.OnUrlEnd(url);
}
public void onLoad()
{
Brower.RunSomeAction();
}
public void onSomePicRes(dynamic data)
{
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
//{"imageId":"0","requestId":"a837075218924fd6a6969eb1d0596c64","sessionId":"6c4a3e67343c41dcbfb3ac0b2fb82abd"}
string imgId = data.data.imageId;
string requestId = data.data.requestId;
string sessionId= data.data.sessionId;
Application.Current.Dispatcher.Invoke(() =>
{
Brower.web.Load($"https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageAddress=&imageId={imgId}&spm=a260k.dacugeneral.search.0&imageIdList={imgId}");
});
//https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageAddress=&imageId=1809207254297088602&spm=a260k.dacugeneral.search.0&imageIdList=1809207254297088602
}
}
}

27
客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs

@ -41,11 +41,24 @@ namespace 齐越慧眼.cefhelper
{
Brower = brower;
}
public MyResourceRequestHandlerFactory(SomeBrowerControl brower)
{
Brower2 = brower;
}
public SomeBrowerControl Brower2;
public BrowerControl Brower;
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
return new MyResourceRequestHandler(Brower);
if (Brower != null)
{
return new MyResourceRequestHandler(Brower);
}
return new MyResourceRequestHandler(Brower2);
}
}
@ -55,10 +68,20 @@ namespace 齐越慧眼.cefhelper
{
Brower = brower;
}
public MyResourceRequestHandler(SomeBrowerControl brower)
{
Brower2 = brower;
}
public SomeBrowerControl Brower2;
public BrowerControl Brower;
protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
{
Brower.OnUrlEnd(request.Url);
if (Brower != null)
Brower.OnUrlEnd(request.Url);
else
Brower2.OnUrlEnd(request.Url);
return base.OnResourceResponse(chromiumWebBrowser, browser, frame, request, response);
}
}

15
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/items/Index.vue

@ -59,8 +59,8 @@
<div class="borderRight">
<div
style="padding-top: 10px;padding-bottom: 10px;width: 200px;margin: 0px auto;height: 215px;">
<a target="_black" :href="item.GoodsUrl"> <img
:src="'http:'+item.ItemImg" width="200" height="165" /></a>
<a target="_black" :href="item.GoodsUrl"> <img :src="'http:'+item.ItemImg" width="200"
height="165" /></a>
<a-row>
<a-col :span="12" style="text-align: left;">¥{{item.Price}}</a-col>
<a-col :span="12" style="text-align: right;">{{item.Sales}}</a-col>
@ -177,6 +177,8 @@
<a-col :span="16">
<a-row>
<a-col :span="12" style="text-align: left;">
<a-button style="margin-left: 10px;" type="primary" @click="getImgBase64(item.ItemImg)">搜图
</a-button>
<a-button style="margin-left: 10px;" type="primary" @click="setState(item.Id,1)">精选
</a-button>
<a-button style="margin-left: 10px;" type="primary" @click="setState(item.Id,2)">上架
@ -229,7 +231,7 @@
},
mounted() {
window.getDatas = this.getDatas
// this.getDatas(0)
// this.getDatas(0)
},
activated() {
//this.getDatas(0)
@ -303,7 +305,12 @@
this.$message.error(res.Msg);
}
})
}
},
getImgBase64(src) {
hyCoreModel.getImgBase64('http:'+src).then(res=>{
console.log(res)
})
},
},
}
</script>

2
客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js

File diff suppressed because one or more lines are too long

2
客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js.map

File diff suppressed because one or more lines are too long

14
客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj

@ -66,6 +66,7 @@
<PackageReference Include="HandyControl" Version="3.2.0" />
<PackageReference Include="MvvmLightLibsStd10" Version="5.4.1.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" />
</ItemGroup>
@ -97,4 +98,17 @@
<ProjectReference Include="..\WpfNoticeMsg\WpfNoticeMsg.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="UserControls\SomeBrowerControl.xaml.cs">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Page Update="UserControls\SomeBrowerControl.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
</Project>

Loading…
Cancel
Save