# 2022-02-15

### 1.3.6 开源社区版:
【调整】应广大会员需求,平台设计上传图片从裁剪上传,调整后直接录入图片地址或本地非裁剪上传。
### 0.1.8 会员专业版:
【调整】平台设计上传图片从裁剪上传,调整后直接录入图片地址或本地非裁剪上传。
【修复】调整下单地址实现2行被遮挡问题。
【修复】修复下单地址未记录街道地址问题,导致订单地址可能出现误差的异常。
【修复】修复核销【提货单】详情图片未限制大小导致容易被撑破的问题。
【修复】修复核销【服务券】详情图片未限制大小导致容易被撑破的问题。
【升级】升级腾讯云COS云存储组件。
【降级】SixLabors.ImageSharp海报组件降级到1.04版本。解决海报生成问题。#I4SWCC
【修复】修复接龙模块列表图片未限制大小导致容易被撑破的问题。
This commit is contained in:
JianWeie
2022-02-15 01:30:19 +08:00
parent a07106127e
commit a2e189fe76
14 changed files with 142 additions and 80 deletions

View File

@@ -5,7 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
</ItemGroup> </ItemGroup>

View File

@@ -5,7 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.7.0" /> <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="2.7.0" />
<PackageReference Include="StackExchange.Redis" Version="2.2.88" /> <PackageReference Include="StackExchange.Redis" Version="2.2.88" />
</ItemGroup> </ItemGroup>

View File

@@ -5,7 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="5.0.13" /> <PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="5.0.14" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -13,10 +13,10 @@
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
<PackageReference Include="Qc.YilianyunSdk" Version="1.0.7" /> <PackageReference Include="Qc.YilianyunSdk" Version="1.0.7" />
<PackageReference Include="Qiniu" Version="8.0.0" /> <PackageReference Include="Qiniu" Version="8.0.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="2.0.0" /> <PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta13" /> <PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta13" />
<PackageReference Include="System.Drawing.Common" Version="6.0.0" /> <PackageReference Include="System.Drawing.Common" Version="6.0.0" />
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.26" /> <PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.27" />
<PackageReference Include="ToolGood.Words" Version="3.0.3.1" /> <PackageReference Include="ToolGood.Words" Version="3.0.3.1" />
</ItemGroup> </ItemGroup>

View File

@@ -435,7 +435,7 @@ namespace CoreCms.Net.Services
//快递邮寄 //快递邮寄
order.shipAreaId = userShipInfo.areaId; order.shipAreaId = userShipInfo.areaId;
order.shipAddress = userShipInfo.address; order.shipAddress = userShipInfo.street + " " + userShipInfo.address;
order.shipName = userShipInfo.name; order.shipName = userShipInfo.name;
order.shipMobile = userShipInfo.mobile; order.shipMobile = userShipInfo.mobile;

View File

