【新增】增加表【CoreCmsAppUpdateLog】版本更新表,用于发布版本更新。

【新增】增加安卓app版本在线更新功能。
【优化】优化app端头部导航按钮错位的问题。
This commit is contained in:
大灰灰
2022-07-20 01:27:47 +08:00
parent b5c5e97583
commit 30bd8ef291
26 changed files with 2268 additions and 62 deletions

View File

@@ -0,0 +1,87 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:31:04
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.IRepository
{
/// <summary>
/// 版本更新表 工厂接口
/// </summary>
public interface ICoreCmsAppUpdateLogRepository : IBaseRepository<CoreCmsAppUpdateLog>
{
#region ===========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> InsertAsync(CoreCmsAppUpdateLog entity);
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> UpdateAsync(CoreCmsAppUpdateLog entity);
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAppUpdateLog> entity);
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
new Task<AdminUiCallBack> DeleteByIdAsync(object id);
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
new Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
#endregion
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
new Task<IPageList<CoreCmsAppUpdateLog>> QueryPageAsync(
Expression<Func<CoreCmsAppUpdateLog, bool>> predicate,
Expression<Func<CoreCmsAppUpdateLog, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
}
}

View File

@@ -0,0 +1,84 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:31:04
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.IServices
{
/// <summary>
/// 版本更新表 服务工厂接口
/// </summary>
public interface ICoreCmsAppUpdateLogServices : IBaseServices<CoreCmsAppUpdateLog>
{
#region ===========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> InsertAsync(CoreCmsAppUpdateLog entity);
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> UpdateAsync(CoreCmsAppUpdateLog entity);
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
new Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAppUpdateLog> entity);
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
new Task<AdminUiCallBack> DeleteByIdAsync(object id);
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
new Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids);
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
new Task<IPageList<CoreCmsAppUpdateLog>> QueryPageAsync(
Expression<Func<CoreCmsAppUpdateLog, bool>> predicate,
Expression<Func<CoreCmsAppUpdateLog, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false);
#endregion
}
}

View File

@@ -0,0 +1,99 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:55:06
* Description: 暂无
***********************************************************************/
using System;
using System.ComponentModel.DataAnnotations;
using SqlSugar;
namespace CoreCms.Net.Model.Entities;
/// <summary>
/// 版本更新表
/// </summary>
public class CoreCmsAppUpdateLog
{
/// <summary>
/// 构造函数
/// </summary>
public CoreCmsAppUpdateLog()
{
}
/// <summary>
/// 序列
/// </summary>
[Display(Name = "序列")]
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
[Required(ErrorMessage = "请输入{0}")]
public int id { get; set; }
/// <summary>
/// 版本号
/// </summary>
[Display(Name = "版本号")]
[Required(ErrorMessage = "请输入{0}")]
public int version { get; set; }
/// <summary>
/// 更新内容
/// </summary>
[Display(Name = "更新内容")]
[Required(ErrorMessage = "请输入{0}")]
[StringLength(255, ErrorMessage = "{0}不能超过{1}字")]
public string note { get; set; }
/// <summary>
/// 安卓地址
/// </summary>
[Display(Name = "安卓地址")]
[StringLength(255, ErrorMessage = "{0}不能超过{1}字")]
public string android { get; set; }
/// <summary>
/// IOS地址
/// </summary>
[Display(Name = "IOS地址")]
[StringLength(255, ErrorMessage = "{0}不能超过{1}字")]
public string ios { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Display(Name = "创建时间")]
[Required(ErrorMessage = "请输入{0}")]
public DateTime addTime { get; set; }
/// <summary>
/// 开启更新
/// </summary>
[Display(Name = "开启更新")]
[Required(ErrorMessage = "请输入{0}")]
public bool isUpdate { get; set; }
}

View File

@@ -0,0 +1,195 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:31:04
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Caching.Manual;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Repository
{
/// <summary>
/// 版本更新表 接口实现
/// </summary>
public class CoreCmsAppUpdateLogRepository : BaseRepository<CoreCmsAppUpdateLog>, ICoreCmsAppUpdateLogRepository
{
private readonly IUnitOfWork _unitOfWork;
public CoreCmsAppUpdateLogRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsAppUpdateLog entity)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync() > 0;
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure;
return jm;
}
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsAppUpdateLog entity)
{
var jm = new AdminUiCallBack();
var oldModel = await DbClient.Queryable<CoreCmsAppUpdateLog>().In(entity.id).SingleAsync();
if (oldModel == null)
{
jm.msg = "不存在此信息";
return jm;
}
//事物处理过程开始
oldModel.id = entity.id;
oldModel.version = entity.version;
oldModel.note = entity.note;
oldModel.android = entity.android;
oldModel.ios = entity.ios;
//oldModel.addTime = entity.addTime;
oldModel.isUpdate = entity.isUpdate;
//事物处理过程结束
var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
return jm;
}
/// <summary>
/// 重写异步更新方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAppUpdateLog> entity)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Updateable(entity).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
return jm;
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Deleteable<CoreCmsAppUpdateLog>(id).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
return jm;
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
var jm = new AdminUiCallBack();
var bl = await DbClient.Deleteable<CoreCmsAppUpdateLog>().In(ids).ExecuteCommandHasChangeAsync();
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.DeleteSuccess : GlobalConstVars.DeleteFailure;
return jm;
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsAppUpdateLog>> QueryPageAsync(Expression<Func<CoreCmsAppUpdateLog, bool>> predicate,
Expression<Func<CoreCmsAppUpdateLog, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
RefAsync<int> totalCount = 0;
List<CoreCmsAppUpdateLog> page;
if (blUseNoLock)
{
page = await DbClient.Queryable<CoreCmsAppUpdateLog>()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsAppUpdateLog
{
id = p.id,
version = p.version,
note = p.note,
android = p.android,
ios = p.ios,
addTime = p.addTime,
isUpdate = p.isUpdate,
}).With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable<CoreCmsAppUpdateLog>()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsAppUpdateLog
{
id = p.id,
version = p.version,
note = p.note,
android = p.android,
ios = p.ios,
addTime = p.addTime,
isUpdate = p.isUpdate,
}).ToPageListAsync(pageIndex, pageSize, totalCount);
}
var list = new PageList<CoreCmsAppUpdateLog>(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
}
}

View File

