index.jsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import { Component } from 'react';
  2. import Taro,{getCurrentPages} from '@tarojs/taro';
  3. import { connect } from 'react-redux'
  4. import { View, Image,OpenData } from '@tarojs/components'
  5. import {set} from '../../actions/counter'
  6. import { login,getUserOrderList } from '../../utils/servers/servers'
  7. import ListBottomStart from "../../components/common/listBottomStart";
  8. import './index.less'
  9. import background from "../../assets/images/background.png";
  10. import NavBar from "../../components/NavBar";
  11. import user from '../../custom-tab-bar/image/user.png';
  12. @connect(({ counter }) => ({
  13. counter
  14. }), (dispatch) => ({
  15. set (value) {
  16. dispatch(set(value))
  17. }
  18. }))
  19. class Index extends Component {
  20. inst = Taro.getCurrentInstance()
  21. constructor(props) {
  22. super(props);
  23. this.state={
  24. list: [],
  25. pageNo: 0,
  26. listState: 'LOADING',
  27. }
  28. }
  29. async componentDidShow() {
  30. this.props.set(1);
  31. if(!Taro.getStorageSync('token')){
  32. this.setState({
  33. list: []
  34. })
  35. }
  36. }
  37. async componentDidMount() {
  38. await this.getUserOrderList();
  39. }
  40. onPullDownRefresh(){
  41. this.getUserOrderList();
  42. }
  43. onReachBottom(){
  44. this.getUserOrderList(this.state.pageNo+1);
  45. }
  46. async login(nickname){
  47. let token = Taro.getStorageSync('token');
  48. if(!token){
  49. let loginMsg = await Taro.login();
  50. if (loginMsg.code) {
  51. try{
  52. let msg = await login({
  53. code:loginMsg.code,
  54. nickname
  55. });
  56. if(msg.error.length === 0){
  57. Taro.setStorageSync('token', msg.token);
  58. this.getUserOrderList();
  59. }else{
  60. Taro.showToast({title:msg.error[0].message,icon:'none'})
  61. }
  62. }catch (err) {
  63. Taro.showToast({title:'系统错误,请稍后重试',icon:'none'});
  64. console.log(err)
  65. }
  66. } else {
  67. Taro.showToast({title:loginMsg.errMsg,icon:'none'})
  68. console.log('登录失败!' + loginMsg.errMsg)
  69. }
  70. }
  71. }
  72. async getUserOrderList (pageNo = 1){
  73. this.setState({
  74. listState: 'LOADING'
  75. })
  76. let msg = await getUserOrderList({
  77. pageNo: pageNo,
  78. pageSize: 5,
  79. payStatus: 1,
  80. });
  81. if(msg.error.length === 0){
  82. if(msg.data.totalCount === 0){
  83. this.setState({
  84. listState: 'NO_DATA'
  85. })
  86. }else if(msg.data.totalCount === this.state.list.length && pageNo !== 1){
  87. Taro.showToast({title:'没有更多数据了',icon:'none'});
  88. this.setState({
  89. listState: 'NO_MORE_DATA'
  90. })
  91. }else{
  92. this.setState({
  93. list:pageNo === 1 ? msg.data.list : this.state.list.concat(msg.data.list),
  94. pageNo: msg.data.pageNo
  95. },()=>{
  96. if(msg.data.totalCount === this.state.list.length){
  97. this.setState({
  98. listState: 'NO_MORE_DATA'
  99. })
  100. }
  101. })
  102. }
  103. }else{
  104. Taro.showToast({title:msg.error[0].message,icon:'none'});
  105. this.setState({
  106. listState: 'RELOAD'
  107. })
  108. }
  109. Taro.stopPullDownRefresh();
  110. }
  111. render () {
  112. return (
  113. <View className='userPage'>
  114. <NavBar
  115. extClass='NavBar'
  116. title='我的'
  117. background='#7ac7ff'
  118. onHome={()=>{}}
  119. />
  120. <Image src={background} className='background'/>
  121. <View className='userInfor'>
  122. <View className='avatar'>
  123. {
  124. Taro.getStorageSync('token') ?
  125. <OpenData type='userAvatarUrl'/> :
  126. <Image className='noLogin' src={user}/>
  127. }
  128. </View>
  129. <View className='nickName'>
  130. {
  131. Taro.getStorageSync('token') ?
  132. <OpenData type='userNickName'/> :
  133. <View onClick={()=>{
  134. Taro.getUserProfile({
  135. desc: '用于用户注册',
  136. success: async (res)=> {
  137. let userInfo = res.userInfo
  138. let nickName = userInfo.nickName
  139. await this.login(nickName);
  140. await this.getUserOrderList();
  141. getCurrentPages()[getCurrentPages().length - 1].onLoad()
  142. },
  143. fail: ()=>{
  144. Taro.showToast({title:'请同意授权获取用户信息',icon:'none'});
  145. }
  146. })
  147. }}>点击登录</View>
  148. }
  149. </View>
  150. </View>
  151. <View className='list'>
  152. {this.state.list.map((v,k)=>(
  153. <View className='item' key={k} onClick={()=>{
  154. Taro.navigateTo({
  155. url:'/pages/details/index?id='+v.projectId
  156. })
  157. }}>
  158. <View className='block'>
  159. <View className='top'/>
  160. <View className='bottom'>
  161. <View className='left'/>
  162. <View className='right'/>
  163. </View>
  164. </View>
  165. <View className='infor'>
  166. <View className='title'>{v.projectName}</View>
  167. <View className='content'>{v.projectTypeName}</View>
  168. </View>
  169. <View className='moneyInfor'>
  170. <View className='money'>¥{parseFloat(v.projectAmount)}</View>
  171. <View className='time'>{v.createTimes}</View>
  172. </View>
  173. </View>
  174. ))}
  175. <ListBottomStart
  176. state={this.state.listState}
  177. reload={()=>{
  178. this.getUserOrderList(this.state.pageNo+1);
  179. }}/>
  180. </View>
  181. </View>
  182. )
  183. }
  184. }
  185. export default Index