index.jsx 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import { useState, useEffect } from 'react'
  2. import Taro from "@tarojs/taro";
  3. import withLayout from '@/layout'
  4. import '@/assets/css/iconfont.css'
  5. import { Image, Textarea } from '@tarojs/components'
  6. import { fetch } from '@/utils/request'
  7. import { API_GET_CUSTOMER_INFO, API_FOLLOW_LIST } from '@/constants/api'
  8. import { getImgURL } from '@/utils/image'
  9. import './index.scss'
  10. import UserDetailBasicInfo from '../components/UserDetailBasicInfo/index'
  11. import UserDetailViewRecord from '../components/UserDetailViewRecord/index'
  12. import UserDetailActivityInfo from '../components/UserDetailActivityInfo/index'
  13. import UserDetailFollowRecord from '../components/UserDetailFollowRecord/index'
  14. export default withLayout((props) => {
  15. const { name, sex, phone, avatarurl, status } = props.router.params
  16. const [CustomerId] = useState(props.router.params.id)
  17. const [CustomerInfo, setCustomerInfo] = useState({})
  18. const [ShowAddFollow, setShowAddFollow] = useState(false)
  19. const [MenuList] = useState([
  20. { name: '基本信息', id: 1 },
  21. { name: '访问记录', id: 2 },
  22. { name: '活动信息', id: 3 },
  23. { name: '跟进记录', id: 4 }
  24. ])
  25. const [CurrentMenuId, setCurrentMenuId] = useState(1)
  26. const [FollowContent, setFollowContent] = useState('')
  27. const [FollowAddCounts, setFollowAddCounts] = useState(0)
  28. useEffect(() => {
  29. if (CustomerId) {
  30. UpdateCustomerInfo()
  31. }
  32. }, [CustomerId])
  33. const UpdateCustomerInfo = () => {
  34. fetch({ url: `${API_GET_CUSTOMER_INFO}${CustomerId}` }).then((res) => {
  35. if (res) {
  36. setCustomerInfo(res)
  37. }
  38. })
  39. }
  40. const CutMenu = (item) => {
  41. return () => {
  42. setCurrentMenuId(item.id)
  43. }
  44. }
  45. const AddFollow = () => {
  46. setShowAddFollow(true)
  47. }
  48. const FollowInput = (e) => {
  49. setFollowContent(e.detail.value.substring(0, 10))
  50. }
  51. const SaveFollow = () => {
  52. fetch({ url: API_FOLLOW_LIST, method: 'post', payload: { recordType: '添加跟进', recordContent: FollowContent, customerSex: CustomerInfo.sex, customerId: CustomerId } }).then((res) => {
  53. Taro.showToast({
  54. title: '添加跟进成功',
  55. icon: 'none'
  56. })
  57. setShowAddFollow(false)
  58. setFollowContent('')
  59. if (CurrentMenuId === 4) {
  60. setFollowAddCounts(FollowAddCounts + 1)
  61. }
  62. }).catch(() => {
  63. Taro.showToast({
  64. title: '添加跟进失败',
  65. icon: 'none'
  66. })
  67. })
  68. }
  69. const CancelAddFollow = () => {
  70. setShowAddFollow(false)
  71. setFollowContent('')
  72. }
  73. return (
  74. <view className='Page customerDetail flex-v'>
  75. <view className='UserInfo'>
  76. <view>
  77. <view>
  78. <view className='centerLabel'>
  79. <view className='flex-h'>
  80. <view className='Icon'>
  81. <Image mode='aspectFill' src={getImgURL(CustomerInfo.avatarurl || avatarurl)}></Image>
  82. </view>
  83. <view className='flex-item'>
  84. <view>
  85. <text>{CustomerInfo.name || name}</text>
  86. <text className={CustomerInfo.sex - 0 === 1 || sex - 0 === 1 ? 'iconfont icon-nanxing' : 'iconfont icon-nvxing'}></text>
  87. </view>
  88. <text>{CustomerInfo.phone || phone}</text>
  89. </view>
  90. <text className='iconfont icon-liaotian'></text>
  91. <text className='iconfont icon-dianhua' onClick={() => { Taro.makePhoneCall({ phoneNumber: CustomerInfo.phone || phone }) }}></text>
  92. </view>
  93. </view>
  94. <text className='Status'>{status - 0 === 1 || status - 0 === 0 ? '已报备' : status - 0 === 2 ? '已到访' : status - 0 === 3 ? '已认筹' : '已签约'}</text>
  95. <text className='Tips'>NEW</text>
  96. <text className='Tips'>NEW</text>
  97. </view>
  98. </view>
  99. </view>
  100. <view className='MenuList'>
  101. <view>
  102. {
  103. MenuList.map((item, index) => (
  104. <text key={`MenuItem-${index}`} className={CurrentMenuId === item.id ? 'active' : ''} onClick={CutMenu(item)}>{item.name}</text>
  105. ))
  106. }
  107. </view>
  108. </view>
  109. <view className='flex-item'>
  110. <view>
  111. {/* 基本信息 */}
  112. {
  113. CurrentMenuId === 1 &&
  114. <UserDetailBasicInfo CustomerId={CustomerId} CustomerInfo={CustomerInfo} AddFollow={AddFollow} Update={UpdateCustomerInfo}></UserDetailBasicInfo>
  115. }
  116. {/* 访问记录 */}
  117. {
  118. CurrentMenuId === 2 &&
  119. <UserDetailViewRecord CustomerId={CustomerId} AddFollow={AddFollow}></UserDetailViewRecord>
  120. }
  121. {/* 活动信息 */}
  122. {
  123. CurrentMenuId === 3 &&
  124. <UserDetailActivityInfo CustomerId={CustomerId} AddFollow={AddFollow}></UserDetailActivityInfo>
  125. }
  126. {/* 跟进记录 */}
  127. {
  128. CurrentMenuId === 4 &&
  129. <UserDetailFollowRecord CustomerId={CustomerId} AddFollow={AddFollow} AddFollowCounts={FollowAddCounts}></UserDetailFollowRecord>
  130. }
  131. </view>
  132. </view>
  133. {
  134. ShowAddFollow &&
  135. <view className='AddFollow'>
  136. <view className='centerLabel'>
  137. <view>
  138. <view>
  139. <text>跟进内容</text>
  140. <view className='FollowContent'>
  141. <Textarea placeholder='不超过150字' maxLength={150} value={FollowContent} onInput={FollowInput} />
  142. </view>
  143. <view className='Save flex-h'>
  144. <view className='flex-item'>
  145. <text onClick={CancelAddFollow}>取消</text>
  146. </view>
  147. <view className='flex-item'>
  148. <text onClick={SaveFollow}>保存</text>
  149. </view>
  150. </view>
  151. </view>
  152. </view>
  153. </view>
  154. </view>
  155. }
  156. </view>
  157. )
  158. })