index.jsx 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import { useState, useEffect } from 'react'
  2. import '@/assets/css/iconfont.css'
  3. import { Image, Slider, Textarea, ScrollView } from '@tarojs/components'
  4. import { fetch } from '@/utils/request'
  5. import { API_HELP_FIND_HOUSE_SUBMIT } from '@/constants/api'
  6. import { useSelector } from 'react-redux'
  7. import './index.scss'
  8. import questions from './formData'
  9. import SubmitBuyHouseResult from '../helpToFindHouse/components/SubmitBuyHouseResult/index'
  10. export default function AddedValueService () {
  11. const user = useSelector(state => state.user)
  12. const [FormData, setFormData] = useState(questions)
  13. const [StepId, setStepId] = useState(1)
  14. const [StepRange, setStepRange] = useState([0, 3])
  15. const [ResultList, setResultList] = useState([])
  16. const [ShowPopup, setShowPopup] = useState(false)
  17. useEffect(() => {
  18. if (StepId === 1) {
  19. setStepRange([0, 3])
  20. } else if (StepId === 2) {
  21. setStepRange([3, 6])
  22. } else if (StepId === 3) {
  23. setStepRange([6, 8])
  24. } else if (StepId === 4) {
  25. setStepRange([8, 9])
  26. }
  27. }, [StepId])
  28. const SubmitForm = (data) => {
  29. data = data || []
  30. let params = []
  31. data.map((item) => {
  32. if (item.key === 'budget') {
  33. params.push({ ...item, key: 'minPrice', result: item.options[0] * 10000 })
  34. params.push({ ...item, key: 'maxPrice', result: item.result !== '' ? item.result * 10000 : 5000000 })
  35. } else {
  36. if (item.result !== '' || item.resultId !== null) {
  37. params.push(item)
  38. }
  39. }
  40. })
  41. params.push({ question: '创建人小程序人员', result: user?.userInfo?.person?.personId, key: 'personId' })
  42. let payload = {}
  43. params.map((item) => {
  44. payload[item.key] = item.result || item.resultId
  45. })
  46. fetch({ url: API_HELP_FIND_HOUSE_SUBMIT, method: 'post', payload: { ...payload, questionnaire: JSON.stringify(params), type: 4 } }).then((res) => {
  47. setResultList(res.taBuildingList || [])
  48. setShowPopup(true)
  49. })
  50. }
  51. const CutCheckboxs = (index, subItem, subIndex) => {
  52. return () => {
  53. let newFormData = [...FormData]
  54. newFormData[index].options[subIndex].selected = !subItem.selected
  55. setFormData([...newFormData])
  56. }
  57. }
  58. const CutCheckbox = (item, index) => {
  59. return () => {
  60. let newFormData = [...FormData]
  61. newFormData[index].resultId = item.id
  62. newFormData[index].result = item.name
  63. setFormData([...newFormData])
  64. }
  65. }
  66. const Rangehange = (e, index) => {
  67. let newFormData = [...FormData]
  68. newFormData[index].result = e.detail.value
  69. setFormData([...newFormData])
  70. }
  71. const remarkInput = (e, index) => {
  72. let newFormData = [...FormData]
  73. newFormData[index].remark = e.detail.value
  74. setFormData([...newFormData])
  75. }
  76. const textareaInput = (e, index) => {
  77. let newFormData = [...FormData]
  78. newFormData[index].result = e.detail.value
  79. setFormData([...newFormData])
  80. }
  81. const NextStep = () => {
  82. if (StepId < 4) {
  83. setStepId(StepId + 1)
  84. } else {
  85. let Arr = [...FormData]
  86. Arr.map((item) => {
  87. if (item.type === 'checkboxs') {
  88. item.options.map((subItem) => {
  89. if (subItem.selected) {
  90. item.result.push(subItem.name)
  91. }
  92. })
  93. }
  94. })
  95. SubmitForm(Arr)
  96. }
  97. }
  98. const PrevStep = () => {
  99. if (StepId > 1) {
  100. setStepId(StepId - 1)
  101. }
  102. }
  103. return (
  104. <view className='components AddedValueService'>
  105. {
  106. ShowPopup &&
  107. <SubmitBuyHouseResult List={ResultList.slice(0, 1)} ShowResult={false}></SubmitBuyHouseResult>
  108. }
  109. <ScrollView scroll-y>
  110. <view className='PageContent'>
  111. {
  112. FormData.map((item, index) => (
  113. <view className='Step' key={`Form-${index}`}>
  114. {
  115. index >= StepRange[0] && index < StepRange[1] &&
  116. <view>
  117. <text>{item.question}</text>
  118. {
  119. item.type === 'checkboxs' &&
  120. <view className='CheckList'>
  121. {
  122. item.options.map((subItem, subIndex) => (
  123. <view key={`${item.key}-${subIndex}`} className={subItem.selected ? 'active' : ''} onClick={CutCheckboxs(index, subItem, subIndex)}>
  124. <text>{subItem.name}</text>
  125. <Image mode='heightFix' src={require('@/assets/findHouse-icon1.png')}></Image>
  126. </view>
  127. ))
  128. }
  129. </view>
  130. }
  131. {
  132. item.type === 'checkbox' &&
  133. <view className='CheckList'>
  134. {
  135. item.options.map((subItem, subIndex) => (
  136. <view key={`${item.key}-${subIndex}`} className={item.resultId === subItem.id ? 'active' : ''} onClick={CutCheckbox(subItem, index)}>
  137. <text>{subItem.name}</text>
  138. <Image mode='heightFix' src={require('@/assets/findHouse-icon1.png')}></Image>
  139. </view>
  140. ))
  141. }
  142. </view>
  143. }
  144. {
  145. item.type === 'checkbox' && item.remark !== undefined &&
  146. <view className='Textarea'>
  147. <Textarea placeholder='请说出您的其他需求,让我们更好的为您服务!' onInput={(e) => { remarkInput(e, index) }} />
  148. </view>
  149. }
  150. {
  151. item.type === 'range' &&
  152. <view className='RangeList flex-h'>
  153. <view className='flex-item'>
  154. <Slider activeColor='#193C83' block-color='#fff' onChange={(e) => { Rangehange(e, index) }} min={item.options[0]} max={item.options[1]} show-value />
  155. </view>
  156. <text>万</text>
  157. </view>
  158. }
  159. {
  160. item.type === 'textarea' &&
  161. <view className='Textarea'>
  162. <Textarea placeholder='请说出您的其他需求,让我们更好的为您服务!' onInput={(e) => { textareaInput(e, index) }} />
  163. </view>
  164. }
  165. </view>
  166. }
  167. </view>
  168. ))
  169. }
  170. <view className='Btn'>
  171. <text className='active' onClick={NextStep}>下一步</text>
  172. <text onClick={PrevStep}>返回</text>
  173. </view>
  174. </view>
  175. </ScrollView>
  176. </view>
  177. )
  178. }