14 changed files with 814 additions and 14 deletions
@ -0,0 +1,12 @@ |
|||
<Window x:Class="齐越慧眼.Windows.CompetingWindow" |
|||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|||
xmlns:local="clr-namespace:齐越慧眼.Windows" |
|||
mc:Ignorable="d" |
|||
Title="CompetingWindow" Height="450" Width="800"> |
|||
<Grid> |
|||
|
|||
</Grid> |
|||
</Window> |
@ -0,0 +1,25 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text; |
|||
using System.Windows; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Data; |
|||
using System.Windows.Documents; |
|||
using System.Windows.Input; |
|||
using System.Windows.Media; |
|||
using System.Windows.Media.Imaging; |
|||
using System.Windows.Shapes; |
|||
|
|||
namespace 齐越慧眼.Windows |
|||
{ |
|||
/// <summary>
|
|||
/// CompetingWindow.xaml 的交互逻辑
|
|||
/// </summary>
|
|||
public partial class CompetingWindow : Window |
|||
{ |
|||
public CompetingWindow() |
|||
{ |
|||
InitializeComponent(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,20 @@ |
|||
<Window x:Class="齐越慧眼.Windows.ItemDetailWindow" |
|||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|||
xmlns:local="clr-namespace:齐越慧眼.Windows" |
|||
mc:Ignorable="d" |
|||
Title="竞品选取" Height="768" Width="1280"> |
|||
<Grid> |
|||
<Grid.RowDefinitions> |
|||
<RowDefinition></RowDefinition> |
|||
<RowDefinition Height="60"></RowDefinition> |
|||
</Grid.RowDefinitions> |
|||
<Grid x:Name="grid"></Grid> |
|||
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right"> |
|||
<Button x:Name="btn_canel" Content="取消" Click="btn_canel_Click" Style="{StaticResource ButtonCustom}" Padding="40 5" Cursor="Hand" FontSize="13" Foreground="#555555"></Button> |
|||
<Button x:Name="btn_add" Click="btn_add_Click" Content="添加为竞品" Style="{StaticResource ButtonPrimary}" Margin="20 0 0 0" Height="60" Cursor="Hand" Padding="40 0" Background="#8080ff" FontSize="13" Foreground="White"></Button> |
|||
</StackPanel> |
|||
</Grid> |
|||
</Window> |
@ -0,0 +1,157 @@ |
|||
using CefSharp; |
|||
using CefSharp.Wpf; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Security.Policy; |
|||
using System.Text; |
|||
using System.Text.RegularExpressions; |
|||
using System.Threading; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Data; |
|||
using System.Windows.Documents; |
|||
using System.Windows.Input; |
|||
using System.Windows.Media; |
|||
using System.Windows.Media.Imaging; |
|||
using System.Windows.Shapes; |
|||
using 齐越慧眼.cefhelper; |
|||
|
|||
namespace 齐越慧眼.Windows |
|||
{ |
|||
/// <summary>
|
|||
/// ItemDetailWindow.xaml 的交互逻辑
|
|||
/// </summary>
|
|||
public partial class ItemDetailWindow : Window |
|||
{ |
|||
|
|||
private ExtChromiumBrowser web; |
|||
private ItemDetailWindow(string url) |
|||
{ |
|||
InitializeComponent(); |
|||
|
|||
KeyDown += ItemDetailWindow_KeyDown; |
|||
|
|||
web = new ExtChromiumBrowser(url) |
|||
{ |
|||
BrowserSettings = |
|||
{ |
|||
DefaultEncoding = "UTF-8", |
|||
Plugins = CefState.Enabled, |
|||
//关于跨域限制
|
|||
//WebSecurity = CefState.Disabled,
|
|||
ApplicationCache = CefState.Enabled, |
|||
LocalStorage = CefState.Enabled |
|||
}, |
|||
|
|||
//RequestHandler =new MyRequestHandler()
|
|||
}; |
|||
|
|||
grid.Children.Add(web); |
|||
|
|||
} |
|||
|
|||
private void LoadUrl(string url) |
|||
{ |
|||
web.Load(url); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 显示
|
|||
/// </summary>
|
|||
/// <param name="url"></param>
|
|||
/// <returns></returns>
|
|||
public static bool? Show(string url) |
|||
{ |
|||
ItemDetailWindow window = null ; |
|||
bool? result = null; |
|||
MainWindow.Main.Dispatcher.Invoke(new Action(() => { |
|||
window = new ItemDetailWindow(url); |
|||
result= window.ShowDialog(); |
|||
})); |
|||
|
|||
return result; |
|||
} |
|||
|
|||
|
|||
private void ItemDetailWindow_KeyDown(object sender, KeyEventArgs e) |
|||
{ |
|||
if (e.Key == System.Windows.Input.Key.F12) |
|||
{ |
|||
web.ShowDevTools(); |
|||
} |
|||
} |
|||
|
|||
bool isWait = false; |
|||
|
|||
private void btn_add_Click(object sender, RoutedEventArgs e) |
|||
{ |
|||
if (isWait) |
|||
{ |
|||
web.LoadUrlAsync("www.baidu.com"); |
|||
return; |
|||
} |
|||
|
|||
isWait = true; |
|||
Task<JavascriptResponse> task = null; |
|||
|
|||
Application.Current.Dispatcher.Invoke(() => |
|||
{ |
|||
task = web.EvaluateScriptAsPromiseAsync("return $(document.body).html();",TimeSpan.FromSeconds(10)); |
|||
}); |
|||
|
|||
var result = task.Result; |
|||
|
|||
//判断是否加载完成
|
|||
if (!result.Success) |
|||
{ |
|||
WpfNoticeMsg.NoticeMessage.Show("请等待页面加载完成后重试!"); |
|||
return; |
|||
} |
|||
|
|||
|
|||
string imgUrl = EvalScript("return $('#spec-img').attr('src')").Replace(".avif",""); |
|||
if (imgUrl.StartsWith("//")) |
|||
{ |
|||
imgUrl = "https:" + imgUrl; |
|||
} |
|||
string title = EvalScript("return $($(\".sku-name\")[0]).text().trim()"); |
|||
string price = EvalScript("return $($(\".p-price\")[0]).text().trim()").Replace("¥", "").Trim(); |
|||
string comment = EvalScript("return $($(\"li[data-anchor=#comment]\")[0]).text().trim()"); |
|||
var match= Regex.Match(comment, @"商品评价\((.*?)\)"); |
|||
if (match.Success) |
|||
{ |
|||
comment= match.Groups[1].Value; |
|||
} |
|||
string url = web.Address; |
|||
|
|||
|
|||
|
|||
this.DialogResult = true; |
|||
} |
|||
|
|||
private void btn_canel_Click(object sender, RoutedEventArgs e) |
|||
{ |
|||
this.DialogResult = false; |
|||
} |
|||
|
|||
string EvalScript(string js) |
|||
{ |
|||
Task<JavascriptResponse> task = null; |
|||
|
|||
Application.Current.Dispatcher.Invoke(() => |
|||
{ |
|||
task = web.EvaluateScriptAsPromiseAsync(js, TimeSpan.FromSeconds(10)); |
|||
}); |
|||
|
|||
var result = task.Result; |
|||
|
|||
if (result.Success) |
|||
{ |
|||
return result.Result.ToString(); |
|||
} |
|||
|
|||
return string.Empty; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,510 @@ |
|||
<template> |
|||
<div class="about"> |
|||
<a-tabs @change="changeTab"> |
|||
<a-tab-pane |
|||
key="-1" |
|||
:tab="'竞品分析'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="0" |
|||
:tab="'待比价(' + getTaskCount(0) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="6" |
|||
:tab="'已比价(' + getTaskCount(6) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="1" |
|||
:tab="'精选(' + getTaskCount(1) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="8" |
|||
:tab="'待上架(' + getTaskCount(8) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="2" |
|||
:tab="'已上架(' +getTaskCount(2) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
<a-tab-pane |
|||
key="3" |
|||
:tab="'放弃(' + getTaskCount(3) + ')'" |
|||
> |
|||
</a-tab-pane> |
|||
</a-tabs> |
|||
|
|||
<!-- <a-row :gutter="10" style="margin-bottom:10px"> |
|||
|
|||
<a-col :span="5"> |
|||
<a-input |
|||
v-model="catKeyWord" |
|||
placeholder="搜索品类词" |
|||
> |
|||
</a-input> |
|||
</a-col> |
|||
|
|||
<a-col :span="1"> |
|||
<a-button @click="searchDatas">搜索</a-button> |
|||
</a-col> |
|||
</a-row> --> |
|||
|
|||
|
|||
<div class="border"> |
|||
<!--标题--> |
|||
<div style="background-color: #f3f2f7;border: 1px solid #d7d7d7;border-left: 0; border-right: 0;background: #f3f2f7;justify-items: center;text-align: center;display: flex;align-items: center; vertical-align: center;height: 35px;"> |
|||
<div style="width: 171px;" class="titleDiv"> |
|||
<div> |
|||
来源</div> |
|||
</div> |
|||
<div style="width: 177px;" class="titleDiv"> |
|||
战场 |
|||
</div> |
|||
<div style="width: 177px;" class="titleDiv"> |
|||
竞争环境 |
|||
</div> |
|||
<div style="width: 177px;" class="titleDiv"> |
|||
兵力规划 |
|||
</div> |
|||
<div style="width: 801px;" class="titleDiv"> |
|||
对手信息 |
|||
</div> |
|||
<div style="width: 177px;" class="titleDiv"> |
|||
操作 |
|||
</div> |
|||
</div> |
|||
|
|||
|
|||
<!--内容页面--> |
|||
<div v-for="item in datas" |
|||
:key="item.Id"> |
|||
|
|||
<div style="padding-left: 10px;display: flex;align-items: center;color: #333333;background: #f3f2f7;height: 35px; border: 1px solid #d7d7d7;border-left: 0; border-right: 0;"> |
|||
SKU名称:{{item.Title}} |
|||
|
|||
售价:{{item.Price}} |
|||
|
|||
付款人数:{{item.Sales}} |
|||
</div> |
|||
<div style="background-color: #f3f2f7;border-bottom: 0px solid #d7d7d7;background: #ffffff;justify-items: center;text-align: center;display: flex;align-items: center; vertical-align: center;height: 171px;"> |
|||
<div style="width: 171px;" class="contentDiv"> |
|||
<img :src="item.ItemImg" style="width: 151px;height: 151px;" > |
|||
</div> |
|||
<div style="width: 177px;" class="contentDiv"> |
|||
战场 |
|||
</div> |
|||
<div style="width: 177px;" class="contentDiv"> |
|||
竞争环境 |
|||
</div> |
|||
<div style="width: 177px;" class="contentDiv"> |
|||
兵力规划 |
|||
</div> |
|||
<div style="width: 801px;" class="contentDiv"> |
|||
对手信息 |
|||
</div> |
|||
<div style="width: 177px;" class="contentDiv"> |
|||
操作 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!--分页条--> |
|||
<div style="float: right; margin-top: 30px"> |
|||
<a-pagination |
|||
v-model="pagination.current" |
|||
:default-current="1" |
|||
:total="pagination.total" |
|||
:page-size="pagination.pageSize" |
|||
@change="changePage" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
showSearchPic:false, |
|||
searchpicurl:undefined, |
|||
searchPicType:undefined, |
|||
datas: [], |
|||
pagination: { |
|||
current: 1, |
|||
pageSize: 10, |
|||
total: 0, |
|||
showTotal: (total, range) => |
|||
`总数:${total} 当前:${range[0]}-${range[1]}`, |
|||
}, |
|||
filters: {}, |
|||
sorter: { field: "Id", order: "asc" }, |
|||
loading: false, |
|||
queryParam: { condition: "State", keyword: 0 }, |
|||
selectedRowKeys: [], |
|||
currentTab: "0", |
|||
catKeyWord:undefined, |
|||
lastEditData: undefined, |
|||
extFormList: ["以图搜款"], |
|||
stateList: [], |
|||
platformList: [ |
|||
{ id: 0, name: "淘宝" }, |
|||
{ id: 1, name: "京东" }, |
|||
{ id: 2, name: "1688" }, |
|||
{ id: 3, name: "拼多多" }, |
|||
], |
|||
}; |
|||
}, |
|||
mounted() { |
|||
window.getDatas = this.getDatas; |
|||
this.getDatas(0); |
|||
this.getTabCount(); |
|||
}, |
|||
activated() { |
|||
//this.getDatas(0) |
|||
}, |
|||
methods: { |
|||
searchPicByUrl(){ |
|||
this.getImgBase64(this.getImgPath(this.searchpicurl), 2) |
|||
this.showSearchPic=false |
|||
}, |
|||
showSearchPicModel(type){ |
|||
this.searchpicurl=undefined |
|||
this.searchPicType=type |
|||
this.showSearchPic=true |
|||
}, |
|||
getTabCount() { |
|||
this.http.get("/HuiYan/teamitems/GetTeamCount").then((res) => { |
|||
this.stateList = res.Data; |
|||
}); |
|||
}, |
|||
getTaskCount(id){ |
|||
var task= this.stateList.find(c=>c.Id==id) |
|||
if(task==null||task==undefined) |
|||
{ |
|||
return 0 |
|||
} |
|||
return task.Count |
|||
}, |
|||
getImgPath(img) { |
|||
if (!img||img==undefined) return; |
|||
|
|||
if (img.indexOf("http") >= 0) { |
|||
return img; |
|||
} else { |
|||
return "http:" + img; |
|||
} |
|||
}, |
|||
// 实现select选择框可下拉单选,也可输入赋值 |
|||
handleSearch(value, ext, item) { |
|||
this.handleChange(value, ext, item); |
|||
}, |
|||
handleChange(value, ext, item) { |
|||
ext.SupplierFrom = value != null && value != "" ? value : []; |
|||
|
|||
if ( |
|||
item.Extensions.filter((c) => c.SupplierFrom == "以图搜款").length > 2 |
|||
) { |
|||
this.$message.error("以图搜款最多可选择2个!"); |
|||
ext.SupplierFrom = ""; |
|||
} |
|||
}, |
|||
handleBlur(value, ext) { |
|||
ext.SupplierFrom = value; |
|||
if (value && this.extFormList.indexOf(value) == -1) { |
|||
this.extFormList.push(value); |
|||
} |
|||
}, |
|||
openItemInfoWeb(item){ |
|||
if(item==undefined||item.RivalGoodsId==undefined||item.RivalGoodsId==null) |
|||
{ |
|||
this.$message.error("请先输入竞品链接!"); |
|||
return |
|||
} |
|||
hyCoreModel.getItemInfoByUrl(item.RivalGoodsId).then(res=>{ |
|||
var result= JSON.parse(res) |
|||
if(result.success) |
|||
{ |
|||
|
|||
var data=result.data |
|||
item.RivalTitle=data.title |
|||
item.RivalPrice=data.price |
|||
item.RivalPLCount=data.commont |
|||
item.RivalImg=data.img |
|||
this.$message.success("获取成功"); |
|||
|
|||
}else{ |
|||
this.$message.error(result.msg); |
|||
} |
|||
}) |
|||
}, |
|||
changeTab(e) { |
|||
this.getDatas(e); |
|||
this.currentTab = e; |
|||
this.pagination.current = 1; |
|||
}, |
|||
changePage(page, pageSize) { |
|||
this.pagination.current = page; |
|||
this.getDatas(this.currentTab); |
|||
}, |
|||
searchDatas(){ |
|||
this.pagination.current = 1; |
|||
this.getDatas(this.currentTab); |
|||
}, |
|||
getDatas(type) { |
|||
var that = this; |
|||
var url='/HuiYan/teamitems/GetItems' |
|||
if(this.catKeyWord&&this.catKeyWord.length>0) |
|||
{ |
|||
url="/HuiYan/teamitems/GetItems?keyword="+this.catKeyWord |
|||
} |
|||
this.http |
|||
.post(url, { |
|||
PageIndex: this.pagination.current, |
|||
PageRows: this.pagination.pageSize, |
|||
SortField: this.sorter.field || "Id", |
|||
SortType: this.sorter.order, |
|||
Search: { condition: "State", keyword: -1 }, |
|||
...this.filters, |
|||
}) |
|||
.then((res) => { |
|||
that.pagination.total = res.Total; |
|||
res.Data.forEach((item) => { |
|||
item.isEdit = false; |
|||
item.Extensions.forEach((ext) => { |
|||
var keys= Object.keys(ext) |
|||
keys.forEach(key=>{ |
|||
if(ext[key]==null) |
|||
ext[key]=undefined |
|||
}) |
|||
this.initProfits(item,ext) |
|||
}); |
|||
}); |
|||
this.datas = res.Data; |
|||
}); |
|||
}, |
|||
//获取利润率 |
|||
initProfits(item,ext){ |
|||
|
|||
|
|||
if(item.RivalPrice!=undefined){ |
|||
ext.PlatformPoint = parseFloat(item.RivalPrice * 0.05).toFixed(2); |
|||
} |
|||
|
|||
|
|||
if(ext.BuyPrice>0) |
|||
{ |
|||
if(ext.TaxPrice==undefined||ext.TaxPrice==''){ |
|||
ext.TaxPrice = parseFloat(ext.BuyPrice * 0.03).toFixed(2); |
|||
} |
|||
} |
|||
|
|||
if(ext.KDPrice==undefined) |
|||
{ |
|||
ext.KDPrice=parseFloat(6) |
|||
} |
|||
|
|||
ext.Profit = |
|||
parseFloat(item.RivalPrice) - |
|||
parseFloat(ext.BuyPrice) - |
|||
parseFloat(ext.KDPrice) - |
|||
parseFloat(ext.PlatformPoint)- |
|||
(ext.TaxPrice==undefined||ext.TaxPrice==null?0:parseFloat(ext.TaxPrice)) |
|||
|
|||
ext.Profit=parseFloat( |
|||
ext.Profit |
|||
).toFixed(2); |
|||
|
|||
if (ext.BuyPrice == 0) { |
|||
ext.Profits = 0; |
|||
} else { |
|||
ext.Profits = parseFloat( |
|||
(ext.Profit / (parseFloat(ext.BuyPrice)+parseFloat(ext.KDPrice))) * 100 |
|||
).toFixed(2); |
|||
} |
|||
}, |
|||
editData(data) { |
|||
data.isEdit = true; |
|||
|
|||
data.isRival=true; |
|||
this.lastEditData = JSON.parse(JSON.stringify(data)); |
|||
}, |
|||
canelEdit(data) { |
|||
this.lastEditData.isEdit = false; |
|||
Object.assign(data, this.lastEditData); |
|||
}, |
|||
setData(data) { |
|||
data.Extensions.forEach((ext) => { |
|||
this.initProfits(data,ext) |
|||
}); |
|||
this.http.post("/HuiYan/teamitems/SetItem", data).then((res) => { |
|||
if (res.Success) { |
|||
this.$message.success("操作成功!"); |
|||
|
|||
data.isEdit = false; |
|||
} else { |
|||
this.$message.error(res.Msg); |
|||
} |
|||
}); |
|||
}, |
|||
setState(id, type) { |
|||
///发布比价 |
|||
if (type == 5) { |
|||
this.sendPriceTask(id); |
|||
} else if (type == 0) { |
|||
this.canelPriceTask(id); |
|||
} else { |
|||
this.http |
|||
.post(`/HuiYan/teamitems/SetState?id=${id}&state=${type}`) |
|||
.then((res) => { |
|||
if (res.Success) { |
|||
this.$message.success("操作成功!"); |
|||
this.getDatas(this.currentTab); |
|||
} else { |
|||
this.$message.error(res.Msg); |
|||
} |
|||
}); |
|||
} |
|||
}, |
|||
sendPriceTask(id) { |
|||
this.http.post(`/HuiYan/pricetasklog/AddTask?id=${id}`).then((res) => { |
|||
if (res.Success) { |
|||
this.$message.success("操作成功!"); |
|||
this.getDatas(this.currentTab); |
|||
} else { |
|||
this.$message.error(res.Msg); |
|||
} |
|||
}); |
|||
}, |
|||
canelPriceTask(id) { |
|||
this.http.post(`/HuiYan/pricetasklog/CanelTask?id=${id}`).then((res) => { |
|||
if (res.Success) { |
|||
this.$message.success("操作成功!"); |
|||
this.getDatas(this.currentTab); |
|||
} else { |
|||
this.$message.error(res.Msg); |
|||
} |
|||
}); |
|||
}, |
|||
getImgBase64(src, type) { |
|||
hyCoreModel.getImgBase64(src, type).then((res) => { |
|||
console.log(res); |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style> |
|||
.titleDiv{ |
|||
/* border: 1px solid #d7d7d7; */ |
|||
border-right: 1px solid #d7d7d7; |
|||
background-color: #f3f2f7; |
|||
box-sizing: border-box; |
|||
font-family: "Arial", sans-serif; |
|||
color: #333333; |
|||
text-align: center; |
|||
height: 35px; |
|||
display: flex; |
|||
flex-direction: row; |
|||
justify-items: center; |
|||
align-items: center; |
|||
justify-content: center; |
|||
align-content: center; |
|||
|
|||
} |
|||
.titleDiv:last-child |
|||
{ |
|||
border-right: 0px; |
|||
} |
|||
.contentDiv{ |
|||
border-right: 1px solid #d7d7d7; |
|||
background-color: #ffffff; |
|||
box-sizing: border-box; |
|||
font-family: "Arial", sans-serif; |
|||
color: #333333; |
|||
text-align: center; |
|||
display: flex; |
|||
flex-direction: row; |
|||
justify-items: center; |
|||
align-items: center; |
|||
justify-content: center; |
|||
align-content: center; |
|||
height: 170px; |
|||
} |
|||
.headCol { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
border-left: 0px; |
|||
text-align: center; |
|||
background-color: rgba(243, 242, 247, 1); |
|||
} |
|||
|
|||
.headColFirst { |
|||
border-left: 1px solid rgba(215, 215, 215, 1); |
|||
} |
|||
|
|||
.borderNoTop { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
border-top: 0px; |
|||
border-bottom: 0px; |
|||
|
|||
} |
|||
|
|||
.borderT { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
border-left: 0px; |
|||
border-right: 0px; |
|||
} |
|||
|
|||
.border { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
width: 1708px; |
|||
} |
|||
|
|||
.borderLeft { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
border-top: 0px; |
|||
border-right: 0px; |
|||
border-bottom: 0px; |
|||
} |
|||
|
|||
.borderRight { |
|||
border: 1px solid rgba(215, 215, 215, 1); |
|||
border-top: 0px; |
|||
border-left: 0px; |
|||
border-bottom: 0px; |
|||
} |
|||
|
|||
.itemtitle { |
|||
height: 50px; |
|||
max-height: 50px; |
|||
display: block; |
|||
overflow: auto; |
|||
} |
|||
|
|||
.spanValue { |
|||
display: block; |
|||
overflow-x: scroll; |
|||
white-space:nowrap; |
|||
} |
|||
|
|||
::-webkit-scrollbar { |
|||
width: 6px; /*高宽分别对应横竖滚动条的尺寸*/ |
|||
height: 6px; |
|||
} |
|||
::-webkit-scrollbar-thumb { |
|||
border-radius: 6px; |
|||
background: rgba(144, 147, 153, 0.5); |
|||
} |
|||
::-webkit-scrollbar-track { |
|||
border-radius: 5px; |
|||
background: transparent; |
|||
} |
|||
|
|||
|
|||
</style> |
Loading…
Reference in new issue