@@ -32,7 +32,6 @@ using Newtonsoft.Json.Linq;
using SixLabors.Fonts; using SixLabors.Fonts;
using SixLabors.ImageSharp; using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing; using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
using SKIT.FlurlHttpClient.Wechat.Api; using SKIT.FlurlHttpClient.Wechat.Api;
@@ -855,10 +854,7 @@ namespace CoreCms.Net.Services
//文件硬地址 //文件硬地址
var savePath = _webHostEnvironment.WebRootPath + "/static/poster/"; var savePath = _webHostEnvironment.WebRootPath + "/static/poster/";
//用户二维码头像
var qrCodeDir = _webHostEnvironment.WebRootPath + "/static/qrCode/weChat/" + otherData; var qrCodeDir = _webHostEnvironment.WebRootPath + "/static/qrCode/weChat/" + otherData;
//如果文件夹不存在,则创建文件夹 //如果文件夹不存在,则创建文件夹
if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);
@@ -886,13 +882,14 @@ namespace CoreCms.Net.Services
var images = goodModel.images.Split(","); var images = goodModel.images.Split(",");
if (images.Any()) if (images.Any())
{ {
var image = images[0];
//创建一个背景宽度为400X600的底图 //创建一个背景宽度为400X600的底图
using var imageTemple = new SixLabors.ImageSharp.Image<Rgba32>(400, 600); using var imageTemple = new SixLabors.ImageSharp.Image<Rgba32>(400, 600);
//设置底图的背景色为白色 //设置底图的背景色为白色
imageTemple.Mutate(x => x.BackgroundColor(SixLabors.ImageSharp.Color.White)); imageTemple.Mutate(x => x.BackgroundColor(SixLabors.ImageSharp.Color.White));
//绘制商品图片(网络下载图片) //绘制商品图片(网络下载图片)
HttpClient client = new HttpClient(); HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(goodModel.image); HttpResponseMessage response = await client.GetAsync(image);
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();
var stream = await response.Content.ReadAsStreamAsync(); var stream = await response.Content.ReadAsStreamAsync();
//载入下载的图片流 //载入下载的图片流
@@ -904,22 +901,15 @@ namespace CoreCms.Net.Services
}); });
//将商品大图合并到背景图上 //将商品大图合并到背景图上
imageTemple.Mutate(x => x.DrawImage(imageThumbnail, new SixLabors.ImageSharp.Point(0, 0), 1)); imageTemple.Mutate(x => x.DrawImage(imageThumbnail, new SixLabors.ImageSharp.Point(0, 0), 1));
//将用户的分享二维码合并大背景图上
//如果已经存在用户头像的情况下。则附加渲染二维码 var imageQrcode = await SixLabors.ImageSharp.Image.LoadAsync(qrCodeDir);
//QrCode 根目录 //将二维码缩略至120X120
if (File.Exists(qrCodeDir)) imageQrcode.Mutate(x =>
{ {
//将用户的分享二维码合并大背景图上 x.Resize(120, 120);
var imageQrcode = await SixLabors.ImageSharp.Image.LoadAsync(qrCodeDir); });
//将二维码缩略至120X120 //将二维码图片合并到背景图上
imageQrcode.Mutate(x => imageTemple.Mutate(x => x.DrawImage(imageQrcode, new SixLabors.ImageSharp.Point(275, 420), 1));
{
x.Resize(120, 120);
});
//将二维码图片合并到背景图上
imageTemple.Mutate(x => x.DrawImage(imageQrcode, new SixLabors.ImageSharp.Point(275, 420), 1));
}
//构建字体//装载字体(ttf)(而且字体一定要支持简体中文的) //构建字体//装载字体(ttf)(而且字体一定要支持简体中文的)
var fonts = new FontCollection(); var fonts = new FontCollection();
SixLabors.Fonts.FontFamily fontFamily = fonts.Install(_webHostEnvironment.WebRootPath + "/fonts/SourceHanSansK-Normal.ttf"); SixLabors.Fonts.FontFamily fontFamily = fonts.Install(_webHostEnvironment.WebRootPath + "/fonts/SourceHanSansK-Normal.ttf");
@@ -992,22 +982,15 @@ namespace CoreCms.Net.Services
}); });
//将商品大图合并到背景图上 //将商品大图合并到背景图上
imageTemple.Mutate(x => x.DrawImage(imageThumbnail, new SixLabors.ImageSharp.Point(0, 0), 1)); imageTemple.Mutate(x => x.DrawImage(imageThumbnail, new SixLabors.ImageSharp.Point(0, 0), 1));
//将用户的分享二维码合并大背景图上
//如果已经存在用户头像的情况下。则附加渲染二维码 var imageQrcode = await SixLabors.ImageSharp.Image.LoadAsync(qrCodeDir);
//QrCode 根目录 //将二维码缩略至120X120
if (File.Exists(qrCodeDir)) imageQrcode.Mutate(x =>
{ {
//将用户的分享二维码合并大背景图上 x.Resize(120, 120);
var imageQrcode = await SixLabors.ImageSharp.Image.LoadAsync(qrCodeDir); });
//将二维码缩略至120X120 //将二维码图片合并到背景图上
imageQrcode.Mutate(x => imageTemple.Mutate(x => x.DrawImage(imageQrcode, new SixLabors.ImageSharp.Point(275, 420), 1));
{
x.Resize(120, 120);
});
//将二维码图片合并到背景图上
imageTemple.Mutate(x => x.DrawImage(imageQrcode, new SixLabors.ImageSharp.Point(275, 420), 1));
}
//构建字体//装载字体(ttf)(而且字体一定要支持简体中文的) //构建字体//装载字体(ttf)(而且字体一定要支持简体中文的)
var fonts = new FontCollection(); var fonts = new FontCollection();
SixLabors.Fonts.FontFamily fontFamily = fonts.Install(_webHostEnvironment.WebRootPath + "/fonts/SourceHanSansK-Normal.ttf"); SixLabors.Fonts.FontFamily fontFamily = fonts.Install(_webHostEnvironment.WebRootPath + "/fonts/SourceHanSansK-Normal.ttf");

