import React, {Component} from 'react'; import { View, TouchableOpacity, Image, Text, SafeAreaView, FlatList, ActivityIndicator, Alert, RefreshControl, } from 'react-native'; import { DatePicker, Drawer, List, Provider, WingBlank, SwipeAction, Picker, WhiteSpace, } from '@ant-design/react-native'; import public_css from '../../source/css/public_css'; import {RetrieveData} from '../../data/storage'; import {RequestNetwork} from '../../data/encryption'; import {GetMonthDate, GetDateString} from '../../utils/date'; import {ToastShow} from '../../components/toast/toast'; import {InvoiceType, ApplicationStatus} from '../../utils/config'; import {CleanAll} from '../../components/abnormalMessage/abnormal_message'; import Spinner from 'react-native-loading-spinner-overlay'; import loading_css from '../../source/css/loading_css'; export default class application_info extends Component { constructor(props) { super(props); this.props.navigation.dangerouslyGetParent().setOptions({ tabBarVisible: false, }); this.state = { isShowSearch: false, beginDate: '', endDate: '', beginDateString: '', endDateString: '', invoiceList: [], isRefreshing: false, pageNum: 1, //当前页码 pageSize: 10, //每页数量 totalPage: 10, //总页数 showFoot: 0, monthDate: {}, invoiceTypeList: InvoiceType(), invoiceType: '1', applicationStatusList: ApplicationStatus(), applicationStatus: '0', spinner: false, isNextPage: false, // 是否有下一页 isPreviousPage: false, // 是否有上一页 }; } render() { let draw = ( this.beginTimeChange(time)} format="YYYY-MM-DD"> 开始时间 this.endTimeChange(time)} format="YYYY-MM-DD"> 结束时间 this.invoiceTypeChange(select)}> 发票类型: this.applicationStatusChange(select)}> 申领状态: { this.searchDataEmpty(); }}> 重置 this.searchData()}> 查询 ); return ( (this.drawer = el)} onOpenChange={(open) => this.openStatus(open)} drawerBackgroundColor="#ccc" drawerWidth={300}> this.renderItem(item)} refreshControl={ this.onRefresh()} /> } ListFooterComponent={() => this.renderFooter()} onEndReached={() => this.onReached()} onEndReachedThreshold={0.1} /> this.props.navigation.navigate('invoice_application', { setRefresh: () => { this.setRefresh(); }, }) }> 发票申领 ); } // render加载完后调用 async componentDidMount() { this.setLoadingStatus(true); let date = GetMonthDate(); this.setState({ monthDate: date, beginDate: date.startDate, endDate: date.endDate, beginDateString: date.startDateString, endDateString: date.endDateString, }); await this.getApplicationList(); } //判断是否点击了查询 shouldComponentUpdate( nextProps: Readonly

, nextState: Readonly, nextContext: any, ): boolean { if (nextProps.route.params != undefined) { if (nextProps.route.params.isShow) { this.setState({ isShowSearch: true, }); this.drawer.openDrawer(); this.props.navigation.setParams({ isShow: false, }); } } return true; } // 获取发票申领列表 getApplicationList = async () => { const company = JSON.parse(await RetrieveData('company')); const token = await RetrieveData('token'); const account = await RetrieveData('account'); if (token && account) { const url = '/sys/invoicePurchase/statusInfos'; let response = await RequestNetwork( url, token, { entTaxId: company.entTaxId, deviceType: company.defaultDeviceInfo.deviceType, taxDiscId: company.defaultDeviceInfo.taxDiscId, invoiceCategory: this.state.invoiceType, applyDateBegin: this.state.beginDateString, applyDateEnd: this.state.endDateString, handleStatus: this.state.applicationStatus, pageNum: this.state.pageNum, pageSize: this.state.pageSize, mobile: account, }, false, 2, ); if (response) { if (response.code === 0) { this.setState({ isNextPage: response.data.hasNext, isPreviousPage: response.data.hasPrv, }); this.setLoadingStatus(false); if (response.data.statusInfoVOs.length > 0) { this.setState({ isRefreshing: false, totalPage: response.data.statusInfoVOs.length, }); this.setList(response.data.statusInfoVOs); } else { this.setState({ showFoot: 0, isRefreshing: false, }); } } else { this.setLoadingStatus(false); await this.abnormalMessage(response); } } } }; //设置抬头列表 setList = (data) => { let listData = data.map((_, i) => ({ key: data[i].applySerialNumber, invoiceKindCode: data[i].invoiceKindCode, invoiceKindName: data[i].invoiceKindName, invoiceCateCode: data[i].invoiceCateCode, invoiceCateName: data[i].invoiceCateName, applyNum: data[i].applyNum, applyDate: data[i].applyDate, handleStatus: data[i].handleStatus, handleInformation: data[i].handleInformation, resultEnterFlag: data[i].resultEnterFlag, details: data[i].details, })); let list = this.state.invoiceList.concat(listData); let showFoot = 0; if (this.state.isNextPage) { showFoot = 2; } this.setState({ invoiceList: list, showFoot: showFoot, }); }; //查询菜单开关状态 openStatus = (open) => { if (open) { } else { // this.props.children.setClickNum(); } }; //获取查询开始时间 beginTimeChange = (time) => { let date = GetDateString(time); this.setState({ beginDate: time, beginDateString: date, }); }; //获取查询结束时间 endTimeChange = (time) => { let date = GetDateString(time); this.setState({ endDate: time, endDateString: date, }); }; //获取查询发票类型 invoiceTypeChange = (select) => { let invoiceType = ''; if (select.length > 0) { invoiceType = select[0]; } this.setState({ invoiceType: invoiceType, }); }; //获取查询发票类型 applicationStatusChange = (select) => { let applicationStatus = ''; if (select.length > 0) { applicationStatus = select[0]; } this.setState({ applicationStatus: applicationStatus, }); }; //查询 searchData = async () => { this.setState({ isShowSearch: false, invoiceList: [], showFoot: 0, isNextPage: false, isPreviousPage: false, }); this.setLoadingStatus(true); await this.getApplicationList(); }; //清空查询数据 searchDataEmpty = async () => { let date = GetMonthDate(); this.setState({ monthDate: date, beginDate: date.startDate, endDate: date.endDate, beginDateString: date.startDateString, endDateString: date.endDateString, invoiceType: '1', applicationStatus: '0', invoiceList: [], showFoot: 0, isNextPage: false, isPreviousPage: false, pageNum: 1, }); await this.getApplicationList(); }; // 加载list项 renderItem = (data) => ( 发票类别:{data.item.invoiceCateName} 申领份数:{data.item.applyNum} 申领时间:{data.item.applyDate} 处理时间:{data.item.handleDate} 处理状态: {data.item.handleStatus === '0' ? '申领中' : data.item.handleStatus === '1' ? '成功' : data.item.handleStatus === '2' ? '失败' : ''} 处理信息:{data.item.handleInformation} {data.item.handleStatus === '1' ? ( data.item.resultEnterFlag === 'N' ? ( { this.applicationConfirmation(data); }}> 申领确认 ) : ( ) ) : ( )} {data.item.handleStatus === '0' ? ( { this.applicationCancel(data); }}> 申领撤销 ) : ( )} ); // 下拉刷新 onRefresh = async () => { this.setState({ isRefreshing: true, showFoot: 1, invoiceList: [], isNextPage: false, isPreviousPage: false, pageNum: 1, }); await this.getApplicationList(); }; // list尾部组件 renderFooter() { if (this.state.showFoot === 0) { return ( 没有更多数据了 ); } else if (this.state.showFoot === 1) { return ( 正在加载... ); } else if (this.state.showFoot === 2) { return ( 上拉加载 ); } } //列表末尾控制,若请求到的数据数据少于一页,则默认没有更多数据了 onReached = async () => { if (this.state.showFoot === 2 && this.state.isNextPage) { if (this.state.pageNum >= this.state.totalPage) { this.setState({showFoot: 0}); } else { this.setState({ pageNum: this.state.pageNum + 1, showFoot: 1, }); //获取数据 await this.getApplicationList(); } } else { return; } }; // 申领成功后返回刷新 setRefresh = async () => { await this.getApplicationList(); }; // 申领确认 applicationConfirmation = async (data) => { const company = JSON.parse(await RetrieveData('company')); const token = await RetrieveData('token'); const account = await RetrieveData('account'); if (token && account) { const url = '/sys/invoicePurchase/confirm'; let response = await RequestNetwork( url, token, { entTaxId: company.entTaxId, deviceType: company.defaultDeviceInfo.deviceType, taxDiscId: company.defaultDeviceInfo.taxDiscId, invoiceCateCode: data.item.invoiceCateCode, invoiceCateName: data.item.invoiceCateName, applySerialNumber: data.item.key, mobile: account, reqChannel: 3, details: [ { invoiceBeginNo: data.item.details[0].invoiceBeginNo, invoiceNums: data.item.details[0].invoiceNums, invoiceEndNo: data.item.details[0].invoiceEndNo, invoiceCode: data.item.details[0].invoiceCode, }, ], }, false, 1, ); if (response) { if (response.code === 0) { ToastShow(1, '申领确认成功!'); await this.searchDataEmpty(); } else { ToastShow(1, '申领确认失败!'); } } } }; //申领撤销 applicationCancel = async (data) => { const company = JSON.parse(await RetrieveData('company')); const token = await RetrieveData('token'); const account = await RetrieveData('account'); if (token && account) { const url = '/sys/invoicePurchase/revoke'; let response = await RequestNetwork( url, token, { entTaxId: company.entTaxId, deviceType: company.defaultDeviceInfo.deviceType, taxDiscId: company.defaultDeviceInfo.taxDiscId, invoiceCateCode: data.item.invoiceCateCode, invoiceCateName: data.item.invoiceCateName, applySerialNumber: data.item.key, mobile: account, reqChannel: 3, }, false, 1, ); if (response) { if (response.code === 0) { if (response.code === 0) { ToastShow(1, '申领撤销成功!'); await this.searchDataEmpty(); } else { ToastShow(1, '申领撤销失败!'); } } } } }; // 设置load层是否显示 setLoadingStatus = (isLoading) => { this.setState({ spinner: isLoading, }); }; // 处理网络请求数据 abnormalMessage = async (jason) => { if (jason.code === 401) { await Alert.alert( '登录失效', '登录状态已失效,请重新登录!', [ { text: '确定', onPress: () => { CleanAll(); this.props.navigation.popToTop(); }, }, ], {cancelable: false}, ); } if (jason.code === 403) { Alert.alert( '权限', '暂无权限操作此模块!', [ { text: '确定', onPress: () => { this.props.navigation.goBack(); }, }, ], {cancelable: false}, ); } if (jason.code !== 401 && jason.code !== 403) { ToastShow(1, jason.msg); } }; }