feat:请求方法全部换成新的request类,并且引入useEcharts hook

This commit is contained in:
Xwen
2023-12-12 18:10:17 +08:00
31 changed files with 2893 additions and 382 deletions

View File

@@ -222,7 +222,7 @@ namespace Yi.Framework.SqlSugarCore
{
if (Options.EnabledSqlLog)
{
Logger.CreateLogger<SqlSugarDbContext>().LogDebug(UtilMethods.GetSqlString(DbType.SqlServer, sql, pars));
Logger.CreateLogger<SqlSugarDbContext>().LogDebug("Yi-SQL执行:"+UtilMethods.GetSqlString(DbType.SqlServer, sql, pars));
}
}

View File

@@ -3,16 +3,24 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp.Auditing;
using Volo.Abp.DependencyInjection;
using Yi.Framework.Core.Helper;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.SqlSugarCore
{
public class SqlSugarLogAuditingStore : IAuditingStore, ISingletonDependency
{
private readonly ILogger<SqlSugarLogAuditingStore> _logger;
public SqlSugarLogAuditingStore(ILogger<SqlSugarLogAuditingStore> logger, ISqlSugarDbContext sqlSugarDbContext)
{
_logger= logger;
}
public Task SaveAsync(AuditLogInfo auditInfo)
{
//Console.WriteLine(auditInfo.ExecutionTime);
_logger.LogDebug("Yi-请求追踪:"+JsonHelper.ObjToStr(auditInfo, "yyyy-MM-dd HH:mm:ss"));
return Task.CompletedTask;
}
}

View File

@@ -15,11 +15,6 @@ namespace Yi.Framework.SqlSugarCore.Uow
public async Task CommitAsync(CancellationToken cancellationToken = default)
{
await Console.Out.WriteLineAsync("事务提交");
Console.WriteLine(_sqlsugarDbContext.SqlSugarClient.ContextID + "---------------");
await _sqlsugarDbContext.SqlSugarClient.Ado.CommitTranAsync();
}
@@ -30,8 +25,6 @@ namespace Yi.Framework.SqlSugarCore.Uow
public async Task RollbackAsync(CancellationToken cancellationToken = default)
{
await Console.Out.WriteLineAsync("事务回滚");
Console.WriteLine(_sqlsugarDbContext.SqlSugarClient.ContextID);
await _sqlsugarDbContext.SqlSugarClient.Ado.RollbackTranAsync();
}
}

View File