View File

@@ -34,7 +34,9 @@
<view class="store u-line-2">{{item.title}}</view> <view class="store u-line-2">{{item.title}}</view>
</view> </view>
<view class="item"> <view class="item">
<view class="left"><image :src="item.thumbnail && item.thumbnail!='null' ? item.thumbnail : '/static/images/common/empty-banner.png'" mode="aspectFill"></image></view> <view class="left">
<u--image :showLoading="true" :src="item.thumbnail && item.thumbnail!='null' ? item.thumbnail : '/static/images/common/empty-banner.png'" width="80px" height="80px" mode="aspectFill"></u--image>
</view>
<view class="content"> <view class="content">
<view class="type u-line-4">{{item.description}}</view> <view class="type u-line-4">{{item.description}}</view>
<view class="delivery-time">截止时间{{ $u.timeFormat(item.endTime, 'yyyy-mm-dd hh:MM:ss') }}</view> <view class="delivery-time">截止时间{{ $u.timeFormat(item.endTime, 'yyyy-mm-dd hh:MM:ss') }}</view>
@@ -59,9 +61,9 @@
</template> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
page: 1, page: 1,

View File

@@ -30,7 +30,9 @@
<view>{{item.statusName}}</view> <view>{{item.statusName}}</view>
</view> </view>
<view class="item" v-for="(v, key) in item.orderItems" :key="key"> <view class="item" v-for="(v, key) in item.orderItems" :key="key">
<view class="left"><image :src="v.imageUrl && v.imageUrl!='null' ? v.imageUrl : '/static/images/common/empty-banner.png'" mode="aspectFill"></image></view> <view class="left">
<u--image :showLoading="true" :src="v.imageUrl && v.imageUrl!='null' ? v.imageUrl : '/static/images/common/empty-banner.png'" width="80px" height="80px" mode="aspectFill"></u--image>
</view>
<view class="content"> <view class="content">
<view class="title u-line-2">{{v.name}}</view> <view class="title u-line-2">{{v.name}}</view>
<view class="type">{{v.addon}}</view> <view class="type">{{v.addon}}</view>

View File

