mirror of
https://github.com/AIDotNet/AntSK.git
synced 2026-02-17 22:10:14 +08:00
add 增加首页,暂时取消本地函数调用
This commit is contained in:
@@ -40,10 +40,11 @@ namespace AntSK.Domain.Domain.Service
|
||||
var _kernel = _kernelService.GetKernelByApp(app);
|
||||
var temperature = app.Temperature / 100;//存的是0~100需要缩小
|
||||
OpenAIPromptExecutionSettings settings = new() { Temperature = temperature };
|
||||
|
||||
_kernelService.ImportFunctionsByApp(app, _kernel);
|
||||
settings.ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions;
|
||||
|
||||
if (!string.IsNullOrEmpty(app.ApiFunctionList))//这里还需要加上本地插件的
|
||||
{
|
||||
_kernelService.ImportFunctionsByApp(app, _kernel);
|
||||
settings.ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions;
|
||||
}
|
||||
var func = _kernel.CreateFunctionFromPrompt(app.Prompt, settings);
|
||||
var chatResult = _kernel.InvokeStreamingAsync(function: func, arguments: new KernelArguments() { ["input"] = $"{history}{Environment.NewLine} user:{questions}" });
|
||||
await foreach (var content in chatResult)
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace AntSK.Domain.Domain.Service
|
||||
|
||||
public MemoryServerless GetMemoryByKMS(string kmsID, SearchClientConfig searchClientConfig = null)
|
||||
{
|
||||
if (_memory.IsNull())
|
||||
//if (_memory.IsNull())
|
||||
{
|
||||
//获取KMS配置
|
||||
var kms = _kmss_Repositories.GetFirst(p => p.Id == kmsID);
|
||||
@@ -67,9 +67,9 @@ namespace AntSK.Domain.Domain.Service
|
||||
_memory = memoryBuild.Build<MemoryServerless>();
|
||||
return _memory;
|
||||
}
|
||||
else {
|
||||
return _memory;
|
||||
}
|
||||
//else {
|
||||
// return _memory;
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace AntSK.Domain.Domain.Service
|
||||
/// <returns></returns>
|
||||
public Kernel GetKernelByApp(Apps app)
|
||||
{
|
||||
if (_kernel.IsNull())
|
||||
//if (_kernel.IsNull())
|
||||
{
|
||||
var chatModel = _aIModels_Repositories.GetFirst(p => p.Id == app.ChatModelID);
|
||||
|
||||
@@ -58,10 +58,10 @@ namespace AntSK.Domain.Domain.Service
|
||||
RegisterPluginsWithKernel(_kernel);
|
||||
return _kernel;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _kernel;
|
||||
}
|
||||
//else
|
||||
//{
|
||||
// return _kernel;
|
||||
//}
|
||||
}
|
||||
|
||||
private void WithTextGenerationByAIType(IKernelBuilder builder, Apps app, AIModels chatModel, HttpClient chatHttpClient)
|
||||
@@ -104,7 +104,7 @@ namespace AntSK.Domain.Domain.Service
|
||||
public void ImportFunctionsByApp(Apps app, Kernel _kernel)
|
||||
{
|
||||
//插件不能重复注册,否则会异常
|
||||
if (!_kernel.Plugins.Any(p => p.Name == "AntSkFunctions"))
|
||||
if (_kernel.Plugins.Any(p => p.Name == "AntSkFunctions"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
14
src/AntSK.Domain/Model/Enum/AppType.cs
Normal file
14
src/AntSK.Domain/Model/Enum/AppType.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AntSK.Domain.Model.Enum
|
||||
{
|
||||
public enum AppType
|
||||
{
|
||||
chat=1,
|
||||
kms=2
|
||||
}
|
||||
}
|
||||
26
src/AntSK/Components/ChartCard/ChartCard.razor
Normal file
26
src/AntSK/Components/ChartCard/ChartCard.razor
Normal file
@@ -0,0 +1,26 @@
|
||||
@namespace AntSK.Components
|
||||
@inherits AntDomComponentBase
|
||||
|
||||
<Card>
|
||||
<div class="chartCard">
|
||||
<div class="chartTop">
|
||||
<div class="avatar">@Avatar</div>
|
||||
<div class="metaWrap">
|
||||
<div class="meta">
|
||||
<span>@Title</span>
|
||||
<span class="action"><Icon Type="@Icon" /></span>
|
||||
</div>
|
||||
<div class="total">
|
||||
<span>@Total</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content" style="height: @(string.IsNullOrEmpty(ContentHeight) ? "auto" : ContentHeight+"px")">
|
||||
<div class="@(string.IsNullOrEmpty(ContentHeight) ? "" : "contentFixed")">@ChildContent</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
@Footer
|
||||
</div>
|
||||
</div>
|
||||
</Card>
|
||||
|
||||
31
src/AntSK/Components/ChartCard/ChartCard.razor.cs
Normal file
31
src/AntSK/Components/ChartCard/ChartCard.razor.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace AntSK.Components
|
||||
{
|
||||
public partial class ChartCard
|
||||
{
|
||||
[Parameter]
|
||||
public string Avatar { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Action { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Total { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Footer { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string ContentHeight { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Icon { get; set; }
|
||||
}
|
||||
}
|
||||
77
src/AntSK/Components/ChartCard/ChartCard.razor.css
Normal file
77
src/AntSK/Components/ChartCard/ChartCard.razor.css
Normal file
@@ -0,0 +1,77 @@
|
||||
/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
|
||||
/* stylelint-disable no-duplicate-selectors */
|
||||
/* stylelint-disable */
|
||||
/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
|
||||
.chartCard {
|
||||
position: relative;
|
||||
}
|
||||
.chartCard .chartTop {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
.chartCard .chartTopMargin {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.chartCard .chartTopHasMargin {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.chartCard .metaWrap {
|
||||
float: left;
|
||||
}
|
||||
.chartCard .avatar {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
float: left;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.chartCard .avatar img {
|
||||
border-radius: 100%;
|
||||
}
|
||||
.chartCard .meta {
|
||||
height: 22px;
|
||||
color: rgba(0, 0, 0, 0.45);
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
}
|
||||
.chartCard .action {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 0;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
}
|
||||
.chartCard .total {
|
||||
height: 38px;
|
||||
margin-top: 4px;
|
||||
margin-bottom: 0;
|
||||
overflow: hidden;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
font-size: 30px;
|
||||
line-height: 38px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
word-break: break-all;
|
||||
}
|
||||
.chartCard .content {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.chartCard .contentFixed {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.chartCard .footer {
|
||||
margin-top: 8px;
|
||||
padding-top: 9px;
|
||||
border-top: 1px solid #f0f0f0;
|
||||
}
|
||||
.chartCard .footer > * {
|
||||
position: relative;
|
||||
}
|
||||
.chartCard .footerMargin {
|
||||
margin-top: 20px;
|
||||
}
|
||||
@@ -3,7 +3,8 @@
|
||||
@inherits AntDomComponentBase
|
||||
|
||||
<Space Class="@ClassMapper.Class" Size="@("26")">
|
||||
<SpaceItem>
|
||||
<Image Src="https://img.shields.io/github/stars/xuzeyu91/antsk?style=social" Width="88px" Height="20px;"></Image>
|
||||
<SpaceItem Style="margin-left:20px;">
|
||||
<AvatarDropdown Name="@context.Identity.Name"
|
||||
Avatar="@_currentUser.Avatar"
|
||||
MenuItems="@AvatarMenuItems"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
@namespace AntSK.Pages.AppPage
|
||||
@using AntSK.Domain.Repositories
|
||||
@using AntSK.Models
|
||||
@using AntSK.Domain.Model.Enum
|
||||
@page "/App/Add"
|
||||
@page "/App/Add/{AppId}"
|
||||
@using AntSK.Services.Auth
|
||||
@@ -21,8 +22,8 @@
|
||||
</FormItem>
|
||||
<FormItem Label="类型" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
|
||||
<RadioGroup @bind-Value="context.Type">
|
||||
<Radio RadioButton Value="@("chat")">会话应用</Radio>
|
||||
<Radio RadioButton Value="@("kms")">知识库</Radio>
|
||||
<Radio RadioButton Value="@AppType.chat.ToString()">会话应用</Radio>
|
||||
<Radio RadioButton Value="@AppType.kms.ToString()">知识库</Radio>
|
||||
</RadioGroup>
|
||||
</FormItem>
|
||||
<FormItem Label="描述" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
|
||||
@@ -37,7 +38,7 @@
|
||||
</Select>
|
||||
<Button Type="@ButtonType.Link" OnClick="NavigateModelList">去创建</Button>
|
||||
</FormItem>
|
||||
@if (@context.Type == "chat")
|
||||
@if (@context.Type == AppType.chat.ToString())
|
||||
{
|
||||
|
||||
<FormItem Label="提示词" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
|
||||
@@ -66,7 +67,7 @@
|
||||
</Select>
|
||||
</FormItem>
|
||||
}
|
||||
@if (@context.Type == "kms")
|
||||
@if (@context.Type == AppType.kms.ToString())
|
||||
{
|
||||
<FormItem Label="知识库" LabelCol="LayoutModel._formItemLayout.LabelCol" WrapperCol="LayoutModel._formItemLayout.WrapperCol">
|
||||
<Select Mode="multiple"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@namespace AntSK.Pages.AppPage
|
||||
@using AntSK.Domain.Repositories
|
||||
@using AntSK.Domain.Model.Enum
|
||||
@page "/AppList"
|
||||
@inject NavigationManager NavigationManager
|
||||
@using AntSK.Services.Auth
|
||||
@@ -48,11 +49,11 @@
|
||||
<!--todo: Ellipsis not working-->
|
||||
@context.Describe
|
||||
</Paragraph>
|
||||
@if (context.Type == "chat")
|
||||
@if (context.Type == AppType.chat.ToString())
|
||||
{
|
||||
<Tag Color="@PresetColor.Yellow.ToString()">会话应用</Tag>
|
||||
}
|
||||
else if (context.Type == "kms")
|
||||
else if (context.Type == AppType.kms.ToString())
|
||||
{
|
||||
<Tag Color="@PresetColor.Green.ToString()">知识库</Tag>
|
||||
|
||||
|
||||
60
src/AntSK/Pages/Index.Razor.cs
Normal file
60
src/AntSK/Pages/Index.Razor.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using AntSK.Domain.Model.Enum;
|
||||
using AntSK.Domain.Repositories;
|
||||
using AntSK.Domain.Utils;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace AntSK.Pages
|
||||
{
|
||||
public partial class Index
|
||||
{
|
||||
[Inject]
|
||||
NavigationManager NavigationManager { get; set; }
|
||||
|
||||
[Inject]
|
||||
IApps_Repositories _apps_Repositories { get; set; }
|
||||
[Inject]
|
||||
IAIModels_Repositories _aiModels_Repositories { get; set; }
|
||||
[Inject]
|
||||
IKmss_Repositories _kmss_Repositories { get; set; }
|
||||
[Inject]
|
||||
IKmsDetails_Repositories _kmsDetails_Repositories { get; set; }
|
||||
|
||||
private string appCount;
|
||||
private string chatAppCount;
|
||||
private string kmsAppCount;
|
||||
|
||||
private string kmsCount;
|
||||
|
||||
private string fileCount;
|
||||
private string urlCount;
|
||||
private string textCount;
|
||||
private string filesCount;
|
||||
|
||||
private string chatAIModelCount;
|
||||
private string embeddingAIModelCount;
|
||||
private string aiModelCount;
|
||||
|
||||
private string imgSrc { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
|
||||
chatAppCount = (await _apps_Repositories.CountAsync(p => p.Type == AppType.chat.ToString())).ConvertToString();
|
||||
kmsAppCount = (await _apps_Repositories.CountAsync(p => p.Type == AppType.kms.ToString())).ConvertToString();
|
||||
appCount= (chatAppCount.ConvertToInt32()+ kmsAppCount.ConvertToInt32()).ConvertToString();
|
||||
|
||||
kmsCount =(await _kmss_Repositories.CountAsync(p=>true)).ConvertToString();
|
||||
|
||||
chatAIModelCount = (await _aiModels_Repositories.CountAsync(p=>p.AIModelType==AIModelType.Chat)).ConvertToString();
|
||||
embeddingAIModelCount = (await _aiModels_Repositories.CountAsync(p=>p.AIModelType==AIModelType.Embedding)).ConvertToString();
|
||||
aiModelCount= (chatAIModelCount.ConvertToInt32() + embeddingAIModelCount.ConvertToInt32()).ConvertToString();
|
||||
|
||||
fileCount=(await _kmsDetails_Repositories.CountAsync(p =>p.Type=="file")).ConvertToString();
|
||||
urlCount = (await _kmsDetails_Repositories.CountAsync(p => p.Type == "url")).ConvertToString();
|
||||
textCount = (await _kmsDetails_Repositories.CountAsync(p => p.Type == "text")).ConvertToString();
|
||||
filesCount = (fileCount.ConvertToInt32() + urlCount.ConvertToInt32() + textCount.ConvertToInt32()).ConvertToString();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,40 +2,63 @@
|
||||
@using MarkdownSharp
|
||||
@page "/"
|
||||
@using AntSK.Services.Auth
|
||||
@using AntSK.Components
|
||||
@inherits AuthComponentBase
|
||||
|
||||
<Body>
|
||||
@((MarkupString)(body))
|
||||
<Image Width="200px" Src="@imgSrc" />
|
||||
</Body>
|
||||
<GridContent>
|
||||
<Row Type="flex" Gutter="24">
|
||||
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
|
||||
<ChartCard Title="应用数量"
|
||||
Total="@appCount"
|
||||
Icon="wechat"
|
||||
ContentHeight="46">
|
||||
<ChildContent>
|
||||
<Tag Color="@PresetColor.Yellow.ToString()">会话应用:@chatAppCount</Tag>
|
||||
<Tag Color="@PresetColor.Green.ToString()">知识库应用:@kmsAppCount</Tag>
|
||||
</ChildContent>
|
||||
<Footer>
|
||||
</Footer>
|
||||
</ChartCard>
|
||||
</AntDesign.Col>
|
||||
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
|
||||
<ChartCard Title="知识库数量"
|
||||
Total="@kmsCount"
|
||||
Icon="database"
|
||||
ContentHeight="46">
|
||||
<ChildContent>
|
||||
|
||||
@code {
|
||||
[Inject]
|
||||
NavigationManager NavigationManager { get; set; }
|
||||
private string imgSrc { get; set; }
|
||||
</ChildContent>
|
||||
<Footer>
|
||||
</Footer>
|
||||
</ChartCard>
|
||||
</AntDesign.Col>
|
||||
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
|
||||
<ChartCard Title="文档数量"
|
||||
Total="@filesCount"
|
||||
Icon="file"
|
||||
ContentHeight="46">
|
||||
<ChildContent>
|
||||
<Tag Color="@PresetColor.Yellow.ToString()">文档:@fileCount</Tag>
|
||||
<Tag Color="@PresetColor.Green.ToString()">链接:@urlCount</Tag>
|
||||
<Tag Color="@PresetColor.Orange.ToString()">文本:@textCount</Tag>
|
||||
</ChildContent>
|
||||
<Footer>
|
||||
</Footer>
|
||||
</ChartCard>
|
||||
</AntDesign.Col>
|
||||
<AntDesign.Col Xs="24" Sm="12" Md="12" Lg="12" Xl="6" Style="margin-bottom: 24px;">
|
||||
<ChartCard Title="模型数量"
|
||||
Total="@aiModelCount"
|
||||
Icon="robot"
|
||||
ContentHeight="46">
|
||||
<ChildContent>
|
||||
<Tag Color="@PresetColor.Yellow.ToString()">会话模型:@chatAIModelCount</Tag>
|
||||
<Tag Color="@PresetColor.Green.ToString()">向量模型:@embeddingAIModelCount</Tag>
|
||||
</ChildContent>
|
||||
<Footer>
|
||||
</Footer>
|
||||
</ChartCard>
|
||||
</AntDesign.Col>
|
||||
</Row>
|
||||
</GridContent>
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
imgSrc = NavigationManager.BaseUri + "assets/gzh.png";
|
||||
}
|
||||
private string body = new Markdown().Transform(@"非常感谢您对**AntSK**的喜爱,您的支持对我来说是莫大的鼓励。
|
||||
|
||||
如果您对技术类视频感兴趣,欢迎关注我的B站账号,获取更多精彩内容。
|
||||
|
||||
- **Bilibili账号**:[点击这里](https://space.bilibili.com/1673184683/channel/series)
|
||||
|
||||
同时,如果您感兴趣,可以访问我的GitHub页面,查看更多开源项目和代码:
|
||||
|
||||
- **GitHub页面**:[点击这里](https://github.com/xuzeyu91)
|
||||
|
||||
另外,如果您想加入由我创建的**.Net/AI应用开发微信交流群**,欢迎先添加我的微信**(xuzeyu91)**。
|
||||
|
||||
发送“进群请求”,我将会把您邀请进群。
|
||||
|
||||
期待与您在线上交流技术,共同进步!
|
||||
|
||||
也欢迎您关注我的公众号,后面可以第一时间知道**AntSK**项目进展。");
|
||||
|
||||
|
||||
}
|
||||
|
||||
161
src/AntSK/Pages/Index.razor.css
Normal file
161
src/AntSK/Pages/Index.razor.css
Normal file
@@ -0,0 +1,161 @@
|
||||
/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
|
||||
/* stylelint-disable no-duplicate-selectors */
|
||||
/* stylelint-disable */
|
||||
/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
|
||||
.iconGroup span.anticon {
|
||||
margin-left: 16px;
|
||||
color: rgba(0, 0, 0, 0.45);
|
||||
cursor: pointer;
|
||||
transition: color 0.32s;
|
||||
}
|
||||
.iconGroup span.anticon:hover {
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
.rankingList {
|
||||
margin: 25px 0 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.rankingList li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 16px;
|
||||
zoom: 1;
|
||||
}
|
||||
.rankingList li::before,
|
||||
.rankingList li::after {
|
||||
display: table;
|
||||
content: ' ';
|
||||
}
|
||||
.rankingList li::after {
|
||||
clear: both;
|
||||
height: 0;
|
||||
font-size: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
.rankingList li span {
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
}
|
||||
.rankingList li .rankingItemNumber {
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: 1.5px;
|
||||
margin-right: 16px;
|
||||
font-weight: 600;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
background-color: #fafafa;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.rankingList li .rankingItemNumber.active {
|
||||
color: #fff;
|
||||
background-color: #314659;
|
||||
}
|
||||
.rankingList li .rankingItemTitle {
|
||||
flex: 1;
|
||||
margin-right: 8px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.salesExtra {
|
||||
display: inline-block;
|
||||
margin-right: 24px;
|
||||
}
|
||||
.salesExtra a {
|
||||
margin-left: 24px;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
.salesExtra a:hover {
|
||||
color: #1890ff;
|
||||
}
|
||||
.salesExtra a.currentDate {
|
||||
color: #1890ff;
|
||||
}
|
||||
.salesCard .salesBar {
|
||||
padding: 0 0 32px 32px;
|
||||
}
|
||||
.salesCard .salesRank {
|
||||
padding: 0 32px 32px 72px;
|
||||
}
|
||||
.salesCard :global .ant-tabs-bar,
|
||||
.salesCard :global .ant-tabs-nav-wrap {
|
||||
padding-left: 16px;
|
||||
}
|
||||
.salesCard :global .ant-tabs-bar .ant-tabs-nav .ant-tabs-tab,
|
||||
.salesCard :global .ant-tabs-nav-wrap .ant-tabs-nav .ant-tabs-tab {
|
||||
padding-top: 16px;
|
||||
padding-bottom: 14px;
|
||||
line-height: 24px;
|
||||
}
|
||||
.salesCard :global .ant-tabs-extra-content {
|
||||
padding-right: 24px;
|
||||
line-height: 55px;
|
||||
}
|
||||
.salesCard :global .ant-card-head {
|
||||
position: relative;
|
||||
}
|
||||
.salesCard :global .ant-card-head-title {
|
||||
align-items: normal;
|
||||
}
|
||||
.salesCardExtra {
|
||||
height: inherit;
|
||||
}
|
||||
.salesTypeRadio {
|
||||
position: absolute;
|
||||
right: 54px;
|
||||
bottom: 12px;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-ink-bar {
|
||||
bottom: auto;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-bar {
|
||||
border-bottom: none;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-nav-container-scrolling {
|
||||
padding-right: 40px;
|
||||
padding-left: 40px;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-tab-prev-icon::before {
|
||||
position: relative;
|
||||
left: 6px;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-tab-next-icon::before {
|
||||
position: relative;
|
||||
right: 6px;
|
||||
}
|
||||
.offlineCard :global .ant-tabs-tab-active h4 {
|
||||
color: #1890ff;
|
||||
}
|
||||
.trendText {
|
||||
margin-left: 8px;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
}
|
||||
@media screen and (max-width: 992px) {
|
||||
.salesExtra {
|
||||
display: none;
|
||||
}
|
||||
.rankingList li span:first-child {
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 768px) {
|
||||
.rankingTitle {
|
||||
margin-top: 16px;
|
||||
}
|
||||
.salesCard .salesBar {
|
||||
padding: 16px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 576px) {
|
||||
.salesExtraWrap {
|
||||
display: none;
|
||||
}
|
||||
.salesCard :global .ant-tabs-content {
|
||||
padding-top: 30px;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user