ReviewDetail.js 12 KB

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