@@ -22,7 +22,7 @@
</view> </view>
<view class="item"> <view class="item">
<view class="left"> <view class="left">
<u--image :showLoading="true" :src="item.thumbnail && item.thumbnail!='null' ? item.thumbnail : '/static/images/common/empty-banner.png'" width="80px" height="80px"></u--image> <u--image :showLoading="true" :src="item.service.thumbnail && item.service.thumbnail!='null' ? item.service.thumbnail : '/static/images/common/empty-banner.png'" width="80px" height="80px" mode="aspectFill"></u--image>
</view> </view>
<view class="content"> <view class="content">
<view class="title u-line-2">{{item.service.title}}</view> <view class="title u-line-2">{{item.service.title}}</view>
@@ -51,9 +51,9 @@
</template> </template>
<script> <script>
export default { export default {
computed: { computed: {
}, },
data() { data() {

View File

@@ -2,7 +2,7 @@
.coreshop-card { position: relative; padding: 9px; border-radius: 4.5px; box-shadow: 0 0 5.5px #f7f7f7; } .coreshop-card { position: relative; padding: 9px; border-radius: 4.5px; box-shadow: 0 0 5.5px #f7f7f7; }
} }
.address-view { .address-view {
.coreshop-list.menu-avatar > .coreshop-list-item { height: 55px; .coreshop-list.menu-avatar > .coreshop-list-item { height: 65px;
&:after { width: 0; height: 0; border-bottom: 0; } &:after { width: 0; height: 0; border-bottom: 0; }
.icon-view { position: absolute; border-radius: 100%; text-align: center; line-height: 23px; height: 23px; width: 23px; left: 4.5px; top: 10px; } .icon-view { position: absolute; border-radius: 100%; text-align: center; line-height: 23px; height: 23px; width: 23px; left: 4.5px; top: 10px; }
.content { left: 26px; width: calc(100% - 37px - 14px); } .content { left: 26px; width: calc(100% - 37px - 14px); }

View File

@@ -62,15 +62,15 @@
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.8" /> <PackageReference Include="Essensoft.Paylink.Alipay" Version="4.0.8" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.8" /> <PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.0.8" />
<PackageReference Include="IdentityModel" Version="6.0.0" /> <PackageReference Include="IdentityModel" Version="6.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.0.0" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="3.1.6" /> <PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="3.1.6" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" /> <PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.1" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.2" />
<PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog" Version="4.7.13" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" /> <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="NPOI" Version="2.4.1" /> <PackageReference Include="NPOI" Version="2.4.1" />
@@ -78,7 +78,7 @@
<PackageReference Include="Snowflake.Core" Version="2.0.0" /> <PackageReference Include="Snowflake.Core" Version="2.0.0" />
<PackageReference Include="StackExchange.Redis" Version="2.2.88" /> <PackageReference Include="StackExchange.Redis" Version="2.2.88" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.15.1" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.15.1" />
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.26" /> <PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.27" />
<PackageReference Include="ToolGood.Words" Version="3.0.3.1" /> <PackageReference Include="ToolGood.Words" Version="3.0.3.1" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.12" /> <PackageReference Include="Yitter.IdGenerator" Version="1.0.12" />
</ItemGroup> </ItemGroup>

View File

@@ -232,7 +232,7 @@ var allWidget = {
"brandId": '', //所选品牌id "brandId": '', //所选品牌id
"limit": 10, "limit": 10,
"column": 2, //分裂数量 "column": 2, //分裂数量
"isShow":true, "isShow": true,
"list": [ "list": [
{ {
"image": "/static/images/common/empty-banner.png", "image": "/static/images/common/empty-banner.png",
@@ -538,7 +538,7 @@ Vue.component('upload-img', {
props: ['index', "item"], props: ['index', "item"],
methods: { methods: {
upload: function () { upload: function () {
this.$emit('upload-img') this.$emit('upload-img');
} }
} }
}) })
@@ -1032,27 +1032,27 @@ Vue.component('layout-config', {
}, },
upImage: function (index, item) { upImage: function (index, item) {
var _that = this; var _that = this;
layui.use(['admin', 'coreHelper', 'cropperImg'], layui.use(['form', 'table'], function () {
function () { layui.admin.popup({
var $ = layui.$, coreHelper = layui.coreHelper, cropperImg = layui.cropperImg; title: '图片设置',
cropperImg.cropImg({ area: ['800px', '300px'],
aspectRatio: 16 / 9, id: 'LAY-app-CoreCmsCommon-GetNoticeIds',
imgSrc: _that.selectWg.value.list[index].image, success: function (layero, indexChild) {
onCrop: function (data) { layui.view(this.id).render('common/getUpLoad', null).done(function () {
var loadIndex = layer.load(2); layui.form.on('submit(LAY-app-getUpLoad-submit)',
coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) { function (data) {
if (0 === res.code) { console.log(data);
_that.$set(_that.selectWg.value.list[index], 'image', res.data.fileUrl) _that.$set(_that.selectWg.value.list[index], 'image', data.field.imagesUrl)
layer.msg(res.msg); layer.close(indexChild);
layer.close(loadIndex); });
} else { });
layer.close(loadIndex); }
layer.msg(res.msg, { icon: 2, anim: 6 }); , btn: ['确定', '取消']
} , yes: function (index, layero) {
}); layero.contents().find("#LAY-app-getUpLoad-submit").click();
} }
}); });
}) });
}, },
upTopSlideBgImage: function (index, item) { upTopSlideBgImage: function (index, item) {
var _that = this; var _that = this;
@@ -1188,7 +1188,6 @@ Vue.component('layout-config', {
}) })
}, },
selectNotice: function () { selectNotice: function () {
var that = this; var that = this;
layui.use(['form', 'table'], function () { layui.use(['form', 'table'], function () {

View File

@@ -0,0 +1,76 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<div class="layui-form coreshop-form layui-form-pane">
<blockquote class="layui-elem-quote">
请选择小于5M的图片进行裁剪上传
</blockquote>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">图像地址</label>
<div class="layui-input-inline layui-inline-8">
<input name="imagesUrl" id="imagesUrl" type="text" class="layui-input" lay-verify="required|url" lay-reqText="可手动输入地址或点击上传" />
</div>
<div class="layui-input-inline">
<img class="coreshop-upload-img" id="viewImgBoximageUrl" src="{{ layui.setter.noImagePicUrl }}">
<button type="button" class="layui-btn" id="upBtn" lay-active="doCropperImg">上传图片</button>
<div id="viewTextBox"></div>
</div>
</div>
</div>
<div class="layui-form-item core-hidden">
<div class="layui-input-block">
<div class="layui-footer">
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-getUpLoad-submit" id="LAY-app-getUpLoad-submit" value="确认添加">
</div>
</div>
</div>
</div>
</script>
<script>
var debug = layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d); }
layui.use(['index', 'table', 'laydate', 'upload', 'coreHelper'],
function () {
var $ = layui.$
, admin = layui.admin
, table = layui.table
, form = layui.form
, laydate = layui.laydate
, setter = layui.setter
, coreHelper = layui.coreHelper
, upload = layui.upload
, view = layui.view;
//普通图片上传
var uploadInst = upload.render({
elem: '#upBtn'
, url: layui.setter.apiUrl + 'Api/Tools/UploadFiles'
, before: function (obj) {
obj.preview(function (index, file, result) {
$('#viewImgBox').attr('src', result);
});
}
, done: function (res) {
if (res.code > 0) { return layer.msg('上传失败'); }
layer.msg('上传成功');
$("#imagesUrl").val(res.data.fileUrl);
}
, error: function () {
var viewTextBox = $('#viewTextBox');
viewTextBox.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
viewTextBox.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
}
});
//重载form
form.render();
});
};
</script>

View File

@@ -57,17 +57,17 @@
<PackageReference Include="Hangfire.Core" Version="1.7.28" /> <PackageReference Include="Hangfire.Core" Version="1.7.28" />
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" /> <PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
<PackageReference Include="Hangfire.Redis.StackExchange" Version="1.8.5" /> <PackageReference Include="Hangfire.Redis.StackExchange" Version="1.8.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.2" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" /> <PackageReference Include="Microsoft.Data.SqlClient" Version="4.1.0" />
<PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="3.1.6" /> <PackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="3.1.6" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.1" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.2" />
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" /> <PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
<PackageReference Include="NLog" Version="4.7.13" /> <PackageReference Include="NLog" Version="4.7.13" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" /> <PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="Qc.YilianyunSdk" Version="1.0.7" /> <PackageReference Include="Qc.YilianyunSdk" Version="1.0.7" />
<PackageReference Include="Snowflake.Core" Version="2.0.0" /> <PackageReference Include="Snowflake.Core" Version="2.0.0" />
<PackageReference Include="StackExchange.Redis" Version="2.2.88" /> <PackageReference Include="StackExchange.Redis" Version="2.2.88" />
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.26" /> <PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.27" />
<PackageReference Include="ToolGood.Words" Version="3.0.3.1" /> <PackageReference Include="ToolGood.Words" Version="3.0.3.1" />
</ItemGroup> </ItemGroup>