ReviewDetail.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. import React, {Component} from 'react';
  2. import {
  3. View,
  4. Text,
  5. StyleSheet,
  6. ScrollView,
  7. TextInput,
  8. Dimensions,
  9. } from 'react-native';
  10. import {Tabs, Modal, Provider, Toast, Button, Picker, List} from '@ant-design/react-native';
  11. import {createAction} from '../../utils';
  12. import {connect} from 'react-redux';
  13. import CallPhone from '../../components/CallPhone';
  14. import ComponentsStyles from '../../components/ComponentsStyles';
  15. import CheckValid from '../../components/CheckValid';
  16. import RefreshFlatList from 'react-native-refresh-flatlist';
  17. const tabs = [
  18. {title: '基本信息', id: 1},
  19. {title: '跟踪记录', id: 2},
  20. ];
  21. const {width} = Dimensions.get('window');
  22. @connect(customer => ({...customer}))
  23. class ReviewDetail extends Component {
  24. // 潜客跟踪
  25. constructor(props) {
  26. super(props);
  27. this.state = {
  28. getParm: {
  29. page: 1,
  30. rows: 10,
  31. customer: this.props.navigation.state.params.item.id,
  32. },
  33. item: this.props.navigation.state.params.item,
  34. moreModelVisible: false,
  35. };
  36. };
  37. componentDidMount() {
  38. this._fetchReviewReoprt();
  39. }
  40. _fetchMore = () => {
  41. const {page, total} = this.props.customer;
  42. if (page * this.state.getParm.rows >= total) {
  43. return;
  44. }
  45. const currentPage = page + 1;
  46. this._fetchReviewReoprt(currentPage);
  47. };
  48. _keyExtractor = (item, index) => {
  49. return index.toString();
  50. };
  51. _fetchReviewReoprt = (page) => {
  52. if (page) {
  53. this.state.getParm.page = page;
  54. }
  55. this.props.dispatch(createAction('customer/fetchReviewRecord')(this.state.getParm));
  56. };
  57. baseInfo = () => {
  58. const reviewDetailData = this.state.item;
  59. return <View style={{marginTop: 5}}>
  60. <List style={styles.listStyle}>
  61. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.name}</Text>} arrow="empty">
  62. <Text style={ComponentsStyles.font15}>姓名</Text>
  63. </List.Item>
  64. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.gender_text}</Text>}
  65. arrow="empty">
  66. <Text style={ComponentsStyles.font15}>性别</Text>
  67. </List.Item>
  68. <View style={styles.telItemView}>
  69. <Text style={ComponentsStyles.font15}>电话</Text>
  70. <View style={styles.telView}>
  71. <Text style={ComponentsStyles.icon}>{'\ue61a'}</Text>
  72. <Text
  73. style={styles.telText}
  74. onPress={() => CallPhone(reviewDetailData.tel, 1)}>
  75. {reviewDetailData.tel}
  76. </Text>
  77. </View>
  78. </View>
  79. <List.Item extra={<Text style={ComponentsStyles.IDText}>{reviewDetailData.address}</Text>}
  80. wrap
  81. multipleLine arrow="empty">
  82. <Text style={ComponentsStyles.font15}>地址</Text>
  83. </List.Item>
  84. <List.Item extra={<Text style={ComponentsStyles.IDText}>{reviewDetailData.village}</Text>}
  85. wrap
  86. multipleLine arrow="empty">
  87. <Text style={ComponentsStyles.font15}>小区</Text>
  88. </List.Item>
  89. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.source_text}</Text>}
  90. arrow="empty">
  91. <Text style={ComponentsStyles.font15}>来源</Text>
  92. </List.Item>
  93. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.project_text}</Text>}
  94. arrow="empty">
  95. <Text style={ComponentsStyles.font15}>项目</Text>
  96. </List.Item>
  97. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.stage_progress_text}</Text>}
  98. arrow="empty">
  99. <Text style={ComponentsStyles.font15}>阶段进度</Text>
  100. </List.Item>
  101. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.status_text}</Text>}
  102. arrow="empty">
  103. <Text style={ComponentsStyles.font15}>状态</Text>
  104. </List.Item>
  105. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.track_user_text}</Text>}
  106. arrow="empty">
  107. <Text style={ComponentsStyles.font15}>跟踪人员</Text>
  108. </List.Item>
  109. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.store_text}</Text>}
  110. arrow="empty">
  111. <Text style={ComponentsStyles.font15}>门店</Text>
  112. </List.Item>
  113. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.next_time_f}</Text>}
  114. arrow="empty">
  115. <Text style={ComponentsStyles.font15}>下次跟踪</Text>
  116. </List.Item>
  117. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.enter_count}</Text>}
  118. arrow="empty">
  119. <Text style={ComponentsStyles.font15}>进店次数</Text>
  120. </List.Item>
  121. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.last_enter_time}</Text>}
  122. arrow="empty">
  123. <Text style={ComponentsStyles.font15}>最后进店时间</Text>
  124. </List.Item>
  125. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.create_time_f}</Text>}
  126. arrow="empty">
  127. <Text style={ComponentsStyles.font15}>建档时间</Text>
  128. </List.Item>
  129. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.create_user_text}</Text>}
  130. arrow="empty">
  131. <Text style={ComponentsStyles.font15}>建档人</Text>
  132. </List.Item>
  133. <List.Item extra={<Text style={ComponentsStyles.font15}>{reviewDetailData.notes}</Text>}
  134. arrow="empty">
  135. <Text style={ComponentsStyles.font15}>备注</Text>
  136. </List.Item>
  137. </List>
  138. </View>;
  139. };
  140. renderItem = (data) => {
  141. const item = data.item;
  142. return <View style={styles.reportMain}>
  143. <View style={styles.row5}>
  144. <View style={ComponentsStyles.itemView}>
  145. <Text style={ComponentsStyles.icon}>{'\ue619'} </Text>
  146. <Text style={ComponentsStyles.font15}>{item.create_user_text}</Text>
  147. </View>
  148. </View>
  149. <View style={styles.row5}>
  150. <Text style={ComponentsStyles.icon}>{'\ue6ed'} </Text>
  151. <Text style={ComponentsStyles.font15}>{item.description}</Text>
  152. </View>
  153. <View style={styles.row5}>
  154. <Text style={ComponentsStyles.icon}>{'\ue6cc'} </Text>
  155. <Text style={{fontSize: 15}}>{item.create_time_f}</Text>
  156. </View>
  157. <View style={styles.row5}>
  158. <Text style={styles.red5}>支援或放弃:</Text>
  159. <Text style={ComponentsStyles.font15}>{item.instruction}</Text>
  160. </View>
  161. <View style={styles.row5}>
  162. <Text style={styles.red5}>审核:</Text>
  163. <Text style={ComponentsStyles.font15}>{item.check_status_text}--{item.check_comment}</Text>
  164. </View>
  165. </View>;
  166. };
  167. render() {
  168. const {reviewRecordData, reviewRecordRState} = this.props.customer;
  169. return (
  170. <Provider>
  171. <Tabs
  172. tabs={tabs}
  173. initialPage={0}
  174. tabBarPosition="top"
  175. styles={{
  176. topTabBarSplitLine: {
  177. borderBottomWidth: 0,
  178. },
  179. }}
  180. tabBarUnderlineStyle={{
  181. backgroundColor: '#03C762',
  182. width: 40,
  183. marginLeft: (width / 2 - 38) / 2,
  184. height: 3,
  185. borderRadius: 2,
  186. }}
  187. tabBarActiveTextColor="#000"
  188. >
  189. {/*基本信息*/}
  190. <ScrollView>
  191. {this.baseInfo()}
  192. </ScrollView>
  193. {/* 跟踪记录*/}
  194. <View>
  195. <RefreshFlatList
  196. data={reviewRecordData}
  197. renderItem={(item) => this.renderItem(item)}
  198. keyExtractor={this._keyExtractor}
  199. themeColor="#5eafe4"
  200. refreshState={reviewRecordRState}
  201. footerRefreshingText="正在加载"
  202. footerFailureText="加载失败"
  203. onHeaderRefresh={() => this._fetchReviewReoprt(1)}
  204. onFooterRefresh={() => this._fetchMore()}
  205. ListHeaderComponent={() => <View style={{height: 0}}/>}
  206. ItemSeparatorComponent={() => <View style={{height: 0}}/>}
  207. />
  208. </View>
  209. </Tabs>
  210. <View style={{flexDirection: 'row', justifyContent: 'center', backgroundColor: '#fff'}}>
  211. <Button
  212. type="primary"
  213. onPress={() => this.props.navigation.navigate('WriteTrackReport',
  214. {
  215. customer_id: this.state.getParm.touch_id,
  216. backKey: this.props.navigation.state.key,
  217. })}
  218. style={{width: 200, margin: 5}}
  219. >
  220. <Text
  221. style={{color: '#fff'}}>填写跟踪报告</Text></Button>
  222. <Button
  223. type="warning"
  224. onPress={() => this.setState({moreModelVisible: true})}
  225. style={{width: 100, margin: 5}}
  226. >
  227. <Text
  228. style={{color: '#fff'}}>更多</Text></Button>
  229. </View>
  230. </Provider>
  231. );
  232. }
  233. }
  234. const styles = StyleSheet.create({
  235. modalText: {
  236. color: '#333',
  237. fontSize: 16,
  238. textAlign: 'center',
  239. textAlignVertical: 'center',
  240. },
  241. textInput: {
  242. width: '80%',
  243. textAlign: 'left',
  244. paddingHorizontal: 10,
  245. },
  246. modalContainer: {
  247. flexDirection: 'row',
  248. paddingHorizontal: 10,
  249. paddingLeft: 13,
  250. borderBottomWidth: 1,
  251. borderBottomColor: '#eee',
  252. },
  253. textStyle: {
  254. fontSize: 16,
  255. paddingVertical: 10,
  256. },
  257. telItemView: {
  258. flex: 1,
  259. flexDirection: 'row',
  260. marginLeft: 15,
  261. paddingRight: 18,
  262. paddingVertical: 8,
  263. borderBottomWidth: 0.5,
  264. borderBottomColor: '#eaeaea',
  265. },
  266. telName: {
  267. color: '#333',
  268. fontSize: 18,
  269. },
  270. telView: {
  271. flex: 1,
  272. flexDirection: 'row',
  273. justifyContent: 'flex-end',
  274. alignItems: 'center',
  275. },
  276. telText: {
  277. color: '#2b90ea',
  278. fontSize: 15,
  279. },
  280. listStyle: {
  281. borderBottomWidth: 10,
  282. borderBottomColor: '#f6f7f8',
  283. },
  284. reportMain: {
  285. marginTop: 5,
  286. // marginBottom: 5,
  287. backgroundColor: '#fff',
  288. paddingHorizontal: 10,
  289. // borderWidth:1,
  290. },
  291. customerText: {
  292. color: '#333',
  293. fontSize: 16,
  294. },
  295. row5: {
  296. flexDirection: 'row',
  297. paddingVertical: 5,
  298. },
  299. red5: {
  300. fontSize: 15,
  301. color: 'red',
  302. padding: 2,
  303. },
  304. });
  305. export default ReviewDetail;