@@ -2,7 +2,6 @@
{
public class AccessLogDto
{
public Guid Id { get; set; }
public long Number { get; set; }
public DateTime? LastModificationTime { get; set; }
public DateTime CreationTime { get; set; }

View File

@@ -5,7 +5,7 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss
{
public class DiscussGetListInputVo : PagedAndSortedResultRequestDto
{
public string Title { get; set; }
public string? Title { get; set; }
public Guid? PlateId { get; set; }

View File

@@ -48,7 +48,7 @@ namespace Yi.Framework.Bbs.Application.Services
/// 触发
/// </summary>
/// <returns></returns>
[HttpPost("")]
[HttpPost("access-log")]
public async Task AccessAsync()
{
//可判断http重复防止同一ip多次访问

View File

@@ -3,17 +3,17 @@ using Volo.Abp.BackgroundWorkers.Quartz;
namespace Yi.Framework.Rbac.Application.Jobs
{
public class TestJob : QuartzBackgroundWorkerBase
{
public TestJob()
{
JobDetail = JobBuilder.Create<TestJob>().WithIdentity(nameof(TestJob)).Build();
Trigger = TriggerBuilder.Create().WithIdentity(nameof(TestJob)).WithCronSchedule("* * * * * ? *").Build();
}
public override Task Execute(IJobExecutionContext context)
{
Console.WriteLine("你好,世界");
return Task.CompletedTask;
}
}
//public class TestJob : QuartzBackgroundWorkerBase
//{
// public TestJob()
// {
// JobDetail = JobBuilder.Create<TestJob>().WithIdentity(nameof(TestJob)).Build();
// Trigger = TriggerBuilder.Create().WithIdentity(nameof(TestJob)).WithCronSchedule("* * * * * ? *").Build();
// }
// public override Task Execute(IJobExecutionContext context)
// {
// Console.WriteLine("你好,世界");
// return Task.CompletedTask;
// }
//}
}

View File

@@ -29,7 +29,6 @@ namespace Yi.Framework.Rbac.Application
public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
//await context.AddBackgroundWorkerAsync<TestJob>();
}
}
}

View File

@@ -28,11 +28,7 @@ namespace Yi.Abp.SqlSugarCore
protected override void OnLogExecuting(string sql, SugarParameter[] pars)
{
//获取原生SQL推荐 5.1.4.63 性能OK
//UtilMethods.GetNativeSql(sql,pars)
//获取无参数化SQL 影响性能只适合调试
this.Logger.CreateLogger<YiDbContext>().LogInformation(UtilMethods.GetSqlString(DbType.SqlServer, sql, pars));
base.OnLogExecuting(sql, pars);
}
protected override void OnLogExecuted(string sql, SugarParameter[] pars)

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,36 @@
using Serilog;
using Serilog.Events;
using Yi.Abp.Web;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls(builder.Configuration["App:SelfUrl"]);
builder.Host.UseAutofac();
await builder.Services.AddApplicationAsync<YiAbpWebModule>();
var app = builder.Build();
await app.InitializeApplicationAsync();
await app.RunAsync();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־,<2C><>ʹ<EFBFBD><CAB9>{SourceContext}<7D><>¼
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft.AspNetCore.Hosting.Diagnostics",LogEventLevel.Error)
.MinimumLevel.Override("Quartz", LogEventLevel.Warning)
.Enrich.FromLogContext()
.WriteTo.Async(c => c.File("Logs/log-.txt", rollingInterval: RollingInterval.Day))
.WriteTo.Async(c => c.Console())
.CreateLogger();
try
{
Log.Information("Yi<59><69><EFBFBD><EFBFBD>-Abp.vNext<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls(builder.Configuration["App:SelfUrl"]);
builder.Host.UseAutofac();
builder.Host.UseSerilog();
await builder.Services.AddApplicationAsync<YiAbpWebModule>();
var app = builder.Build();
await app.InitializeApplicationAsync();
await app.RunAsync();
}
catch (Exception ex)
{
Log.Fatal(ex, "Yi<59><69><EFBFBD><EFBFBD>-Abp.vNext<78><74><EFBFBD><EFBFBD>ը<EFBFBD><D5A8>");
}
finally
{
Log.CloseAndFlush();
}

View File

@@ -10,6 +10,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.14" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.12" />
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="7.4.2" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="7.4.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="7.4.1" />

View File

@@ -10,7 +10,6 @@ using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Auditing;
using Volo.Abp.Autofac;
using Volo.Abp.Json;
using Volo.Abp.Modularity;
using Volo.Abp.Swashbuckle;
using Yi.Abp.Application;
@@ -25,7 +24,7 @@ using Yi.Framework.Rbac.Domain.Shared.Options;
namespace Yi.Abp.Web
{
[DependsOn(
typeof(YiAbpSqlSugarCoreModule),
typeof(YiAbpSqlSugarCoreModule),
typeof(YiAbpApplicationModule),
typeof(AbpAspNetCoreMvcModule),
@@ -43,6 +42,7 @@ namespace Yi.Abp.Web
public override Task ConfigureServicesAsync(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var host = context.Services.GetHostingEnvironment();
var service = context.Services;
//请求日志
@@ -65,10 +65,7 @@ namespace Yi.Abp.Web
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
Configure<AbpJsonOptions>(options =>
{
options.OutputDateTimeFormat = "yyyy-MM-dd HH:mm:ss";
});
Configure<AbpAntiForgeryOptions>(options =>
{
options.AutoValidate = false;
@@ -77,7 +74,7 @@ namespace Yi.Abp.Web
//Swagger
context.Services.AddYiSwaggerGen<YiAbpWebModule>(options =>
{
options.SwaggerDoc("default", new OpenApiInfo { Title = "Yi.Framework.Abp", Version = "v1",Description="集大成者" });
options.SwaggerDoc("default", new OpenApiInfo { Title = "Yi.Framework.Abp", Version = "v1", Description = "集大成者" });
});
//跨域
@@ -145,7 +142,6 @@ namespace Yi.Abp.Web
var env = context.GetEnvironment();
var app = context.GetApplicationBuilder();
app.UseRouting();
//跨域

View File

@@ -14,6 +14,7 @@
"element-plus": "^2.2.32",
"highlight": "^0.2.4",
"i": "^0.3.7",
"lodash": "^4.17.21",
"marked": "^4.2.12",
"mavon-editor": "^3.0.0",
"nprogress": "^0.2.0",
@@ -2555,8 +2556,9 @@
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"resolved": "http://10.10.78.31:8081/repository/hmx-public/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash-es": {
"version": "4.17.21",
@@ -5813,7 +5815,7 @@
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"resolved": "http://10.10.78.31:8081/repository/hmx-public/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash-es": {

View File

@@ -14,6 +14,7 @@
"element-plus": "^2.2.32",
"highlight": "^0.2.4",
"i": "^0.3.7",
"lodash": "^4.17.21",
"marked": "^4.2.12",
"mavon-editor": "^3.0.0",
"nprogress": "^0.2.0",

View File

@@ -1,17 +1,17 @@
import request from '@/utils/request'
import request from "@/config/axios/service";
// 触发访问
export function access() {
return request({
url: '/access-log',
method: 'post'
})
url: "/access-log",
method: "post",
});
}
// 获取本周数据
export function getWeek() {
return request({
url: '/access-log/week',
method: 'get'
})
}
url: "/access-log/week",
method: "get",
});
}

View File

@@ -1,79 +1,78 @@
import request from '@/utils/request'
import request from "@/config/axios/service";
// 登录方法
export function login(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
return request({
url: '/account/login',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 注册方法
export function register(userName,password,phone,code,uuid) {
const data = {
userName,
password,
phone,
code,
uuid
}
return request({
url: '/account/register',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/account',
method: 'get'
})
}
const data = {
username,
password,
code,
uuid,
};
return request({
url: "/account/login",
headers: {
isToken: false,
},
method: "post",
data: data,
});
}
// 注册方法
export function register(userName, password, phone, code, uuid) {
const data = {
userName,
password,
phone,
code,
uuid,
};
return request({
url: "/account/register",
headers: {
isToken: false,
},
method: "post",
data: data,
});
}
// 获取用户详细信息
export function getInfo() {
return request({
url: "/account",
method: "get",
});
}
// 退出方法
export function logout() {
return request({
url: '/account/logout',
method: 'post'
})
}
// 获取验证码
export function getCodeImg() {
return request({
url: '/account/captcha-image',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}
// 获取短信验证码
export function getCodePhone(phone) {
return request({
url: '/account/captcha-phone',
headers: {
isToken: false
},
method: 'post',
timeout: 20000,
data:{phone}
})
}
return request({
url: "/account/logout",
method: "post",
});
}
// 获取验证码
export function getCodeImg() {
return request({
url: "/account/captcha-image",
headers: {
isToken: false,
},
method: "get",
timeout: 20000,
});
}
// 获取短信验证码
export function getCodePhone(phone) {
return request({
url: "/account/captcha-phone",
headers: {
isToken: false,
},
method: "post",
timeout: 20000,
data: { phone },
});
}

View File

@@ -1,11 +1,10 @@
import myaxios from '@/utils/request'
export function operate(discussId){
if(discussId==undefined)
{
return;
}
return myaxios({
url: `/agree/operate/${discussId}`,
method: 'post'
})
};
import request from "@/config/axios/service";
export function operate(discussId) {
if (discussId == undefined) {
return;
}
return request({
url: `/agree/operate/${discussId}`,
method: "post",
});
}

View File

@@ -1,41 +1,40 @@
import myaxios from '@/utils/request'
export function getList(data){
return myaxios({
url: '/article',
method: 'get',
params:data
})
};
export function get(id){
return myaxios({
url: `/article/${id}`,
method: 'get'
})
};
export function add(data){
return myaxios({
url: `/article`,
method: 'post',
data:data
})
};
export function update(id,data){
return myaxios({
url: `/article/${id}`,
method: 'put',
data:data
})
};
export function del(ids){
return myaxios({
url: `/article/${ids}`,
method: 'delete'
})
};
export function all(discussId)
{
return myaxios({
url: `/article/all/discuss-id/${discussId}`,
method: 'get'
})
}
import request from "@/config/axios/service";
export function getList(data) {
return request({
url: "/article",
method: "get",
params: data,
});
}
export function get(id) {
return request({
url: `/article/${id}`,
method: "get",
});
}
export function add(data) {
return request({
url: `/article`,
method: "post",
data: data,
});
}
export function update(id, data) {
return request({
url: `/article/${id}`,
method: "put",
data: data,
});
}
export function del(ids) {
return request({
url: `/article/${ids}`,
method: "delete",
});
}
export function all(discussId) {
return request({
url: `/article/all/discuss-id/${discussId}`,
method: "get",
});
}

View File

@@ -1,8 +1,9 @@
import myaxios from '@/utils/request'
export function getList(data){
return myaxios({
url: '/banner',
method: 'get',
params:data
})
};
import request from "@/config/axios/service";
export function getList(data) {
return request({
url: "/banner",
method: "get",
params: data,
});
}

View File

@@ -1,22 +1,23 @@
import myaxios from '@/utils/request'
export function getListByDiscussId(discussId,data){
return myaxios({
url: `/comment/discuss-id/${discussId}`,
method: 'get',
params:data
})
};
export function add(data){
return myaxios({
url: `/comment`,
method: 'post',
data:data
})
};
import request from "@/config/axios/service";
export function del(ids){
return myaxios({
url: `/comment/${ids}`,
method: 'delete'
})
};
export function getListByDiscussId(discussId, data) {
return request({
url: `/comment/discuss-id/${discussId}`,
method: "get",
params: data,
});
}
export function add(data) {
return request({
url: `/comment`,
method: "post",
data: data,
});
}
export function del(ids) {
return request({
url: `/comment/${ids}`,
method: "delete",
});
}

View File

@@ -1,51 +1,48 @@
import myaxios from '@/utils/request'
export function getList(data){
return myaxios({
url: '/discuss',
method: 'get',
params:data
})
};
export function getTopList(data){
import request from "@/config/axios/service";
if(data==undefined)
{
data={isTop:true}
}
else
{
data["isTop"]=true;
}
export function getList(data) {
return request({
url: "/discuss",
method: "get",
params: data,
});
}
export function getTopList(data) {
if (data == undefined) {
data = { isTop: true };
} else {
data["isTop"] = true;
}
return myaxios({
url: '/discuss',
method: 'get',
params:data
})
};
export function get(id){
return myaxios({
url: `/discuss/${id}`,
method: 'get'
})
};
export function add(data){
return myaxios({
url: `/discuss`,
method: 'post',
data:data
})
};
export function update(id,data){
return myaxios({
url: `/discuss/${id}`,
method: 'put',
data:data
})
};
export function del(ids){
return myaxios({
url: `/discuss/${ids}`,
method: 'delete'
})
};
return request({
url: "/discuss",
method: "get",
params: data,
});
}
export function get(id) {
return request({
url: `/discuss/${id}`,
method: "get",
});
}
export function add(data) {
return request({
url: `/discuss`,
method: "post",
data: data,
});
}
export function update(id, data) {
return request({
url: `/discuss/${id}`,
method: "put",
data: data,
});
}
export function del(ids) {
return request({
url: `/discuss/${ids}`,
method: "delete",
});
}

View File

@@ -1,9 +1,10 @@
import myaxios from '@/utils/request'
export function upload(data){
return myaxios({
url: '/file',
method: 'post',
data:data,
headers: { 'Content-Type': 'multipart/form-data' }
})
};
import request from "@/config/axios/service";
export function upload(data) {
return request({
url: "/file",
method: "post",
data: data,
headers: { "Content-Type": "multipart/form-data" },
});
}

View File

@@ -1,8 +1,9 @@
import myaxios from '@/utils/request'
export function getList(data){
return myaxios({
url: '/plate',
method: 'get',
params:data
})
};
import request from "@/config/axios/service";
export function getList(data) {
return request({
url: "/plate",
method: "get",
params: data,
});
}

View File

@@ -1,133 +1,131 @@
import myaxios from '@/utils/request'
import request from "@/config/axios/service";
// 查询用户列表
export function listUser(query) {
return myaxios({
url: '/user',
method: 'get',
params: query
})
return request({
url: "/user",
method: "get",
params: query,
});
}
// 查询用户详细
export function getUser(userId) {
return myaxios({
url: '/user/' + parseStrEmpty(userId),
method: 'get'
})
return request({
url: "/user/" + parseStrEmpty(userId),
method: "get",
});
}
// 新增用户
export function addUser(data) {
return myaxios({
url: '/user',
method: 'post',
data: data
})
return request({
url: "/user",
method: "post",
data: data,
});
}
// 修改用户
export function updateUser(id, data) {
return myaxios({
return request({
url: `/user/${id}`,
method: 'put',
data: data
})
method: "put",
data: data,
});
}
// 删除用户
export function delUser(userId) {
return myaxios({
return request({
url: `/user/${userId}`,
method: 'delete',
})
method: "delete",
});
}
// 用户密码重置
export function resetUserPwd(id, password) {
const data = {
password
}
password,
};
return myaxios({
return request({
url: `/account/rest-password/${id}`,
method: 'put',
data: data
})
method: "put",
data: data,
});
}
// 用户状态修改
export function changeUserStatus(userId, isDel) {
return myaxios({
return request({
url: `/user/${userId}/${isDel}`,
method: 'put'
})
method: "put",
});
}
// 查询用户个人信息
export function getUserProfile() {
return myaxios({
url: '/account',
method: 'get'
})
return request({
url: "/account",
method: "get",
});
}
// 修改用户个人信息
export function updateUserProfile(data) {
return myaxios({
return request({
url: `/user/profile`,
method: 'put',
data: data
})
method: "put",
data: data,
});
}
// 只修改用户头像
export function updateUserIcon(data) {
return myaxios({
return request({
url: `/account/icon`,
method: 'put',
data:{icon:data}
})
method: "put",
data: { icon: data },
});
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return myaxios({
url: '/account/password',
method: 'put',
data: data
})
newPassword,
};
return request({
url: "/account/password",
method: "put",
data: data,
});
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
data: data
})
url: "/system/user/profile/avatar",
method: "post",
data: data,
});
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
url: "/system/user/authRole/" + userId,
method: "get",
});
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
url: "/system/user/authRole",
method: "put",
params: data,
});
}
// // 查询部门下拉树结构

View File

@@ -1,55 +1,51 @@
<template>
<div ref="VisitsLineChart"></div>
<div ref="VisitsLineChart"></div>
</template>
<script setup>
import * as echarts from 'echarts/core';
import { GridComponent } from 'echarts/components';
import { LineChart } from 'echarts/charts';
import { UniversalTransition } from 'echarts/features';
import { CanvasRenderer } from 'echarts/renderers';
import { ref ,onMounted} from 'vue';
import { getWeek } from '@/apis/accessApi.js'
import * as echarts from "echarts/core";
import { GridComponent } from "echarts/components";
import { LineChart } from "echarts/charts";
import { UniversalTransition } from "echarts/features";
import { CanvasRenderer } from "echarts/renderers";
import { ref, onMounted } from "vue";
import { getWeek } from "@/apis/accessApi.js";
echarts.use([GridComponent, LineChart, CanvasRenderer, UniversalTransition]);
const VisitsLineChart=ref(null);
const VisitsLineChart = ref(null);
onMounted(async()=>{
onMounted(async () => {
var myChart = echarts.init(VisitsLineChart.value, null, {
width: 320,
height: 230
height: 230,
});
var option;
var option;
const response=await getWeek();
const response = await getWeek();
var numberData=response.data.map(x=>x.number);
var numberData = response.data.map((x) => x.number);
option = {
xAxis: {
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
},
yAxis: {
type: 'value'
},
series: [
{
data: numberData,
type: 'line',
areaStyle: {}
}
]
};
option = {
xAxis: {
type: "category",
boundaryGap: false,
data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
},
yAxis: {
type: "value",
},
series: [
{
data: numberData,
type: "line",
areaStyle: {},
},
],
};
option && myChart.setOption(option);
option && myChart.setOption(option);
window.addEventListener('resize', function() {
window.addEventListener("resize", function () {
myChart.resize();
});
})
</script>
});
</script>

View File

@@ -0,0 +1,50 @@
import * as echarts from "echarts";
import { onMounted, onUnmounted, watch } from "vue";
import { debounce } from "@/utils/index";
import _ from "lodash";
// containerRef echarts实例 props 传入的值 baseOptions 图表初始化渲染
export default function useEcharts(containerRef, emits, props, baseOptions) {
let chart = null;
onMounted(() => {
chart = echarts.init(containerRef.value);
init();
chart.on("click", function (param) {
emits("chart-click", param);
});
//自适应不同屏幕时改变图表尺寸
window.addEventListener("resize", cancalDebounce);
});
// 用于将echarts实例暴露出去使用
const getChart = () => chart;
onUnmounted(() => {
chart && chart.dispose();
window.removeEventListener("resize", cancalDebounce);
});
function init() {
let option = _.cloneDeep(baseOptions);
chart.setOption(option);
chart.setOption(props.option);
}
function resize() {
chart && chart.resize();
}
watch(
() => props.option,
(val) => {
chart && chart.setOption(val);
},
{ deep: true }
);
const cancalDebounce = debounce(resize, 500);
return {
getChart,
resize,
};
}

View File

@@ -0,0 +1,12 @@
//设置防抖,保证无论拖动窗口大小,只执行一次获取浏览器宽高的方法
export const debounce = (fun, delay) => {
let timer;
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fun();
}, delay);
};
};

View File

@@ -131,8 +131,8 @@ onMounted(async () => {
plateList.value = plateData.items;
const { data: discussData } = await discussGetList(query);
discussList.value = discussData.items;
const { data: bannerData } = await bannerGetList();
bannerList.value = bannerData.items;
// const { data: bannerData } = await bannerGetList();
// bannerList.value = bannerData.items;
});
</script>
<style scoped>

1160
Yi.Bbs.Vue3/yarn.lock Normal file

File diff suppressed because it is too large Load Diff