Commit 191f4049 authored by zhaofei's avatar zhaofei

s

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