ReviewDetail.js 14 KB

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