Commit 191f4049 authored by zhaofei's avatar zhaofei

s

parent e7e4fa08
......@@ -13,7 +13,7 @@
.choose-content-tab {
padding:10px 20px;
flex-grow:1;
overflow-y:scroll;
overflow:hidden;
height:350px;
}
.choose-content-tab .choose-content-tab-view{
......@@ -43,7 +43,9 @@
.choose-content-tab-baby-wrap{
display:flex;
max-height:300px;
overflow:scroll;
overflow:hidden;
overflow-y: auto;
padding-bottom: 70px;
flex-wrap:wrap;
/* justify-content: space-between; */
}
......
......@@ -97,8 +97,14 @@ Component({
}
},
searchBabyList() {
const { searchInfo } = this.data;
this.getBabyList(searchInfo, this.data.chooseId);
this.setData({
searchInfo: {
...this.data.searchInfo,
pageNo: 1,
},
}),()=>{
this.getBabyList(this.data.searchInfo, this.data.chooseId);
};
},
changePagination(e) {
this.setData({
......
......@@ -3,7 +3,7 @@ const { function: fc } = cloud;
const plugin = requirePlugin("myPlugin");
import { bizCode } from "/config";
import { queryBenefitByEname } from "/api";
import { chooseImage, getImageInfo, validateRangeNumber } from "/utils";
import { chooseImage, getImageInfo, validateRangeNumber, isDot } from "/utils";
import { passUrlList, urlCheck } from "../../../utils/helper";
const EQUITY_TYPE = 1;
const CREDITS_TYPE = 2;
......@@ -107,6 +107,8 @@ Component({
visible: false,
hasEditPrize: false,
datasource: [],
prizeDataType: null,
conditionKeys: [],
onCloseDialog: function () { },
onUpdate: function () { },
},
......@@ -452,9 +454,11 @@ Component({
let isRankPass =
dialogType == "rank"
? rankArr.length == 2
? +rankArr[0] <= +rankArr[1] &&
/^[1-9]+[0-9]*$/.test(+rankArr[0]) &&
/^[1-9]+[0-9]*$/.test(+rankArr[1])
? +rankArr[0] <= +rankArr[1]
&& /^[1-9]+[0-9]*$/.test(+rankArr[0])
&& /^[1-9]+[0-9]*$/.test(+rankArr[1])
&& isDot(rankArr[0])
&& isDot(rankArr[1])
: false
: true;
if (dialogType === "rank") {
......@@ -478,6 +482,7 @@ Component({
useUrlTips,
prizeDescTips,
goodsIdTips,
rankValueTips
} = this.data;
const isImagePass = image && imageTips.status !== "error";
......@@ -489,6 +494,7 @@ Component({
probabilityTips.status !== "error" &&
prizeNumberTips.status !== "error" &&
useUrlTips.status !== "error" &&
rankValueTips.status !== "error" &&
prizeDescTips.status !== "error";
const isObjectPass =
type == OBJECT_TYPE &&
......@@ -497,6 +503,8 @@ Component({
isImagePass &&
probabilityTips.status !== "error" &&
prizeNumberTips.status !== "error" &&
rankValueTips.status !== "error" &&
goodsIdTips.status !== "error" &&
prizeDescTips.status !== "error";
const isCreditsPass =
......@@ -508,7 +516,9 @@ Component({
creditsValueTips.status !== "error";
//限制库存时,限制库存一定要大于发放库存
if (isEquietyPass || isObjectPass || isCreditsPass) {
const { isEdit, prizeDialogData, onUpdate, onAdd } = this.props;
const { isEdit, prizeDialogData, onUpdate, onAdd, prizeDataType, conditionKeys } = this.props;
let prizeData = {
image,
desc,
......@@ -522,9 +532,21 @@ Component({
useStock: +useStock,
rank,
switchStock,
prizeDataType,
...rest,
};
// 自定义新增字段
if (conditionKeys && conditionKeys.length) {
const conditions = {}
conditionKeys.forEach(item => {
conditions[item.key] = conditions[item.value]
});
prizeData = {
...prizeData,
...conditions
}
}
if (isEdit) {
console.log(prizeData, "--prizeData--");
onUpdate && onUpdate(prizeData, prizeDialogData.index);
......
......@@ -13,7 +13,7 @@ Component({
// 用于活动开始后,不可更改开始时间的备份
originalStartTime: '',
disabled: false,
onChange: () => {},
onChange: () => { },
disableStartTime: false
},
didMount() {
......@@ -22,9 +22,9 @@ Component({
didUpdate(prevProps) {
this.changeTime(prevProps, this.props)
},
didUnmount() {},
didUnmount() { },
methods: {
// 初始化时间, 默认开始时间为当前时间后的10分钟 结束时间为7天之后
initTime() {
const { timeRange } = this.props;
......@@ -40,13 +40,13 @@ Component({
let endNow = dayjs(nowTime + tenMinutes + sevenDays).format("YYYY-MM-DD HH:mm:ss");
// 配置了初始时间,则使用初始时间
if(defaultStartTime) {
if (defaultStartTime) {
startNow = defaultStartTime;
}
defaultEndTime && (endNow = defaultEndTime);
this.setData({
innerTimeRange: [ startNow, endNow ]
innerTimeRange: [startNow, endNow]
})
this.confrimChangeTime([new Date(startNow).getTime(), new Date(endNow).getTime()])
},
......@@ -57,11 +57,11 @@ Component({
let prevEndTime = prevProps.timeRange[1];
let currentEndTime = currentProps.timeRange[1];
const isTimeChange = currentStartTime !== prevStartTime
|| currentEndTime !== prevEndTime;
if(isTimeChange) {
const isTimeChange = currentStartTime !== prevStartTime
|| currentEndTime !== prevEndTime;
if (isTimeChange) {
this.setData({
innerTimeRange: [
innerTimeRange: [
dayjs(currentStartTime).format("YYYY-MM-DD HH:mm:ss"),
dayjs(currentEndTime).format("YYYY-MM-DD HH:mm:ss")
]
......@@ -70,9 +70,9 @@ Component({
},
pickerChange(e) {
const [startTime, endTime] = e.detail.value;
const innerTimeRange = [ startTime || '', endTime || '' ];
if(!startTime && !endTime) {
this.confrimChangeTime(['', ''], '请输入活动时间')
const innerTimeRange = [startTime || '', endTime || ''];
if (!startTime && !endTime) {
this.confrimChangeTime(['', ''], '请选择时间')
}
this.setData({
......@@ -80,12 +80,12 @@ Component({
})
},
// 确认时间
// 确认时间
checkoutTime(startTime, endTime) {
const { disableStartTime, originalStartTime } = this.props;
const isStart = originalStartTime < Date.now();
// 编辑活动时,如果活动已经开始, 开始时间不能编辑
if (disableStartTime && isStart) {
this.confrimChangeTime([dayjs(originalStartTime).format("YYYY-MM-DD HH:mm:ss"), endTime])
......@@ -98,14 +98,14 @@ Component({
if (timeHasSame || timeIsCantChoose || timeBeginError) {
let errTips = '';
if (timeIsCantChoose && !disableStartTime) {
errTips = `活动开始时间不能小于当前时间`
console.log('error', '活动开始时间不能小于当前时间')
errTips = `开始时间需大于当前时间`
console.log('error', '开始时间需大于当前时间')
}
if (timeHasSame) {
errTips = `开始时间不能等于结束时间`
console.log('error', '开始时间不能等于结束时间')
}
if(timeBeginError) {
if (timeBeginError) {
errTips = `开始时间不能大于结束时间`;
console.log('error', '开始时间不能大于结束时间');
}
......@@ -129,7 +129,16 @@ Component({
}
},
confrimChangeTime([startTime, endTime], error) {
this.props.onChange && this.props.onChange([ new Date(startTime).getTime() || '', new Date(endTime).getTime() || ''], error);
const { startTimeKeys = '', endTimeKeys = '' } = this.props;
// 页面重新赋值
this.setData({
innerTimeRange: [
dayjs(startTime).format("YYYY-MM-DD HH:mm:ss"),
dayjs(endTime).format("YYYY-MM-DD HH:mm:ss")
]
});
this.props.onChange && this.props.onChange([new Date(startTime).getTime() || '', new Date(endTime).getTime() || ''], error, [startTimeKeys, endTimeKeys]);
}
}
});
......@@ -41,6 +41,8 @@
isEdit="{{isEdit}}"
prizeDialogData="{{prizeDialogData}}"
onClose="onCloseDialog"
type="probablity"
imageLimit="{{imageLimit}}"
prizeDataType="{{prizeDataType}}"
onUpdate="onPrizeUpdate"
onAdd="onPrizeAdd"/>
\ No newline at end of file
......@@ -10,7 +10,8 @@ Component({
list: [],
onChange: () => { },
dataName: '',
imageLimit: [250, 250]
imageLimit: [250, 250],
prizeDataType: null
},
didMount() { },
didUpdate() { },
......
......@@ -6,15 +6,15 @@ export const methods = {
const { value } = e.detail;
this.setDataByKey(value, name);
},
onTimeChange(timeRange, error) {
onTimeChange(timeRange, error, timeKeys) {
const {
formState
} = this.data;
this.setData({
timeRange,
startTime: timeRange[0],
endTime: timeRange[1],
[timeKeys[0] || 'startTime']: timeRange[0],
[timeKeys[1] || 'endTime']: timeRange[1],
formState: {
...formState,
timeRange: {
......
import { rankTableValidator, validateRangeNumber } from "../../../utils/validate";
import { rankTableValidator, validateRangeNumber, rankTimeValidator, isNumber,validatePositiveInteger,validateInteger,urlCheck } from "../../../utils/validate";
// 使用 async-validator 校验
// 文档地址: https://github.com/yiminghe/async-validator
......
import { passUrlList } from "./helper";
// 正整数
export const validatePositiveInteger = number => /^[1-9]\d*$/.test(number);
......@@ -9,32 +11,32 @@ export const isNumber = val => {
var regPos = /^\d+(\.\d+)?$/; //非负浮点数
var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
if(regPos.test(val) && regNeg.test(val)){
return true;
}else{
return false;
if (regPos.test(val) && regNeg.test(val)) {
return true;
} else {
return false;
}
}
/**
*
* 验证一定范围内数,支持整数或小数
* @param {*} number
* @param {*} [ min, max ] 范围 [0,99] [-Infinity, 0] [999, Infinity]
* @param {number} [fixed=0] 小数位数 0时为整数
* @returns { boolean }
*/
export const validateRangeNumber = (number, [ min, max ] = [], fixed = 0) => {
/**
*
* 验证一定范围内数,支持整数或小数
* @param {*} number
* @param {*} [ min, max ] 范围 [0,99] [-Infinity, 0] [999, Infinity]
* @param {number} [fixed=0] 小数位数 0时为整数
* @returns { boolean }
*/
export const validateRangeNumber = (number, [min, max] = [], fixed = 0) => {
const pattern = new RegExp(`^-?[0-9]+(\\.[0-9]{0,${fixed}})?$`);
if(min > max) {
if (min > max) {
console.error('数字范围的最小值不能大于最大值');
return;
}
if(!pattern.test(number) || number === '') return false;
if (!pattern.test(number) || number === '') return false;
if(number < min || number > max) return false;
if (number < min || number > max) return false;
return true;
}
......@@ -47,11 +49,11 @@ export const validateRangeNumber = (number, [ min, max ] = [], fixed = 0) => {
// 排名表格验证
export const rankTableValidator = (rule, value, callback, source, options) => {
if(!value.length) return new Error('请配置至少一项奖品配置');
if (!value.length) return new Error('请配置至少一项奖品配置');
// rank字段不存在或为0
if(value.some(v => !v.rank)) return new Error('名次配置错误, 请检查');
if(value.some(v => !v.name)) return new Error('名次配置错误, 请检查');
if (value.some(v => !v.rank)) return new Error('名次配置错误, 请检查');
if (value.some(v => !v.name)) return new Error('名次配置错误, 请检查');
const rankArr = (value.map(v => v.rank.split('-')));
......@@ -62,20 +64,71 @@ export const rankTableValidator = (rule, value, callback, source, options) => {
};
rankArr.forEach((rank, i) => {
if(i === 0) return;
let lastRank = rankArr[i-1][rankArr[i-1].length - 1];
if (i === 0) return;
let lastRank = rankArr[i - 1][rankArr[i - 1].length - 1];
let curRank = rank[0];
if(curRank - lastRank === 0) {
if (curRank - lastRank === 0) {
validInfo = {
status: false,
message: '请勿对重复的名次添加奖品'
}
}
if(validInfo.status && (curRank - lastRank !== 1)) {
if (validInfo.status && (curRank - lastRank !== 1)) {
validInfo.status = false;
}
})
if(!validInfo.status) return new Error(validInfo.message);
if (!validInfo.status) return new Error(validInfo.message);
return callback()
}
// 活动时间验证
export const rankTimeValidator = (rule, value, callback, source, options) => {
if (value && value.length == 2) {
const [startTime, endTime] = value;
if (!startTime || !endTime) {
return new Error('请选择完整活动时间');
}
// 活动未开始 | 新建活动
if (+source.originalStartTime > Date.now() || !source.originalStartTime) {
if (new Date().getTime() > startTime) {
return new Error('活动开始时间需大于当前时间');
}
if (endTime === startTime) {
return new Error('活动开始时间不能等于结束时间');
}
if (startTime > endTime) {
return new Error('活动开始时间不能大于结束时间');
}
}
}
return callback();
}
// 判断网站域名
export const urlCheck = (rule, value, callback, source, options) => {
if (!value) return new Error('请配置链接');
if (!value.startsWith("http://") && !value.startsWith("https://")) return new Error('请配置链接');
let passUrl = false;
passUrlList.some((i) => {
if (~value.indexOf(i)) {
passUrl = true
return true;
}
});
if (!passUrl) {
return new Error('域名校验不通过');
}
return callback();
}
// 判断是否含有小数点
export const isDot = (num) => {
var result = (num.toString()).indexOf(".");
if (result != -1) {
return false
} else {
return true
}
}
\ No newline at end of file
{
"cloud": {
"type": "CLOUDAPP"
},
"miniprogramRoot": "client"
"cloud": {
"type": "CLOUDAPP"
},
"miniprogramRoot": "client",
"exclude": [
"server/**"
]
}
......@@ -414,10 +414,21 @@ export default class ActivityConfigService {
* @memberof ActivityConfigService
*/
formatPrizeConfig(prizeConfig: Array<IActivityPrize>) {
return {
// level 根据level排序
prizeList: prizeConfig.sort((a,b) => a.level - b.level)
let prizeList = prizeConfig.sort((a,b) => a.level - b.level)
prizeData = {
<% for(var i = 0; i < configList.length; ++i) {%>
<%- configList[i].sort == 'prizePool' && `${configList[i].key}:' prizeList.filter(item=> { return item.prizeDataType == ${configList[i].prizeDataType}})',` %><% } %>
}
<% for(var i = 0; i < configList.length; ++i) {%>
<% for(var j = 0; j < configList[i].conditionKeys.length; ++j) {%>
<%-`
prizeData['${configList[i].key}'].filter(item=> return item['${ configList[i].conditionKeys[j].key}' == ${configList[i].conditionKeys[j].value}])
`%>
<% } %>
<% } %>
return prizeData
}
// 概率奖品配置 properiodfrom properiodto
setPrizeProbalityRange(prizes: IActivityPrize[]) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment