小程序农机手端

index.jsx 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import React, { useState, useEffect } from "react"
  2. import Taro from "@tarojs/taro";
  3. import { View, Input, Swiper, Image, SwiperItem, Text, ScrollView, Button } from "@tarojs/components"
  4. import { Popup } from "@antmjs/vantui";
  5. import Footer from "@/components/Footer";
  6. import MyCard from "@/components/MyCard";
  7. import NullCard from "@/components/NullCard";
  8. import { useModel } from "@/store";
  9. import { getBannerList } from "@/services/banner";
  10. import { getJobList, toggleJob, overJob } from '@/services/job'
  11. import positionImg from '@/assets/comm/position.png'
  12. import searchImg from '@/assets/comm/search.png'
  13. import orderImg from '@/assets/comm/orderList.png'
  14. import PositionImg from '@/assets/job/positionImg.png'
  15. import OverPop from '../OverPop'
  16. import './style.less'
  17. export default (props) => {
  18. const [imgList, setImgList] = useState([])
  19. const [jobList, setJobList] = useState([])
  20. const [currentPage, setCurrentPage] = useState(1)
  21. const [isMore, setIsMore] = useState(false)
  22. const { address } = useModel('location')
  23. const [show, setShow] = useState(false)
  24. const [area, setArea] = useState()
  25. const [showOver, setShowOver] = useState(false)
  26. const [job, setJob] = useState()
  27. const handleSearch = (e) => {
  28. Taro.navigateTo({ url: `/pages/index/index?tab=1` });
  29. }
  30. const handleDetail = (val) => {
  31. Taro.navigateTo({ url: `/pages/orderDetail/index?id=${val}&job=1` });
  32. }
  33. // 上拉加载
  34. const handleScrollToLower = () => {
  35. setCurrentPage(currentPage + 1)
  36. }
  37. const handleWork = (val) => {
  38. setJob(val)
  39. if (val.status == 0) {
  40. setShow(true)
  41. } else {
  42. setShowOver(true)
  43. }
  44. }
  45. const onClose = () => {
  46. setShow(false)
  47. setJob()
  48. }
  49. const handleOk = () => {
  50. toggleJob(job.jobId, { mode: true }).then(() => {
  51. //目测有bug
  52. getJobList({ pageNum: currentPage }).then(res => {
  53. const lst = currentPage === 1 ? res.records || [] : jobList.concat(res.records || [])
  54. //长列表加载当下一页没有数据时
  55. if (res.records.length == 0 && currentPage != 1) {
  56. setIsMore(true)
  57. return
  58. }
  59. setJobList(lst)
  60. onClose()
  61. })
  62. })
  63. }
  64. const onOverClose = () => {
  65. setShowOver(false)
  66. setArea()
  67. }
  68. const handleOverOk = () => {
  69. //正整数或两位小数
  70. if (!isNaN(area)) {
  71. overJob(job.jobId, { ...job, area: area }).then(res => {
  72. Taro.showToast({
  73. title: '恭喜完成作业',
  74. icon: 'none',
  75. })
  76. getJobList({ pageNum: currentPage }).then(res2 => {
  77. const lst = currentPage === 1 ? res2.records || [] : jobList.concat(res2.records || [])
  78. //长列表加载当下一页没有数据时
  79. if (res2.records.length == 0 && currentPage != 1) {
  80. setIsMore(true)
  81. return
  82. }
  83. setJobList(lst)
  84. onOverClose()
  85. })
  86. })
  87. }
  88. else {
  89. Taro.showToast({
  90. title: '请输入正确的面积整数或最多两位小数',
  91. icon: 'none',
  92. })
  93. }
  94. }
  95. useEffect(() => {
  96. getJobList({ pageNum: currentPage }).then(res => {
  97. const lst = currentPage === 1 ? res.records || [] : jobList.concat(res.records || [])
  98. //长列表加载当下一页没有数据时
  99. if (res.records.length == 0 && currentPage != 1) {
  100. setIsMore(true)
  101. return
  102. }
  103. setJobList(lst)
  104. })
  105. }, [currentPage])
  106. useEffect(() => {
  107. getBannerList({ position: 'bannerWorker' })
  108. .then(res => {
  109. setImgList(res)
  110. }).catch(err => {
  111. Taro.showToast({
  112. title: '网络异常, 请刷新小程序重试',
  113. icon: 'none',
  114. })
  115. })
  116. }, [])
  117. return (
  118. <View className='orderIndex'>
  119. <View className='top'>
  120. <View className='left'>
  121. <Image src={positionImg} className='pImg' />
  122. <Text>邓州市</Text>
  123. <View className='icon' />
  124. </View>
  125. <View className='searchClass' onClick={handleSearch}>
  126. <Input type='text' disabled className='searchInput' placeholder='搜索关键字查询订单' />
  127. <Image src={searchImg} className='searchImg' />
  128. </View>
  129. </View>
  130. <ScrollView
  131. scrollY
  132. enhanced
  133. onScrollToLower={isMore ? '' : handleScrollToLower}
  134. style={{ height: 'calc(100% - 68px)' }}
  135. >
  136. <Swiper
  137. circular
  138. autoplay
  139. className='swiper'
  140. >
  141. {imgList.map((item, inx) => (
  142. <SwiperItem key={inx}>
  143. <Image src={item.thumb} mode='widthFix' className='storeImage' />
  144. </SwiperItem>
  145. ))}
  146. </Swiper>
  147. <View className='orderList'>
  148. <View className='head'>
  149. <Image className='headIcon' src={orderImg} />
  150. <Text className='title'>作业列表</Text>
  151. </View>
  152. {
  153. jobList.length === 0 ? <NullCard value='您还没有新的作业订单!' /> :
  154. jobList.map((item) => {
  155. return <MyCard job value={item} key={item.JobId} onClick={() => handleWork(item)} goDetail={() => handleDetail(item.jobId)} />
  156. })
  157. }
  158. {
  159. isMore && <Footer />
  160. }
  161. </View>
  162. <Popup
  163. show={show}
  164. onClose={onClose}
  165. className='tanchuang'
  166. >
  167. <Image src={PositionImg} className='pImg' />
  168. <View>当前位置在</View>
  169. <View>{address}</View>
  170. <Button className='btn' onClick={handleOk}>确认</Button>
  171. </Popup>
  172. <OverPop showOver={showOver} onOverClose={onOverClose} area={area} setArea={setArea} handleOverOk={handleOverOk} />
  173. </ScrollView>
  174. </View>
  175. )
  176. }