# 2022-01-31

### 1.3.5 开源社区版(会员专业版同步修改):
【优化】取消Sqlsugar二级缓存功能。#I4SBZZ
【优化】剔除未使用的goodsinfos文件夹的试图文件。
【优化】取消商品描述的重量,统一使用sku的重量来计算运费。#I4SAVQ
【优化】移除历史时间过长的数据库文件,减少git包大小。

### 0.1.4 会员专业版:
【升级】升级uview到2.0.27版本。
This commit is contained in:
jianweie code
2022-01-31 00:54:43 +08:00
parent 5ac324812c
commit 88fdbce2e8
68 changed files with 567 additions and 194871 deletions
@@ -173,7 +173,6 @@ namespace CoreCms.Net.Repository
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.MergeTable() .MergeTable()
.OrderBy(dOrder => dOrder.totalInCome, OrderByType.Desc) .OrderBy(dOrder => dOrder.totalInCome, OrderByType.Desc)
.WithCache()
.ToPageListAsync(pageIndex, pageSize, totalCount); .ToPageListAsync(pageIndex, pageSize, totalCount);
var list = new PageList<AgentRankingDTO>(page, pageIndex, pageSize, totalCount); var list = new PageList<AgentRankingDTO>(page, pageIndex, pageSize, totalCount);
@@ -242,7 +242,6 @@ namespace CoreCms.Net.Repository
.WhereIF(thisMonth == true, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .WhereIF(thisMonth == true, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast)
.Where((orders, users) => users.parentId == parentId) .Where((orders, users) => users.parentId == parentId)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.CountAsync(); .CountAsync();
return totalSum; return totalSum;
@@ -264,7 +263,6 @@ namespace CoreCms.Net.Repository
.Where(p => allIds.Contains(p.buyUserId)) .Where(p => allIds.Contains(p.buyUserId))
.WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast) .WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.CountAsync(); .CountAsync();
return totalSum; return totalSum;
@@ -287,7 +285,6 @@ namespace CoreCms.Net.Repository
.Where(p => allIds.Contains(p.buyUserId)) .Where(p => allIds.Contains(p.buyUserId))
.WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast) .WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.CountAsync(); .CountAsync();
return totalSum; return totalSum;
@@ -323,7 +320,6 @@ namespace CoreCms.Net.Repository
.Where((orders, users) => users.parentId == parentId) .Where((orders, users) => users.parentId == parentId)
.WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.SumAsync((orders, users) => orders.amount); .SumAsync((orders, users) => orders.amount);
return totalSum; return totalSum;
} }
@@ -344,7 +340,6 @@ namespace CoreCms.Net.Repository
.Where((orders, users) => allIds.Contains(orders.buyUserId)) .Where((orders, users) => allIds.Contains(orders.buyUserId))
.WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.SumAsync((orders, users) => orders.amount); .SumAsync((orders, users) => orders.amount);
return totalSum; return totalSum;
@@ -366,7 +361,6 @@ namespace CoreCms.Net.Repository
.Where((orders, users) => allIds.Contains(orders.buyUserId)) .Where((orders, users) => allIds.Contains(orders.buyUserId))
.WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast)
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.WithCache(60 * 60)
.SumAsync((orders, users) => orders.amount); .SumAsync((orders, users) => orders.amount);
return totalSum; return totalSum;
} }
@@ -100,7 +100,6 @@ namespace CoreCms.Net.Repository
.With(SqlWith.NoLock) .With(SqlWith.NoLock)
.MergeTable() .MergeTable()
.OrderBy(dOrder => dOrder.totalInCome, OrderByType.Desc) .OrderBy(dOrder => dOrder.totalInCome, OrderByType.Desc)
.WithCache()
.ToPageListAsync(pageIndex, pageSize, totalCount); .ToPageListAsync(pageIndex, pageSize, totalCount);
var list = new PageList<DistributionRankingDTO>(page, pageIndex, pageSize, totalCount); var list = new PageList<DistributionRankingDTO>(page, pageIndex, pageSize, totalCount);
@@ -1,3 +1,43 @@
## 2.0.272022-01-28
# uView2.0重磅发布,利剑出鞘,一统江湖
1.样式修复
## 2.0.262022-01-28
# uView2.0重磅发布,利剑出鞘,一统江湖
1.样式修复
## 2.0.252022-01-27
# uView2.0重磅发布,利剑出鞘,一统江湖
1. 修复text组件mode=price时,可能会导致精度错误的问题
2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE)
3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题
4. 修复$u.addUnit()对配置默认单位可能无效的问题
## 2.0.242022-01-25
# uView2.0重磅发布,利剑出鞘,一统江湖
1. 修复swiper在current指定非0时缩放有误
2. 修复u-icon添加stop属性的时候报错
3. 优化遗留的通过正则判断rpx单位的问题
4. 优化Layout布局 vue使用gutter时,会超出固定区域
5. 优化search组件高度单位问题(rpx -> px
6. 修复u-image slot 加载和错误的图片失去了高度
7. 修复u-index-list中footer插槽与header插槽存在性判断错误
8. 修复部分机型下u-popup关闭时会闪烁
9. 修复u-image在nvue-app下失去宽高
10. 修复u-popup运行报错
11. 修复u-tooltip报错
12. 修复box-sizing在app下的警告
13. 修复u-navbar在小程序中报运行时错误
14. 其他修复
## 2.0.232022-01-24
# uView2.0重磅发布,利剑出鞘,一统江湖
1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题
2. 修复col组件gutter参数带rpx单位处理不正确的问题
3. 修复text组件单行时无法显示省略号的问题
4. navbar添加titleStyle参数
5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题
## 2.0.222022-01-19 ## 2.0.222022-01-19
# uView2.0重磅发布,利剑出鞘,一统江湖 # uView2.0重磅发布,利剑出鞘,一统江湖
@@ -20,11 +20,6 @@ export default {
type: String, type: String,
default: uni.$u.props.cell.icon default: uni.$u.props.cell.icon
}, },
// 标题的宽度,单位任意,数值默认为px单位
titleWidth: {
type: [String, Number],
default: uni.$u.props.cell.titleWidth
},
// 是否禁用cell // 是否禁用cell
disabled: { disabled: {
type: Boolean, type: Boolean,
@@ -47,7 +47,6 @@
* @property {String | Number} label 标题下方的描述信息 * @property {String | Number} label 标题下方的描述信息
* @property {String | Number} value 右侧的内容 * @property {String | Number} value 右侧的内容
* @property {String} icon 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) * @property {String} icon 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
* @property {String | Number} titleWidth 标题的宽度,单位任意,数值默认为px单位
* @property {Boolean} disabled 是否禁用cell * @property {Boolean} disabled 是否禁用cell
* @property {Boolean} border 是否显示下边框 (默认 true ) * @property {Boolean} border 是否显示下边框 (默认 true )
* @property {Boolean} center 内容是否垂直居中(主要是针对右侧的value部分) (默认 false ) * @property {Boolean} center 内容是否垂直居中(主要是针对右侧的value部分) (默认 false )
@@ -53,8 +53,8 @@
colStyle() { colStyle() {
const style = { const style = {
// 这里写成"padding: 0 10px"的形式是因为nvue的需要 // 这里写成"padding: 0 10px"的形式是因为nvue的需要
paddingLeft: uni.$u.addUnit(Number(this.parentData.gutter)/2), paddingLeft: uni.$u.addUnit(uni.$u.getPx(this.parentData.gutter)/2),
paddingRight: uni.$u.addUnit(Number(this.parentData.gutter)/2), paddingRight: uni.$u.addUnit(uni.$u.getPx(this.parentData.gutter)/2),
alignItems: this.uAlignItem, alignItems: this.uAlignItem,
justifyContent: this.uJustify, justifyContent: this.uJustify,
textAlign: this.textAlign, textAlign: this.textAlign,
@@ -96,6 +96,9 @@
.u-col { .u-col {
padding: 0; padding: 0;
/* #ifndef APP-NVUE */
box-sizing:border-box;
/* #endif */
/* #ifdef MP */ /* #ifdef MP */
display: block; display: block;
/* #endif */ /* #endif */
@@ -69,7 +69,7 @@
<u-line <u-line
v-if="borderBottom" v-if="borderBottom"
:color="message && parentData.errorType === 'border-bottom' ? $u.color.error : propsLine.color" :color="message && parentData.errorType === 'border-bottom' ? $u.color.error : propsLine.color"
:customStyle="`margin-top: ${message ? '5px' : 0}`" :customStyle="`margin-top: ${message && parentData.errorType === 'message' ? '5px' : 0}`"
></u-line> ></u-line>
</view> </view>
</template> </template>
@@ -90,8 +90,8 @@
setRules(rules) { setRules(rules) {
// 判断是否有规则 // 判断是否有规则
if (Object.keys(rules).length === 0) return; if (Object.keys(rules).length === 0) return;
if (Object.keys(this.model).length === 0) { if (process.env.NODE_ENV === 'development' && Object.keys(this.model).length === 0) {
uni.$u.error('设置rulesmodel必须设置!'); uni.$u.error('设置rulesmodel必须设置!如果已经设置,请刷新页面。');
return; return;
}; };
this.formRules = rules; this.formRules = rules;
@@ -116,15 +116,16 @@
props = [].concat(props); props = [].concat(props);
this.children.map((child) => { this.children.map((child) => {
// 如果u-form-item的prop在props数组中,则清除对应的校验结果信息 // 如果u-form-item的prop在props数组中,则清除对应的校验结果信息
if (props.includes(child.props)) { if (props[0] === undefined || props.includes(child.prop)) {
child.message = null; child.message = null;
} }
}); });
}, },
// 对部分表单字段进行校验 // 对部分表单字段进行校验
async validateField(value, callback, event = null) { async validateField(value, callback, event = null) {
if (Object.keys(this.formRules).length === 0) { // 开发环境才提示,生产环境不会提示
uni.$u.error('未设置rules,请看文档说明!'); if (process.env.NODE_ENV === 'development' && Object.keys(this.formRules).length === 0) {
uni.$u.error('未设置rules,请看文档说明!如果已经设置,请刷新页面。');
return; return;
} }
// $nextTick是必须的,否则model的变更,可能会延后于此方法的执行 // $nextTick是必须的,否则model的变更,可能会延后于此方法的执行
@@ -19,7 +19,9 @@
:lazy-load="lazyLoad" :lazy-load="lazyLoad"
class="u-image__image" class="u-image__image"
:style="{ :style="{
borderRadius: shape == 'circle' ? '10000px' : $u.addUnit(radius) borderRadius: shape == 'circle' ? '10000px' : $u.addUnit(radius),
width: $u.addUnit(width),
height: $u.addUnit(height)
}" }"
></image> ></image>
<view <view
@@ -74,6 +74,11 @@ export default {
autoBack: { autoBack: {
type: Boolean, type: Boolean,
default: uni.$u.props.navbar.autoBack default: uni.$u.props.navbar.autoBack
},
// 标题的样式,对象或字符串
titleStyle: {
type: [String, Object],
default: uni.$u.props.navbar.titleStyle
} }
} }
} }
@@ -45,9 +45,9 @@
<slot name="center"> <slot name="center">
<text <text
class="u-line-1 u-navbar__content__title" class="u-line-1 u-navbar__content__title"
:style="{ :style="[{
width: $u.addUnit(titleWidth) width: $u.addUnit(titleWidth),
}" }, $u.addStyle(titleStyle)]"
>{{ title }}</text> >{{ title }}</text>
</slot> </slot>
<view <view
@@ -93,6 +93,7 @@
* @property {String | Number} leftIconSize 左侧返回图标的大小(默认 20px ) * @property {String | Number} leftIconSize 左侧返回图标的大小(默认 20px )
* @property {String | Number} leftIconColor 左侧返回图标的颜色(默认 #303133 ) * @property {String | Number} leftIconColor 左侧返回图标的颜色(默认 #303133 )
* @property {Boolean} autoBack 点击左侧区域(返回图标),是否自动返回上一页(默认 false ) * @property {Boolean} autoBack 点击左侧区域(返回图标),是否自动返回上一页(默认 false )
* @property {Object | String} titleStyle 标题的样式,对象或字符串
* @event {Function} leftClick 点击左侧区域 * @event {Function} leftClick 点击左侧区域
* @event {Function} rightClick 点击右侧区域 * @event {Function} rightClick 点击右侧区域
* @example <u-navbar title="剑未配妥,出门已是江湖" left-text="返回" right-text="帮助" @click-left="onClickBack" @click-right="onClickRight"></u-navbar> * @example <u-navbar title="剑未配妥,出门已是江湖" left-text="返回" right-text="帮助" @click-left="onClickBack" @click-right="onClickRight"></u-navbar>
@@ -175,7 +176,7 @@
&__right { &__right {
right: 0; right: 0;
&__txet { &__text {
font-size: 15px; font-size: 15px;
margin-left: 3px; margin-left: 3px;
} }
@@ -4,7 +4,7 @@
:show="show" :show="show"
@click="overlayClick" @click="overlayClick"
v-if="overlay" v-if="overlay"
:duration="duration" :duration="overlayDuration"
:customStyle="overlayStyle" :customStyle="overlayStyle"
:opacity="overlayOpacity" :opacity="overlayOpacity"
></u-overlay> ></u-overlay>
@@ -55,6 +55,7 @@
* @property {Boolean} overlay 是否显示遮罩 (默认 true ) * @property {Boolean} overlay 是否显示遮罩 (默认 true )
* @property {String} mode 弹出方向(默认 'bottom' * @property {String} mode 弹出方向(默认 'bottom'
* @property {String | Number} duration 动画时长,单位ms (默认 300 ) * @property {String | Number} duration 动画时长,单位ms (默认 300 )
* @property {String | Number} overlayDuration 遮罩层动画时长,单位ms (默认 350 )
* @property {Boolean} closeable 是否显示关闭图标(默认 false ) * @property {Boolean} closeable 是否显示关闭图标(默认 false )
* @property {Object | String} overlayStyle 自定义遮罩的样式 * @property {Object | String} overlayStyle 自定义遮罩的样式
* @property {String | Number} overlayOpacity 遮罩透明度,0-1之间(默认 0.5) * @property {String | Number} overlayOpacity 遮罩透明度,0-1之间(默认 0.5)
@@ -74,7 +75,9 @@
name: 'u-popup', name: 'u-popup',
mixins: [uni.$u.mpMixin, uni.$u.mixin, props], mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
data() { data() {
return {} return {
overlayDuration: this.duration + 50
}
}, },
watch: { watch: {
show(newValue, oldValue) { show(newValue, oldValue) {
@@ -12,7 +12,6 @@
backgroundColor: bgColor, backgroundColor: bgColor,
borderRadius: shape == 'round' ? '100px' : '4px', borderRadius: shape == 'round' ? '100px' : '4px',
borderColor: borderColor, borderColor: borderColor,
height: height + 'rpx'
}" }"
> >
<template v-if="$slots.label || label !== null"> <template v-if="$slots.label || label !== null">
@@ -47,6 +46,7 @@
textAlign: inputAlign, textAlign: inputAlign,
color: color, color: color,
backgroundColor: bgColor, backgroundColor: bgColor,
height: $u.addUnit(height)
}, inputStyle]" }, inputStyle]"
/> />
<view <view
@@ -241,6 +241,7 @@ $u-search-action-margin-left: 5px !default;
border-width: 1px; border-width: 1px;
border-color: transparent; border-color: transparent;
border-style: solid; border-style: solid;
overflow: hidden;
&__icon { &__icon {
@include flex; @include flex;
@@ -28,7 +28,7 @@
:class="[`u-tabs__wrapper__nav__item-${index}`, item.disabled && 'u-tabs__wrapper__nav__item--disabled']" :class="[`u-tabs__wrapper__nav__item-${index}`, item.disabled && 'u-tabs__wrapper__nav__item--disabled']"
> >
<text <text
:class="['ellipsis' && 'u-line-1', item.disabled && 'u-tabs__wrapper__nav__item__text--disabled']" :class="[item.disabled && 'u-tabs__wrapper__nav__item__text--disabled']"
class="u-tabs__wrapper__nav__item__text" class="u-tabs__wrapper__nav__item__text"
:style="[textStyle(index)]" :style="[textStyle(index)]"
>{{ item[keyName] }}</text> >{{ item[keyName] }}</text>
@@ -165,16 +165,8 @@
let lineOffsetLeft = this.list let lineOffsetLeft = this.list
.slice(0, this.innerCurrent) .slice(0, this.innerCurrent)
.reduce((total, curr) => total + curr.rect.width, 0); .reduce((total, curr) => total + curr.rect.width, 0);
let lineWidth = this.lineWidth; // 拷贝副本,防止间接修改props中的值 // 获取下划线的数值px表示法
// 如果lineWidth不是数字类型的话 const lineWidth = uni.$u.getPx(this.lineWidth);
if (typeof lineWidth !== 'number') {
// 判断后缀是否为rpx
if (lineWidth.indexOf('rpx') > -1) {
lineWidth = uni.upx2px(parseFloat(lineWidth)); // rpx -> px
} else {
lineWidth = parseFloat(lineWidth);
}
}
this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2 this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2
// #ifdef APP-NVUE // #ifdef APP-NVUE
// 第一次移动滑块,无需过渡时间 // 第一次移动滑块,无需过渡时间
@@ -330,7 +322,6 @@
@include flex; @include flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
flex: 1;
&--disabled { &--disabled {
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
@@ -165,6 +165,9 @@ export default {
align-items: center; align-items: center;
flex-wrap: nowrap; flex-wrap: nowrap;
flex: 1; flex: 1;
/* #ifndef APP-NVUE */
width: 100%;
/* #endif */
&__price { &__price {
font-size: 14px; font-size: 14px;
@@ -64,11 +64,10 @@
v-if="showCopy && buttons.length > 0" v-if="showCopy && buttons.length > 0"
length="18" length="18"
></u-line> ></u-line>
<template v-for="(item , index) in buttons"> <block v-for="(item , index) in buttons" :key="index">
<view <view
class="u-tooltip__wrapper__popup__list__btn" class="u-tooltip__wrapper__popup__list__btn"
hover-class="u-tooltip__wrapper__popup__list__btn--hover" hover-class="u-tooltip__wrapper__popup__list__btn--hover"
:key="index"
> >
<text <text
class="u-tooltip__wrapper__popup__list__btn__text" class="u-tooltip__wrapper__popup__list__btn__text"
@@ -80,9 +79,8 @@
color="#8d8e90" color="#8d8e90"
v-if="index < buttons.length - 1" v-if="index < buttons.length - 1"
length="18" length="18"
:key="index"
></u-line> ></u-line>
</template> </block>
</view> </view>
</view> </view>
</u-transition> </u-transition>
@@ -1,5 +1,5 @@
// 此版本发布于2022-01-20 // 此版本发布于2022-01-28
const version = '2.0.22' const version = '2.0.27'
// 开发环境才提示,生产环境不会提示 // 开发环境才提示,生产环境不会提示
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
@@ -15,7 +15,6 @@ export default {
label: '', label: '',
value: '', value: '',
icon: '', icon: '',
titleWidth: '',
disabled: false, disabled: false,
border: true, border: true,
center: false, center: false,
@@ -25,7 +25,8 @@ export default {
height: '44px', height: '44px',
leftIconSize: 20, leftIconSize: 20,
leftIconColor: color.mainColor, leftIconColor: color.mainColor,
autoBack: false autoBack: false,
titleStyle: ''
} }
} }
@@ -30,7 +30,7 @@ export default {
animation: false, animation: false,
value: '', value: '',
maxlength: '-1', maxlength: '-1',
height: 64, height: 32,
label: null label: null
} }
} }
@@ -7,11 +7,12 @@
lines: $i; lines: $i;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
flex: 1;
/* #endif */ /* #endif */
/* #ifndef APP-NVUE */ /* #ifndef APP-NVUE */
// vue下,单行和多行显示省略号需要单独处理 // vue下,单行和多行显示省略号需要单独处理
@if $i == 1 { @if $i == '1' {
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -18,16 +18,16 @@ function range(min = 0, max = 0, value = 0) {
*/ */
function getPx(value, unit = false) { function getPx(value, unit = false) {
if (test.number(value)) { if (test.number(value)) {
return unit ? `${value}px` : value return unit ? `${value}px` : Number(value)
} }
// 如果带有rpx,先取出其数值部分,再转为px值 // 如果带有rpx,先取出其数值部分,再转为px值
if (/(rpx|upx)$/.test(value)) { if (/(rpx|upx)$/.test(value)) {
return unit ? `${uni.upx2px(parseInt(value))}px` : uni.upx2px(parseInt(value)) return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)))
} }
return unit ? `${parseInt(value)}px` : parseInt(value) return unit ? `${parseInt(value)}px` : parseInt(value)
} }
/** /**
* @description 进行延时,以达到可以简写代码的目的 比如: await uni.$u.sleep(20)将会阻塞20ms * @description 进行延时,以达到可以简写代码的目的 比如: await uni.$u.sleep(20)将会阻塞20ms
* @param {number} value 堵塞时间 单位ms 毫秒 * @param {number} value 堵塞时间 单位ms 毫秒
* @returns {Promise} 返回promise * @returns {Promise} 返回promise
@@ -39,7 +39,7 @@ function sleep(value = 30) {
}, value) }, value)
}) })
} }
/** /**
* @description 运行期判断平台 * @description 运行期判断平台
* @returns {string} 返回所在平台(小写) * @returns {string} 返回所在平台(小写)
* @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台 * @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台
@@ -47,7 +47,7 @@ function sleep(value = 30) {
function os() { function os() {
return uni.getSystemInfoSync().platform.toLowerCase() return uni.getSystemInfoSync().platform.toLowerCase()
} }
/** /**
* @description 获取系统信息同步接口 * @description 获取系统信息同步接口
* @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync
*/ */
@@ -102,13 +102,13 @@ function guid(len = 32, firstU = true, radix = null) {
return uuid.join('') return uuid.join('')
} }
/** /**
* @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法 * @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
值(默认为undefined),就是查找最顶层的$parent 值(默认为undefined),就是查找最顶层的$parent
* @param {string|undefined} name 父组件的参数名 * @param {string|undefined} name 父组件的参数名
*/ */
function $parent(name = undefined) { function $parent(name = undefined) {
let parent = this.$parent let parent = this.$parent
// 通过while历遍,这里主要是为了H5需要多层解析的问题 // 通过while历遍,这里主要是为了H5需要多层解析的问题
@@ -133,8 +133,8 @@ function $parent(name = undefined) {
*/ */
function addStyle(customStyle, target = 'object') { function addStyle(customStyle, target = 'object') {
// 字符串转字符串,对象转对象情形,直接返回 // 字符串转字符串,对象转对象情形,直接返回
if (test.empty(customStyle) || typeof (customStyle) === 'object' && target === 'object' || target === 'string' if (test.empty(customStyle) || typeof(customStyle) === 'object' && target === 'object' || target === 'string' &&
&& typeof (customStyle) === 'string') { typeof(customStyle) === 'string') {
return customStyle return customStyle
} }
// 字符串转对象 // 字符串转对象
@@ -170,7 +170,7 @@ function addStyle(customStyle, target = 'object') {
* @param {string|number} value 需要添加单位的值 * @param {string|number} value 需要添加单位的值
* @param {string} unit 添加的单位名 比如px * @param {string} unit 添加的单位名 比如px
*/ */
function addUnit(value = 'auto', unit = 'px') { function addUnit(value = 'auto', unit = uni?.$u?.config?.unit ?? 'px') {
value = String(value) value = String(value)
// 用uView内置验证规则中的number判断是否为数值 // 用uView内置验证规则中的number判断是否为数值
return test.number(value) ? `${value}${unit}` : value return test.number(value) ? `${value}${unit}` : value
@@ -250,7 +250,7 @@ function randomArray(array = []) {
// 所以这里做一个兼容polyfill的兼容处理 // 所以这里做一个兼容polyfill的兼容处理
if (!String.prototype.padStart) { if (!String.prototype.padStart) {
// 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解 // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
String.prototype.padStart = function (maxLength, fillString = ' ') { String.prototype.padStart = function(maxLength, fillString = ' ') {
if (Object.prototype.toString.call(fillString) !== '[object String]') { if (Object.prototype.toString.call(fillString) !== '[object String]') {
throw new TypeError( throw new TypeError(
'fillString must be String' 'fillString must be String'
@@ -357,11 +357,14 @@ function trim(str, pos = 'both') {
str = String(str) str = String(str)
if (pos == 'both') { if (pos == 'both') {
return str.replace(/^\s+|\s+$/g, '') return str.replace(/^\s+|\s+$/g, '')
} if (pos == 'left') { }
if (pos == 'left') {
return str.replace(/^\s*/, '') return str.replace(/^\s*/, '')
} if (pos == 'right') { }
if (pos == 'right') {
return str.replace(/(\s*$)/g, '') return str.replace(/(\s*$)/g, '')
} if (pos == 'all') { }
if (pos == 'all') {
return str.replace(/\s+/g, '') return str.replace(/\s+/g, '')
} }
return str return str
@@ -472,7 +475,7 @@ function type2icon(type = 'success', fill = false) {
return iconName return iconName
} }
/** /**
* @description 数字格式化 * @description 数字格式化
* @param {number|string} number 要格式化的数字 * @param {number|string} number 要格式化的数字
* @param {number} decimals 保留几位小数 * @param {number} decimals 保留几位小数
@@ -487,9 +490,9 @@ function priceFormat(number, decimals = 0, decimalPoint = '.', thousandsSeparato
const sep = (typeof thousandsSeparator === 'undefined') ? ',' : thousandsSeparator const sep = (typeof thousandsSeparator === 'undefined') ? ',' : thousandsSeparator
const dec = (typeof decimalPoint === 'undefined') ? '.' : decimalPoint const dec = (typeof decimalPoint === 'undefined') ? '.' : decimalPoint
let s = '' let s = ''
const toFixedFix = function (n, prec) { const toFixedFix = function(n, prec) {
const k = 10 ** prec const k = 10 ** prec
return `${Math.ceil(n * k) / k}` return `${Math.ceil(parseInt(n * k)) / k}`
} }
s = (prec ? toFixedFix(n, prec) : `${Math.round(n)}`).split('.') s = (prec ? toFixedFix(n, prec) : `${Math.round(n)}`).split('.')
@@ -543,7 +546,7 @@ function formValidate(instance, event) {
// 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法 // 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法
// 同时将form-item的pros传递给form,让其进行精确对象验证 // 同时将form-item的pros传递给form,让其进行精确对象验证
if (formItem && form) { if (formItem && form) {
form.validateField(formItem.prop, () => { }, event) form.validateField(formItem.prop, () => {}, event)
} }
} }
@@ -559,7 +562,8 @@ function getProperty(obj, key) {
} }
if (typeof key !== 'string' || key === '') { if (typeof key !== 'string' || key === '') {
return '' return ''
} if (key.indexOf('.') !== -1) { }
if (key.indexOf('.') !== -1) {
const keys = key.split('.') const keys = key.split('.')
let firstObj = obj[keys[0]] || {} let firstObj = obj[keys[0]] || {}
@@ -584,7 +588,7 @@ function setProperty(obj, key, value) {
return return
} }
// 递归赋值 // 递归赋值
const inFn = function (_obj, keys, v) { const inFn = function(_obj, keys, v) {
// 最后一个属性key // 最后一个属性key
if (keys.length === 1) { if (keys.length === 1) {
_obj[keys[0]] = v _obj[keys[0]] = v
@@ -629,6 +633,28 @@ function pages() {
return pages return pages
} }
/**
* @description 修改uView内置属性值
* @param {object} props 修改内置props属性
* @param {object} config 修改内置config属性
* @param {object} color 修改内置color属性
* @param {object} zIndex 修改内置zIndex属性
*/
function setConfig({
props = {},
config = {},
color = {},
zIndex = {}
}) {
const {
deepMerge,
} = uni.$u
uni.$u.config = deepMerge(uni.$u.config, config)
uni.$u.props = deepMerge(uni.$u.props, props)
uni.$u.color = deepMerge(uni.$u.color, color)
uni.$u.zIndex = deepMerge(uni.$u.zIndex, zIndex)
}
export default { export default {
range, range,
getPx, getPx,
@@ -657,5 +683,6 @@ export default {
getProperty, getProperty,
setProperty, setProperty,
page, page,
pages pages,
setConfig
} }
@@ -2,7 +2,7 @@
"id": "uview-ui", "id": "uview-ui",
"name": "uview-ui", "name": "uview-ui",
"displayName": "uView2.0重磅发布,利剑出鞘,一统江湖", "displayName": "uView2.0重磅发布,利剑出鞘,一统江湖",
"version": "2.0.22", "version": "2.0.27",
"description": "uView UI已完美兼容nvue,全面的组件和便捷的工具会让您信手拈来,如鱼得水", "description": "uView UI已完美兼容nvue,全面的组件和便捷的工具会让您信手拈来,如鱼得水",
"keywords": [ "keywords": [
"uview", "uview",
+12
View File
@@ -771,6 +771,18 @@
</summary> </summary>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.ToolsController.MiNiShopOpenComponent2_UploadImg">
<summary>
自定义交易组件上传图片
</summary>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.Admin.Controllers.ToolsController.MiNiShopOpenComponent2_UploadImgByBase64(CoreCms.Net.Model.FromBody.FMBase64Post)">
<summary>
自定义交易组件上传图片(Base64)
</summary>
<returns></returns>
</member>
<member name="T:CoreCms.Net.Web.Admin.Controllers.CoreCmsDistributionController"> <member name="T:CoreCms.Net.Web.Admin.Controllers.CoreCmsDistributionController">
<summary> <summary>
分销商表 分销商表
@@ -54,9 +54,6 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">重量</label>
<div class="layui-input-inline layui-inline-3 layui-form-mid">{{d.params.data.model.weight }}</div>
<label class="layui-form-label">单位</label> <label class="layui-form-label">单位</label>
<div class="layui-input-inline layui-inline-3 layui-form-mid">{{d.params.data.model.unit }}</div> <div class="layui-input-inline layui-inline-3 layui-form-mid">{{d.params.data.model.unit }}</div>
@@ -1,295 +0,0 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<div class="layui-form coreshop-form" lay-filter="LAY-app-CoreCmsGoods-createForm" id="LAY-app-CoreCmsGoods-createForm">
<div class="layui-form-item">
<label for="id" class="layui-form-label">商品ID</label>
<div class="layui-input-inline">
<input name="id" id="id" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【商品ID】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="bn" class="layui-form-label">商品编码</label>
<div class="layui-input-inline">
<input name="bn" id="bn" lay-verType="tips" lay-verify="required|verifybn" class="layui-input" lay-reqText="请输入【商品编码】" />
</div>
</div>
<div class="layui-form-item">
<label for="name" class="layui-form-label">商品名称</label>
<div class="layui-input-inline">
<input name="name" id="name" lay-verType="tips" lay-verify="required|verifyname" class="layui-input" lay-reqText="请输入【商品名称】" />
</div>
</div>
<div class="layui-form-item">
<label for="brief" class="layui-form-label">商品简介</label>
<div class="layui-input-inline">
<input name="brief" id="brief" lay-verType="tips" lay-verify="required|verifybrief" class="layui-input" lay-reqText="请输入【商品简介】" />
</div>
</div>
<div class="layui-form-item">
<label for="price" class="layui-form-label">商品价格</label>
<div class="layui-input-inline">
<input name="price" id="price" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品价格】" />
</div>
</div>
<div class="layui-form-item">
<label for="costprice" class="layui-form-label">成本价</label>
<div class="layui-input-inline">
<input name="costprice" id="costprice" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【成本价】" />
</div>
</div>
<div class="layui-form-item">
<label for="mktprice" class="layui-form-label">市场价</label>
<div class="layui-input-inline">
<input name="mktprice" id="mktprice" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【市场价】" />
</div>
</div>
<div class="layui-form-item">
<label for="imageIds" class="layui-form-label">默认图片 图片id</label>
<div class="layui-input-inline">
<input name="imageIds" id="imageIds" lay-verType="tips" lay-verify="required|verifyimageIds" class="layui-input" lay-reqText="请输入【默认图片 图片id】" />
</div>
</div>
<div class="layui-form-item">
<label for="goodsCategoryId" class="layui-form-label">商品分类ID 关联category.id</label>
<div class="layui-input-inline">
<input name="goodsCategoryId" id="goodsCategoryId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【商品分类ID 关联category.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="goodsTypeId" class="layui-form-label">商品类别ID 关联goods_type.id</label>
<div class="layui-input-inline">
<input name="goodsTypeId" id="goodsTypeId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【商品类别ID 关联goods_type.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="brandId" class="layui-form-label">品牌ID 关联brand.id</label>
<div class="layui-input-inline">
<input name="brandId" id="brandId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【品牌ID 关联brand.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="isNomalVirtual" class="layui-form-label">是否虚拟商品</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isNomalVirtual" id="isNomalVirtual" lay-skin="switch" lay-text="关闭|开启">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isMarketable" class="layui-form-label">是否上架</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isMarketable" id="isMarketable" lay-skin="switch" lay-text="关闭|开启">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="stock" class="layui-form-label">库存</label>
<div class="layui-input-inline">
<input name="stock" id="stock" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【库存】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="freezeStock" class="layui-form-label">冻结库存</label>
<div class="layui-input-inline">
<input name="freezeStock" id="freezeStock" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【冻结库存】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="weight" class="layui-form-label">重量</label>
<div class="layui-input-inline">
<input name="weight" id="weight" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【重量】" />
</div>
</div>
<div class="layui-form-item">
<label for="unit" class="layui-form-label">商品单位</label>
<div class="layui-input-inline">
<input name="unit" id="unit" lay-verType="tips" lay-verify="required|verifyunit" class="layui-input" lay-reqText="请输入【商品单位】" />
</div>
</div>
<div class="layui-form-item">
<label for="intro" class="layui-form-label">商品详情</label>
<div class="layui-input-inline">
<input name="intro" id="intro" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品详情】" />
</div>
</div>
<div class="layui-form-item">
<label for="spes_desc" class="layui-form-label">商品规格序列号存储</label>
<div class="layui-input-inline">
<input name="spes_desc" id="spes_desc" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品规格序列号存储】" />
</div>
</div>
<div class="layui-form-item">
<label for="parameters" class="layui-form-label">参数序列化</label>
<div class="layui-input-inline">
<input name="parameters" id="parameters" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【参数序列化】" />
</div>
</div>
<div class="layui-form-item">
<label for="commentsCount" class="layui-form-label">评论次数</label>
<div class="layui-input-inline">
<input name="commentsCount" id="commentsCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【评论次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="viewCount" class="layui-form-label">浏览次数</label>
<div class="layui-input-inline">
<input name="viewCount" id="viewCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【浏览次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="buyCount" class="layui-form-label">购买次数</label>
<div class="layui-input-inline">
<input name="buyCount" id="buyCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【购买次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="uptime" class="layui-form-label">上架时间</label>
<div class="layui-input-inline">
<input name="uptime" id="createTime-CoreCmsGoods-uptime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【上架时间】" />
</div>
</div>
<div class="layui-form-item">
<label for="downtime" class="layui-form-label">下架时间</label>
<div class="layui-input-inline">
<input name="downtime" id="createTime-CoreCmsGoods-downtime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【下架时间】" />
</div>
</div>
<div class="layui-form-item">
<label for="sort" class="layui-form-label">商品排序</label>
<div class="layui-input-inline">
<input name="sort" id="sort" lay-verType="tips" lay-verify="required|number" class="layui-input" value="1" lay-reqText="请输入【商品排序】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="labelIds" class="layui-form-label">标签id逗号分隔</label>
<div class="layui-input-inline">
<input name="labelIds" id="labelIds" lay-verType="tips" lay-verify="required|verifylabelIds" class="layui-input" lay-reqText="请输入【标签id逗号分隔】" />
</div>
</div>
<div class="layui-form-item">
<label for="newSpec" class="layui-form-label">自定义规格名称</label>
<div class="layui-input-inline">
<input name="newSpec" id="newSpec" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【自定义规格名称】" />
</div>
</div>
<div class="layui-form-item">
<label for="createTime" class="layui-form-label">创建时间</label>
<div class="layui-input-inline">
<input name="createTime" id="createTime-CoreCmsGoods-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【创建时间】" />
</div>
</div>
<div class="layui-form-item">
<label for="updateTime" class="layui-form-label">更新时间</label>
<div class="layui-input-inline">
<input name="updateTime" id="createTime-CoreCmsGoods-updateTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【更新时间】" />
</div>
</div>
<div class="layui-form-item">
<label for="isRecommend" class="layui-form-label">是否推荐</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isRecommend" id="isRecommend" lay-skin="switch" lay-text="关闭|开启">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isHot" class="layui-form-label">是否热门</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isHot" id="isHot" lay-skin="switch" lay-text="关闭|开启">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isDel" class="layui-form-label">是否删除</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isDel" id="isDel" lay-skin="switch" lay-text="关闭|开启">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsGoods-createForm-submit" id="LAY-app-CoreCmsGoods-createForm-submit" value="确认添加">
</div>
</div>
</script>
<script>
layui.data.done = function (d) {
layui.use(['admin', 'form', 'laydate','coreHelper'],
function() {
var $ = layui.$
, form = layui.form
, admin = layui.admin
, laydate = layui.laydate
, coreHelper = layui.coreHelper;
laydate.render({
elem: '#createTime-CoreCmsGoods-uptime',
type: 'datetime'
});
laydate.render({
elem: '#createTime-CoreCmsGoods-downtime',
type: 'datetime'
});
laydate.render({
elem: '#createTime-CoreCmsGoods-createTime',
type: 'datetime'
});
laydate.render({
elem: '#createTime-CoreCmsGoods-updateTime',
type: 'datetime'
});
form.verify({
verifybn: [/^[\S]{0,30}$/,'商品编码最大只允许输入30位字符,且不能出现空格'],
verifyname: [/^[\S]{0,200}$/,'商品名称最大只允许输入200位字符,且不能出现空格'],
verifybrief: [/^[\S]{0,255}$/,'商品简介最大只允许输入255位字符,且不能出现空格'],
verifyimageIds: [/^[\S]{0,255}$/,'默认图片 图片id最大只允许输入255位字符,且不能出现空格'],
verifyunit: [/^[\S]{0,20}$/,'商品单位最大只允许输入20位字符,且不能出现空格'],
verifylabelIds: [/^[\S]{0,50}$/,'标签id逗号分隔最大只允许输入50位字符,且不能出现空格'],
});
//重载form
form.render(null, 'LAY-app-CoreCmsGoods-createForm');
})
};
</script>
@@ -1,319 +0,0 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsGoods-detailsForm" id="LAY-app-CoreCmsGoods-detailsForm">
<colgroup>
<col width="150">
<col>
</colgroup>
<tbody>
<tr>
<td>
<label for="id">商品ID</label>
</td>
<td>
{{ d.params.data.id || '' }}
</td>
</tr>
<tr>
<td>
<label for="bn">商品编码</label>
</td>
<td>
{{ d.params.data.bn || '' }}
</td>
</tr>
<tr>
<td>
<label for="name">商品名称</label>
</td>
<td>
{{ d.params.data.name || '' }}
</td>
</tr>
<tr>
<td>
<label for="brief">商品简介</label>
</td>
<td>
{{ d.params.data.brief || '' }}
</td>
</tr>
<tr>
<td>
<label for="price">商品价格</label>
</td>
<td>
{{ d.params.data.price || '' }}
</td>
</tr>
<tr>
<td>
<label for="costprice">成本价</label>
</td>
<td>
{{ d.params.data.costprice || '' }}
</td>
</tr>
<tr>
<td>
<label for="mktprice">市场价</label>
</td>
<td>
{{ d.params.data.mktprice || '' }}
</td>
</tr>
<tr>
<td>
<label for="imageIds">默认图片 图片id</label>
</td>
<td>
{{ d.params.data.imageIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsCategoryId">商品分类ID 关联category.id</label>
</td>
<td>
{{ d.params.data.goodsCategoryId || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsTypeId">商品类别ID 关联goods_type.id</label>
</td>
<td>
{{ d.params.data.goodsTypeId || '' }}
</td>
</tr>
<tr>
<td>
<label for="brandId">品牌ID 关联brand.id</label>
</td>
<td>
{{ d.params.data.brandId || '' }}
</td>
</tr>
<tr>
<td>
<label for="isNomalVirtual">是否虚拟商品</label>
</td>
<td>
<input type="checkbox" disabled name="isNomalVirtual" value="{{d.params.data.isNomalVirtual}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isNomalVirtual" {{ d.params.data.isNomalVirtual ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isMarketable">是否上架</label>
</td>
<td>
<input type="checkbox" disabled name="isMarketable" value="{{d.params.data.isMarketable}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isMarketable" {{ d.params.data.isMarketable ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="stock">库存</label>
</td>
<td>
{{ d.params.data.stock || '' }}
</td>
</tr>
<tr>
<td>
<label for="freezeStock">冻结库存</label>
</td>
<td>
{{ d.params.data.freezeStock || '' }}
</td>
</tr>
<tr>
<td>
<label for="weight">重量</label>
</td>
<td>
{{ d.params.data.weight || '' }}
</td>
</tr>
<tr>
<td>
<label for="unit">商品单位</label>
</td>
<td>
{{ d.params.data.unit || '' }}
</td>
</tr>
<tr>
<td>
<label for="intro">商品详情</label>
</td>
<td>
{{ d.params.data.intro || '' }}
</td>
</tr>
<tr>
<td>
<label for="spes_desc">商品规格序列号存储</label>
</td>
<td>
{{ d.params.data.spes_desc || '' }}
</td>
</tr>
<tr>
<td>
<label for="parameters">参数序列化</label>
</td>
<td>
{{ d.params.data.parameters || '' }}
</td>
</tr>
<tr>
<td>
<label for="commentsCount">评论次数</label>
</td>
<td>
{{ d.params.data.commentsCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="viewCount">浏览次数</label>
</td>
<td>
{{ d.params.data.viewCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="buyCount">购买次数</label>
</td>
<td>
{{ d.params.data.buyCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="uptime">上架时间</label>
</td>
<td>
{{ d.params.data.uptime || '' }}
</td>
</tr>
<tr>
<td>
<label for="downtime">下架时间</label>
</td>
<td>
{{ d.params.data.downtime || '' }}
</td>
</tr>
<tr>
<td>
<label for="sort">商品排序</label>
</td>
<td>
{{ d.params.data.sort || '' }}
</td>
</tr>
<tr>
<td>
<label for="labelIds">标签id逗号分隔</label>
</td>
<td>
{{ d.params.data.labelIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="newSpec">自定义规格名称</label>
</td>
<td>
{{ d.params.data.newSpec || '' }}
</td>
</tr>
<tr>
<td>
<label for="createTime">创建时间</label>
</td>
<td>
{{ d.params.data.createTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="updateTime">更新时间</label>
</td>
<td>
{{ d.params.data.updateTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="isRecommend">是否推荐</label>
</td>
<td>
<input type="checkbox" disabled name="isRecommend" value="{{d.params.data.isRecommend}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isRecommend" {{ d.params.data.isRecommend ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isHot">是否热门</label>
</td>
<td>
<input type="checkbox" disabled name="isHot" value="{{d.params.data.isHot}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isHot" {{ d.params.data.isHot ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isDel">是否删除</label>
</td>
<td>
<input type="checkbox" disabled name="isDel" value="{{d.params.data.isDel}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isDel" {{ d.params.data.isDel ? 'checked' : '' }}>
</td>
</tr>
</tbody>
</table>
</script>
<script>
layui.data.done = function (d) {
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-CoreCmsGoods-detailsForm');
});
};
</script>
@@ -1,295 +0,0 @@
<script type="text/html" template lay-done="layui.data.sendParams(d);">
<div class="layui-form coreshop-form" lay-filter="LAY-app-CoreCmsGoods-editForm" id="LAY-app-CoreCmsGoods-editForm">
<input type="hidden" name="id" id="id" value="{{d.params.data.id || '' }}" />
<div class="layui-form-item">
<label for="id" class="layui-form-label">商品ID</label>
<div class="layui-input-inline">
<input name="id" id="id" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.id || '' }}" lay-reqText="请输入【商品ID】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="bn" class="layui-form-label">商品编码</label>
<div class="layui-input-inline">
<input name="bn" id="bn" lay-verType="tips" lay-verify="required|verifybn" class="layui-input" lay-reqText="请输入【商品编码】" value="{{d.params.data.bn || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="name" class="layui-form-label">商品名称</label>
<div class="layui-input-inline">
<input name="name" id="name" lay-verType="tips" lay-verify="required|verifyname" class="layui-input" lay-reqText="请输入【商品名称】" value="{{d.params.data.name || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="brief" class="layui-form-label">商品简介</label>
<div class="layui-input-inline">
<input name="brief" id="brief" lay-verType="tips" lay-verify="required|verifybrief" class="layui-input" lay-reqText="请输入【商品简介】" value="{{d.params.data.brief || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="price" class="layui-form-label">商品价格</label>
<div class="layui-input-inline">
<input name="price" id="price" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品价格】" value="{{d.params.data.price || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="costprice" class="layui-form-label">成本价</label>
<div class="layui-input-inline">
<input name="costprice" id="costprice" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【成本价】" value="{{d.params.data.costprice || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="mktprice" class="layui-form-label">市场价</label>
<div class="layui-input-inline">
<input name="mktprice" id="mktprice" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【市场价】" value="{{d.params.data.mktprice || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="imageIds" class="layui-form-label">默认图片 图片id</label>
<div class="layui-input-inline">
<input name="imageIds" id="imageIds" lay-verType="tips" lay-verify="required|verifyimageIds" class="layui-input" lay-reqText="请输入【默认图片 图片id】" value="{{d.params.data.imageIds || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="goodsCategoryId" class="layui-form-label">商品分类ID 关联category.id</label>
<div class="layui-input-inline">
<input name="goodsCategoryId" id="goodsCategoryId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.goodsCategoryId || '' }}" lay-reqText="请输入【商品分类ID 关联category.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="goodsTypeId" class="layui-form-label">商品类别ID 关联goods_type.id</label>
<div class="layui-input-inline">
<input name="goodsTypeId" id="goodsTypeId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.goodsTypeId || '' }}" lay-reqText="请输入【商品类别ID 关联goods_type.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="brandId" class="layui-form-label">品牌ID 关联brand.id</label>
<div class="layui-input-inline">
<input name="brandId" id="brandId" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.brandId || '' }}" lay-reqText="请输入【品牌ID 关联brand.id】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="isNomalVirtual" class="layui-form-label">是否虚拟商品</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isNomalVirtual" id="isNomalVirtual" {{ d.params.data.isNomalVirtual ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isMarketable" class="layui-form-label">是否上架</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isMarketable" id="isMarketable" {{ d.params.data.isMarketable ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="stock" class="layui-form-label">库存</label>
<div class="layui-input-inline">
<input name="stock" id="stock" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.stock || '' }}" lay-reqText="请输入【库存】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="freezeStock" class="layui-form-label">冻结库存</label>
<div class="layui-input-inline">
<input name="freezeStock" id="freezeStock" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.freezeStock || '' }}" lay-reqText="请输入【冻结库存】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="weight" class="layui-form-label">重量</label>
<div class="layui-input-inline">
<input name="weight" id="weight" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【重量】" value="{{d.params.data.weight || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="unit" class="layui-form-label">商品单位</label>
<div class="layui-input-inline">
<input name="unit" id="unit" lay-verType="tips" lay-verify="required|verifyunit" class="layui-input" lay-reqText="请输入【商品单位】" value="{{d.params.data.unit || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="intro" class="layui-form-label">商品详情</label>
<div class="layui-input-inline">
<input name="intro" id="intro" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品详情】" value="{{d.params.data.intro || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="spes_desc" class="layui-form-label">商品规格序列号存储</label>
<div class="layui-input-inline">
<input name="spes_desc" id="spes_desc" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【商品规格序列号存储】" value="{{d.params.data.spes_desc || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="parameters" class="layui-form-label">参数序列化</label>
<div class="layui-input-inline">
<input name="parameters" id="parameters" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【参数序列化】" value="{{d.params.data.parameters || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="commentsCount" class="layui-form-label">评论次数</label>
<div class="layui-input-inline">
<input name="commentsCount" id="commentsCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.commentsCount || '' }}" lay-reqText="请输入【评论次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="viewCount" class="layui-form-label">浏览次数</label>
<div class="layui-input-inline">
<input name="viewCount" id="viewCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.viewCount || '' }}" lay-reqText="请输入【浏览次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="buyCount" class="layui-form-label">购买次数</label>
<div class="layui-input-inline">
<input name="buyCount" id="buyCount" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.buyCount || '' }}" lay-reqText="请输入【购买次数】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="uptime" class="layui-form-label">上架时间</label>
<div class="layui-input-inline">
<input name="uptime" id="editTime-CoreCmsGoods-uptime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【上架时间】" value="{{d.params.data.uptime || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="downtime" class="layui-form-label">下架时间</label>
<div class="layui-input-inline">
<input name="downtime" id="editTime-CoreCmsGoods-downtime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【下架时间】" value="{{d.params.data.downtime || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="sort" class="layui-form-label">商品排序</label>
<div class="layui-input-inline">
<input name="sort" id="sort" lay-verType="tips" lay-verify="required|number" class="layui-input" value="{{d.params.data.sort || '' }}" lay-reqText="请输入【商品排序】并为数字" />
</div>
</div>
<div class="layui-form-item">
<label for="labelIds" class="layui-form-label">标签id逗号分隔</label>
<div class="layui-input-inline">
<input name="labelIds" id="labelIds" lay-verType="tips" lay-verify="required|verifylabelIds" class="layui-input" lay-reqText="请输入【标签id逗号分隔】" value="{{d.params.data.labelIds || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="newSpec" class="layui-form-label">自定义规格名称</label>
<div class="layui-input-inline">
<input name="newSpec" id="newSpec" lay-verType="tips" lay-verify="required" class="layui-input" lay-reqText="请输入【自定义规格名称】" value="{{d.params.data.newSpec || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="createTime" class="layui-form-label">创建时间</label>
<div class="layui-input-inline">
<input name="createTime" id="editTime-CoreCmsGoods-createTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【创建时间】" value="{{d.params.data.createTime || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="updateTime" class="layui-form-label">更新时间</label>
<div class="layui-input-inline">
<input name="updateTime" id="editTime-CoreCmsGoods-updateTime" type="text" lay-verType="tips" lay-verify="required|datetime" class="layui-input" lay-reqText="请输入【更新时间】" value="{{d.params.data.updateTime || '' }}" />
</div>
</div>
<div class="layui-form-item">
<label for="isRecommend" class="layui-form-label">是否推荐</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isRecommend" id="isRecommend" {{ d.params.data.isRecommend ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isHot" class="layui-form-label">是否热门</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isHot" id="isHot" {{ d.params.data.isHot ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label for="isDel" class="layui-form-label">是否删除</label>
<div class="layui-input-inline">
<input type="checkbox" lay-filter="switch" name="isDel" id="isDel" {{ d.params.data.isDel ? 'checked' : '' }} lay-skin="switch" lay-text="开启|关闭">
</div>
<div class="layui-inline">
<div class="layui-form-mid layui-word-aux"></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label"></label>
<input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-CoreCmsGoods-editForm-submit" id="LAY-app-CoreCmsGoods-editForm-submit" value="确认编辑">
</div>
</div>
</script>
<script>
layui.data.sendParams = function (d) {
layui.use(['admin', 'form', 'laydate', 'coreHelper'],
function () {
var $ = layui.$
, form = layui.form
, admin = layui.admin
, laydate = layui.laydate
, coreHelper = layui.coreHelper;
laydate.render({
elem: '#editTime-CoreCmsGoods-uptime',
type: 'datetime'
});
laydate.render({
elem: '#editTime-CoreCmsGoods-downtime',
type: 'datetime'
});
laydate.render({
elem: '#editTime-CoreCmsGoods-createTime',
type: 'datetime'
});
laydate.render({
elem: '#editTime-CoreCmsGoods-updateTime',
type: 'datetime'
});
form.verify({
verifybn: [/^[\S]{0,30}$/,'商品编码最大只允许输入30位字符,且不能出现空格'],
verifyname: [/^[\S]{0,200}$/,'商品名称最大只允许输入200位字符,且不能出现空格'],
verifybrief: [/^[\S]{0,255}$/,'商品简介最大只允许输入255位字符,且不能出现空格'],
verifyimageIds: [/^[\S]{0,255}$/,'默认图片 图片id最大只允许输入255位字符,且不能出现空格'],
verifyunit: [/^[\S]{0,20}$/,'商品单位最大只允许输入20位字符,且不能出现空格'],
verifylabelIds: [/^[\S]{0,50}$/,'标签id逗号分隔最大只允许输入50位字符,且不能出现空格'],
});
//重载form
form.render(null, 'LAY-app-CoreCmsGoods-editForm');
})
};
</script>
@@ -1,455 +0,0 @@
<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="{{ layui.setter.apiUrl }}Api/CoreCmsGoods/GetIndex" lay-done="layui.data.done(d);">
<div class="layui-form coreshop-toolbar-search-form">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" for="bn">商品编码</label>
<div class="layui-input-inline">
<input type="text" name="bn" id="bn" placeholder="请输入商品编码" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" for="name">商品名称</label>
<div class="layui-input-inline">
<input type="text" name="name" id="name" placeholder="请输入商品名称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" for="goodsCategoryId">商品分类</label>
<div class="layui-input-inline">
<input type="text" name="goodsCategoryId" id="goodsCategoryId" placeholder="请输入商品分类ID 关联category.id" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" for="goodsTypeId">商品类别</label>
<div class="layui-input-inline">
<input type="text" name="goodsTypeId" id="goodsTypeId" placeholder="请输入商品类别ID 关联goods_type.id" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" for="isMarketable">是否上架</label>
<div class="layui-input-inline">
<select name="isMarketable" id="isMarketable">
<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-CoreCmsGoods-search"><i class="layui-icon layui-icon-search"></i></button>
</div>
</div>
</div>
</script>
<div class="table-body">
<table id="LAY-app-CoreCmsGoods-tableBox" lay-filter="LAY-app-CoreCmsGoods-tableBox"></table>
</div>
<script type="text/html" id="LAY-app-CoreCmsGoods-toolbar">
<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>
<button class="layui-btn layui-btn-sm" lay-event="batchDelete"><i class="layui-icon layui-icon-delete"></i></button>
<button class="layui-btn layui-btn-sm" lay-event="selectExportExcel"><i class="layui-icon layui-icon-add-circle"></i></button>
<button class="layui-btn layui-btn-sm" lay-event="queryExportExcel"><i class="layui-icon layui-icon-download-circle"></i></button>
</div>
</script>
<script type="text/html" id="LAY-app-CoreCmsGoods-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" lay-event="del">删除</a>
</script>
<script>
var indexData;
layui.data.done = function (d) {
indexData = d.data;
layui.use(['index', 'table', 'laydate', 'util', '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;
laydate.render({
elem: '#searchTime-CoreCmsGoods-uptime',
type: 'datetime',
range: '到',
});
laydate.render({
elem: '#searchTime-CoreCmsGoods-downtime',
type: 'datetime',
range: '到',
});
laydate.render({
elem: '#searchTime-CoreCmsGoods-createTime',
type: 'datetime',
range: '到',
});
laydate.render({
elem: '#searchTime-CoreCmsGoods-updateTime',
type: 'datetime',
range: '到',
});
//重载form
form.render();
var searchwhere;
//监听搜索
form.on('submit(LAY-app-CoreCmsGoods-search)',
function (data) {
var field = data.field;
searchwhere = field;
//执行重载
table.reloadData('LAY-app-CoreCmsGoods-tableBox', { where: field });
});
//数据绑定
table.render({
elem: '#LAY-app-CoreCmsGoods-tableBox',
url: layui.setter.apiUrl + 'Api/CoreCmsGoods/GetPageList',
method: 'POST',
toolbar: '#LAY-app-CoreCmsGoods-toolbar',
defaultToolbar: ['filter', 'print', 'exports'],
height: 'full-127',//无面包屑127,搜索框189,1行62
page: true,
limit: 30,
limits: [10, 15, 20, 25, 30, 50, 100, 200],
text: { none: '暂无相关数据' },
cols: [
[
{ type: "checkbox", fixed: "left" },
{ field: 'id', title: '商品ID', sort: false, width: 105 },
{ field: 'bn', title: '商品编码', sort: false, width: 105 },
{ field: 'name', title: '商品名称', sort: false, width: 105 },
{ field: 'brief', title: '商品简介', sort: false, width: 105 },
{ field: 'price', title: '商品价格', sort: false, width: 105 },
{ field: 'costprice', title: '成本价', sort: false, width: 105 },
{ field: 'mktprice', title: '市场价', sort: false, width: 105 },
{
field: 'imageIds', title: '默认图片 图片id', width: 80, sort: false,
templet: function (d) {
if (d.imageIds) {
return '<a href="javascript:void(0);" onclick=layui.coreHelper.viewImage("' + d.imageIds + '")><image style="max-width:28px;max-height:28px;" src="' + d.imageIds + '" /></a>';
} else {
return '<a href="javascript:void(0);" onclick=layui.coreHelper.viewImage("' + setter.noImagePicUrl + '")><image style="max-width:30px;max-height:30px;" src="' + setter.noImagePicUrl + '" /></a>';
}
}
},
{ field: 'goodsCategoryId', title: '商品分类ID 关联category.id', sort: false, width: 105 },
{ field: 'goodsTypeId', title: '商品类别ID 关联goods_type.id', sort: false, width: 105 },
{ field: 'brandId', title: '品牌ID 关联brand.id', sort: false, width: 105 },
{ field: 'isNomalVirtual', title: '是否虚拟商品', width: 105, templet: '#switch_isNomalVirtual', sort: false, unresize: true },
{ field: 'isMarketable', title: '是否上架', width: 105, templet: '#switch_isMarketable', sort: false, unresize: true },
{ field: 'stock', title: '库存', sort: false, width: 105 },
{ field: 'freezeStock', title: '冻结库存', sort: false, width: 105 },
{ field: 'weight', title: '重量', sort: false, width: 105 },
{ field: 'unit', title: '商品单位', sort: false, width: 105 },
{ field: 'intro', title: '商品详情', sort: false, width: 105 },
{ field: 'spes_desc', title: '商品规格序列号存储', sort: false, width: 105 },
{ field: 'parameters', title: '参数序列化', sort: false, width: 105 },
{ field: 'commentsCount', title: '评论次数', sort: false, width: 105 },
{ field: 'viewCount', title: '浏览次数', sort: false, width: 105 },
{ field: 'buyCount', title: '购买次数', sort: false, width: 105 },
{ field: 'uptime', title: '上架时间', width: 130, sort: false },
{ field: 'downtime', title: '下架时间', width: 130, sort: false },
{ field: 'sort', title: '商品排序', sort: false, width: 105 },
{ field: 'labelIds', title: '标签id逗号分隔', sort: false, width: 105 },
{ field: 'newSpec', title: '自定义规格名称', sort: false, width: 105 },
{ field: 'createTime', title: '创建时间', width: 130, sort: false },
{ field: 'updateTime', title: '更新时间', width: 130, sort: false },
{ field: 'isRecommend', title: '是否推荐', width: 105, templet: '#switch_isRecommend', sort: false, unresize: true },
{ field: 'isHot', title: '是否热门', width: 105, templet: '#switch_isHot', sort: false, unresize: true },
{ field: 'isDel', title: '是否删除', width: 105, templet: '#switch_isDel', sort: false, unresize: true },
{ width: 142, align: 'center', title: '操作', fixed: 'right', toolbar: '#LAY-app-CoreCmsGoods-tableBox-bar' }
]
]
});
//监听排序事件
table.on('sort(LAY-app-CoreCmsGoods-tableBox)', function (obj) {
table.reloadData('LAY-app-CoreCmsGoods-tableBox', {
initSort: obj, //记录初始排序,如果不设的话,将无法标记表头的排序状态。
where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
orderField: obj.field, //排序字段
orderDirection: obj.type //排序方式
}
});
});
//监听行双击事件
table.on('rowDouble(LAY-app-CoreCmsGoods-tableBox)', function (obj) {
//查看详情
doDetails(obj);
});
//头工具栏事件
table.on('toolbar(LAY-app-CoreCmsGoods-tableBox)', function (obj) {
var checkStatus = table.checkStatus(obj.config.id);
switch (obj.event) {
case 'addData':
doCreate();
break;
case 'batchDelete':
doBatchDelete(checkStatus);
break;
case 'selectExportExcel':
doSelectExportExcel(checkStatus);
break;
case 'queryExportExcel':
doQueryExportexcel();
break;
};
});
//监听工具条
table.on('tool(LAY-app-CoreCmsGoods-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/CoreCmsGoods/GetCreate", null, function (e) {
if (e.code === 0) {
admin.popup({ shadeClose: false,
title: '创建数据',
area: ['800px', '600px'],
id: 'LAY-popup-CoreCmsGoods-create',
success: function (layero, index) {
view(this.id).render('good/goodsinfos/create', { data: e.data }).done(function () {
//监听提交
form.on('submit(LAY-app-CoreCmsGoods-createForm-submit)',
function (data) {
var field = data.field; //获取提交的字段
field.isNomalVirtual = field.isNomalVirtual == 'on';
field.isMarketable = field.isMarketable == 'on';
field.isRecommend = field.isRecommend == 'on';
field.isHot = field.isHot == 'on';
field.isDel = field.isDel == 'on';
//提交 Ajax 成功后,关闭当前弹层并重载表格
coreHelper.Post("Api/CoreCmsGoods/DoCreate", field, function (e) {
console.log(e)
if (e.code === 0) {
layui.table.reloadData('LAY-app-CoreCmsGoods-tableBox'); //重载表格
layer.close(index); //再执行关闭
layer.msg(e.msg);
} else {
layer.msg(e.msg);
}
});
});
});
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行编辑操作
function doEdit(obj) {
coreHelper.Post("Api/CoreCmsGoods/GetEdit", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({ shadeClose: false,
title: '编辑数据',
area: ['800px', '600px'],
id: 'LAY-popup-CoreCmsGoods-edit',
success: function (layero, index) {
view(this.id).render('good/goodsinfos/edit', { data: e.data }).done(function () {
//监听提交
form.on('submit(LAY-app-CoreCmsGoods-editForm-submit)',
function (data) {
var field = data.field; //获取提交的字段
field.isNomalVirtual = field.isNomalVirtual == 'on';
field.isMarketable = field.isMarketable == 'on';
field.isRecommend = field.isRecommend == 'on';
field.isHot = field.isHot == 'on';
field.isDel = field.isDel == 'on';
//提交 Ajax 成功后,关闭当前弹层并重载表格
coreHelper.Post("Api/CoreCmsGoods/DoEdit", field, function (e) {
console.log(e)
if (e.code === 0) {
layui.table.reloadData('LAY-app-CoreCmsGoods-tableBox'); //重载表格
layer.close(index); //再执行关闭
layer.msg(e.msg);
} else {
layer.msg(e.msg);
}
});
});
})
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行预览操作
function doDetails(obj) {
coreHelper.Post("Api/CoreCmsGoods/GetDetails", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({ shadeClose: false,
title: '查看详情',
area: ['800px', '600px'],
id: 'LAY-popup-CoreCmsGoods-details',
success: function (layero, index) {
view(this.id).render('good/goodsinfos/details', { data: e.data }).done(function () {
form.render();
});
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行单个删除
function doDelete(obj) {
layer.confirm('确定删除吗?删除后将无法恢复。', function (index) {
coreHelper.Post("Api/CoreCmsGoods/DoDelete", { id: obj.data.id }, function (e) {
table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(e.msg);
});
});
}
//执行批量删除
function doBatchDelete(checkStatus) {
var checkData = checkStatus.data;
if (checkData.length === 0) {
return layer.msg('请选择要删除的数据');
}
layer.confirm('确定删除吗?删除后将无法恢复。',
function (index) {
var delidsStr = [];
layui.each(checkData,
function (index, item) {
delidsStr.push(item.id);
});
coreHelper.Post("Api/CoreCmsGoods/DoBatchDelete", { id: delidsStr }, function (e) {
table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(e.msg);
});
});
}
//执行查询条件导出excel
function doQueryExportexcel() {
layer.confirm('确定根据当前的查询条件导出数据吗?',
function (index) {
var field = searchwhere;
coreHelper.PostForm("Api/CoreCmsGoods/QueryExportExcel", field, function (e) {
if (e.code === 0) {
window.open(e.data);
} else {
layer.msg(e.msg);
}
});
});
}
//执行选择目录导出数据
function doSelectExportExcel(checkStatus) {
var checkData = checkStatus.data;
if (checkData.length === 0) {
return layer.msg('请选择您要导出的数据');
}
layer.confirm('确定导出选择的内容吗?',
function (index) {
var delidsStr = [];
layui.each(checkData,
function (index, item) {
delidsStr.push(item.id);
});
layer.close(index);
coreHelper.Post("Api/CoreCmsGoods/SelectExportExcel", { id: delidsStr }, function (e) {
if (e.code === 0) {
window.open(e.data);
} else {
layer.msg(e.msg);
}
});
});
}
//监听 表格复选框操作
layui.form.on('switch(switch_isNomalVirtual)', function (obj) {
coreHelper.Post("Api/CoreCmsGoods/DoSetisNomalVirtual", { id: this.value, data: obj.elem.checked }, function (res) {
//table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(res.msg);
});
});
layui.form.on('switch(switch_isMarketable)', function (obj) {
coreHelper.Post("Api/CoreCmsGoods/DoSetisMarketable", { id: this.value, data: obj.elem.checked }, function (res) {
//table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(res.msg);
});
});
layui.form.on('switch(switch_isRecommend)', function (obj) {
coreHelper.Post("Api/CoreCmsGoods/DoSetisRecommend", { id: this.value, data: obj.elem.checked }, function (res) {
//table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(res.msg);
});
});
layui.form.on('switch(switch_isHot)', function (obj) {
coreHelper.Post("Api/CoreCmsGoods/DoSetisHot", { id: this.value, data: obj.elem.checked }, function (res) {
//table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(res.msg);
});
});
layui.form.on('switch(switch_isDel)', function (obj) {
coreHelper.Post("Api/CoreCmsGoods/DoSetisDel", { id: this.value, data: obj.elem.checked }, function (res) {
//table.reloadData('LAY-app-CoreCmsGoods-tableBox');
layer.msg(res.msg);
});
});
});
};
</script>
<!--设置是否虚拟商品-->
<script type="text/html" id="switch_isNomalVirtual">
<input type="checkbox" name="switch_isNomalVirtual" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isNomalVirtual" {{ d.isNomalVirtual ? 'checked' : '' }}>
</script>
<!--设置是否上架-->
<script type="text/html" id="switch_isMarketable">
<input type="checkbox" name="switch_isMarketable" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isMarketable" {{ d.isMarketable ? 'checked' : '' }}>
</script>
<!--设置是否推荐-->
<script type="text/html" id="switch_isRecommend">
<input type="checkbox" name="switch_isRecommend" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isRecommend" {{ d.isRecommend ? 'checked' : '' }}>
</script>
<!--设置是否热门-->
<script type="text/html" id="switch_isHot">
<input type="checkbox" name="switch_isHot" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isHot" {{ d.isHot ? 'checked' : '' }}>
</script>
<!--设置是否删除-->
<script type="text/html" id="switch_isDel">
<input type="checkbox" name="switch_isDel" value="{{d.id}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="switch_isDel" {{ d.isDel ? 'checked' : '' }}>
</script>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,40 +0,0 @@
/*
SQLyog Ultimate v13.1.1 (64 bit)
MySQL - 5.7.33 : Database - CoreShop
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`CoreShop` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `CoreShop`;
/*Table structure for table `WeChatAccessToken` */
DROP TABLE IF EXISTS `WeChatAccessToken`;
CREATE TABLE `WeChatAccessToken` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`appType` int(10) NOT NULL,
`appId` varchar(50) NOT NULL,
`accessToken` varchar(250) NOT NULL,
`expireTimestamp` bigint(19) NOT NULL,
`updateTimestamp` bigint(19) NOT NULL,
`createTimestamp` bigint(19) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `PK_WeChatAccessToken` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `WeChatAccessToken` */
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,41 +0,0 @@
CREATE TABLE [dbo].[WeChatAccessToken](
[id] [INT] IDENTITY(1,1) NOT NULL,
[appType] [INT] NOT NULL,
[appId] [NVARCHAR](50) NOT NULL,
[accessToken] [NVARCHAR](250) NOT NULL,
[expireTimestamp] [BIGINT] NOT NULL,
[updateTimestamp] [BIGINT] NOT NULL,
[createTimestamp] [BIGINT] NOT NULL,
CONSTRAINT [PK_WeChatAccessToken] 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
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'类型1小程序2公众号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'appType'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'微信appId' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'appId'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'微信accessToken' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'accessToken'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'截止时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'expireTimestamp'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'更新时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'updateTimestamp'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken', @level2type=N'COLUMN',@level2name=N'createTimestamp'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'微信授权交互' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'WeChatAccessToken'
GO
@@ -1,3 +0,0 @@
1、使用20211119版本数据库执行脚本即可。
2、菜单中导入新的action。
3、角色中增加菜单权限即可。
@@ -1 +0,0 @@
bak和sql二选一。