Browse Source

对接到客户端

master
feng 2 years ago
parent
commit
0624e884e0
  1. 6
      src/Coldairarrow.Entity/DTO/TeamitemDto.cs
  2. 2
      客户端/齐越慧眼/齐越慧眼/MainWindow.xaml
  3. 185
      客户端/齐越慧眼/齐越慧眼/Models/CompetingModel.cs
  4. 15
      客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
  5. 34
      客户端/齐越慧眼/齐越慧眼/ViewModels/CompetingWindowViewModel.cs
  6. 42
      客户端/齐越慧眼/齐越慧眼/Windows/CompetingWindow.xaml
  7. 555
      客户端/齐越慧眼/齐越慧眼/Windows/CompetingWindow.xaml.cs
  8. 11
      客户端/齐越慧眼/齐越慧眼/Windows/ItemDetailWindow.xaml.cs
  9. 19
      客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs
  10. 17
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/competing/Index.vue
  11. 30
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/items/Index.vue
  12. 1
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/css/app.c6957eae.css
  13. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/css/app.css
  14. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/index.html
  15. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js
  16. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/dist/js/app.js.map
  17. 4
      客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj

6
src/Coldairarrow.Entity/DTO/TeamitemDto.cs

@ -174,5 +174,11 @@ namespace Coldairarrow.Entity.DTO
/// 平台 /// 平台
/// </summary> /// </summary>
public int Platform { get; set; } public int Platform { get; set; }
/// <summary>
/// 商品Spu
/// </summary>
public string Spu { get; set; }
public string Sku { get; set; }
} }
} }

2
客户端/齐越慧眼/齐越慧眼/MainWindow.xaml

@ -12,7 +12,7 @@
ActiveGlowColor="{DynamicResource PrimaryColor}" ActiveGlowColor="{DynamicResource PrimaryColor}"
Height="780" Height="780"
Title="慧眼 V1.0.1.9" Title="慧眼 V1.0.1.9"
Width="1468" Icon="/icon.ico" Width="1768" Icon="/icon.ico"
> >
<Border Padding="0 10" Background="#EEEEEE"> <Border Padding="0 10" Background="#EEEEEE">
<hc:TabControl IsAnimationEnabled="True" IsTabFillEnabled="False" TabItemWidth="150" Name="tab" SelectionChanged="tab_SelectionChanged"> <hc:TabControl IsAnimationEnabled="True" IsTabFillEnabled="False" TabItemWidth="150" Name="tab" SelectionChanged="tab_SelectionChanged">

185
客户端/齐越慧眼/齐越慧眼/Models/CompetingModel.cs

