mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2025-12-06 16:03:25 +08:00
# 2022-02-28
### 1.3.8 开源社区版(同步修改专业版): 【优化】调整定时任务时间从世界时改为本地时,解决具体日期情况下导致任务不执行的情况。#I4VJU3 【修复】修复后端进行前后端分离,有个别页面未调用后端配置接口地址的问题。#I4VIZ1 【修复】修复后端文章分类未进行排序的问题。#I4V8UJ 【修复】修复商品品牌删除未过滤“伪删除的商品数据”,导致删除失败的问题。#I4V7WU 【优化】修复商品详情参数排列样式混乱问题。#I4V3K6 【修复】修复后台商品添加编辑界面,因为校验input名称重名,导致添加参数弹窗取消,导致其他同名校验被污染,导致参数维护失败的问题。#I4UWQJ ### 0.2.6 专业版: 【优化】修复商品详情、团购详情、秒杀详情、拼团详情参数排列样式混乱问题。#I4V3K6
This commit is contained in:
@@ -40,29 +40,30 @@ namespace CoreCms.Net.Task
|
||||
//这里呢就是需要触发的方法 "0/10 * * * * ? " 可以自行搜索cron表达式 代表循环的规律很简单
|
||||
//CancelOrderJob代表你要触发的类 Execute代表你要触发的方法
|
||||
|
||||
|
||||
//自动取消订单任务
|
||||
RecurringJob.AddOrUpdate<AutoCancelOrderJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Utc); // 每5分钟取消一次订单
|
||||
RecurringJob.AddOrUpdate<AutoCancelOrderJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟取消一次订单
|
||||
|
||||
//自动完成订单任务
|
||||
RecurringJob.AddOrUpdate<CompleteOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Utc); // 每小时自动完成订单
|
||||
RecurringJob.AddOrUpdate<CompleteOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Local); // 每小时自动完成订单
|
||||
|
||||
//自动评价订单任务
|
||||
RecurringJob.AddOrUpdate<EvaluateOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Utc); // 每小时自动完成订单
|
||||
RecurringJob.AddOrUpdate<EvaluateOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Local); // 每小时自动完成订单
|
||||
|
||||
//自动签收订单任务
|
||||
RecurringJob.AddOrUpdate<AutoSignOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Utc); // 每小时自动完成订单
|
||||
RecurringJob.AddOrUpdate<AutoSignOrderJob>(s => s.Execute(), "0 0 0/1 * * ? ", TimeZoneInfo.Local); // 每小时自动完成订单
|
||||
|
||||
//催付款订单
|
||||
RecurringJob.AddOrUpdate<RemindOrderPayJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Utc); // 每5分钟催付款订单
|
||||
RecurringJob.AddOrUpdate<RemindOrderPayJob>(s => s.Execute(), "0 0/5 * * * ? ", TimeZoneInfo.Local); // 每5分钟催付款订单
|
||||
|
||||
//拼团自动取消到期团(每分钟执行一次)
|
||||
RecurringJob.AddOrUpdate<AutoCanclePinTuanJob>(s => s.Execute(), "0 0/2 * * * ? ", TimeZoneInfo.Utc); // 每分钟取消一次订单
|
||||
RecurringJob.AddOrUpdate<AutoCanclePinTuanJob>(s => s.Execute(), "0 0/2 * * * ? ", TimeZoneInfo.Local); // 每分钟取消一次订单
|
||||
|
||||
//每天凌晨5点定期清理7天前操作日志
|
||||
RecurringJob.AddOrUpdate<RemoveOperationLogJob>(s => s.Execute(), "0 0 5 * * ? ", TimeZoneInfo.Utc); // 每天5点固定时间清理一次
|
||||
RecurringJob.AddOrUpdate<RemoveOperationLogJob>(s => s.Execute(), "0 0 5 * * ? ", TimeZoneInfo.Local); // 每天5点固定时间清理一次
|
||||
|
||||
//定时刷新获取微信AccessToken
|
||||
RecurringJob.AddOrUpdate<RefreshWeChatAccessTokenJob>(s => s.Execute(), "0 0/4 * * * ? ", TimeZoneInfo.Utc); // 每2分钟刷新获取微信AccessToken
|
||||
RecurringJob.AddOrUpdate<RefreshWeChatAccessTokenJob>(s => s.Execute(), "0 0/4 * * * ? ", TimeZoneInfo.Local); // 每2分钟刷新获取微信AccessToken
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -126,11 +126,9 @@
|
||||
<u-icon name="more-circle" color="#e54d42" label="商品详情" labelSize="15px" label-pos="right"></u-icon>
|
||||
</view>
|
||||
<!--参数-->
|
||||
<view class="grid col-2">
|
||||
<view class="col-item coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-bottom-10 coreshop-padding-left-10 coreshop-padding-right-10 coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-10">
|
||||
<u-parse :content="goodsInfo.intro" :selectable="true" v-if="goodsInfo.intro"></u-parse>
|
||||
|
||||
@@ -206,11 +206,9 @@
|
||||
<u-icon name="more-circle" color="#e54d42" label="商品详情" labelSize="15px" label-pos="right"></u-icon>
|
||||
</view>
|
||||
<!--参数-->
|
||||
<view class="grid col-2">
|
||||
<view class="col-item coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-bottom-10 coreshop-padding-left-10 coreshop-padding-right-10 coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-10">
|
||||
<u-parse :content="goodsInfo.intro" :selectable="true" v-if="goodsInfo.intro"></u-parse>
|
||||
|
||||
@@ -129,11 +129,9 @@
|
||||
<u-icon name="more-circle" color="#e54d42" label="商品详情" labelSize="15px" label-pos="right"></u-icon>
|
||||
</view>
|
||||
<!--参数-->
|
||||
<view class="grid col-2">
|
||||
<view class="col-item coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-bottom-10 coreshop-padding-left-10 coreshop-padding-right-10 coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-10">
|
||||
<u-parse :content="goodsInfo.intro" :selectable="true" v-if="goodsInfo.intro"></u-parse>
|
||||
|
||||
@@ -199,11 +199,9 @@
|
||||
<u-icon name="more-circle" color="#e54d42" label="商品详情" labelSize="15px" label-pos="right"></u-icon>
|
||||
</view>
|
||||
<!--参数-->
|
||||
<view class="grid col-2">
|
||||
<view class="col-item coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-bottom-10 coreshop-padding-left-10 coreshop-padding-right-10 coreshop-flex-direction-row" v-for="(item, index) in goodsParams" :key="index">
|
||||
<text class="coreshop-text-gray">{{ item.name || ''}}:</text>
|
||||
<text class="coreshop-text-black">{{ item.value || ''}}</text>
|
||||
</view>
|
||||
<view class="coreshop-padding-10">
|
||||
<u-parse :content="goodsInfo.intro" :selectable="true" v-if="goodsInfo.intro"></u-parse>
|
||||
|
||||
@@ -73,7 +73,8 @@ namespace CoreCms.Net.Web.Admin.Controllers
|
||||
var jm = new AdminUiCallBack();
|
||||
|
||||
//获取数据
|
||||
var list = await _coreCmsArticleTypeServices.QueryAsync();
|
||||
var list = await _coreCmsArticleTypeServices.QueryListByClauseAsync(p => p.id > 0, p => p.sort,
|
||||
OrderByType.Desc);
|
||||
//返回数据
|
||||
jm.data = list;
|
||||
jm.code = 0;
|
||||
|
||||
@@ -311,7 +311,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (await _goodsServices.ExistsAsync(p => p.brandId == model.id))
|
||||
if (await _goodsServices.ExistsAsync(p => p.brandId == model.id && !p.isDel))
|
||||
{
|
||||
jm.msg = "有商品关联品牌数据,禁止删除";
|
||||
return jm;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<style>
|
||||
/* 重写样式 */
|
||||
</style>
|
||||
<script type="text/html" template lay-type="Post" lay-url="Api/CoreCmsArticleType/GetIndex" lay-done="layui.data.done(d);">
|
||||
<script type="text/html" template lay-type="Post" lay-url="{{ layui.setter.apiUrl }}Api/CoreCmsArticleType/GetIndex" lay-done="layui.data.done(d);">
|
||||
|
||||
</script>
|
||||
<div class="table-body">
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
<div class="layui-form-item">
|
||||
<label for="name" class="layui-form-label">参数名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="name" id="name" lay-verType="tips" lay-verify="required|verifyname" class="layui-input" lay-reqText="请输入参数名称" placeholder="请输入参数名称" />
|
||||
<input name="name" id="name" lay-verify="required|verifyParamsname" class="layui-input" lay-reqText="请输入参数名称" placeholder="请输入参数名称" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="type" class="layui-form-label">参数类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type" id="type" lay-verType="tips" lay-verify="required|verifytype" lay-reqText="请输入参数类型" placeholder="请输入参数类型">
|
||||
<select name="type" id="type" lay-verify="required|verifytype" lay-reqText="请输入参数类型" placeholder="请输入参数类型">
|
||||
<option value="">请选择</option>
|
||||
{{# layui.each(d.params.data.goodsParamTypes, function(index, item){ }}
|
||||
<option value="{{ item.title }}">{{ item.description }}</option>
|
||||
@@ -46,7 +46,7 @@
|
||||
, coreHelper = layui.coreHelper;
|
||||
|
||||
form.verify({
|
||||
verifyname: [/^[\S]{0,10}$/, '参数名称最大只允许输入10位字符,且不能出现空格'],
|
||||
verifyParamsname: [/^[\S]{0,10}$/, '参数名称最大只允许输入10位字符,且不能出现空格'],
|
||||
verifytype: [/^[\S]{0,10}$/, '参数类型最大只允许输入10位字符,且不能出现空格'],
|
||||
});
|
||||
//重载form
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
<div class="layui-form-item">
|
||||
<label for="name" class="layui-form-label">参数名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="name" id="name" lay-verType="tips" lay-verify="required|verifyname" class="layui-input" placeholder="请输入参数名称" lay-reqText="请输入参数名称" value="{{d.params.data.model.name || '' }}" />
|
||||
<input name="name" id="name" lay-verify="required|verifyParamsname" class="layui-input" placeholder="请输入参数名称" lay-reqText="请输入参数名称" value="{{d.params.data.model.name || '' }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label for="type" class="layui-form-label">参数类型</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="type" id="type" lay-verType="tips" lay-verify="required|verifytype" lay-reqText="请输入参数类型" placeholder="请输入参数类型">
|
||||
<select name="type" id="type" lay-verify="required|verifytype" lay-reqText="请输入参数类型" placeholder="请输入参数类型">
|
||||
<option value="">请选择</option>
|
||||
{{# layui.each(d.params.data.goodsParamTypes, function(index, item){ }}
|
||||
<option value="{{ item.title }}" {{d.params.data.model.type === item.title ? 'selected="selected"' : '' }}>{{ item.description }}</option>
|
||||
@@ -49,8 +49,7 @@
|
||||
, coreHelper = layui.coreHelper;
|
||||
|
||||
form.verify({
|
||||
|
||||
verifyname: [/^[\S]{0,10}$/, '参数名称最大只允许输入50位字符,且不能出现空格'],
|
||||
verifyParamsname: [/^[\S]{0,10}$/, '参数名称最大只允许输入50位字符,且不能出现空格'],
|
||||
verifytype: [/^[\S]{0,10}$/, '参数类型最大只允许输入10位字符,且不能出现空格'],
|
||||
});
|
||||
//重载form
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<style>
|
||||
/* 重写样式 */
|
||||
</style>
|
||||
<script type="text/html" template lay-type="Post" lay-url="Api/CoreCmsUserServicesOrder/GetIndex" lay-done="layui.data.done(d);">
|
||||
<script type="text/html" template lay-type="Post" lay-url="{{ layui.setter.apiUrl }}Api/CoreCmsUserServicesOrder/GetIndex" lay-done="layui.data.done(d);">
|
||||
|
||||
</script>
|
||||
<div class="table-body">
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<style>
|
||||
/* 重写样式 */
|
||||
</style>
|
||||
<script type="text/html" template lay-type="Post" lay-url="Api/CoreCmsOrderDistributionModel/GetIndex" lay-done="layui.data.done(d);">
|
||||
<script type="text/html" template lay-type="Post" lay-url="{{ layui.setter.apiUrl }}Api/CoreCmsOrderDistributionModel/GetIndex" lay-done="layui.data.done(d);">
|
||||
|
||||
</script>
|
||||
<div class="table-body">
|
||||
|
||||
Reference in New Issue
Block a user