# 2022-03-29第2次更新

### 1.4.2开源社区版:
【新增】代码生成器Controller模板的导出excel请求增加decimal类型的处理。#I4WCX1
### 0.3.3 专业版:
【新增】后台新增支付单查询功能,实现支付单微信反馈支付数据,防止出现极端情况下,导致的支付数据回调失败而影响订单业务。#I4ZRMR
【新增】增加邀请用户注册赠送积分功能,用户主动设置自己的上级将给上级赠送积分的功能。#I4Y1WY
【新增】后台新增发票上传功能,前端小程序新增发票下载功能。【发票表增加一个字段】#I4ZYT3
【新增】商家中心订单查询,增加发票下载查看功能。
【新增】代码生成器Controller模板的导出excel请求增加decimal类型的处理。#I4WCX1
【新增】后台商品管理sku增加原图上传功能,与裁剪上传配合,用户可根据需求选择上传模式。
【优化】调整前端帮助文档默认传值问题,未指定具体分类情况下,默认取第一个栏目数据。
【修复】修复页面设计上传图片后不进行预览的问题。
【修复】修复页面设计【服务商品】前端样式错乱的问题。
This commit is contained in:
JianWeie
2022-03-29 21:55:58 +08:00
parent c341aeb8c8
commit d10b0e59f6
10 changed files with 202 additions and 28 deletions

View File

@@ -268,6 +268,11 @@ namespace CoreCms.Net.Configuration
/// </summary> /// </summary>
[Description("取消订单返还")] [Description("取消订单返还")]
PointCanCelOrder = 8, PointCanCelOrder = 8,
/// <summary>
/// 邀请用户注册
/// </summary>
[Description("邀请用户注册")]
PointTypeInviterUser = 9,
} }
/// <summary> /// <summary>

View File

@@ -135,6 +135,11 @@ namespace CoreCms.Net.Configuration
/// </summary> /// </summary>
public const string ShowInviterInfo = "showInviterInfo"; public const string ShowInviterInfo = "showInviterInfo";
/// <summary>
/// 邀请用户赠送积分
/// </summary>
public const string InviterUserIntegral = "inviterUserIntegral";
/// <summary> /// <summary>
/// 分销层级1,2层 /// 分销层级1,2层

View File

@@ -96,11 +96,14 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.DistributionGoods, new DictionaryKeyValues() { sKey = "购买商品成为分销商", sValue = "1" }); di.Add(SystemSettingConstVars.DistributionGoods, new DictionaryKeyValues() { sKey = "购买商品成为分销商", sValue = "1" });
di.Add(SystemSettingConstVars.DistributionGoodsId, new DictionaryKeyValues() { sKey = "购买商品成为分销商指定商品序列号", sValue = "0" }); di.Add(SystemSettingConstVars.DistributionGoodsId, new DictionaryKeyValues() { sKey = "购买商品成为分销商指定商品序列号", sValue = "0" });
//邀请好友
di.Add(SystemSettingConstVars.CommissionType, new DictionaryKeyValues() { sKey = "佣金类型", sValue = "1" }); di.Add(SystemSettingConstVars.CommissionType, new DictionaryKeyValues() { sKey = "佣金类型", sValue = "1" });
di.Add(SystemSettingConstVars.CommissionFirst, new DictionaryKeyValues() { sKey = "一级佣金", sValue = "0" }); di.Add(SystemSettingConstVars.CommissionFirst, new DictionaryKeyValues() { sKey = "一级佣金", sValue = "0" });
di.Add(SystemSettingConstVars.CommissionSecond, new DictionaryKeyValues() { sKey = "二级佣金", sValue = "0" }); di.Add(SystemSettingConstVars.CommissionSecond, new DictionaryKeyValues() { sKey = "二级佣金", sValue = "0" });
di.Add(SystemSettingConstVars.CommissionThird, new DictionaryKeyValues() { sKey = "三级佣金", sValue = "0" }); di.Add(SystemSettingConstVars.CommissionThird, new DictionaryKeyValues() { sKey = "三级佣金", sValue = "0" });
di.Add(SystemSettingConstVars.InviterUserIntegral, new DictionaryKeyValues() { sKey = "赠送积分", sValue = "0" });
//代理功能 //代理功能
di.Add(SystemSettingConstVars.IsOpenAgent, new DictionaryKeyValues() { sKey = "是否开启代理模块", sValue = "1" }); di.Add(SystemSettingConstVars.IsOpenAgent, new DictionaryKeyValues() { sKey = "是否开启代理模块", sValue = "1" });
di.Add(SystemSettingConstVars.IsShowAgentPortal, new DictionaryKeyValues() { sKey = "前端显示入口", sValue = "1" }); di.Add(SystemSettingConstVars.IsShowAgentPortal, new DictionaryKeyValues() { sKey = "前端显示入口", sValue = "1" });