@@ -0,0 +1,117 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:31:04
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using SqlSugar;
namespace CoreCms.Net.Services
{
/// <summary>
/// 版本更新表 接口实现
/// </summary>
public class CoreCmsAppUpdateLogServices : BaseServices<CoreCmsAppUpdateLog>, ICoreCmsAppUpdateLogServices
{
private readonly ICoreCmsAppUpdateLogRepository _dal;
private readonly IUnitOfWork _unitOfWork;
public CoreCmsAppUpdateLogServices(IUnitOfWork unitOfWork, ICoreCmsAppUpdateLogRepository dal)
{
this._dal = dal;
base.BaseDal = dal;
_unitOfWork = unitOfWork;
}
#region ==========================================================
/// <summary>
/// 重写异步插入方法
/// </summary>
/// <param name="entity">实体数据</param>
/// <returns></returns>
public new async Task<AdminUiCallBack> InsertAsync(CoreCmsAppUpdateLog entity)
{
return await _dal.InsertAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsAppUpdateLog entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写异步更新方法方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> UpdateAsync(List<CoreCmsAppUpdateLog> entity)
{
return await _dal.UpdateAsync(entity);
}
/// <summary>
/// 重写删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdAsync(object id)
{
return await _dal.DeleteByIdAsync(id);
}
/// <summary>
/// 重写删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public new async Task<AdminUiCallBack> DeleteByIdsAsync(int[] ids)
{
return await _dal.DeleteByIdsAsync(ids);
}
#endregion
#region
/// <summary>
/// 重写根据条件查询分页数据
/// </summary>
/// <param name="predicate">判断集合</param>
/// <param name="orderByType">排序方式</param>
/// <param name="pageIndex">当前页面索引</param>
/// <param name="pageSize">分布大小</param>
/// <param name="orderByExpression"></param>
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
/// <returns></returns>
public new async Task<IPageList<CoreCmsAppUpdateLog>> QueryPageAsync(Expression<Func<CoreCmsAppUpdateLog, bool>> predicate,
Expression<Func<CoreCmsAppUpdateLog, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
int pageSize = 20, bool blUseNoLock = false)
{
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
}
#endregion
}
}

View File

@@ -2,7 +2,7 @@
<script>
import Vue from 'vue'
export default {
//使用方法
//使用方法
//getApp().globalData.showLoginTip = false
//console.log(getApp().globalData.text)
@@ -41,7 +41,7 @@
onShow: function (obj) {
// #ifdef MP-WEIXIN
this.$store.commit('scene', obj.scene)
//console.log(obj);
console.log(obj);
// #endif
//console.log('App Show')
},
@@ -116,37 +116,37 @@
})
},
// #endif
// #ifdef APP-PLUS || APP-PLUS-NVUE
// app更新检测
checkVersion() {
// 获取应用版本号
let _this = this;
let version = plus.runtime.version;
console.log('版本号:' + version);
//检测当前平台,如果是安卓则启动安卓更新
uni.getSystemInfo({
success: res => {
this.updateHandler(res.platform, version);
console.log('当前平台:' + res.platform);
if (res.platform == 'android') {
_this.updateHandler(version);
}
}
})
},
// 更新操作
updateHandler(platform, version) {
let data = {
platform: platform,
version: version
}
updateHandler(version) {
let _this = this;
this.$u.api.getAppVersion(data).then(res => {
if (res.status && res.data[0].version) {
const info = res.data[0];
if (info.version !== '' && info.version > version) {
this.$u.api.getAppVersion().then(res => {
console.log(res);
if (res.status && res.data) {
if (res.data.version !== '' && res.data.version > version) {
uni.showModal({
//提醒用户更新
title: '更新提示',
content: info.note,
content: res.data.note,
success: res => {
if (res.confirm) {
plus.runtime.openURL(info.download_url)
plus.runtime.openURL(res.data.android)
}
}
})
@@ -163,16 +163,14 @@
@import "@/uni_modules/uview-ui/index.scss";
/*公共css */
@import '@/static/style/coreCommon.scss';
@import '@/static/style/corePage.scss';
// 非nvue的样式
/* #ifndef APP-NVUE */
// vue App的样式
/* #ifdef APP-PLUS */
@import "@/static/style/style.vue.scss";
/* #endif */
// nvue的特有样式
/* #ifdef APP-NVUE */
// #ifdef APP-PLUS-NVUE
@import "@/static/style/style.nvue.scss";
/* #endif */

View File

@@ -336,7 +336,7 @@ const install = (Vue, vm) => {
//================================================================////微信图文消息
let messageDetail = (params, config = {}) => http.post('/Api/Articles/GetWeChatMessage', params, { custom: { methodName: 'articles.getweixinmessage', needToken: false } });
//================================================================////获取APP版本
let getAppVersion = (params, config = {}) => http.post('/Api/App/CheckVersion', params, { custom: { methodName: 'app-api-checkVersion', needToken: false } });
let getAppVersion = (params, config = {}) => http.post('/Api/Common/GetAppVersions', params, { custom: { methodName: 'Common.checkVersion', needToken: false } });
//============================================================//公众号授权获取openid第三方登录
let getOpenId = (params, config = {}) => http.post('/Api/User/OfficialLogin', params, { custom: { methodName: 'user.officiallogin', needToken: false } });

View File

@@ -106,31 +106,25 @@
let data = {
payment_code: code,
payment_type: _this.type
}
data['ids'] = (this.type == 1 || this.type == 5 || this.type == 6) ? this.orderId : this.uid
if ((this.type == 5 || this.type == 6) && this.recharge) {
data['params'] = {
payment_type: _this.type,
params: {
trade_type: 'APP',
}
}
data['ids'] = (this.type == this.$globalConstVars.paymentType.common || this.type == this.$globalConstVars.paymentType.pinTuan || this.type == this.$globalConstVars.paymentType.group || this.type == this.$globalConstVars.paymentType.skill || this.type == this.$globalConstVars.paymentType.bargain || this.type == this.$globalConstVars.paymentType.giveaway || this.type == this.$globalConstVars.paymentType.solitaire || this.type == this.$globalConstVars.paymentType.transactionComponent || this.type == this.$globalConstVars.paymentType.serviceOrder) ? this.orderId : this.uid
// 判断订单支付类型
if (this.type == this.$globalConstVars.paymentType.recharge && this.recharge) {
data.params.money = this.recharge;
} else if ((this.type == this.$globalConstVars.paymentType.formPay || this.type == this.$globalConstVars.paymentType.formOrder) && this.recharge) {
data.ids = this.orderId;
}
switch (code) {
case 'alipay':
/**
* 支付宝支付需要模拟GET提交数据
*/
if (_this.type == 1 && _this.orderId) {
data['params'] = {
trade_type: 'APP'
}
} else if (_this.type == 2 && _this.recharge) {
data['params'] = {
trade_type: 'APP',
money: _this.recharge
}
}
_this.$u.api.pay(data).then(res => {
if (res.status) {
uni.requestPayment({
@@ -151,18 +145,7 @@
})
break
case 'wechatpay':
// 微信 H5支付
if (_this.type == 1 && _this.orderId) {
data['params'] = {
trade_type: 'APP'
}
} else if (_this.type == 2 && _this.recharge) {
data['params'] = {
trade_type: 'APP',
money: _this.recharge
}
}
// 微信app支付
_this.$u.api.pay(data).then(res => {
if (res.status) {

View File

@@ -13,7 +13,7 @@
<view class="coreshop-text-gray coreshop-font-sm flex coreshop-text-left">
<view class="u-line-1 coreshop-text-red" v-if="item.code == 'balancepay'">
当前余额{{userInfo.balance}}
</view>
</view>
<view class="u-line-1" v-else>
{{item.memo}}
</view>
@@ -129,19 +129,18 @@
let data = {
payment_code: code,
payment_type: this.type,
params: {}
params: {
trade_type: 'JSAPI',
}
}
data['ids'] = (this.type == this.$globalConstVars.paymentType.common || this.type == this.$globalConstVars.paymentType.pinTuan || this.type == this.$globalConstVars.paymentType.group || this.type == this.$globalConstVars.paymentType.skill || this.type == this.$globalConstVars.paymentType.bargain || this.type == this.$globalConstVars.paymentType.giveaway || this.type == this.$globalConstVars.paymentType.solitaire || this.type == this.$globalConstVars.paymentType.transactionComponent || this.type == this.$globalConstVars.paymentType.serviceOrder) ? this.orderId : this.uid
// 判断订单支付类型
if (this.type == this.$globalConstVars.paymentType.recharge && this.recharge) {
data['params'] = {
money: this.recharge
}
data.params.money = this.recharge;
} else if ((this.type == this.$globalConstVars.paymentType.formPay || this.type == this.$globalConstVars.paymentType.formOrder) && this.recharge) {
data['ids'] = this.orderId;
data['params'] = {
}
data.ids = this.orderId;
}
let _this = this
switch (code) {

View File

@@ -62,3 +62,646 @@ uni-toast { z-index: 10090; }
.u-reset-button::after { border: none; }
/* end--去除button的所有默认样式--end */
//占位使用,结合顶部通用标题
.coreshop-seat-height { width: 100%; /* #ifndef MP */ height: calc(var(--status-bar-height) + 50px); /* #endif */ /* #ifdef MP */ height: calc(var(--status-bar-height) + 70px); /* #endif */ }
//占位线
.coreshop-solid-line { width: 100%; height: 1px; background: #f9f9f9; }
.coreshop-coreshop-solid-top::after { border-top: 1px solid rgba(0, 0, 0, 0.1); }
// 格式化页面
.coreshop-pageBox { height: 100%; width: 100%; display: flex; flex-direction: column; justify-content: space-between; overflow-x: hidden; background: #f6f6f6; }
.coreshop-scroll-box { flex: 1; height: 100%; position: relative; }
.coreshop-content-box { flex: 1; overflow-y: auto; }
/*头像大小自定义*/
.coreshop-head-icon { width: 20px; height: 20px; display: inline-block; margin-right: 4px; }
//底部按钮框样式
.coreshop-bottomBox { background-color: #fff; position: fixed; bottom: 0; height: 45px; width: 100%; display: flex; z-index: 66; box-shadow: 0 0 10px #ccc;
.coreshop-btn { flex: 1; }
}
.coreshop-category-bottomBox { background-color: #fff; bottom: 0; /*height: 45px;*/ width: 100%; display: flex; z-index: 66; box-shadow: 0 0 10px #ccc;
view { width: calc(50% - 10px); margin: 5px; }
}
//底部多按钮区
.coreshop-add-btn-view-box { position: fixed; z-index: 10000; bottom: 90px; right: 14px;
.cu-btn { margin: auto; width: 40px; height: 40px; font-weight: 800; border-radius: 50%; font-size: 18px; border: 5px solid #fff; box-shadow: 0 0 7px 4px #d0d0d0; }
}
//底部浮动区域,用于放置按钮内容
.coreshop-footer-fixed { position: fixed; z-index: 100; width: 100%; bottom: 0; left: 0; padding: 5px 20px; min-height: 60px; display: flex; align-items: center; flex-direction: row; justify-content: center; }
.coreshop-foot-padding-bottom { padding-bottom: calc(env(safe-area-inset-bottom) / 2); }
.coreshop-tip-view { position: relative; padding: 5px 11px;
.coreshop-content { position: relative; padding-right: 28px; }
.coreshop-icon { position: absolute; font-size: 16px; right: 14px; color: #8799a3; top: 5px; }
}
/*底部*/
.wecanui-footer-fixed { position: fixed; z-index: 10000; width: 100%; bottom: 0; left: 0; }
.wecanui-footer-fixed.foot-pb { padding-bottom: calc(env(safe-area-inset-bottom) / 2); }
.wecanui-footer-tabbar-hight-view { position: relative; width: 100%; height: calc((env(safe-area-inset-bottom) / 2) + 68px); }
.cu-form-group picker .picker { text-align: left; }
/*浮动按钮*/
.floatingButton { width: 40px; height: 40px; background-color: #fff; border-radius: 50%; position: fixed; right: 20px; bottom: 50px; display: flex; justify-content: center; align-items: center; box-shadow: 0 0 5px #ccc; padding: 0; z-index: 996; }
.floatingButton .icon { width: 30px; height: 30px; }
//顶部搜索框导航条设置
.coreshop-bar-search-title-box {
.cu-bar .action > text[class*="cuIcon-"] { font-size: 18px; }
}
//滚动商品图标颜色
.coreshop-goods-swiper-view {
swiper.screen-swiper .uni-swiper-dot { background: #f0f0f0; }
swiper.screen-swiper.square-dot .uni-swiper-dot { background-color: #aaaaaa; }
}
/*分享浮层*/
.coreshop-share-Box { width: 100%; background: #FFFFFF; }
.coreshop-share-pop { width: 100%; display: flex; }
.coreshop-share-item { flex: 1; text-align: center; font-size: 13px; color: #333; padding: 10px 0;
image { width: 40px; height: 40px; margin: 10px; }
.coreshop-btn { line-height: 1; display: block; font-size: 13px; background-color: #fff; }
}
.coreshop-share-bottomBox { background-color: #fff; height: 45px; width: 100%; display: flex; box-shadow: 0 0 10px #ccc;
.coreshop-btn { flex: 1; }
}
//顶部通用标题
.coreshop-bar-view-box { position: fixed; top: 0; width: 100%; z-index: 10000; background: #FAFAFA; /* #ifndef MP */ height: calc(var(--status-bar-height) + 50px); /* #endif */ /* #ifdef MP */ height: calc(var(--status-bar-height) + 65px); /* #endif */ padding: var(--status-bar-height) 14px 0 14px; align-items: center;
.coreshop-bar-box { position: relative; width: 100%; align-items: center; line-height: 50px;
.close { position: absolute; right: 14px; font-size: 20px; bottom: 5px; }
}
.coreshop-small-routine-title { padding: 10px 0; }
}
/*通用列表*/
.coreshop-cell-group { background-color: #fff;
.coreshop-cell-item { padding: 10px 13px 10px 10px; border-bottom: 1px solid #f3f3f3; position: relative; background-color: #fff; color: #333; display: flex; min-height: 45px; align-items: center; justify-content: space-between; flex-direction: row;
.coreshop-cell-item-hd { display: flex; align-items: center; font-size: 14px; position: relative;
.coreshop-cell-hd-title { display: inline-block; position: relative; /* #ifdef MP-ALIPAY */ top: 2px; /* #endif */ }
.coreshop-cell-bd-input { display: inline-block; float: left; font-size: 13px; }
}
.coreshop-cell-item-bd { display: flex; min-height: 15px; overflow: hidden; align-items: center; padding-right: 15px;
.coreshop-cell-bd-view { position: relative; display: flex;
.coreshop-cell-bd-text { position: relative; font-size: 12px; }
}
}
.coreshop-cell-item-ft { display: flex; align-items: center;
.coreshop-cell-ft-view { position: relative; overflow: hidden; color: #666; font-size: 12px; text-align: right; }
.coreshop-cell-ft-text { font-size: 14px; float: right; position: relative; line-height: 25px; }
}
}
.coreshop-cell-item:last-child { border: none; }
.coreshop-cell-textarea { }
.right-img {
.coreshop-cell-item-ft { right: 4px; height: 25px; position: absolute; }
}
}
/*二列商品列表展示*/
.coreshop-goods-group { border-radius: 8px; color: #333333 !important; margin: 0 5px;
.good_box { border-radius: 8px; margin: 3px; background-color: #ffffff; padding: 5px; position: relative; width: calc(100% - 6px);
.good_title { font-size: 13px; margin-top: 5px; color: $u-main-color; }
.good_title-xl { font-size: 14px; margin-top: 5px; color: $u-main-color; }
.good_image { width: 100%; border-radius: 4px; }
.good-tag-hot { display: flex; margin-top: 5px; position: absolute; top: 7.5px; left: 7.5px; background-color: $u-type-error; color: #ffffff; display: flex; align-items: center; padding: 2px 7px; border-radius: 25px; font-size: 10px; line-height: 1; }
.good-tag-recommend { display: flex; margin-top: 5px; position: absolute; top: 7.5px; right: 7.5px; background-color: $u-type-primary; color: #ffffff; margin-left: 10px; border-radius: 25px; line-height: 1; padding: 2px 7px; display: flex; align-items: center; border-radius: 25px; font-size: 10px; }
.good-tag-recommend2 { display: flex; margin-top: 5px; position: absolute; bottom: 7.5px; left: 7.5px; background-color: $u-type-primary; color: #ffffff; border-radius: 25px; line-height: 1; padding: 2px 7px; display: flex; align-items: center; border-radius: 25px; font-size: 10px; }
.good-price { font-size: 15px; color: $u-type-error; margin-top: 5px; }
.good-des { font-size: 10px; color: $u-tips-color; margin-top: 5px; }
.grid-text { font-size: 14px; margin-top: 2px; color: $u-type-info; }
}
}
/*优惠券列表*/
.coreshop-coupon {
.coreshop-coupon-card-view { position: relative;
.card-price-view { position: relative; background: #FFF5F5; border-radius: 7px 7px 0 0; padding: 9px;
.price-left-view { position: absolute; height: 63px; width: 78px; text-align: center; line-height: 63px;
.price { font-size: 23px; font-weight: 400; }
.icon { width: 61px; height: 48px; margin-top: 50%; transform: translateY(-50%); overflow: initial; }
}
.name-content-view { position: relative; padding-left: 82px; padding-right: 53px; line-height: 1.8; color: #999898; }
.name-content-view::before { content: ''; position: absolute; top: -9px; bottom: -9px; margin-left: -9px; border-left: 1px dashed #fdbabc; }
.btn-right-view { position: absolute; right: 10px; top: 15px;
.u-size-medium { padding: 0; }
}
}
.card-num-view { position: relative; background: #FFECED; border-radius: 0 0 7.5px 7.5px; border-top: 1px dashed #dedbdb; padding: 5px 5px; color: #999898;
.btnUnfold { position: absolute; right: 14px; top: 7.5px; }
}
/* .card-num-view::before { content: ''; position: absolute; width: 18px; height: 18px; background: #ffffff; border-radius: 50%; top: -9px; left: -9px; }
.card-num-view::after { content: ''; position: absolute; width: 18px; height: 18px; background: #ffffff; border-radius: 50%; top: -9px; right: -9px; }*/ }
.coreshop-lower-shelf {
.card-price-view { opacity: 0.5; }
.card-num-view { opacity: 0.5; }
.img-lower-box { position: absolute; height: 50px; width: 50px; background-color: rgba(0, 0, 0, 0.6); border-radius: 90px; text-align: center; line-height: 50px; font-size: 12px; color: #fff; top: 13px; left: 17.5px; -webkit-transition: left .15s; transition: left .15s; }
}
}
/*订单列表*/
.orderWrap { display: flex; flex-direction: column; height: calc(100vh - var(--window-top)); width: 100%; }
.orderList { background-color: #ffffff; margin: 10px; border-radius: 10px; box-sizing: border-box; padding: 10px; font-size: 14px;
.item { display: flex; margin: 10px 0 0;
.left { margin-right: 10px; }
.content {
.title { font-size: 14px; line-height: 25px; }
.type { margin: 5px 0; font-size: 12px; color: $core-tips-color; }
.delivery-time { color: #e5d001; font-size: 12px; }
}
.right { margin-left: 5px; padding-top: 10px; text-align: right;
.decimal { font-size: 12px; margin-top: 2px; }
.number { color: $core-tips-color; font-size: 12px; }
}
}
.total { margin-top: 10px; text-align: right; font-size: 12px;
.total-price { font-size: 16px; color: red; }
}
.bottom { display: flex; margin-top: 10px; padding: 0 5px; justify-content: space-between; align-items: center;
.coreshop-btn { line-height: 26px; width: 90px; border-radius: 13px; border: 1px solid $core-border-color; font-size: 13px; text-align: center; color: $core-type-info-dark; margin-left: 10px; }
.evaluate { color: $core-type-warning-dark; border-color: $core-type-warning-dark; }
.logistics { border-color: #e4e7ed; color: #82848a; }
.exchange { color: #8dc63f; border-color: #8dc63f; }
}
}
/*订单详情*/
.coreshop-solid-top::after { border-top: 1px solid rgba(0, 0, 0, 0.1); }
.coreshop-order-priceBox { position: relative; }
.coreshop-order-nums { position: absolute; top: 0; right: 0; }
/*步进器*/
.coreshop-status-img-view { position: relative;
.are-img-view { position: relative; margin-bottom: 10px;
.are-img { width: 165px; }
}
}
/*拼团区域*/
.user-head-img-c { position: relative; width: 40px; height: 40px; border-radius: 50%; margin-right: 10px; box-sizing: border-box; display: inline-block; float: left; border: 1px solid #f3f3f3; margin-bottom: 10px; margin-top: 10px; }
.user-head-img-tip { position: absolute; top: -3px; left: -5px; display: inline-block; background-color: #FF7159; color: #fff; font-size: 11px; z-index: 99; padding: 0 5px; border-radius: 5px; transform: scale(.8); }
.group-swiper .coreshop-cell-item .user-head-img { width: 100%; height: 100%; border-radius: 50%; }
.group-swiper .coreshop-cell-item .user-head-img-c:first-child { border: 1px solid #FF7159; }
.uhihn { width: 40px; height: 40px; border-radius: 50%; margin-right: 10px; display: inline-block; border: 1px dashed #e1e1e1; text-align: center; line-height: 40px; color: #d1d1d1; font-size: 20px; box-sizing: border-box; }
/*订单卡片*/
.coreshop-card-box { padding: 14px 14px 0; }
.coreshop-card-view { position: relative; border-radius: 5px; padding: 10px; box-shadow: 0 0 7.5px #f1f1f1; }
.coreshop-price-view { position: relative;
.title-view { position: relative; margin-bottom: 10px;
.title { position: relative; padding-right: 90px; }
.coreshop-text-right { position: absolute; top: 2px; right: 0; }
}
.title-right-view { position: relative; margin-top: 14px; text-align: right; }
.title-left-view { position: relative; margin-top: 14px; text-align: left; }
.solid-line { margin: 14px 0; }
}
/*卡片-商品信息*/
.coreshop-shop-view { position: relative;
.shop-info-view { position: relative; margin-bottom: 14px; line-height: 24px; height: 24px;
.coreshop-avatar { position: absolute; }
.title-view { position: relative; padding-left: 32px; }
}
.goods-list-view { position: relative; margin: 10 0;
.coreshop-avatar { position: absolute; height: 77.5px; width: 77.5px; }
.goods-info-view { position: relative; padding-left: 86.5px; min-height: 77.5px;
.name { position: relative; height: 20px; width: 100%; }
.introduce { position: relative; height: 16px; width: 100%; }
.tag-view { position: relative; margin-bottom: 5px; margin-top: 3px; width: 100%;
.cu-tag { position: relative; top: -1px; }
}
.coreshop-text-price { position: relative; height: 18px; width: 100%; }
}
}
.coreshop-foot-view { position: relative; background: #FFFCFC; margin: 0 -10px -10px -10px; border-radius: 0 0 5px 5px; padding: 10px;
.left-view { position: relative; padding-right: 90px;
.af5-img { position: relative; margin-right: 5px; width: 18px; top: 2px; }
}
.coreshop-text-right { position: absolute; right: 10px; top: 10px; }
}
}
/*卡片-订单内容区域*/
.coreshop-order-view { position: relative;
.solid-line { margin: 14px 0; }
.title-view { position: relative; margin-bottom: 10px;
&:last-child { margin-bottom: 6.5px; }
.title { position: absolute; top: 2px; left: 0; }
.coreshop-text-right { position: relative; padding-left: 90px;
.cu-btn { padding: 0 5px; height: 15px; top: -2px; }
}
}
}
/*卡片-物流信息*/
.coreshop-address-view { position: relative;
.solid-line { margin: 10px 0; }
.coreshop-list.menu-avatar > .coreshop-list-item { height: 55px;
&: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: 5px; top: 13px; }
.content { left: 56px; width: calc(100% - 47.5px); }
}
}
/*推荐商品列表*/
.coreshop-recommend-goods-list-view { position: relative;
.coreshop-flex-wrap { padding: 5px; }
.list-item { text-align: center; margin-bottom: 10px;
.coreshop-avatar { width: 124px; height: 124px; }
.goods-info-view { position: relative; padding: 8px; text-align: left;
.coreshop-text-price { margin: 5px 0; }
.foot-box { position: relative;
.cu-tag { position: absolute; right: 0; top: 0; }
}
}
}
}
/*团队列表样式*/
.coreshop-team-box { margin-top: 10px;
.coreshop-team-list {
.coreshop-team-children { padding-left: 15px; padding-right: 15px; height: 66px; border-bottom: 0.5px solid #eee; background: #fff;
.head-img { width: 30px; height: 30px; border-radius: 50%; margin-right: 20px; }
.head-info { width: calc( 100% - 50px);
.head-time { font-size: 12px; font-weight: 400; color: #999999; }
.child-num { font-size: 12px; font-weight: 400; color: #999999; }
.name-box { margin-bottom: 6px;
.name-text { font-size: 12px; font-weight: 500; color: #666; }
.tag-box { background: rgba(0, 0, 0, 0.2); border-radius: 10px; line-height: 15px; padding-right: 5px; margin-left: 5px;
.tag-img { width: 17px; height: 17px; margin-right: 3px; border-radius: 50%; }
.tag-title { font-size: 9px; font-family: PingFang SC; font-weight: 500; color: white; line-height: 10px; }
}
}
}
}
}
}
/* 头像*/
.coreshop-avatar { font-variant: small-caps; margin: 0; padding: 0; display: inline-flex; text-align: center; justify-content: center; align-items: center; background-color: #ccc; color: #ffffff; white-space: nowrap; position: relative; width: 32px; height: 32px; background-size: cover; background-position: center; vertical-align: middle; font-size: 1.5em;
&.sm { width: 24px; height: 24px; font-size: 1em; }
&.lg { width: 48px; height: 48px; font-size: 2em; }
&.xl { width: 64px; height: 64px; font-size: 2.5em; }
.avatar-text { font-size: 0.4em; }
}
.coreshop-avatar-group { direction: rtl; unicode-bidi: bidi-override; padding: 0 5px 0 20px; display: inline-block;
.coreshop-avatar { margin-left: -15px; border: 2px solid #f1f1f1; vertical-align: middle;
&.sm { margin-left: -10px; border: 0.5px solid #f1f1f1; }
}
}
/*通用列表样式*/
.coreshop-list {
& + .coreshop-list { margin-top: 15px; }
& > .coreshop-list-item { transition: all .6s ease-in-out 0s; transform: translateX(0px);
&.move-cur { transform: translateX(-130px); }
.move { position: absolute; right: 0; display: flex; width: 130px; height: 100%; transform: translateX(100%);
view { display: flex; flex: 1; justify-content: center; align-items: center; }
}
}
&.menu-avatar { overflow: hidden;
& > .coreshop-list-item { position: relative; display: flex; padding-right: 5px; height: 70px; background-color: #ffffff; justify-content: flex-end; align-items: center;
& > .coreshop-avatar { position: absolute; left: 15px; }
.flex {
.text-cut { max-width: 255px; }
}
.content { position: absolute; left: 73px; width: calc(100% - 48px - 30px - 20px); line-height: 1.6em;
&.flex-sub { width: calc(100% - 48px - 30px - 10px); }
& > view {
&:first-child { font-size: 15px; display: flex; align-items: center; }
}
.coreshop-tag {
&.sm { display: inline-block; margin-left: 5px; height: 14px; font-size: 8px; line-height: 16px; }
}
}
.action { width: 50px; text-align: center;
view {
& + view { margin-top: 5px; }
}
}
}
&.comment {
& > .coreshop-list-item { padding: 15px 15px 15px 60px; height: auto;
.content { position: relative; left: 0; width: auto; flex: 1; }
}
.coreshop-avatar { align-self: flex-start; }
}
}
&.menu { display: block; overflow: hidden;
& > .coreshop-list-item { position: relative; display: flex; padding: 0 15px; min-height: 50px; background-color: #ffffff; justify-content: space-between; align-items: center;
&:last-child {
&:after { border: none; }
}
&.grayscale { background-color: #f5f5f5; }
&.cur { background-color: #fcf7e9; }
&.arrow { padding-right: 45px;
&:before { position: absolute; top: 0; right: 15px; bottom: 0; display: block; margin: auto; width: 10px; height: 10px; color: #8799a3; content: "\e605"; text-align: center; font-size: 17px; font-family: "uicon-iconfont"; line-height: 10px; }
}
button {
&.content { padding: 0; background-color: transparent; justify-content: flex-start;
&:after { display: none; }
}
}
.coreshop-avatar-group {
.coreshop-avatar { border-color: #ffffff; }
}
.content { font-size: 15px; line-height: 1.6em; flex: 1;
& > view {
&:first-child { display: flex; align-items: center; }
}
& > text[class*=cuIcon] { display: inline-block; margin-right: 5px; width: 1.6em; text-align: center; }
& > image { display: inline-block; margin-right: 5px; width: 1.6em; height: 1.6em; vertical-align: middle; }
.coreshop-tag {
&.sm { display: inline-block; margin-left: 5px; height: 14px; font-size: 8px; line-height: 16px; }
}
}
.action {
.coreshop-tag {
&:empty { right: 5px; }
}
}
}
&.sm-border {
& > .coreshop-list-item {
&:after { left: 15px; width: calc(200% - 60px); }
}
}
}
&.grid { background-color: #ffffff; text-align: center;
& > .coreshop-list-item { position: relative; display: flex; padding: 10px 0 15px; transition-duration: 0s; flex-direction: column;
&:after { position: absolute; top: 0; left: 0; box-sizing: border-box; width: 200%; height: 200%; border-right: 1px solid rgba(0, 0, 0, .1); border-bottom: 1px solid rgba(0, 0, 0, .1); border-radius: inherit; content: " "; transform: scale(.5); transform-origin: 0 0; pointer-events: none; }
text { display: block; margin-top: 5px; color: #888; font-size: 13px; line-height: 20px; }
[class*=cuIcon] { position: relative; display: block; margin-top: 10px; width: 100%; font-size: 24px; }
.coreshop-tag { right: auto; left: 50%; margin-left: 10px; }
}
&.no-border { padding: 10px 5px;
& > .coreshop-list-item { padding-top: 5px; padding-bottom: 10px;
&:after { border: none; }
}
}
}
&.card-menu { overflow: hidden; margin-right: 15px; margin-left: 15px; border-radius: 10px; }
}
.coreshop-list.menu-avatar > .coreshop-list-item:after,
.coreshop-list.menu > .coreshop-list-item:after { position: absolute; top: 0; left: 0; box-sizing: border-box; width: 200%; height: 200%; border-bottom: 0.5px solid #ddd; border-radius: inherit; content: " "; transform: scale(.5); transform-origin: 0 0; pointer-events: none; }
.coreshop-list.grid.col-3 > .coreshop-list-item:nth-child(3n):after,
.coreshop-list.grid.col-4 > .coreshop-list-item:nth-child(4n):after,
.coreshop-list.grid.col-5 > .coreshop-list-item:nth-child(5n):after { border-right-width: 0; }
/*常用日志数据多列列表三联*/
.coreshop-log-item { height: 71px; background-color: #fff; padding: 0 15px; border-bottom: 0.5px solid #eee;
.item-left {
.log-img { width: 25px; height: 25px; border-radius: 50%; margin-right: 12px; }
.log-name { font-size: 14px; font-weight: 500; margin-bottom: 6px; }
.log-notice { font-size: 11px; font-weight: 500; }
}
.item-right {
.log-num { font-size: 14px; font-weight: 500; margin-bottom: 6px; }
.log-date { font-size: 11px; font-weight: 400; }
}
}
/*占高区*/
.coreshop-card-hight-box { height: 23px; }
/*底部高度区域*/
.coreshop-foot-hight-view { width: 100%; height: calc((env(safe-area-inset-bottom) / 2) + 55px); }
/*为您推荐头部效果*/
.coreshop-recommended-title-view { position: relative; margin: 18px;
.img-anc { position: relative; width: 18px; top: 2px; }
}
.coreshop-navbar-left-slot { display: flex; flex-wrap: wrap; align-items: center; flex-direction: row; justify-content: space-between; }
/*支付界面效果*/
.payment-wx {
.coreshop-btn { background-color: #fff; line-height: 1.7; padding: 0; width: 367px; position: relative; display: flex; align-items: center; }
}
.payment-pop { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 200px; height: 136px; background-color: #fff; text-align: center; box-shadow: 0 0 10px #ccc;
.text { font-size: 12px; }
}
.payment-pop-c { padding: 25px 15px; font-size: 16px; color: #999;
image { width: 30px; height: 30px; }
}
.payment-pop-b { position: absolute; bottom: 0; display: flex; width: 100%; justify-content: space-between;
.coreshop-btn { flex: 1; justify-content: center; }
.coreshop-btn-o { background-color: #ff7159; }
}
/*全屏下头部透明效果*/
.coreshop-full-screen-nav-back { width: 100%; height: 44px; /* #ifndef MP-WEIXIN */ padding: 12px 12px 0; /* #endif */ /* #ifdef MP-WEIXIN */ padding: 26px 12px 0; /* #endif */ position: fixed; top: 10px; background-color: rgba(255, 255, 255, 0); z-index: 98;
.back-btn { height: 32px; width: 32px; border-radius: 50%; background-color: rgba(255, 255, 255, 0.8); text-align: center;
.icon { height: 20px; width: 20px; position: relative; top: 50%; left: 46%; transform: translate(-50%, -50%); }
}
}
/*全屏下顶部满屏占位幻灯片效果*/
.coreshop-full-screen-banner-swiper-box { position: relative; width: 100%;
.screen-swiper { min-height: 325px; }
.tag { font-size: 12px; vertical-align: middle; display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; padding: 0px 8px; font-family: Helvetica Neue, Helvetica, sans-serif; white-space: nowrap; position: absolute; bottom: 14px; right: 14px; font-size: 10px; padding: 0px 6px; height: 16px; }
}
/*商品内限时秒杀区域效果*/
.coreshop-limited-seckill-box { position: relative; background-image: url('/static/images/good/titlebg.png'); background-repeat: no-repeat; background-size: 100% 100%; padding: 12.5px 14px; color: #ffffff; width: 100%;
.coreshop-cost-price-num { position: absolute; font-weight: 200; left: 100px; top: 11px; }
.coreshop-cost-price-num.price-6 { left: 127px; }
.coreshop-cost-price-num.price-5 { left: 114px; }
.coreshop-cost-price-num.price-4 { left: 100px; }
.coreshop-cost-price-num.price-3 { left: 82px; }
.coreshop-cost-price-num.price-2 { left: 68px; }
.coreshop-cost-price-num.price-1 { left: 50px; }
.coreshop-time-right { position: absolute; right: 10px; top: 5px; }
.coreshop-share-right { position: absolute; right: 14px; top: 8px; }
}
.coreshop-limited-seckill-box::after { content: ""; position: absolute; z-index: -1; background-color: inherit; width: 100%; height: 100%; left: 0; bottom: -10%; border-radius: 5px; opacity: 0.2; transform: scale(0.9, 0.9); }
/*通用空白区域*/
.coreshop-common-view-box { position: relative; padding: 10px 10px; }
/*商品标题区域效果*/
.coreshop-good-title-view-box { position: relative;
.title-view { display: inline-block; flex-direction: row; align-items: center;
.brand-tag { width: 60px; float: left; height: 10px; font-size: 10px; font-weight: normal; }
}
.coreshop-title-tip-box { position: relative; padding: 5px 10px; width: 100%;
.u-line-1 { padding-right: 14px; }
.icon { position: absolute; right: 10px; top: 6px; }
}
}
/*商品页面底部浮层*/
.coreshop-good-footer-fixed { display: flex; position: fixed; bottom: 0; margin-top: 60px; width: 100%; z-index: 1; border-top: solid 1px #f2f2f2; background-color: #ffffff;
.tabbar { display: flex; position: relative; align-items: center; min-height: 50px; justify-content: space-between; padding-left: 5px; padding-right: 5px; height: calc(50px + env(safe-area-inset-bottom) / 2); padding-bottom: calc(env(safe-area-inset-bottom) / 2); width: 100%; flex-direction: row;
.action { display: flex; align-items: center; height: 100%; justify-content: center; max-width: 100%; color: #333333; position: relative; text-align: center;
.car-num { position: absolute; top: 5px; right: 7.5px; }
}
.btn-group { justify-content: space-around; flex-direction: row;
button { margin: 0 5px; }
}
.btn-box { justify-content: space-around; width: 50%; padding: 5px; padding-left: 0px; }
}
}
/*商品页面商家面板展示*/
.coreshop-goods-shop-info-view-box {
.coreshop-shop-view { position: relative; width: 100%;
.coreshop-avatar { position: absolute; height: 40px; width: 40px; }
button { position: absolute; top: 11px; right: 0; width: 60px; }
}
.coreshop-border-view { position: relative; background: #efebeb; margin: 11px 0; height: 1px; width: 100%; }
.live-tag-view { position: relative; width: 100%;
.text-view { padding-right: 74px; display: flex;
.location-tag { width: 50px; }
}
.go-map-box { position: absolute; right: 0; top: 2px; width: 70px; display: flex; }
}
.coreshop-good-shop-recommend-list-box {
.recommend-scroll-box { position: relative; width: 100%;
.recommend-scroll { position: relative; height: 180px; white-space: nowrap; width: 100%;
.recommend-scroll-item { display: inline-block; padding-top: 14px; width: 100px; padding-right: 9px; white-space: initial;
.coreshop-avatar { width: 140px; height: 140px; }
}
}
}
}
}
/*商品页面底部弹出层效果*/
.coreshop-bottom-popup-box { border-radius: 18px 18px 0 0;
.cu-dialog { border-radius: 18px 18px 0 0; }
.coreshop-title-bar { position: relative; width: 100%;
.close-icon { position: absolute; right: 18px; }
}
.coreshop-modal-content { position: relative; width: 100%; overflow-y: auto; /*height: calc(100vh - 327.5px);*/ padding: 0 15px 15px; margin-bottom: 60px;
.coreshop-common-view-box { position: relative; width: 100%; padding: 0; text-align: left; }
.coreshop-common-view-box.service {
.text-view { margin-bottom: 10px; }
.text-list-view { position: relative; width: 100%; margin-bottom: 10px;
.u-line-1 { padding-right: 10.5px; }
}
.text-list-view + .text-view { margin-top: 18px; }
}
.coreshop-common-view-box.promotion {
.text-view { margin-bottom: 10px;
.cu-tag { position: relative; top: -2px; }
}
.text-list-view { position: relative; width: 100%; margin-bottom: 10px;
.u-line-1 { padding-right: 110px; }
.go-map-box { position: absolute; right: 0; top: 1px; }
}
.text-list-view + .text-view { margin-top: 18px; }
}
.coreshop-common-view-box.select {
.coreshop-list.menu-avatar > .coreshop-list-item {
.content { width: calc(100% - 47.5px - 30px); }
}
.coreshop-select-btn-list-box { }
}
}
}
/*商品详情区域初始高度*/
.coreshop-good-rich-text-view { min-height: 250px; }
/*拼团*/
.group-box { background: linear-gradient(#fff, #f5f5f5); border-radius: 10px; margin: 0 10px 10px 10px; min-height: 500px;
.goods-item { border-radius: 10px; overflow: hidden; position: relative; margin-bottom: 10px;
.tag { position: absolute; left: 0; top: 5px; z-index: 2; line-height: 17.5px; background: linear-gradient(132deg, rgba(255, 153, 93, 1), rgba(255, 99, 97, 1)); border-radius: 0px 9px 9px 0px; padding: 0 5px; font-size: 12px; font-family: PingFang SC; font-weight: bold; color: rgba(255, 255, 255, 0.8); }
.goods-right { width: 240px;
.title { width: 240px; color: $u-main-color }
.tip { width: 240px; }
}
.buy-btn { position: absolute; right: 0; bottom: -5px; width: 130px; height: 30px; background: linear-gradient(90deg, rgba(254, 131, 42, 1), rgba(255, 102, 0, 1)); box-shadow: 0px 3.5px 3px 0px rgba(255, 104, 4, 0.22); border-radius: 15px; font-size: 14px; font-family: PingFang SC; font-weight: 500; color: #fff; padding: 0; }
.group-num { font-size: 10px; font-family: PingFang SC; font-weight: 500; color: rgba(153, 153, 153, 1); margin-left: 10px; }
.sell-box { background: rgba(255, 224, 226, 0.3); border-radius: 8px; line-height: 16px; padding: 0 5px;
.sell-num { font-size: 10px; font-family: PingFang SC; font-weight: 400; color: rgba(247, 151, 156, 1); }
.cuIcon-hotfill { font-size: 13px; color: #e1212b; margin-right: 4px; }
}
}
}
.group-boxComponents.group-box { min-height: 25px; }
.activity-goods-box { padding: 20px 10px; background: #fff;
.img-box { margin-right: 10px; width: 100px; height: 100px; overflow: hidden; position: relative;
.img { width: 100px; height: 100px; background-color: #ccc; }
}
.goods-right { width: 425px; min-height: 100px; position: relative;
.title { font-size: 14px; line-height: 20px; }
.tip { font-size: 11px; color: #a8700d; width: 250px; padding: 3px 0; }
.current { font-size: 14px; font-weight: 500; color: rgba(225, 33, 43, 1); }
.original { font-size: 11px; font-weight: 400; text-decoration: line-through; color: rgba(153, 153, 153, 1); margin-left: 7px; }
}
}
/*版权信息*/
.coreshop-copyright { text-align: center; margin: 10px 0; width: 100%; overflow: hidden; line-height: 20px; }
/*
按钮无边框样式*/
.noButtonStyle { -webkit-appearance: none; overflow: visible; color: #606266; border-color: #c0c4cc; background-color: #ffffff; position: relative; border: 0; display: inline-flex; overflow: visible; line-height: 1; display: flex; flex-direction: row; align-items: center; justify-content: center; cursor: pointer; z-index: 1; box-sizing: border-box; transition: all 0.15s; }
.noButtonStyle::after { border-top-width: 0; border-right-width: 0; border-bottom-width: 0; border-left-width: 0; }
/*顶部自定义效果*/
.coreshop-header-slot-wrap { display: flex; align-items: center; padding: 0 10px; margin-top: -5px;
.coreshop-slot-btns { background: #111727; border: 1px solid #565b6f; padding: 4px 12px; border-radius: 250px; display: flex; align-items: center; z-index: 10075;
.coreshop-slot-cut-off { margin: 0 10px; color: #fff; width: 0.5px; border-left: 1px solid #fff; background: #fff; height: 17.5px; }
}
.coreshop-header-title { padding: 1px 10px; }
}
/*接龙*/
.solitaire-details-bg { min-height: 150px; background-image: url('/static/images/common/bg.png'); background-size: cover; background-position: center; border-radius: 0 0 40px 40px; background: #272d47; }
.solitaire-details-placeholder-body { margin-top: -150px; padding: 2.5px; }
.solitaire-details-body { min-height: 150px; border-radius: 15px; margin: 20px 10px 10px 10px; padding: 5px 10px 10px 10px;
.solitaire-details-shareBox { background: #0fd7bd; padding: 2.5px 5px; border-top-left-radius: 50px; border-bottom-left-radius: 50px; margin-right: -10px; margin-left: 10px; margin-top: 10px; width: 35px; height: 25px; }
}
.coreshop-content { color: $u-content-color; font-size: 14px; line-height: 1.8;
p { color: $u-tips-color; }
}
.solitaire-details-product-item { background: #FFFFFF; border-radius: 4px; margin: 0 10px; margin-top: 10px; border-radius: 8px; padding: 10px 10px; background: #FFFFFF !important; }
.contact-btn { margin: 0 auto; }

View File

@@ -0,0 +1,317 @@
/***********************************************************************
* Project: CoreCms
* ProjectName: 核心内容管理系统
* Web: https://www.corecms.net
* Author: 大灰灰
* Email: jianweie@163.com
* CreateTime: 2022/7/19 23:31:04
* Description: 暂无
***********************************************************************/
using System;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.Entities.Expression;
using CoreCms.Net.Model.FromBody;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Filter;
using CoreCms.Net.Loging;
using CoreCms.Net.IServices;
using CoreCms.Net.Utility.Helper;
using CoreCms.Net.Utility.Extensions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using NPOI.HSSF.UserModel;
using SqlSugar;
namespace CoreCms.Net.Web.Admin.Controllers
{
/// <summary>
/// 版本更新表
///</summary>
[Description("版本更新表")]
[Route("api/[controller]/[action]")]
[ApiController]
[RequiredErrorForAdmin]
[Authorize]
public class CoreCmsAppUpdateLogController : ControllerBase
{
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly ICoreCmsAppUpdateLogServices _coreCmsAppUpdateLogServices;
/// <summary>
/// 构造函数
///</summary>
public CoreCmsAppUpdateLogController(IWebHostEnvironment webHostEnvironment
, ICoreCmsAppUpdateLogServices coreCmsAppUpdateLogServices
)
{
_webHostEnvironment = webHostEnvironment;
_coreCmsAppUpdateLogServices = coreCmsAppUpdateLogServices;
}
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/GetPageList
/// <summary>
/// 获取列表
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("获取列表")]
public async Task<AdminUiCallBack> GetPageList()
{
var jm = new AdminUiCallBack();
var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);
var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);
var where = PredicateBuilder.True<CoreCmsAppUpdateLog>();
//获取排序字段
var orderField = Request.Form["orderField"].FirstOrDefault();
Expression<Func<CoreCmsAppUpdateLog, object>> orderEx = orderField switch
{
"id" => p => p.id,
"version" => p => p.version,
"note" => p => p.note,
"android" => p => p.android,
"ios" => p => p.ios,
"addTime" => p => p.addTime,
"isUpdate" => p => p.isUpdate,
_ => p => p.id
};
//设置排序方式
var orderDirection = Request.Form["orderDirection"].FirstOrDefault();
var orderBy = orderDirection switch
{
"asc" => OrderByType.Asc,
"desc" => OrderByType.Desc,
_ => OrderByType.Desc
};
//查询筛选
//更新内容 nvarchar
var note = Request.Form["note"].FirstOrDefault();
if (!string.IsNullOrEmpty(note))
{
where = where.And(p => p.note.Contains(note));
}
//创建时间 datetime
var addTime = Request.Form["addTime"].FirstOrDefault();
if (!string.IsNullOrEmpty(addTime))
{
if (addTime.Contains("到"))
{
var dts = addTime.Split("到");
var dtStart = dts[0].Trim().ObjectToDate();
where = where.And(p => p.addTime > dtStart);
var dtEnd = dts[1].Trim().ObjectToDate();
where = where.And(p => p.addTime < dtEnd);
}
else
{
var dt = addTime.ObjectToDate();
where = where.And(p => p.addTime > dt);
}
}
//开启更新 bit
var isUpdate = Request.Form["isUpdate"].FirstOrDefault();
if (!string.IsNullOrEmpty(isUpdate) && isUpdate.ToLowerInvariant() == "true")
{
where = where.And(p => p.isUpdate == true);
}
else if (!string.IsNullOrEmpty(isUpdate) && isUpdate.ToLowerInvariant() == "false")
{
where = where.And(p => p.isUpdate == false);
}
//获取数据
var list = await _coreCmsAppUpdateLogServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true);
//返回数据
jm.data = list;
jm.code = 0;
jm.count = list.TotalCount;
jm.msg = "数据调用成功!";
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/GetIndex
/// <summary>
/// 首页数据
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("首页数据")]
public AdminUiCallBack GetIndex()
{
//返回数据
var jm = new AdminUiCallBack { code = 0 };
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/GetCreate
/// <summary>
/// 创建数据
/// </summary>
/// <returns></returns>
[HttpPost]
[Description("创建数据")]
public AdminUiCallBack GetCreate()
{
//返回数据
var jm = new AdminUiCallBack { code = 0 };
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/DoCreate
/// <summary>
/// 创建提交
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("创建提交")]
public async Task<AdminUiCallBack> DoCreate([FromBody] CoreCmsAppUpdateLog entity)
{
entity.addTime = DateTime.Now;
var jm = await _coreCmsAppUpdateLogServices.InsertAsync(entity);
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/GetEdit
/// <summary>
/// 编辑数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("编辑数据")]
public async Task<AdminUiCallBack> GetEdit([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var model = await _coreCmsAppUpdateLogServices.QueryByIdAsync(entity.id, false);
if (model == null)
{
jm.msg = "不存在此信息";
return jm;
}
jm.code = 0;
jm.data = model;
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/Edit
/// <summary>
/// 编辑提交
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("编辑提交")]
public async Task<AdminUiCallBack> DoEdit([FromBody] CoreCmsAppUpdateLog entity)
{
var jm = await _coreCmsAppUpdateLogServices.UpdateAsync(entity);
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/DoDelete/10
/// <summary>
/// 单选删除
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("单选删除")]
public async Task<AdminUiCallBack> DoDelete([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var model = await _coreCmsAppUpdateLogServices.ExistsAsync(p => p.id == entity.id, true);
if (!model)
{
jm.msg = GlobalConstVars.DataisNo;
return jm;
}
jm = await _coreCmsAppUpdateLogServices.DeleteByIdAsync(entity.id);
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/GetDetails/10
/// <summary>
/// 预览数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("预览数据")]
public async Task<AdminUiCallBack> GetDetails([FromBody] FMIntId entity)
{
var jm = new AdminUiCallBack();
var model = await _coreCmsAppUpdateLogServices.QueryByIdAsync(entity.id, false);
if (model == null)
{
jm.msg = "不存在此信息";
return jm;
}
jm.code = 0;
jm.data = model;
return jm;
}
#endregion
#region ============================================================
// POST: Api/CoreCmsAppUpdateLog/DoSetisUpdate/10
/// <summary>
/// 设置开启更新
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPost]
[Description("设置开启更新")]
public async Task<AdminUiCallBack> DoSetisUpdate([FromBody] FMUpdateBoolDataByIntId entity)
{
var jm = new AdminUiCallBack();
var oldModel = await _coreCmsAppUpdateLogServices.QueryByIdAsync(entity.id, false);
if (oldModel == null)
{
jm.msg = "不存在此信息";
return jm;
}
oldModel.isUpdate = (bool)entity.data;
var bl = await _coreCmsAppUpdateLogServices.UpdateAsync(p => new CoreCmsAppUpdateLog() { isUpdate = oldModel.isUpdate }, p => p.id == oldModel.id);
jm.code = bl ? 0 : 1;
jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
return jm;
}
#endregion
}
}

View File

@@ -12,7 +12,7 @@ layui.define(['laytpl', 'layer', 'element', 'util'], function (exports) {
, pageTabs: false //是否开启页面选项卡功能。单页版不推荐开启
, name: '核心商城系统'
, version: 'CoreShopProfessional v0.5.0'
, version: 'CoreShopProfessional v0.5.1'
, tableName: 'CoreCms' //本地存储表名
, MOD_NAME: 'admin' //模块事件名

View File

@@ -0,0 +1,77 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsAppUpdateLog-createForm" id="LAY-app-CoreCmsAppUpdateLog-createForm">
<div class="layui-form-item">
<label for="version" class="layui-form-label layui-form-required">版本号</label>
<div class="layui-input-inline layui-inline-6">
<input type="number" min="0" max="999999" name="version" lay-verify="required|number" class="layui-input" value="1" placeholder="请输入版本号" lay-reqText="请输入版本号并为数字" />
</div>
<div class="layui-form-mid">
应用版本号必须为整数数字升级时必须要高于上一次设置的值
</div>
</div>
<div class="layui-form-item">
<label for="note" class="layui-form-label layui-form-required">更新内容</label>
<div class="layui-input-block">
<input name="note" lay-verify="required|verifynote" class="layui-input" lay-reqText="请输入更新内容" placeholder="请输入更新内容" />
</div>
</div>
<div class="layui-form-item">
<label for="android" class="layui-form-label">安卓地址</label>
<div class="layui-input-block">
<input name="android" class="layui-input" lay-reqText="请输入安卓地址" placeholder="请输入安卓地址" />
</div>
</div>
<div class="layui-form-item">
<label for="ios" class="layui-form-label">IOS地址</label>
<div class="layui-input-block">
<input name="ios" class="layui-input" lay-reqText="请输入IOS地址" placeholder="请输入IOS地址" />
</div>
</div>
<div class="layui-form-item" pane>
<label for="isUpdate" class="layui-form-label layui-form-required">开启更新</label>
<div class="layui-input-block">
<input type="checkbox" lay-filter="switch" name="isUpdate" lay-skin="switch" lay-text="开启|关闭">
</div>
</div>
<div class="layui-form-item text-right core-hidden">
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsAppUpdateLog-createForm-submit" id="LAY-app-CoreCmsAppUpdateLog-createForm-submit" value="确认添加">
</div>
</div>
</script>
<script>
var debug = layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
function () {
var $ = layui.$
, form = layui.form
, admin = layui.admin
, laydate = layui.laydate
, upload = layui.upload
, cropperImg = layui.cropperImg
, coreHelper = layui.coreHelper;
laydate.render({
elem: '#createTime-CoreCmsAppUpdateLog-addTime',
type: 'datetime'
});
form.verify({
verifyversion: [/^.{0,50}$/, '版本号最大只允许输入50位字符'],
verifynote: [/^.{0,255}$/, '更新内容最大只允许输入255位字符'],
verifyandroid: [/^.{0,255}$/, '安卓地址最大只允许输入255位字符'],
verifyios: [/^.{0,255}$/, 'IOS地址最大只允许输入255位字符'],
});
//重载form
form.render(null, 'LAY-app-CoreCmsAppUpdateLog-createForm');
})
};
</script>

View File

@@ -0,0 +1,90 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsAppUpdateLog-detailsForm" id="LAY-app-CoreCmsAppUpdateLog-detailsForm">
<colgroup>
<col width="100">
<col>
</colgroup>
<tbody>
<tr>
<td>
<label for="id">序列</label>
</td>
<td>
{{ d.params.data.id || '' }}
</td>
</tr>
<tr>
<td>
<label for="version">版本号</label>
</td>
<td>
{{ d.params.data.version || '' }}
</td>
</tr>
<tr>
<td>
<label for="note">更新内容</label>
</td>
<td>
{{ d.params.data.note || '' }}
</td>
</tr>
<tr>
<td>
<label for="android">安卓地址</label>
</td>
<td>
{{ d.params.data.android || '' }}
</td>
</tr>
<tr>
<td>
<label for="ios">IOS地址</label>
</td>
<td>
{{ d.params.data.ios || '' }}
</td>
</tr>
<tr>
<td>
<label for="addTime">创建时间</label>
</td>
<td>
{{ d.params.data.addTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="isUpdate">开启更新</label>
</td>
<td>
<input type="checkbox" disabled name="isUpdate" value="{{d.params.data.isUpdate}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isUpdate" {{ d.params.data.isUpdate ? 'checked' : '' }}>
</td>
</tr>
</tbody>
</table>
</script>
<script>
var debug= layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'coreHelper'], function () {
var $ = layui.$
, setter = layui.setter
, admin = layui.admin
, coreHelper = layui.coreHelper
, form = layui.form;
form.render(null, 'LAY-app-CoreCmsAppUpdateLog-detailsForm');
});
};
</script>

View File

@@ -0,0 +1,78 @@
<script type="text/html" template lay-done="layui.data.sendParams(d);">
<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-CoreCmsAppUpdateLog-editForm" id="LAY-app-CoreCmsAppUpdateLog-editForm">
<input type="hidden" name="id" value="{{d.params.data.id || '' }}" />
<div class="layui-form-item">
<label for="version" class="layui-form-label layui-form-required">版本号</label>
<div class="layui-input-inline layui-inline-6">
<input type="number" min="0" max="999999" name="version" lay-verify="required|number" class="layui-input" value="{{d.params.data.version || '' }}" placeholder="请输入版本号" lay-reqText="请输入版本号并为数字" />
</div>
<div class="layui-form-mid">
应用版本号必须为整数数字升级时必须要高于上一次设置的值
</div>
</div>
<div class="layui-form-item">
<label for="note" class="layui-form-label layui-form-required">更新内容</label>
<div class="layui-input-block">
<input name="note" lay-verify="required|verifynote" class="layui-input" placeholder="请输入更新内容" lay-reqText="请输入更新内容" value="{{d.params.data.note || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="android" class="layui-form-label">安卓地址</label>
<div class="layui-input-block">
<input name="android" class="layui-input" placeholder="请输入安卓地址" lay-reqText="请输入安卓地址" value="{{d.params.data.android || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="ios" class="layui-form-label">IOS地址</label>
<div class="layui-input-block">
<input name="ios" class="layui-input" placeholder="请输入IOS地址" lay-reqText="请输入IOS地址" value="{{d.params.data.ios || '' }}" />
</div>
</div>
<div class="layui-form-item" pane>
<label for="isUpdate" class="layui-form-label layui-form-required">开启更新</label>
<div class="layui-input-block">
<input type="checkbox" lay-filter="switch" name="isUpdate" {{ d.params.data.isUpdate ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
</div>
<div class="layui-form-item text-right core-hidden">
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsAppUpdateLog-editForm-submit" id="LAY-app-CoreCmsAppUpdateLog-editForm-submit" value="确认编辑">
</div>
</div>
</script>
<script>
var debug = layui.setter.debug;
layui.data.sendParams = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg'],
function () {
var $ = layui.$
, form = layui.form
, admin = layui.admin
, laydate = layui.laydate
, upload = layui.upload
, cropperImg = layui.cropperImg
, coreHelper = layui.coreHelper;
laydate.render({
elem: '#editTime-CoreCmsAppUpdateLog-addTime',
type: 'datetime'
});
form.verify({
verifyversion: [/^.{0,50}$/, '版本号最大只允许输入50位字符'],
verifynote: [/^.{0,255}$/, '更新内容最大只允许输入255位字符'],
verifyandroid: [/^.{0,255}$/, '安卓地址最大只允许输入255位字符'],
verifyios: [/^.{0,255}$/, 'IOS地址最大只允许输入255位字符'],
});
//重载form
form.render(null, 'LAY-app-CoreCmsAppUpdateLog-editForm');
})
};
</script>

View File

@@ -0,0 +1,313 @@
<title>版本更新表</title>
<!--当前位置开始-->
<div class="layui-card layadmin-header">
<div class="layui-breadcrumb" lay-filter="breadcrumb">
<script type="text/html" template lay-done="layui.data.updateMainBreadcrumb();">
</script>
</div>
</div>
<!--当前位置结束-->
<style>
/* 重写样式 */
</style>
<script type="text/html" template lay-type="Post" lay-url="Api/CoreCmsAppUpdateLog/GetIndex" lay-done="layui.data.done(d);">
</script>
<div class="table-body">
<table id="LAY-app-CoreCmsAppUpdateLog-tableBox" lay-filter="LAY-app-CoreCmsAppUpdateLog-tableBox"></table>
</div>
<script type="text/html" id="LAY-app-CoreCmsAppUpdateLog-toolbar">
<div class="layui-form coreshop-toolbar-search-form">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" for="note">更新内容</label>
<div class="layui-input-inline">
<input type="text" name="note" placeholder="请输入更新内容" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" for="isUpdate">开启更新</label>
<div class="layui-input-inline">
<select name="isUpdate">
<option value="">请选择</option>
<option value="True"></option>
<option value="False"></option>
</select>
</div>
</div>
<div class="layui-inline">
<button class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-CoreCmsAppUpdateLog-search"><i class="layui-icon layui-icon-search"></i></button>
</div>
</div>
</div>
</script>
<script type="text/html" id="LAY-app-CoreCmsAppUpdateLog-pagebar">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="addData"><i class="layui-icon layui-icon-add-1"></i></button>
</div>
</script>
<script type="text/html" id="LAY-app-CoreCmsAppUpdateLog-tableBox-bar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
<a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" data-dropdown="#CoreCmsAppUpdateLogTbDelDrop{{d.LAY_INDEX}}" no-shade="true">删除</a>
<div class="dropdown-menu-nav dropdown-popconfirm dropdown-top-right layui-hide" id="CoreCmsAppUpdateLogTbDelDrop{{d.LAY_INDEX}}"
style="max-width: 200px;white-space: normal;min-width: auto;margin-left: 10px;">
<div class="dropdown-anchor"></div>
<div class="dropdown-popconfirm-title">
<i class="layui-icon layui-icon-help"></i>
确定要删除吗
</div>
<div class="dropdown-popconfirm-btn">
<a class="layui-btn layui-btn-primary cursor" btn-cancel>取消</a>
<a class="layui-btn layui-btn-normal cursor" lay-event="del">确定</a>
</div>
</div>
</script>
<script>
var indexData;
var debug = layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d); }
indexData = d.data;
layui.use(['index', 'table', 'laydate', 'util', 'coredropdown', 'coreHelper'],
function () {
var $ = layui.$
, admin = layui.admin
, table = layui.table
, form = layui.form
, laydate = layui.laydate
, setter = layui.setter
, coreHelper = layui.coreHelper
, util = layui.util
, view = layui.view;
var searchwhere;
//监听搜索
form.on('submit(LAY-app-CoreCmsAppUpdateLog-search)',
function (data) {
var field = data.field;
searchwhere = field;
//执行重载
table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox', { where: field });
});
//数据绑定
table.render({
elem: '#LAY-app-CoreCmsAppUpdateLog-tableBox',
url: layui.setter.apiUrl + 'Api/CoreCmsAppUpdateLog/GetPageList',
method: 'POST',
toolbar: '#LAY-app-CoreCmsAppUpdateLog-toolbar',
pagebar: '#LAY-app-CoreCmsAppUpdateLog-pagebar',
className: 'pagebarbox',
defaultToolbar: ['filter', 'print', 'exports'],
height: 'full-127',//面包屑142px,搜索框4行172,3行137,2行102,1行67
page: true,
limit: 30,
limits: [10, 15, 20, 25, 30, 50, 100, 200],
text: { none: '暂无相关数据' },
cols: [
[
{ type: "checkbox", fixed: "left" },
{ field: 'id', title: '序列', width: 60, sort: false },
{ field: 'version', title: '版本号', sort: false, width: 105 },
{ field: 'note', title: '更新内容', sort: false },
{ field: 'android', title: '安卓地址', sort: false },
{ field: 'ios', title: 'IOS地址', sort: false },
{ field: 'addTime', title: '创建时间', width: 130, sort: false },
{ field: 'isUpdate', title: '开启更新', width: 95, templet: '#switch_isUpdate', sort: false, unresize: true },
{ width: 162, align: 'center', title: '操作', fixed: 'right', toolbar: '#LAY-app-CoreCmsAppUpdateLog-tableBox-bar' }
]
]
});
//监听排序事件
table.on('sort(LAY-app-CoreCmsAppUpdateLog-tableBox)', function (obj) {
table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox', {
initSort: obj, //记录初始排序,如果不设的话,将无法标记表头的排序状态。
where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
orderField: obj.field, //排序字段
orderDirection: obj.type //排序方式
}
});
});
//监听行双击事件
table.on('rowDouble(LAY-app-CoreCmsAppUpdateLog-tableBox)', function (obj) {
//查看详情
doDetails(obj);
});
//头工具栏事件
table.on('pagebar(LAY-app-CoreCmsAppUpdateLog-tableBox)', function (obj) {
var checkStatus = table.checkStatus(obj.config.id);
switch (obj.event) {
case 'addData':
doCreate();
break;
case 'batchDelete':
doBatchDelete(checkStatus);
break;
};
});
//监听工具条
table.on('tool(LAY-app-CoreCmsAppUpdateLog-tableBox)',
function (obj) {
if (obj.event === 'detail') {
doDetails(obj);
} else if (obj.event === 'del') {
doDelete(obj);
} else if (obj.event === 'edit') {
doEdit(obj)
}
});
//执行创建操作
function doCreate() {
coreHelper.Post("Api/CoreCmsAppUpdateLog/GetCreate", null, function (e) {
if (e.code === 0) {
admin.popup({
shadeClose: false,
title: '创建数据',
area: ['1200px', '400px'],
id: 'LAY-popup-CoreCmsAppUpdateLog-create',
success: function (layero, index) {
view(this.id).render('system/appupdatelog/create', { data: e.data }).done(function () {
//监听提交
form.on('submit(LAY-app-CoreCmsAppUpdateLog-createForm-submit)',
function (data) {
var field = data.field; //获取提交的字段
field.isUpdate = field.isUpdate == 'on';
if (debug) { console.log(field); } //开启调试返回数据
//提交 Ajax 成功后,关闭当前弹层并重载表格
coreHelper.Post("Api/CoreCmsAppUpdateLog/DoCreate", field, function (e) {
console.log(e)
if (e.code === 0) {
layui.table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox'); //重载表格
layer.close(index); //再执行关闭
layer.msg(e.msg);
} else {
layer.msg(e.msg);
}
});
});
});
// 禁止弹窗出现滚动条
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-CoreCmsAppUpdateLog-createForm-submit").click();
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行编辑操作
function doEdit(obj) {
coreHelper.Post("Api/CoreCmsAppUpdateLog/GetEdit", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({
shadeClose: false,
title: '编辑数据',
area: ['1200px', '400px'],
id: 'LAY-popup-CoreCmsAppUpdateLog-edit',
success: function (layero, index) {
view(this.id).render('system/appupdatelog/edit', { data: e.data }).done(function () {
//监听提交
form.on('submit(LAY-app-CoreCmsAppUpdateLog-editForm-submit)',
function (data) {
var field = data.field; //获取提交的字段
field.isUpdate = field.isUpdate == 'on';
if (debug) { console.log(field); } //开启调试返回数据
//提交 Ajax 成功后,关闭当前弹层并重载表格
coreHelper.Post("Api/CoreCmsAppUpdateLog/DoEdit", field, function (e) {
console.log(e)
if (e.code === 0) {
layui.table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox'); //重载表格
layer.close(index); //再执行关闭
layer.msg(e.msg);
} else {
layer.msg(e.msg);
}
});
});
})
// 禁止弹窗出现滚动条
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
, btn: ['确定', '取消']
, yes: function (index, layero) {
layero.contents().find("#LAY-app-CoreCmsAppUpdateLog-editForm-submit").click();
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行预览操作
function doDetails(obj) {
coreHelper.Post("Api/CoreCmsAppUpdateLog/GetDetails", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({
shadeClose: false,
title: '查看详情',
area: ['1200px', '400px'],
id: 'LAY-popup-CoreCmsAppUpdateLog-details',
success: function (layero, index) {
view(this.id).render('system/appupdatelog/details', { data: e.data }).done(function () {
form.render();
});
// 禁止弹窗出现滚动条
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行单个删除
function doDelete(obj) {
coreHelper.Post("Api/CoreCmsAppUpdateLog/DoDelete", { id: obj.data.id }, function (e) {
if (debug) { console.log(e); } //开启调试返回数据
table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox');
layer.msg(e.msg);
});
}
laydate.render({
elem: '#searchTime-CoreCmsAppUpdateLog-addTime',
type: 'datetime',
range: '到',
});
//监听 表格复选框操作
layui.form.on('switch(switch_isUpdate)', function (obj) {
coreHelper.Post("Api/CoreCmsAppUpdateLog/DoSetisUpdate", { id: this.value, data: obj.elem.checked }, function (e) {
if (debug) { console.log(e); } //开启调试返回数据
//table.reloadData('LAY-app-CoreCmsAppUpdateLog-tableBox');
layer.msg(e.msg);
});
});
//重载form
form.render();
});
};
</script>
<!--设置开启更新-->
<script type="text/html" id="switch_isUpdate">
<input type="checkbox" name="switch_isUpdate" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isUpdate" {{ d.isUpdate ? 'checked' : '' }}>
</script>

View File

@@ -48,19 +48,20 @@ namespace CoreCms.Net.Web.WebApi.Controllers
private readonly ICoreCmsSettingServices _coreCmsSettingServices;
private readonly IToolsServices _toolsServices;
private readonly ICoreCmsAppUpdateLogServices _appUpdateLogServices;
/// <summary>
/// 构造函数
/// </summary>
public CommonController(ICoreCmsSettingServices settingServices
, ICoreCmsAreaServices areaServices
, IWebHostEnvironment webHostEnvironment, ICoreCmsServiceDescriptionServices serviceDescriptionServices, ICoreCmsSettingServices coreCmsSettingServices, IToolsServices toolsServices)
, IWebHostEnvironment webHostEnvironment, ICoreCmsServiceDescriptionServices serviceDescriptionServices, ICoreCmsSettingServices coreCmsSettingServices, IToolsServices toolsServices, ICoreCmsAppUpdateLogServices appUpdateLogServices)
{
_webHostEnvironment = webHostEnvironment;
_serviceDescriptionServices = serviceDescriptionServices;
_coreCmsSettingServices = coreCmsSettingServices;
_toolsServices = toolsServices;
_appUpdateLogServices = appUpdateLogServices;
_settingServices = settingServices;
_areaServices = areaServices;
@@ -166,6 +167,10 @@ namespace CoreCms.Net.Web.WebApi.Controllers
var qqMapKey = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.QqMapKey); //腾讯地图key
var checkInIsOpen = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CheckInIsOpen).ObjectToInt(2); //订单取消时间
var model = new
{
shopLogo,
@@ -216,7 +221,8 @@ namespace CoreCms.Net.Web.WebApi.Controllers
agentNotes,
agentAgreement,
agentStore,
qqMapKey
qqMapKey,
checkInIsOpen
};
jm.data = model;
return jm;
@@ -267,6 +273,28 @@ namespace CoreCms.Net.Web.WebApi.Controllers
#endregion
#region
/// <summary>
/// 获取商城关键词说明列表
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<WebApiCallBack> GetAppVersions()
{
var jm = new WebApiCallBack();
var model = await _appUpdateLogServices.QueryByClauseAsync(p => p.isUpdate == true, p => p.id, OrderByType.Desc);
jm.status = true;
jm.data = model;
return jm;
}
#endregion
//验证接口====================================================================================================
#region ====================================================

View File

@@ -0,0 +1,40 @@
/*
Navicat Premium Data Transfer
Source Server : rm-wz92918pm46bsbc37mo.mysql.rds.aliyuncs.com
Source Server Type : MySQL
Source Server Version : 50732
Source Host : rm-wz92918pm46bsbc37mo.mysql.rds.aliyuncs.com:3306
Source Schema : coreshop
Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001
Date: 20/07/2022 01:14:24
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for CoreCmsAppUpdateLog
-- ----------------------------
DROP TABLE IF EXISTS `CoreCmsAppUpdateLog`;
CREATE TABLE `CoreCmsAppUpdateLog` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序列',
`version` int(11) NOT NULL COMMENT '版本号',
`note` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '更新内容',
`android` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '安卓地址',
`ios` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'IOS地址',
`addTime` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`isUpdate` tinyint(1) NOT NULL COMMENT '开启更新',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of CoreCmsAppUpdateLog
-- ----------------------------
INSERT INTO `CoreCmsAppUpdateLog` VALUES (1, 10, '测试更新内容', 'http://app.coreshop.cn/apk/coreshopandroid.apk', '', '0000-00-00 00:00:00', 1);
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1 @@
INSERT INTO `SysMenu` VALUES (1388, 43, 'appupdatelog', '安卓苹果更新日志', NULL, 'system/appupdatelog/index', NULL, 0, 10, NULL, NULL, NULL, 0, 0, '2022-07-20 01:19:33', NULL);

View File

@@ -1,3 +1,6 @@
2022-07-20
【新增】新增表【CoreCmsAppUpdateLog】版本更新表用于启动安卓app获取对应更新
2022-07-15
【新增】表【CoreCmsGoods】增加【initialSales】初始销量字段用于展示友好销量

View File

@@ -0,0 +1,51 @@
/****** Object: Table [dbo].[CoreCmsAppUpdateLog] Script Date: 2022/7/20 1:02:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[CoreCmsAppUpdateLog](
[id] [INT] IDENTITY(1,1) NOT NULL,
[version] [INT] NOT NULL,
[note] [NVARCHAR](255) NOT NULL,
[android] [NVARCHAR](255) NULL,
[ios] [NVARCHAR](255) NULL,
[addTime] [DATETIME] NOT NULL,
[isUpdate] [BIT] NOT NULL,
CONSTRAINT [PK_CoreCmsAppUpdateLog] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CoreCmsAppUpdateLog] ADD CONSTRAINT [DF_CoreCmsAppUpdateLog_addTime] DEFAULT (GETDATE()) FOR [addTime]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'version'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'note'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD>׿<EFBFBD><EFBFBD>ַ' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'android'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'IOS<EFBFBD><EFBFBD>ַ' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'ios'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'addTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog', @level2type=N'COLUMN',@level2name=N'isUpdate'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsAppUpdateLog'
GO

View File

@@ -1,3 +1,6 @@
2022-07-20
【新增】新增表【CoreCmsAppUpdateLog】版本更新表用于启动安卓app获取对应更新
2022-07-15
【新增】表【CoreCmsGoods】增加【initialSales】初始销量字段用于展示友好销量