@ -0,0 +1,185 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace .Models
{
public class TeamItem
{
public String Id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
public String CreatorId { get; set; }
/// <summary>
/// 否已删除
/// </summary>
public Boolean Deleted { get; set; }
/// <summary>
/// 商品表的ID
/// </summary>
public String ItemId { get; set; }
/// <summary>
/// 宝贝标题
/// </summary>
public String Title { get; set; }
/// <summary>
/// 宝贝价格
/// </summary>
public Decimal? Price { get; set; }
/// <summary>
/// 收货人数
/// </summary>
public string Sales { get; set; }
/// <summary>
/// 商品图片
/// </summary>
public String ItemImg { get; set; }
/// <summary>
/// 添加人
/// </summary>
public String UserId { get; set; }
/// <summary>
/// 团队Id
/// </summary>
public String TeamId { get; set; }
/// <summary>
/// 对标商品标题
/// </summary>
public String RivalTitle { get; set; }
/// <summary>
/// 对标商品价格
/// </summary>
public Decimal? RivalPrice { get; set; }
/// <summary>
/// 对标收货人数
/// </summary>
public String RivalSales { get; set; }
/// <summary>
/// 对标商品图片
/// </summary>
public String RivalImg { get; set; }
/// <summary>
/// 对标商品ID
/// </summary>
public String RivalGoodsId { get; set; }
/// <summary>
/// 状态
/// </summary>
public Int32? State { get; set; }
/// <summary>
/// 扩展信息
/// </summary>
public String ExtensionJson { get; set; }
/// <summary>
/// 竞品列表Json
/// </summary>
public string CompetingItemJson { get; set; }
/// <summary>
/// 对标商品评价数量
/// </summary>
public string RivalPLCount { get; set; }
/// <summary>
/// 接比价任务的用户ID
/// </summary>
public string PriceTaskUserId { get; set; }
/// <summary>
/// 品类词ID
/// </summary>
public string CatId { get; set; }
/// <summary>
/// 是否合格
/// </summary>
public bool? IsQualified { get; set; }
/// <summary>
/// 完成时间
/// </summary>
public DateTime? UpdateDate { get; set; }
/// <summary>
/// 比价发布日期
/// </summary>
public DateTime? PriceTaskCreateDate { get; set; }
}
/// <summary>
/// 竞品信息
/// </summary>
public class TeamCompetingItem
{
/// <summary>
/// 图片地址
/// </summary>
public string ImgUrl { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 价格
/// </summary>
public string Price { get; set; }
/// <summary>
/// 评价数量
/// </summary>
public string CommentCount { get; set; }
/// <summary>
/// 竞品链接
/// </summary>
public string ItemUrl { get; set; }
/// <summary>
/// 平台
/// </summary>
public int Platform { get; set; }
public string Spu { get; set; }
private string _Sku;
public string Sku
{
get
{
if(string.IsNullOrEmpty(_Sku))
_Sku= Regex.Match(ImgUrl, @"item\.jd\.com/(.*?)\.html").Groups[1].Value;
return _Sku;
}
set {
_Sku = value;
}
}
}
}

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

@ -19,6 +19,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation; using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using .cefhelper; using .cefhelper;
using .Models;
namespace .UserControls namespace .UserControls
{ {
@ -105,6 +106,20 @@ namespace 齐越慧眼.UserControls
public class ItemsAsyncJS public class ItemsAsyncJS
{ {
public bool? onShowWindow(string itemJson,string type)
{
var item = Newtonsoft.Json.JsonConvert.DeserializeObject<TeamItem>(itemJson);
if(type== "0") {
bool? result = false;
MainWindow.Main.Dispatcher.Invoke(() =>
{
Windows.CompetingWindow window = new Windows.CompetingWindow(item);
result= window.ShowDialog();
});
return result;
}
return false;
}
public string getToken() public string getToken()
{ {

34
客户端/齐越慧眼/齐越慧眼/ViewModels/CompetingWindowViewModel.cs

@ -0,0 +1,34 @@
using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
using System.Text;
using .Models;
namespace .ViewModels
{
public class CompetingWindowViewModel:ViewModelBase
{
public static CompetingWindowViewModel Instance { get; private set;}
/// <summary>
/// 当前操作对象
/// </summary>
TeamItem Item { get; set; }
public CompetingWindowViewModel(TeamItem item)
{
_ItemList = new System.Collections.ObjectModel.ObservableCollection<TeamCompetingItem>();
Item = item;
Instance = this;
}
private System.Collections.ObjectModel.ObservableCollection<TeamCompetingItem> _ItemList;
public System.Collections.ObjectModel.ObservableCollection<TeamCompetingItem> ItemList
{
get { return _ItemList; }
set { Set(ref _ItemList, value); }
}
}
}

42
客户端/齐越慧眼/齐越慧眼/Windows/CompetingWindow.xaml

@ -5,8 +5,44 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:齐越慧眼.Windows" xmlns:local="clr-namespace:齐越慧眼.Windows"
mc:Ignorable="d" mc:Ignorable="d"
Title="CompetingWindow" Height="450" Width="800">
<Grid>
</Grid> Title="CompetingWindow" Height="768" Width="1280">
<DockPanel Margin="0 10 0 0">
<DockPanel DockPanel.Dock="Top" >
<Button Content="返回" Margin="0 0 10 0" Name="back" Click="back_Click"></Button>
<TextBox x:Name="txtUrl" Keyboard.KeyUp="txtUrl_KeyUp"></TextBox>
</DockPanel>
<Border DockPanel.Dock="Bottom" Height="70" Background="White" Padding="0 9 0 0">
<Border.Effect>
<DropShadowEffect x:Name="OG" BlurRadius="11" Color="Black" Direction="50" Opacity="0.9" RenderingBias="Performance" ShadowDepth="1">
<Storyboard.TargetProperty>
BlurRadius
</Storyboard.TargetProperty>
</DropShadowEffect>
</Border.Effect>
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10 0 0 0">
<TextBlock Text="已选" FontSize="18" Foreground="#333333"></TextBlock>
<TextBlock Text="{Binding ItemList.Count}" Margin="5 0 0 0" FontSize="18" Foreground="#333333"></TextBlock>
<TextBlock Text="/20" Margin="5 0 0 0" FontSize="18" Foreground="#333333"></TextBlock>
<TextBlock Text="个竞品" Margin="5 0 0 0" FontSize="18" Foreground="#333333"></TextBlock>
</StackPanel>
<Button Grid.Column="1" Style="{StaticResource ButtonPrimary}" Content="下一步" Height="61" Width="119" HorizontalAlignment="Right" Cursor="Hand" Background="#8080ff" FontSize="13" Foreground="White">
<Button.Effect>
<DropShadowEffect ShadowDepth="-4" BlurRadius="5" Color="LightGray" />
</Button.Effect>
</Button>
</Grid>
</Border>
<Grid x:Name="grid" DockPanel.Dock="Bottom" Margin="0 10 0 0">
</Grid>
</DockPanel>
</Window> </Window>

555
客户端/齐越慧眼/齐越慧眼/Windows/CompetingWindow.xaml.cs

@ -1,6 +1,13 @@
using System; using CefSharp;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Security.Policy;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Data; using System.Windows.Data;
@ -9,6 +16,10 @@ using System.Windows.Input;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Shapes; using System.Windows.Shapes;
using .cefhelper;
using .Models;
using .UserControls;
using .ViewModels;
namespace .Windows namespace .Windows
{ {
@ -17,9 +28,549 @@ namespace 齐越慧眼.Windows
/// </summary> /// </summary>
public partial class CompetingWindow : Window public partial class CompetingWindow : Window
{ {
public CompetingWindow() public ExtChromiumBrowser web;
public CompetingWindow(TeamItem item)
{ {
InitializeComponent(); InitializeComponent();
this.DataContext = new CompetingWindowViewModel(item);
web = new ExtChromiumBrowser($"https://search.jd.com/Search?keyword={item.Title}")
{
BrowserSettings =
{
DefaultEncoding = "UTF-8",
Plugins = CefState.Enabled,
//关于跨域限制
//WebSecurity = CefState.Disabled,
ApplicationCache = CefState.Enabled,
LocalStorage = CefState.Enabled,
}
};
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 CompetingAsyncJS();
cjs.Brower = this;
web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
web.StartNewWindow += Web_StartNewWindow;
web.TitleChanged += Web_TitleChanged;
web.AddressChanged += Web_AddressChanged;
this.KeyUp += BrowerControl_KeyUp;
}
private void BrowerControl_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.F12)
{
web.ShowDevTools();
}
} }
private void Web_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Application.Current.Dispatcher.Invoke(() =>
{
txtUrl.Text = e.NewValue.ToString();
});
}
private void Web_TitleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
Application.Current.Dispatcher.Invoke(() =>
{
this.Title = e.NewValue.ToString();
});
}
int nowPatlom = 0;
public void OnUrlEnd(string url)
{
if (url.Contains("s_new.php"))
{
Task.Factory.StartNew(() =>
{
nowPatlom = 1;
lastUrl = "search.jd.com";
DoWork();
});
}
}
private void Web_StartNewWindow(object sender, NewWindowEventArgs e)
{
var match = Regex.Match(e.Url, @"item\.jd\.com/(.*?)\.html");
if (match.Success)
{
Thread t = new Thread(() =>
{
//判断是否添加成功
if (Windows.ItemDetailWindow.Show(e.Url) == true)
{
WpfNoticeMsg.NoticeMessage.Show("添加成功!");
}
});
t.IsBackground = true;
t.Start();
return;
}
//
//WpfNoticeMsg.NoticeMessage.Show(e.Url);
BrowerHelper.OpenUrl(e.Url);
//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") || lastUrl.StartsWith("https://mobile.yangkeduo.com/search_result.html?search_key"))
{
if (lastUrl.StartsWith("https://s.taobao.com/search"))
{
nowPatlom = 0;
}
if (lastUrl.StartsWith("https://search.jd.com/"))
{
nowPatlom = 1;
}
if (lastUrl.StartsWith("https://s.1688.com/"))
{
nowPatlom = 2;
}
if (lastUrl.StartsWith("https://mobile.yangkeduo.com/search_result.html?search_key"))
{
nowPatlom = 3;
}
StartPage();
}
}
}
object doWorkObj = new object();
private void StartPage()
{
Thread t = new Thread(() =>
{
lock (doWorkObj)
{
if (string.IsNullOrEmpty(lastUrl))
return;
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();
AddJDOptionDiv();
CheckJDPageItem();
break;
}
Thread.Sleep(100);
}
}
}
/// <summary>
/// 检测页面商品
/// </summary>
/// <returns></returns>
private void CheckJDPageItem()
{
var res = DoJavaScript(@"var ids=[]; $('div#J_goodsList li').each(function(){ids.push($(this).attr(""data-spu""))});return ids.filter(c=>c!=undefined&&c!="""");");
//页面的spu列表
List<string> itemIds = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(Newtonsoft.Json.JsonConvert.SerializeObject(res.result));
//已经添加的spu
var result = CompetingWindowViewModel.Instance.ItemList.Where(d => itemIds.Contains(d.Spu)).ToList();
foreach (var item in result)
{
////判断是否团队过滤
//if (item.IsFilter)
//{
// DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.GoodsId}""]')).find('.myitemState').addClass(""falseBg"")");
// DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
//}
//if (item.IsCompeting)
//{
//<div style=""width:20%;height:20%"" class=""bgYellow"">竞</div>
//if ((int)DoJavaScript(@$"return $($('div#J_goodsList li[data-sku=""{item.Sku}""]')).find('.stateYellow').length").result <= 0)
//{
// DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.Sku}""]')).find('.myitemState').prepend('<div style=""width:20%;height:20%"" class=""stateYellow"">竞</div>')");
//}
//DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.Sku}""]')).find('.stateGraydiv').addClass(""divshow"")");
//}
//if (item.IsScreening)
//{
DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.Sku}""]')).find('.myitemState').addClass(""trueBg"")");
DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.Sku}""]')).find('.stateGraydiv').addClass(""divshow"")");
//}
//if (item.IsAdded)
//{
// DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.GoodsId}""]')).find('.myitemState').addClass(""popBg"")");
// DoJavaScript($@"$($('div#J_goodsList li[data-sku=""{item.GoodsId}""]')).find('.stateGraydiv').addClass(""divshow"")");
//}
}
}
/// <summary>
/// 添加操作面板
/// </summary>
/// <returns></returns>
private bool AddJDOptionDiv()
{
///添加js事件
DoJavaScript(@"
window.optClick= function (ele,type){
var itemid= $(ele).parent().parent().parent().parent().attr(""data-sku"");
var price=$(ele).parent().parent().parent().parent().find("".p-price i"").text();
var sales=$(ele).parent().parent().parent().parent().find("".p-commit"").text();
var title=$(ele).parent().parent().parent().parent().find("".p-name a em"").text();
var img=$(ele).parent().parent().parent().parent().find("".p-img img"").attr(""src"");
hyCoreModel.setjdItemData({itemid:itemid,price:price,sales:sales,title:title,img:img,type:type});
};
");
return DoJavaScript(@"$('div#J_goodsList .gl-item').find('.myitemState').remove();$('div#J_goodsList .gl-item').find('.myopdiv').remove();
$('div#J_goodsList .gl-item .p-img a').before('
<div class=""myitemState"">
<div class=""stateGraydiv""></div></div><div class=""myopdiv"">
</div>
')").isOk;
}
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%;
}
.smallpopBg
{
width:78px;
height:78px;
bottom: 0px;
left: 10px;
top: unset;
background: url(""nacollector://home/img/pop.png"") no-repeat;
background-size: 100% 100%;
position: absolute;
}
.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;
}
.LOFjVUas:hover .myitemState
{
display:none;
}
.LOFjVUas: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, bool needReplaceLine = true)
{
if (needReplaceLine)
{
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)
{
lastUrl = string.Empty;
web.Load(txtUrl.Text);
}
}
private void back_Click(object sender, RoutedEventArgs e)
{
lastUrl = string.Empty;
this.web.Back();
}
}
public class CompetingAsyncJS
{
public CompetingWindow Brower { get; set; }
} }
} }

11
客户端/齐越慧眼/齐越慧眼/Windows/ItemDetailWindow.xaml.cs

@ -88,7 +88,6 @@ namespace 齐越慧眼.Windows
{ {
if (isWait) if (isWait)
{ {
web.LoadUrlAsync("www.baidu.com");
return; return;
} }
@ -125,7 +124,17 @@ namespace 齐越慧眼.Windows
} }
string url = web.Address; string url = web.Address;
string spu = EvalScript("return $(document.head).html().match(/mainSkuId:'(.*?)',/)==undefined?\"\":$(document.head).html().match(/mainSkuId:'(.*?)',/)[1]");
ViewModels.CompetingWindowViewModel.Instance.ItemList.Add(new Models.TeamCompetingItem() {
CommentCount=comment,
ImgUrl=imgUrl,
ItemUrl=url,
Platform=0,
Price=price,
Spu=spu,
Title=title,
});
this.DialogResult = true; this.DialogResult = true;
} }

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

@ -10,6 +10,7 @@ using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows; using System.Windows;
using .UserControls; using .UserControls;
using .Windows;
namespace .cefhelper namespace .cefhelper
{ {
@ -49,9 +50,14 @@ namespace 齐越慧眼.cefhelper
{ {
Brower2 = brower; Brower2 = brower;
} }
public MyResourceRequestHandlerFactory(CompetingWindow brower)
{
Brower3 = brower;
}
public SomeBrowerControl Brower2; public SomeBrowerControl Brower2;
public BrowerControl Brower; public BrowerControl Brower;
public CompetingWindow Brower3;
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{ {
@ -59,7 +65,10 @@ namespace 齐越慧眼.cefhelper
{ {
return new MyResourceRequestHandler(Brower); return new MyResourceRequestHandler(Brower);
} }
if (Brower3 != null)
{
return new MyResourceRequestHandler(Brower3);
}
return new MyResourceRequestHandler(Brower2); return new MyResourceRequestHandler(Brower2);
} }
} }
@ -74,15 +83,23 @@ namespace 齐越慧眼.cefhelper
{ {
Brower2 = brower; Brower2 = brower;
} }
public MyResourceRequestHandler(CompetingWindow brower)
{
Brower3 = brower;
}
public SomeBrowerControl Brower2; public SomeBrowerControl Brower2;
public BrowerControl Brower; public BrowerControl Brower;
public CompetingWindow Brower3;
protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
{ {
if (Brower != null) if (Brower != null)
Brower.OnUrlEnd(request.Url); Brower.OnUrlEnd(request.Url);
else else
if(Brower2!=null)
Brower2.OnUrlEnd(request.Url); Brower2.OnUrlEnd(request.Url);
else if(Brower3!=null)
Brower3.OnUrlEnd(request.Url);
return base.OnResourceResponse(chromiumWebBrowser, browser, frame, request, response); return base.OnResourceResponse(chromiumWebBrowser, browser, frame, request, response);
} }

17
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/competing/Index.vue

@ -123,9 +123,9 @@
</div> </div>
<div style="flex-direction: column;width: 177px;color: #02a7f0;" class="contentDiv" > <div style="flex-direction: column;width: 177px;color: #02a7f0;" class="contentDiv" >
<div >查找竞品</div> <div @click="()=>{onShowWindow(item,0)}">查找竞品</div>
<div style="margin-top: 10px;">完成分析</div> <div style="margin-top: 10px;">完成分析</div>
<div style="margin-top: 10px;">编辑修改</div> <div style="margin-top: 10px;" @click="()=>{onShowWindow(item,1)}">编辑修改</div>
<div style="margin-top: 10px;">放弃</div> <div style="margin-top: 10px;">放弃</div>
</div> </div>
</div> </div>
@ -181,6 +181,7 @@ export default {
}, },
mounted() { mounted() {
window.getDatas = this.getDatas; window.getDatas = this.getDatas;
window.reloaddata=this.reloaddata;
this.getDatas(0); this.getDatas(0);
this.getTabCount(); this.getTabCount();
}, },
@ -195,6 +196,13 @@ export default {
} }
return '未添加竞品' return '未添加竞品'
}, },
reloaddata(){
this.getDatas(0);
},
onShowWindow(item,type){
if( hyCoreModel.onShowWindow(JSON.stringify(item),type))
this.reloaddata()
},
getTop1Data(items){ getTop1Data(items){
if(items&&items.length>0) if(items&&items.length>0)
{ {
@ -360,6 +368,11 @@ export default {
}) })
}, },
changeTab(e) { changeTab(e) {
if(e!='-1')
{
this.$router.push({name:'item',params:{tabId:e} })
return
}
this.getDatas(e); this.getDatas(e);
this.currentTab = e; this.currentTab = e;
this.pagination.current = 1; this.pagination.current = 1;

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

@ -1,6 +1,11 @@
<template> <template>
<div class="about"> <div class="about">
<a-tabs @change="changeTab"> <a-tabs @change="changeTab" v-model="currentTab">
<a-tab-pane
key="-1"
:tab="'竞品分析'"
>
</a-tab-pane>
<a-tab-pane <a-tab-pane
key="0" key="0"
:tab="'待比价(' + getTaskCount(0) + ')'" :tab="'待比价(' + getTaskCount(0) + ')'"
@ -138,13 +143,7 @@
<a-col :span="4"> <a-col :span="4">
<div class="borderRight"> <div class="borderRight">
<div <div
style=" style=" padding-top: 10px; padding-bottom: 10px; width: 200px; margin: 0px auto; height: 215px; "
padding-top: 10px;
padding-bottom: 10px;
width: 200px;
margin: 0px auto;
height: 215px;
"
> >
<a target="_black" :href="item.GoodsUrl"> <a target="_black" :href="item.GoodsUrl">
<img :src="getImgPath(item.ItemImg)" width="200" height="165" <img :src="getImgPath(item.ItemImg)" width="200" height="165"
@ -651,8 +650,14 @@ export default {
}, },
mounted() { mounted() {
window.getDatas = this.getDatas; window.getDatas = this.getDatas;
this.getDatas(0); console.log(this.$route.params.tabId)
this.getTabCount(); if(this.$route.params.tabId)
{
this.changeTab(this.$route.params.tabId);
}else{
this.getDatas(0);
}
this.getTabCount();
}, },
activated() { activated() {
//this.getDatas(0) //this.getDatas(0)
@ -733,6 +738,11 @@ export default {
}) })
}, },
changeTab(e) { changeTab(e) {
if(e=='-1')
{
this.$router.push('/competing')
return
}
this.getDatas(e); this.getDatas(e);
this.currentTab = e; this.currentTab = e;
this.pagination.current = 1; this.pagination.current = 1;

1
客户端/齐越慧眼/齐越慧眼/vuepage/dist/css/app.c6957eae.css

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

2
客户端/齐越慧眼/齐越慧眼/vuepage/dist/index.html

@ -1 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>client</title><link href="/css/app.css" rel="preload" as="style"><link href="/css/app.fe8cfd8e.css" rel="preload" as="style"><link href="/css/chunk-vendors.09af4a6b.css" rel="preload" as="style"><link href="/css/chunk-vendors.css" rel="preload" as="style"><link href="/js/app.js" rel="preload" as="script"><link href="/js/chunk-vendors.js" rel="preload" as="script"><link href="/css/chunk-vendors.09af4a6b.css" rel="stylesheet"><link href="/css/chunk-vendors.css" rel="stylesheet"><link href="/css/app.fe8cfd8e.css" rel="stylesheet"><link href="/css/app.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but client doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.js"></script><script src="/js/app.js"></script></body></html> <!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>client</title><link href="/css/app.c6957eae.css" rel="preload" as="style"><link href="/css/app.css" rel="preload" as="style"><link href="/css/chunk-vendors.09af4a6b.css" rel="preload" as="style"><link href="/css/chunk-vendors.css" rel="preload" as="style"><link href="/js/app.js" rel="preload" as="script"><link href="/js/chunk-vendors.js" rel="preload" as="script"><link href="/css/chunk-vendors.09af4a6b.css" rel="stylesheet"><link href="/css/chunk-vendors.css" rel="stylesheet"><link href="/css/app.c6957eae.css" rel="stylesheet"><link href="/css/app.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but client doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.js"></script><script src="/js/app.js"></script></body></html>

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

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

@ -46,6 +46,7 @@
<None Remove="vuepage\client\.postcssrc.js" /> <None Remove="vuepage\client\.postcssrc.js" />
<None Remove="vuepage\dist\css\app.030d4c2f.css" /> <None Remove="vuepage\dist\css\app.030d4c2f.css" />
<None Remove="vuepage\dist\css\app.b0aefef5.css" /> <None Remove="vuepage\dist\css\app.b0aefef5.css" />
<None Remove="vuepage\dist\css\app.c6957eae.css" />
<None Remove="vuepage\dist\css\app.css" /> <None Remove="vuepage\dist\css\app.css" />
<None Remove="vuepage\dist\css\app.fe8cfd8e.css" /> <None Remove="vuepage\dist\css\app.fe8cfd8e.css" />
<None Remove="vuepage\dist\css\chunk-vendors.09af4a6b.css" /> <None Remove="vuepage\dist\css\chunk-vendors.09af4a6b.css" />
@ -83,6 +84,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="vuepage\dist\css\app.030d4c2f.css" /> <EmbeddedResource Include="vuepage\dist\css\app.030d4c2f.css" />
<EmbeddedResource Include="vuepage\dist\css\app.c6957eae.css" />
<EmbeddedResource Include="vuepage\dist\css\app.css" /> <EmbeddedResource Include="vuepage\dist\css\app.css" />
<EmbeddedResource Include="vuepage\dist\css\app.fe8cfd8e.css" /> <EmbeddedResource Include="vuepage\dist\css\app.fe8cfd8e.css" />
<EmbeddedResource Include="vuepage\dist\css\chunk-vendors.09af4a6b.css" /> <EmbeddedResource Include="vuepage\dist\css\chunk-vendors.09af4a6b.css" />
@ -113,9 +115,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="ViewModels\" />
<Folder Include="vuepage\client\" /> <Folder Include="vuepage\client\" />
<Folder Include="vuepage\client\dist\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

Loading…
Cancel
Save