View File

@@ -170,7 +170,7 @@ namespace CoreCms.Net.Services
/// <returns></returns> /// <returns></returns>
public async Task<GetUserPointResult> GetUserPoint(int userId, decimal orderMoney, int[] ids, int cartType) public async Task<GetUserPointResult> GetUserPoint(int userId, decimal orderMoney, int[] ids, int cartType)
{ {
GetUserPointResult dto = new GetUserPointResult(); GetUserPointResult dto = new GetUserPointResult();
//1是2否 //1是2否
@@ -352,6 +352,18 @@ namespace CoreCms.Net.Services
} }
var bl = await _dal.UpdateAsync(p => new CoreCmsUser() { parentId = superiorId }, p => p.id == userId); var bl = await _dal.UpdateAsync(p => new CoreCmsUser() { parentId = superiorId }, p => p.id == userId);
//增加上级积分
if (bl)
{
var allConfigs = await _settingServices.GetConfigDictionaries();
var inviterUserIntegral = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
if (inviterUserIntegral > 0)
{
await _userPointLogServices.SetPoint(superiorId, inviterUserIntegral, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
}
}
jm.status = bl; jm.status = bl;
jm.msg = bl ? "填写邀请码成功!" : "填写邀请码失败!"; jm.msg = bl ? "填写邀请码成功!" : "填写邀请码失败!";
return jm; return jm;
@@ -628,6 +640,17 @@ namespace CoreCms.Net.Services
jm.msg = GlobalErrorCodeVars.Code10000; jm.msg = GlobalErrorCodeVars.Code10000;
return jm; return jm;
} }
if (userId > 0 && entity.invitecode > 0 && userInfo.parentId > 0)
{
var allConfigs = await _settingServices.GetConfigDictionaries();
var inviterUserIntegral = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
if (inviterUserIntegral > 0)
{
await _userPointLogServices.SetPoint(userId, inviterUserIntegral, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
}
}
userInfo = await _dal.QueryByIdAsync(userId); userInfo = await _dal.QueryByIdAsync(userId);
} }
else else

View File

@@ -11,17 +11,17 @@
<view class="img-list-item-r"> <view class="img-list-item-r">
<view class="coreshop-font-14 coreshop-text-bold u-line-1">{{item.title}}</view> <view class="coreshop-font-14 coreshop-text-bold u-line-1">{{item.title}}</view>
<view class="coreshop-font-12 u-line-2 coreshop-margin-top-10 coreshop-margin-bottom-10">{{item.description}}</view> <view class="coreshop-font-12 u-line-2 coreshop-margin-top-10 coreshop-margin-bottom-10">{{item.description}}</view>
<view class="item-c"> <view class="item-c coreshop-flex coreshop-justify-between">
<view class="red-price">{{item.money}}</view> <view class="red-price coreshop-justify-between">
<view class="coreshop-flex-direction-row coreshop-justify-between"> {{item.money}}
<view> </view>
<view class="coreshop-font-30 coreshop-flex-direction-row" v-if="item.status == 0 && item.lastTime > 0"> <view class="coreshop-flex coreshop-flex-direction-row coreshop-justify-between">
剩余<u-count-down :time="item.lastTime" format="HH:mm:ss"></u-count-down> <view class="red-price coreshop-font-15 coreshop-flex-direction-row" v-if="item.status == 0 && item.lastTime > 0">
</view> <u-count-down :time="item.lastTime" format="HH:mm:ss"></u-count-down>
<view class="goods-salesvolume red-price" v-if="item.status == 1">已结束</view>
<view class="goods-salesvolume red-price" v-if="item.status == 2">售罄</view>
</view> </view>
<u-icon name="shopping-cart" color="#2979ff" size="20" class="btnCart"></u-icon> <view class="coreshop-font-12 red-price" v-if="item.status == 3">已结束</view>
<view class="coreshop-font-12 red-price" v-if="item.status == 2">即将开始</view>
<u-icon name="shopping-cart" color="#2979ff" size="25" class="btnCart"></u-icon>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -1162,12 +1162,14 @@
支付单表 支付单表
</summary> </summary>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices)"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.#ctor(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,CoreCms.Net.IServices.ICoreCmsBillPaymentsServices,Essensoft.Paylink.WeChatPay.V2.IWeChatPayClient,Microsoft.Extensions.Options.IOptions{Essensoft.Paylink.WeChatPay.WeChatPayOptions})">
<summary> <summary>
构造函数 构造函数
</summary> </summary>
<param name="webHostEnvironment"></param> <param name="webHostEnvironment"></param>
<param name="coreCmsBillPaymentsServices"></param> <param name="coreCmsBillPaymentsServices"></param>
<param name="client"></param>
<param name="optionsAccessor"></param>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.GetPageList"> <member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.GetPageList">
<summary> <summary>
@@ -1201,6 +1203,13 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillPaymentsController.DoRefresh(CoreCms.Net.Model.FromBody.FMStringId)">
<summary>
更新微信支付数据
</summary>
<param name="entity"></param>
<returns></returns>
</member>
<member name="T:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillRefundController"> <member name="T:CoreCms.Net.Web.Admin.Controllers.CoreCmsBillRefundController">
<summary> <summary>
退款单表 退款单表

