Authored by 于良

Merge branch 'classify' into develop

... ... @@ -788,7 +788,7 @@ export function getProductListForPersopn(reload=false) {
}
let order = productListForPerson.order;
let page = productListForPerson.currentPage + 1;
let page = 1;
let pageSize = productListForPerson.pageSize;
let channel = app.channel;
... ... @@ -800,7 +800,7 @@ export function getProductListForPersopn(reload=false) {
payload.endReached = payload.currentPage == payload.pageCount;
if (payload.currentPage > 1) {
let oldList = productList.list.toJS();
let oldList = productListForPerson.list.toJS();
let list = [...oldList, ...payload.list];
payload.list = list;
}
... ... @@ -850,7 +850,7 @@ export function getProductListForNew(reload=false) {
}
let order = productListForNew.order;
let page = productListForNew.currentPage + 1;
let page = 1;
let pageSize = productListForNew.pageSize;
let channel = app.channel;
... ...
... ... @@ -50,8 +50,6 @@ export default class Seckill extends Component {
}
componentWillReceiveProps(nextProps) {
console.log('componentWillReceiveProps');
console.log(nextProps);
if (nextProps.tipMessage && nextProps.tipMessage !== '') {
this._showToast && this._showToast(nextProps.tipMessage);
}
... ... @@ -85,6 +83,7 @@ export default class Seckill extends Component {
resource={this.queryActivityInfo.secKillProductVoList.toArray()}
onPressTimeItem={this.props.onPressTimeItem}
onFocusToCurStartedActivity={this.props.onFocusToCurStartedActivity}
curActivity = {this.props.curActivity}
diff={diff}
/>
);
... ... @@ -129,22 +128,16 @@ export default class Seckill extends Component {
queryProductList,
tipMessage,
ptr,
localServerTimeDiff,
curActivity,
} = this.props;
this.isFetching = isFetching;
this.queryActivityInfo = queryActivityInfo;
diff = Math.round((queryActivityInfo.currentTime - Date.now()) / 1000);
diff = localServerTimeDiff;
let dataSource = {
ActivityProductList: [queryProductList ? queryProductList : []],
};
let isPullToRefresh = ptr && isFetching;
console.log('isPullToRefresh')
console.log(isPullToRefresh)
console.log('isFetching');
console.log(isFetching);
console.log('ptr');
console.log(ptr);
return (
<View style={styles.container}>
{
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
StyleSheet,
Dimensions,
} from 'react-native';
import Immutable, {Map} from 'immutable';
import TimeForWait from './TimeForWait';
import TimeForNow from './TimeForNow';
import TimeForOver from './TimeForOver';
export default class TimeForFocus extends Component {
constructor(props) {
super(props);
}
render() {
let {
time,
now,
over,
wait,
tickTimeOut,
tickHour,
tickMinute,
tickSecond,
} = this.props;
let colorStyle = {color: '#3e3e3e'};
let TimeComponent = null;
if (now) {
TimeComponent = TimeForNow;
} else if (over) {
TimeComponent = TimeForOver;
} else if (wait) {
TimeComponent = TimeForWait;
}
return (
<View style={styles.rowContainerFocus}>
{TimeComponent ?
<TimeComponent
time={time}
tickTimeOut={tickTimeOut}
tickHour={tickHour}
tickMinute={tickMinute}
tickSecond={tickSecond}
/>
: null}
</View>
);
}
}
let {width, height} = Dimensions.get('window');
let backgroundHeight = 61;
let rowContainerFocusWidth = Math.ceil((294 * width) / 750);
let styles = StyleSheet.create({
rowContainerFocus: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerFocusWidth,
height: backgroundHeight,
backgroundColor:'white',
},
});
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
StyleSheet,
Dimensions,
} from 'react-native';
import Immutable, {Map} from 'immutable';
export default class TimeForLostFocus extends Component {
constructor(props) {
super(props);
}
render() {
let {
time,
now,
over,
wait,
} = this.props;
let colorStyle = {color: '#3e3e3e'};
let text = '';
if (now) {
text = '抢购中';
} else if (over) {
text = '已开抢';
} else if (wait) {
text = '即将开抢';
}
return (
<View style={styles.rowContainer}>
<Text style={[colorStyle, {fontSize: 13}]}>{time}</Text>
<Text style={[colorStyle, {fontSize: 10}]}>{text}</Text>
</View>
);
}
}
let {width, height} = Dimensions.get('window');
let backgroundHeight = 61;
let rowContainerWidth = Math.ceil((223 * width) / 750);
let styles = StyleSheet.create({
rowContainer: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerWidth,
height: backgroundHeight,
backgroundColor:'white',
},
});
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
StyleSheet,
Dimensions,
} from 'react-native';
import Immutable, {Map} from 'immutable';
import TimeNumber from './TimeNumber';
export default class TimeForNow extends Component {
constructor(props) {
super(props);
}
render() {
let {
time,
tickTimeOut,
tickHour,
tickMinute,
tickSecond,
} = this.props;
let colorStyle = {color: '#d30018'};
return (
<View style={styles.rowContainerFocus}>
<Text style={[colorStyle,{fontSize: 13}]}>{time} 抢购中</Text>
{tickTimeOut ? null :
<View style={styles.tickTimeContainer}>
<Text style={colorStyle}>剩余:</Text>
<TimeNumber text={tickHour} />
<TimeNumber text={tickMinute} />
<TimeNumber text={tickSecond} />
</View>}
</View>
);
}
}
let {width, height} = Dimensions.get('window');
let backgroundHeight = 61;
let rowContainerFocusWidth = Math.ceil((294 * width) / 750);
let styles = StyleSheet.create({
rowContainerFocus: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerFocusWidth,
height: backgroundHeight,
backgroundColor:'white',
},
tickTimeContainer: {
flexDirection: 'row',
},
});
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
} from 'react-native';
import Immutable, {Map} from 'immutable';
export default class TimeForOver extends Component {
constructor(props) {
super(props);
}
render() {
let {
time,
} = this.props;
let colorStyle = {color: '#d30018'};
return (
<Text style={[colorStyle, {fontSize: 13}]}>{time} 已开抢</Text>
);
}
}
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
StyleSheet,
Dimensions,
} from 'react-native';
import Immutable, {Map} from 'immutable';
import TimeNumber from './TimeNumber';
export default class TimeForWait extends Component {
constructor(props) {
super(props);
}
render() {
let {
time,
tickTimeOut,
tickHour,
tickMinute,
tickSecond,
} = this.props;
let colorStyle = {color: '#d30018'};
return (
<View style={styles.rowContainerFocus}>
<Text style={[colorStyle,{fontSize: 13}]}>{time} 即将开抢</Text>
{tickTimeOut ? null :
<View style={styles.tickTimeContainer}>
<Text style={[colorStyle, {fontSize: 10}]}>距开抢:</Text>
<TimeNumber text={tickHour} />
<TimeNumber text={tickMinute} />
<TimeNumber text={tickSecond} />
</View>}
</View>
);
}
}
let {width, height} = Dimensions.get('window');
let backgroundHeight = 61;
let rowContainerFocusWidth = Math.ceil((294 * width) / 750);
let styles = StyleSheet.create({
rowContainerFocus: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerFocusWidth,
height: backgroundHeight,
backgroundColor:'white',
},
tickTimeContainer: {
flexDirection: 'row',
},
});
... ...
... ... @@ -11,6 +11,8 @@ import ReactNative, {
TouchableOpacity,
} from 'react-native';
import Immutable, {Map} from 'immutable';
import TimeForFocus from './TimeForFocus';
import TimeForLostFocus from './TimeForLostFocus';
let diff;
... ... @@ -28,7 +30,6 @@ export default class SeckillTimeListView extends Component {
});
this.curFocusActivity = Immutable.fromJS({});
this.secKillProductVoList = Immutable.fromJS([]);
this.curFocusIndex = 0;
this.state = {
tickHour: '00',
tickMinute: '00',
... ... @@ -40,24 +41,18 @@ export default class SeckillTimeListView extends Component {
_scrollToFocusActivity = () => {
//focus
if (this.secKillProductVoList.length >= 1) {
console.log('------>_scrollToFocusActivity');
let listLength = this.secKillProductVoList.length;
let curFocusIndex = 0;
let scrollX = 0;
this.secKillProductVoList.forEach((activityItem, i) => {
if (activityItem.get('activityId') === this.curFocusActivity.get('activityId')) {
curFocusIndex = i;
}
});
// if (curFocusIndex > 1 && curFocusIndex < listLength-2) {
scrollX = (curFocusIndex - 1) * rowContainerWidth;
this.listView && this.listView.scrollTo({x: scrollX, y: 0, animated: true});
// }
scrollX = (this.curFocusActivity.get('index') - 1) * (rowContainerWidth + separatorWidth);
this.listView && this.listView.scrollTo({x: scrollX, y: 0, animated: true});
console.log('<<<<<<<<<_scrollToFocusActivity');
console.log(scrollX);
}
}
_caculateTimerState() {
if (this.curFocusIndex == this.secKillProductVoList.length - 1 && this.curFocusActivity.has('now')) {
if (this.curFocusActivity.get('index') == this.secKillProductVoList.length - 1 && this.curFocusActivity.has('now')) {
if (!this.state.tickTimeOut) {
this.setState({
tickHour: '',
... ... @@ -65,9 +60,10 @@ export default class SeckillTimeListView extends Component {
tickSecond: '',
tickTimeOut: true,
});
this.props.onRefresh && this.props.onRefresh();
}
} else {
let nextActivity = this.secKillProductVoList[this.curFocusIndex + 1];
let nextActivity = this.secKillProductVoList[this.curFocusActivity.get('index') + 1];
let nowTime = Date.parse(new Date()) / 1000 + diffTime;
let time = this.curFocusActivity.has('now') ? nextActivity.get('startTime')/1000: this.curFocusActivity.get('startTime') / 1000;
let offsetTime = time - nowTime;
... ... @@ -75,7 +71,7 @@ export default class SeckillTimeListView extends Component {
let minute = parseInt(offsetTime % (60 * 60) / 60, 10);
let second = offsetTime % 60;
if (offsetTime <= 0) {
if (offsetTime < 0) {
if (!this.state.tickTimeOut) {
this.setState({
tickHour: '',
... ... @@ -83,6 +79,16 @@ export default class SeckillTimeListView extends Component {
tickSecond: '',
tickTimeOut: true,
});
if (this.curFocusActivity.has('now')) {
nextActivity = nextActivity.toJS();
nextActivity.focus = true;
this.curFocusActivity= Immutable.fromJS(nextActivity);
this._scrollToFocusActivity();
this.props.onFocusToCurStartedActivity && this.props.onFocusToCurStartedActivity(nextActivity);
} else {
this.props.onFocusToCurStartedActivity && this.props.onFocusToCurStartedActivity(this.curFocusActivity.toJS());
}
}
} else {
this.setState({
... ... @@ -97,39 +103,14 @@ export default class SeckillTimeListView extends Component {
}
componentDidMount() {
if (this.secKillProductVoList && this.secKillProductVoList.length > 0) {
this.secKillProductVoList.forEach((activityItem, i) => {
if (activityItem.get('focus')) {
this.curFocusIndex = i;
this.curFocusActivity = activityItem;
}
});
}
let jumpToTimeoutActivity = () => {
this.secKillProductVoList.forEach((activityItem, i) => {
let nowTime = Date.parse(new Date()) / 1000 + diffTime;
let startTime = activityItem.get('startTime') / 1000;
let offsetTime = nowTime - startTime;
if (activityItem.get('focus') == false && Math.abs(offsetTime) <= 2) {
this.curFocusActivity= activityItem;
this.curFocusIndex = i;
this._scrollToFocusActivity();
this.props.onFocusToCurStartedActivity && this.props.onFocusToCurStartedActivity(activityItem.toJS());
}
});
};
this._scrollToFocusActivity();
this.timer = setInterval(function () {
if (!this.curFocusActivity && this.curFocusActivity.size > 0 && !this.curFocusActivity.has('over')) {
return;
}
jumpToTimeoutActivity();
this._caculateTimerState();
}.bind(this), 1000);
this._scrollToFocusActivity();
}
... ... @@ -137,22 +118,18 @@ export default class SeckillTimeListView extends Component {
this.timer && clearInterval(this.timer);
}
componentWillReceiveProps(nextProps) {
if (nextProps.resource && nextProps.resource.length > 0) {
nextProps.resource.forEach((activityItem, i) => {
if (activityItem.get('focus')) {
this.curFocusIndex = i;
this.curFocusActivity = activityItem;
}
});
}
this._caculateTimerState();
}
// componentWillReceiveProps(nextProps) {
// this.curFocusActivity = nextProps.curActivity;
// if (this.curFocusActivity) {
// this._scrollToFocusActivity();
// }
// this._caculateTimerState();
// console.log('componentWillReceiveProps');
//
// }
_renderRow(rowData, sectionID, rowID) {
rowData = rowData.toJS();
let colorStyle = rowData.focus ? {color: '#d30018'} : {color: '#3e3e3e'};
return (
<TouchableOpacity activeOpacity={1.0} onPress={() => {
if (rowData.focus) {
... ... @@ -164,56 +141,24 @@ export default class SeckillTimeListView extends Component {
this._scrollToFocusActivity();
this.props.onPressTimeItem && this.props.onPressTimeItem(rowData);
}}>
{rowData.focus ?
<View key={'row' + rowID} style={styles.rowContainerFocus}>
{rowData.now ?
<View key={'row' + rowID} style={styles.rowContainerFocus}>
<Text style={[colorStyle,{fontSize: 13}]}>{rowData.time} 抢购中</Text>
{!this.state.tickTimeOut ?
<View style={styles.tickTimeContainer}>
<Text style={colorStyle}>剩余:</Text>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickHour}</Text>
</View>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickMinute}</Text>
</View>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickSecond}</Text>
</View>
</View>
: null}
</View>
: null}
{rowData.over ? <Text style={[colorStyle,{fontSize: 13}]}>{rowData.time} 已开抢</Text> : null}
{rowData.wait ?
<View key={'row' + rowID} style={styles.rowContainerFocus}>
<Text style={[colorStyle,{fontSize: 13}]}>{rowData.time} 即将开抢</Text>
{!this.state.tickTimeOut ?
<View style={styles.tickTimeContainer}>
<Text style={[colorStyle,{fontSize: 10}]}>距开抢:</Text>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickHour}</Text>
</View>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickMinute}</Text>
</View>
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{this.state.tickSecond}</Text>
</View>
</View>
: null}
</View>
: null}
</View>
:<View key={'row' + rowID} style={styles.rowContainer}>
<Text style={[colorStyle,{fontSize: 13}]}>{rowData.time}</Text>
{rowData.now ? <Text style={[colorStyle,{fontSize: 10}]}>抢购中</Text> : null}
{rowData.over ? <Text style={[colorStyle,{fontSize: 10}]}>已开抢</Text> : null}
{rowData.wait ? <Text style={[colorStyle,{fontSize: 10}]}>即将开抢</Text> : null}
</View>
{rowData.focus ? <TimeForFocus
key={'row' + rowID}
time={rowData.time}
now={rowData.now}
over={rowData.over}
wait={rowData.wait}
tickTimeOut={this.state.tickTimeOut}
tickHour={this.state.tickHour}
tickMinute={this.state.tickMinute}
tickSecond={this.state.tickSecond}
/> : <TimeForLostFocus
key={'row' + rowID}
time={rowData.time}
now={rowData.now}
over={rowData.over}
wait={rowData.wait}
/>
}
</TouchableOpacity>
... ... @@ -232,16 +177,19 @@ export default class SeckillTimeListView extends Component {
let {
resource,
diff,
curActivity,
} = this.props;
diffTime = diff;
this.secKillProductVoList = resource;
backgroundWidth = Math.max(rowContainerWidth * (resource.length - 1) + rowContainerFocusWidth, width);
this.curFocusActivity = curActivity;
backgroundWidth = Math.max((rowContainerWidth + separatorWidth) * (resource.length - 1) + rowContainerFocusWidth, width);
return (
<View style={[styles.container]}>
<ListView
ref={(ref)=>this.listView=ref}
contentContainerStyle={[styles.contentContainer,{width:backgroundWidth}]}
contentContainerStyle={[styles.contentContainer]}
enableEmptySections={true}
dataSource={this.dataSource.cloneWithRows(resource)}
renderSeparator={this._renderSeparator}
... ... @@ -262,6 +210,7 @@ let backgroundHeight = 61;
let diffTime;
let rowContainerWidth = Math.ceil((223 * width) / 750);
let rowContainerFocusWidth = Math.ceil((294 * width) / 750);
let separatorWidth = 1.5;
let styles = StyleSheet.create({
container: {
... ... @@ -275,40 +224,8 @@ let styles = StyleSheet.create({
},
contentContainer: {
flexDirection: 'row',
},
rowContainer: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerWidth,
height: backgroundHeight,
backgroundColor:'white',
},
rowContainerFocus: {
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
width: rowContainerFocusWidth,
height: backgroundHeight,
backgroundColor:'white',
},
tickTimeContainer: {
flexDirection: 'row',
},
tickTime: {
backgroundColor:'#d30018',
alignItems: 'center',
justifyContent: 'center',
left:0,
marginLeft:5,
width:15,
height:15,
borderRadius:3,
},
tickTimeText: {
color: 'white',
fontSize: 9,
},
bottomToolBar: {
top: 200,
height: 44,
... ... @@ -321,7 +238,7 @@ let styles = StyleSheet.create({
top: 10,
},
separator: {
width: 1.5,
width: separatorWidth,
top: 11,
height: backgroundHeight - 22,
backgroundColor: '#dfe3e2',
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {
View,
Text,
StyleSheet,
} from 'react-native';
export default class TimeNumber extends Component {
constructor(props) {
super(props);
}
render() {
let {
text,
} = this.props;
return (
<View style={styles.tickTime}>
<Text style={styles.tickTimeText}>{text}</Text>
</View>
);
}
}
let styles = StyleSheet.create({
tickTime: {
backgroundColor:'#d30018',
alignItems: 'center',
justifyContent: 'center',
left:0,
marginLeft:5,
width:15,
height:15,
borderRadius:3,
},
tickTimeText: {
color: 'white',
fontSize: 9,
},
});
... ...
... ... @@ -47,12 +47,10 @@ class SeckillContainer extends Component {
this._onRefresh = this._onRefresh.bind(this);
this._onClearTipMessage = this._onClearTipMessage.bind(this);
this._onFocusToCurStartedActivity = this._onFocusToCurStartedActivity.bind(this);
this.curActivityId = 0;
}
_onPressTimeItem(activity) {
this.props.actions.clickActivityTimeItem(activity);
this.curActivityId = activity.activityId;
}
_onPressProductItem(product) {
... ... @@ -63,8 +61,8 @@ class SeckillContainer extends Component {
this.props.actions.clickRemindBtn(product);
}
_onRefresh() {
this.props.actions.refreshList();
_onRefresh(activityId) {
this.props.actions.refreshList(activityId);
}
_onClearTipMessage() {
... ... @@ -72,7 +70,6 @@ class SeckillContainer extends Component {
}
_onFocusToCurStartedActivity(activity) {
this.curActivityId = activity.activityId;
this.props.actions.getSeckillQueryActivity(activity.startTime / 1000);
}
... ... @@ -86,12 +83,13 @@ class SeckillContainer extends Component {
queryRemindList,
tipMessage,
ptr,
curActivityId,
curActivity,
localServerTimeDiff,
} = this.props.seckill;
if (queryProductList) {
queryProductList = queryProductList.toJS();
}
let productList = queryProductList[curActivityId];
let productList = queryProductList[curActivity.get('activityId')];
return (
<Seckill
... ... @@ -102,6 +100,8 @@ class SeckillContainer extends Component {
queryProductList = {productList}
queryRemindList = {queryRemindList}
tipMessage = {tipMessage}
curActivity = {curActivity}
localServerTimeDiff = {localServerTimeDiff}
onPressTimeItem={this._onPressTimeItem}
onPressProductItem={this._onPressProductItem}
onPressRemindBtn={this._onPressRemindBtn}
... ...
... ... @@ -63,10 +63,10 @@ export function queryActivityFailure(error) {
};
}
export function queryProductListRequest(activityId) {
export function queryProductListRequest(activity) {
return {
type: QUERY_PRODUCT_LIST_REQUEST,
payload: activityId
payload: activity
}
}
... ... @@ -84,10 +84,10 @@ export function queryProductListFailure(error) {
}
}
export function queryProductAndRemindListRequest(activityId) {
export function queryProductAndRemindListRequest(activity) {
return {
type: QUERY_PRODUCT_AND_REMIND_LIST_REQUEST,
payload: activityId
payload: activity
}
}
... ... @@ -133,10 +133,7 @@ export function updateSecKillProductList(json) {
}
export function setStartTime(startTime) {
console.log('---startTime----');
console.log(startTime);
startTime = moment(startTime, 'YYYYMMDDHHmmss').unix();
console.log(startTime);
return {
type: SET_START_TIME,
payload: startTime,
... ... @@ -146,15 +143,12 @@ export function setStartTime(startTime) {
* 秒杀时间栏
*/
export function getSeckillQueryActivity(inStartTime = 0) {
console.log('00000000');
return (dispatch, getState) => {
let {app, seckill} = getState();
let {startTime} = seckill;
console.log('aaaaa----aaaaa');
if (seckill.isFetching || seckill.tipMessage) {
return;
}
console.log('kkk---kkkk');
if (inStartTime) {
startTime = inStartTime;
}
... ... @@ -163,19 +157,19 @@ console.log('kkk---kkkk');
.then(json => {
if (json.secKillProductVoList && json.secKillProductVoList.length) {
let processedTimeInfo = parseActivityTimeLsit(json, startTime);
dispatch(queryActivitySuccess(processedTimeInfo.newQueryActivityInfo));
let queryActivityInfo = processedTimeInfo.newQueryActivityInfo;
let focusActivity = processedTimeInfo.focusActivity;
dispatch(queryActivitySuccess({queryActivityInfo, focusActivity}));
if (Date.now() < focusActivity.startTime) {
dispatch(getSeckillProductRemindList(focusActivity.activityId));
dispatch(getSeckillProductRemindList(focusActivity));
} else {
dispatch(getSeckillProductList(focusActivity.activityId));
dispatch(getSeckillProductList(focusActivity));
}
} else {
dispatch(queryActivityFailure({error:'来晚啦~秒杀已结束'}));
}
})
.catch(error => {
console.log('queryActivityFailure');
dispatch(queryActivityFailure(error));
dispatch(showTipMessage(error.message));
});
... ... @@ -185,16 +179,16 @@ console.log('kkk---kkkk');
/*
* 秒杀商品列表
*/
export function getSeckillProductList(activityId = 0) {
export function getSeckillProductList(activity) {
return (dispatch, getState) => {
let {app, seckill} = getState();
let {queryRemindList, queryProductList, curActivityId} = seckill;
if (!activityId) {
activityId = curActivityId;
let {queryRemindList, queryProductList, curActivity} = seckill;
if (!activity) {
activity = curActivity.toJS();
}
dispatch(queryProductListRequest(activityId));
dispatch(queryProductListRequest(activity));
queryRemindList = queryRemindList.toJS();
return new SeckillService(app.host).fetchQueryProductList(activityId)
return new SeckillService(app.host).fetchQueryProductList(activity.activityId)
.then(json => {
let productList = [];
if (queryRemindList && queryRemindList.length > 0) {
... ... @@ -203,11 +197,7 @@ export function getSeckillProductList(activityId = 0) {
productList = productAddFlag(json);
}
queryProductList = queryProductList.toJS();
console.log(queryProductList);
queryProductList[activityId] = productList;
console.log('-----------');
console.log(productList);
console.log(queryProductList);
queryProductList[activity.activityId] = productList;
dispatch(queryProductListSuccess(queryProductList));
})
.catch(error => {
... ... @@ -219,28 +209,21 @@ export function getSeckillProductList(activityId = 0) {
/*
* 秒杀商品列表
*/
export function getSeckillProductRemindList(activityId = 0) {
export function getSeckillProductRemindList(activity) {
return (dispatch, getState) => {
let queryProductRemindList = (activityId, uid) => {
dispatch(queryProductAndRemindListRequest(activityId));
let queryProductRemindList = (activity, uid) => {
dispatch(queryProductAndRemindListRequest(activity));
let {app, seckill} = getState();
let {queryProductList} = seckill;
Promise.all([
new SeckillService(app.host).fetchQueryProductList(activityId),
new SeckillService(app.host).fetchQueryRemindList(activityId, uid),
new SeckillService(app.host).fetchQueryProductList(activity.activityId),
new SeckillService(app.host).fetchQueryRemindList(activity.activityId, uid),
]).then(result => {
let productList = result[0];
let remindList = result[1];
productList = productAddFlag(productList, remindList);
console.log('1111111111111');
console.log(queryProductList);
console.log(activityId);
console.log(productList);
queryProductList = queryProductList.toJS();
queryProductList[activityId] = productList;
console.log('7777777777');
console.log(queryProductList);
queryProductList[activity.activityId] = productList;
dispatch(queryProductAndRemindListSuccess({queryProductList,remindList}));
})
... ... @@ -251,10 +234,10 @@ export function getSeckillProductRemindList(activityId = 0) {
ReactNative.NativeModules.YH_CommonHelper.uid()
.then(uid => {
queryProductRemindList(activityId, uid);
queryProductRemindList(activity, uid);
})
.catch(error => {
dispatch(getSeckillProductList(activityId));
dispatch(getSeckillProductList(activity));
});
};
}
... ... @@ -262,7 +245,7 @@ export function getSeckillProductRemindList(activityId = 0) {
export function addCancelUserReminder(method='app.seckill.addUserReminder', activityId=0, productSkn=0, uid=0, secKillId=0, okTip='', failTip='') {
return (dispatch, getState) => {
let {app, seckill} = getState();
let {queryProductList, curActivityId} = seckill;
let {queryProductList, curActivity} = seckill;
dispatch(clearTipMessage());
return new SeckillService(app.host).addCancelUserReminder(method,activityId,productSkn,uid,secKillId)
.then(json => {
... ... @@ -275,7 +258,7 @@ export function addCancelUserReminder(method='app.seckill.addUserReminder', acti
}
queryProductList = queryProductList.toJS();
let curActivity = {};
queryProductList[curActivityId].forEach((productItem, i) => {
queryProductList[activityId].forEach((productItem, i) => {
if (productItem.id === secKillId) {
productItem.remindFlag = remindFlag;
}
... ... @@ -291,9 +274,6 @@ export function addCancelUserReminder(method='app.seckill.addUserReminder', acti
export function clickActivityTimeItem(activity) {
console.log('----5');
console.log(activity);
let curActivityId = activity.activityId;
return (dispatch, getState) => {
let {app, seckill} = getState();
let {queryActivityInfo} = seckill;
... ... @@ -308,11 +288,11 @@ export function clickActivityTimeItem(activity) {
}
});
let secKillProductVoList = queryActivityInfo.secKillProductVoList;
dispatch(updateSecKillProductVoList({secKillProductVoList, curActivityId}));
dispatch(updateSecKillProductVoList({secKillProductVoList, curActivity}));
if (Date.now() < curActivity.startTime) {
dispatch(getSeckillProductRemindList(curActivityId));
dispatch(getSeckillProductRemindList(activity));
} else {
dispatch(getSeckillProductList(curActivityId));
dispatch(getSeckillProductList(activity));
}
};
}
... ... @@ -338,7 +318,7 @@ export function clickRemindBtn(product) {
.catch(error => {
ReactNative.NativeModules.YH_CommonHelper.login()
.then(uid => {
dispatch(getSeckillProductRemindList(product.activityId));
dispatch(getSeckillProductRemindList(product));
})
.catch(error => {
... ... @@ -385,9 +365,6 @@ export function clickRemindBtn(product) {
method: action,
arguments: params,
})
.then(flag => {
})
.then(flag => { //成功
dispatch(addCancelUserReminder(method, product.activityId, skn,uid, product.id, okTip, failTip));
})
... ... @@ -402,13 +379,10 @@ export function clickRemindBtn(product) {
export function refreshList() {
return (dispatch, getState) => {
let {app, seckill} = getState();
let {queryActivityInfo,queryProductList,curActivityId} = seckill;
console.log('------refreshList');
console.log('------55');
console.log(curActivityId);
if (curActivityId !== 0 && queryActivityInfo.secKillProductVoList) {
let {queryActivityInfo,queryProductList,curActivity} = seckill;
if (curActivity.get('activityId') !== 0 && queryActivityInfo.secKillProductVoList && queryActivityInfo.secKillProductVoList.size > 0) {
queryActivityInfo.secKillProductVoList.forEach((activityInfo, i) => {
if (activityInfo.get('activityId') === curActivityId) {
if (activityInfo.get('activityId') === curActivity.get('activityId')) {
dispatch(getSeckillQueryActivity(activityInfo.get('startTime')/1000));
}
});
... ... @@ -492,6 +466,7 @@ function parseActivityTimeLsit(json, focusTime=0) {
minute = 0;
activityTimeItem.startTime *= 1000;
activityTimeItem.index = i;
date = new Date(activityTimeItem.startTime);
hour = date.getHours();
minute = date.getMinutes();
... ...
... ... @@ -9,11 +9,12 @@ let InitialState = Record({
isFetching: false,
error: null,
startTime: 0,
localServerTimeDiff: 0,
queryActivityInfo: new (Record({
currentTime: 0,
secKillProductVoList: List(),
})),
curActivityId: 0,
curActivity: Map(),
queryProductList: Map(),
queryRemindList: List(),
... ...
... ... @@ -41,13 +41,17 @@ export default function seckillReducer(state=initialState, action) {
.set('error', null);
}
case QUERY_ACTIVITY_SUCCESS: {
let timeListInfo = action.payload;
let timeListInfo = action.payload.queryActivityInfo;
let focusActivity = action.payload.focusActivity;
let diff = Math.round((timeListInfo.currentTime - Date.now()) / 1000)
let newQueryActivity = state.queryActivityInfo.set('currentTime', timeListInfo.currentTime)
.set('secKillProductVoList', Immutable.fromJS(timeListInfo.secKillProductVoList));
return state.set('isFetching', false)
.set('queryActivityInfo', newQueryActivity)
.set('ptr', false)
.set('localServerTimeDiff', diff)
.set('curActivity', Immutable.fromJS(focusActivity))
.set('error', null);
}
case QUERY_ACTIVITY_FAILURE: {
... ... @@ -57,7 +61,7 @@ export default function seckillReducer(state=initialState, action) {
}
case QUERY_PRODUCT_LIST_REQUEST: {
return state.set('isFetching', true)
.set('curActivityId', action.payload)
.set('curActivity', Immutable.fromJS(action.payload))
.set('error', null);
}
case QUERY_PRODUCT_LIST_SUCCESS: {
... ... @@ -71,7 +75,7 @@ export default function seckillReducer(state=initialState, action) {
}
case QUERY_PRODUCT_AND_REMIND_LIST_REQUEST: {
return state.set('isFetching', true)
.set('curActivityId', action.payload)
.set('curActivity', Immutable.fromJS(action.payload))
.set('error', null);
}
case QUERY_PRODUCT_AND_REMIND_LIST_SUCCESS: {
... ... @@ -95,7 +99,7 @@ export default function seckillReducer(state=initialState, action) {
}
case UPDATE_SECKILL_PRODUCT_VO_LIST: {
return state.setIn(['queryActivityInfo', 'secKillProductVoList'], Immutable.fromJS(action.payload.secKillProductVoList))
.set('curActivityId', Immutable.fromJS(action.payload.curActivityId))
.set('curActivity', Immutable.fromJS(action.payload.curActivity))
.set('error', null);
}
case UPDATE_SECKILL_PRODUCT_LIST: {
... ...