View File

@@ -11,7 +11,7 @@
</div> </div>
<div class="layui-input-inline"> <div class="layui-input-inline">
<img class="coreshop-upload-img" id="viewImgBoximageUrl" src="{{ layui.setter.noImagePicUrl }}"> <img class="coreshop-upload-img" id="viewImgBoximageUrl" src="{{ layui.setter.noImagePicUrl }}">
<button type="button" class="layui-btn" id="upBtn" lay-active="doCropperImg">上传图片</button> <button type="button" class="layui-btn" id="getUpLoadBtn">上传图片</button>
<div id="viewTextBox"></div> <div id="viewTextBox"></div>
</div> </div>
</div> </div>
@@ -47,7 +47,7 @@
//普通图片上传 //普通图片上传
var uploadInst = upload.render({ var uploadInst = upload.render({
elem: '#upBtn' elem: '#getUpLoadBtn'
, url: layui.setter.apiUrl + 'Api/Tools/UploadFiles' , url: layui.setter.apiUrl + 'Api/Tools/UploadFiles'
, before: function (obj) { , before: function (obj) {
obj.preview(function (index, file, result) { obj.preview(function (index, file, result) {

View File

@@ -327,7 +327,7 @@
<input type="checkbox" id="product[{{item.spesDesc}}][isDefalut]" name="product[isDefalut][]" title="是否默认" {{item.isDefalut? 'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}" class="isdefalut" lay-filter="isdefalut"> <input type="checkbox" id="product[{{item.spesDesc}}][isDefalut]" name="product[isDefalut][]" title="是否默认" {{item.isDefalut? 'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}" class="isdefalut" lay-filter="isdefalut">
</td> </td>
<td class="spec-td"> <td class="spec-td">
<div class="spec_image"> <div class="spec_image" style="display: inline-block;width: 60px;overflow: hidden;">
<div class="spec_image_item"> <div class="spec_image_item">
<!--<div class="del-img"> <!--<div class="del-img">
x x
@@ -336,7 +336,14 @@
</div> </div>
<input type="hidden" id="productImagesInput" name="product[images][]" value="{{item.images}}"> <input type="hidden" id="productImagesInput" name="product[images][]" value="{{item.images}}">
</div> </div>
<a class="layui-btn layui-btn-xs upSpecImage" href="javascript:;">上传图片</a> <div style="display: inline-block;width: 60px;overflow: hidden;">
<p>
<a class="layui-btn layui-btn-xs upSpecImage" style="margin-bottom: 10px;" href="javascript:;">裁剪上传</a>
</p>
<p>
<a class="layui-btn layui-btn-xs upSpecImageOriginal" href="javascript:;">原图上传</a>
</p>
</div>
</td> </td>
<td> <td>
<input type="text" name="product[sn][]" value="{{item.sn}}" placeholder="货号" class="layui-input layui-inline-3"> <input type="text" name="product[sn][]" value="{{item.sn}}" placeholder="货号" class="layui-input layui-inline-3">
@@ -824,8 +831,9 @@
coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) { coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
if (0 === res.code) { if (0 === res.code) {
var item = $(_that); var item = $(_that);
item.prev().find('#productImagesInput').val(res.data.fileUrl); item.parent().parent().prev().find('#productImagesInput').val(res.data.fileUrl);
item.prev().find('#productImagesSrc').attr("src", res.data.fileUrl); item.parent().parent().prev().find('#productImagesSrc').attr("src", res.data.fileUrl);
layer.msg(res.msg); layer.msg(res.msg);
layer.close(loadIndex); layer.close(loadIndex);
} else { } else {
@@ -837,6 +845,33 @@
}); });
form.render(); form.render();
}); });
//SKU原图上传
$('.upSpecImageOriginal').click(function () {
var _that = this;
admin.popup({
title: '原图上传',
area: ['800px', '300px'],
id: 'LAY-app-CoreCmsCommon-GetNoticeIds',
success: function (layero, indexChild) {
layui.view(this.id).render('common/getUpLoad', null).done(function () {
layui.form.on('submit(LAY-app-getUpLoad-submit)',
function (data) {
console.log(data);
var item = $(_that);
item.parent().parent().prev().find('#productImagesInput').val(data.field.imagesUrl);
item.parent().parent().prev().find('#productImagesSrc').attr("src", data.field.imagesUrl);
layer.close(indexChild);
});
});
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-getUpLoad-submit").click();
}
});
form.render();
});
//表单验证规则 //表单验证规则
form.verify({ form.verify({
@@ -1265,8 +1300,8 @@
coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) { coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
if (0 === res.code) { if (0 === res.code) {
var item = $(_that); var item = $(_that);
item.prev().find('#productImagesInput').val(res.data.fileUrl); item.parent().parent().prev().find('#productImagesInput').val(res.data.fileUrl);
item.prev().find('#productImagesSrc').attr("src", res.data.fileUrl); item.parent().parent().prev().find('#productImagesSrc').attr("src", res.data.fileUrl);
layer.msg(res.msg); layer.msg(res.msg);
layer.close(loadIndex); layer.close(loadIndex);
@@ -1278,6 +1313,32 @@
} }
}); });
}); });
//SKU原图上传
$('.upSpecImageOriginal').click(function () {
var _that = this;
admin.popup({
title: '原图上传',
area: ['800px', '300px'],
id: 'LAY-app-CoreCmsCommon-GetNoticeIds',
success: function (layero, indexChild) {
layui.view(this.id).render('common/getUpLoad', null).done(function () {
layui.form.on('submit(LAY-app-getUpLoad-submit)',
function (data) {
console.log(data);
var item = $(_that);
item.parent().parent().prev().find('#productImagesInput').val(data.field.imagesUrl);
item.parent().parent().prev().find('#productImagesSrc').attr("src", data.field.imagesUrl);
layer.close(indexChild);
});
});
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-getUpLoad-submit").click();
}
});
});
form.render(); form.render();
layer.msg("Sku列表获取成功"); layer.msg("Sku列表获取成功");
} else { } else {

View File

@@ -320,7 +320,7 @@
<input type="checkbox" id="product[{{item.spesDesc}}][isDefalut]" name="product[isDefalut][]" title="是否默认" {{item.isDefalut? 'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}" class="isdefalut" lay-filter="isdefalut"> <input type="checkbox" id="product[{{item.spesDesc}}][isDefalut]" name="product[isDefalut][]" title="是否默认" {{item.isDefalut? 'checked="true"':''}} value="{{item.isDefalut? '1':'0'}}" class="isdefalut" lay-filter="isdefalut">
</td> </td>
<td class="spec-td"> <td class="spec-td">
<div class="spec_image"> <div class="spec_image" style="display: inline-block;width: 60px;overflow: hidden;">
<div class="spec_image_item"> <div class="spec_image_item">
<!--<div class="del-img"> <!--<div class="del-img">
x x
@@ -329,7 +329,14 @@
</div> </div>
<input type="hidden" id="productImagesInput" name="product[images][]" value="{{item.images}}"> <input type="hidden" id="productImagesInput" name="product[images][]" value="{{item.images}}">
</div> </div>
<a class="layui-btn layui-btn-xs upSpecImage" href="javascript:;">上传图片</a> <div style="display: inline-block;width: 60px;overflow: hidden;">
<p>
<a class="layui-btn layui-btn-xs upSpecImage" style="margin-bottom: 10px;" href="javascript:;">裁剪上传</a>
</p>
<p>
<a class="layui-btn layui-btn-xs upSpecImageOriginal" href="javascript:;">原图上传</a>
</p>
</div>
</td> </td>
<td> <td>
<input type="text" name="product[sn][]" value="{{item.sn}}" placeholder="货号" class="layui-input layui-inline-3"> <input type="text" name="product[sn][]" value="{{item.sn}}" placeholder="货号" class="layui-input layui-inline-3">
@@ -889,8 +896,6 @@
} }
}); });
//SKU缩略图上传 //SKU缩略图上传
$('.upSpecImage').click(function () { $('.upSpecImage').click(function () {
var _that = this; var _that = this;
@@ -902,8 +907,8 @@
coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) { coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
if (0 === res.code) { if (0 === res.code) {
var item = $(_that); var item = $(_that);
item.prev().find('#productImagesInput').val(res.data.fileUrl); item.parent().parent().prev().find('#productImagesInput').val(res.data.fileUrl);
item.prev().find('#productImagesSrc').attr("src", res.data.fileUrl); item.parent().parent().prev().find('#productImagesSrc').attr("src", res.data.fileUrl);
layer.msg(res.msg); layer.msg(res.msg);
layer.close(loadIndex); layer.close(loadIndex);
@@ -916,6 +921,32 @@
}); });
form.render(); form.render();
}); });
//SKU原图上传
$('.upSpecImageOriginal').click(function () {
var _that = this;
admin.popup({
title: '原图上传',
area: ['800px', '300px'],
id: 'LAY-app-CoreCmsCommon-GetNoticeIds',
success: function (layero, indexChild) {
layui.view(this.id).render('common/getUpLoad', null).done(function () {
layui.form.on('submit(LAY-app-getUpLoad-submit)',
function (data) {
console.log(data);
var item = $(_that);
item.parent().parent().prev().find('#productImagesInput').val(data.field.imagesUrl);
item.parent().parent().prev().find('#productImagesSrc').attr("src", data.field.imagesUrl);
layer.close(indexChild);
});
});
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-getUpLoad-submit").click();
}
});
form.render();
});
//表单验证规则 //表单验证规则
form.verify({ form.verify({
@@ -1368,8 +1399,8 @@
coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) { coreHelper.Post("api/Tools/UploadFilesFByBase64", { base64: data }, function (res) {
if (0 === res.code) { if (0 === res.code) {
var item = $(_that); var item = $(_that);
item.prev().find('#productImagesInput').val(res.data.fileUrl); item.parent().parent().prev().find('#productImagesInput').val(res.data.fileUrl);
item.prev().find('#productImagesSrc').attr("src", res.data.fileUrl); item.parent().parent().prev().find('#productImagesSrc').attr("src", res.data.fileUrl);
layer.msg(res.msg); layer.msg(res.msg);
layer.close(loadIndex); layer.close(loadIndex);
@@ -1381,6 +1412,33 @@
} }
}); });
}); });
//SKU原图上传
$('.upSpecImageOriginal').click(function () {
var _that = this;
admin.popup({
title: '原图上传',
area: ['800px', '300px'],
id: 'LAY-app-CoreCmsCommon-GetNoticeIds',
success: function (layero, indexChild) {
layui.view(this.id).render('common/getUpLoad', null).done(function () {
layui.form.on('submit(LAY-app-getUpLoad-submit)',
function (data) {
console.log(data);
var item = $(_that);
item.parent().parent().prev().find('#productImagesInput').val(data.field.imagesUrl);
item.parent().parent().prev().find('#productImagesSrc').attr("src", data.field.imagesUrl);
layer.close(indexChild);
});
});
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-getUpLoad-submit").click();
}
});
});
layer.msg("Sku列表获取成功"); layer.msg("Sku列表获取成功");
} else { } else {
layer.msg(e.msg, { icon: 5, anim: 6 }); layer.msg(e.msg, { icon: 5, anim: 6 });

View File

@@ -626,6 +626,16 @@
</div> </div>
</div> </div>
<blockquote class="layui-elem-quote">
邀请一个好友注册成功赠送多少积分
</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['inviterUserIntegral']['sKey']}}</label>
<div class="layui-input-inline layui-inline-2">
<input type="text" name="inviterUserIntegral" value="{{d.data.configs['inviterUserIntegral']['sValue']}}" lay-verify="title|money" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">&nbsp;</label> <label class="layui-form-label">&nbsp;</label>
<div class="layui-input-block"> <div class="layui-input-block">