Procházet zdrojové kódy

报备客户列表

wushaodong před 4 roky
rodič
revize
57226deb2e

+ 2 - 1
jscore/App.js

@@ -4,10 +4,11 @@ import dva from './utils/dva';
 import Router, {routerReducer, routerMiddleware} from './router';
 
 import Auth from './models/user';
+import Customer from './models/customer';
 
 const app = dva({
   initialState: {},
-  models: [Auth, ],
+  models: [Auth, Customer, ],
   extraReducers: {router: routerReducer},
   onAction: [routerMiddleware],
   onError(e) {

+ 1 - 1
jscore/components/CheckPrem.js

@@ -4,7 +4,7 @@ import SyncStorage from "sync-storage";
 const CheckPrem = (navetion, premission, check = true) => {
     const premissions = SyncStorage.get('premissions');
     if (navetion && check) {
-        if (!premission || premissions[premission]) {
+        if (!premission || premissions.indexOf(premission) > -1) {
             return true
         } else {
             Toast.info("您暂无权限使用此功能", 1)

+ 1 - 1
jscore/components/ResponseError.js

@@ -3,7 +3,7 @@ import {Alert} from "react-native";
 const ResponseError = (response,) => {
     Alert.alert(
         '友情提醒',
-        response.errors ? response.errors : '当前页面出错了!',
+        response.msg ? response.msg : '当前页面出错了!',
         [
             {text: '我知道了', style: 'cancel'},
         ],

+ 4 - 4
jscore/components/TurnPage.js

@@ -2,15 +2,15 @@ import {REFRESH_STATE} from "react-native-refresh-flatlist";
 
 const TurnPage = (data, payload, dataList,) => {
     if (payload.page > 1) {
-        dataList = dataList.concat(data.rows)
+        dataList = dataList.concat(data.data)
     } else {
-        dataList = data.rows
+        dataList = data.data
     }
 
     let RState = 0
-    if (data.total > 0) {
+    if (data.count > 0) {
         RState = REFRESH_STATE.Idle
-        const totalPage = parseInt(data.total/payload.rows) + 1
+        const totalPage = parseInt(data.count/payload.rows) + 1
         if (payload.page === totalPage) {
             RState = REFRESH_STATE.NoMoreData
         }

+ 49 - 0
jscore/models/customer.js

@@ -0,0 +1,49 @@
+import {createAction} from '../utils';
+import * as customer from '../services/customer';
+import ResponseError from '../components/ResponseError';
+import TurnPage from '../components/TurnPage';
+import {REFRESH_STATE} from 'react-native-refresh-flatlist';
+
+let reportCustomerData=[];
+export default {
+    namespace: 'customer',
+    state: {
+        loading: false,
+        reportCustomerDataRState: REFRESH_STATE.Ready,
+        reportCustomerData:[]
+    },
+    reducers: {
+        updateState(state, {payload}) {
+            return {...state, ...payload};
+        },
+        queryList(state, {payload}) {
+            return {...state, ...payload};
+        },
+    },
+    effects: {
+        * fetchReportCustomerData({payload}, {call, put}) {
+            if (payload.page > 1) {
+                yield put(createAction('queryList')({reportCustomerDataRState: REFRESH_STATE.FooterRefreshing}));
+            } else {
+                yield put(createAction('queryList')({reportCustomerDataRState: REFRESH_STATE.HeaderRefreshing}));
+            }
+            const response = yield call(customer.queryReportCustomerData, payload);
+            if (!response.code) {
+                const result = TurnPage(response, payload, reportCustomerData);
+                reportCustomerData = result.data;
+                yield put(createAction('queryList')({
+                    reportCustomerData: reportCustomerData, reportCustomerDataRState: result.state,
+                    total: response.totalResult, page: payload.page,
+                }));
+            } else {
+                ResponseError(response);
+                yield put(createAction('queryList')({reportCustomerDataRState: REFRESH_STATE.Ready}));
+            }
+        },
+    },
+    subscriptions: {
+        setup({dispatch}) {
+            //dispatch({ type: 'loadStorage' })
+        },
+    },
+};

+ 1 - 1
jscore/pages/Sales/Home.js

@@ -26,7 +26,7 @@ const qkgl = [
     {
         name: '客户报备',
         img: require('../../../assets/images/jdws2.png'),
-        navetion: 'ReceptionList',
+        navetion: 'ReportCustomerList',
         param: {},
         premission: 'customer.view_report_customer',
     },

+ 13 - 0
jscore/pages/Sales/Index.js

@@ -3,6 +3,7 @@
 import {createStackNavigator} from 'react-navigation-stack';
 import NavigationOptions from '../../components/NavbarOptions';
 import SalesHome from './Home';
+import ReportCustomerList from './ReportCustomerList';
 
 const HomeStack = createStackNavigator({
         SalesHome: {
@@ -11,6 +12,18 @@ const HomeStack = createStackNavigator({
                 title: '首页',
             },
         },
+        ReportCustomerList: {
+            screen: ReportCustomerList,
+            navigationOptions: {
+                title: '客户报备',
+            },
+        },
+    },
+    {
+        initialRouteName: 'SalesHome',
+        defaultNavigationOptions: NavigationOptions,
+        //mode: 'modal',
+        //headerMode: 'none',
     },
 );
 

+ 142 - 0
jscore/pages/Sales/ReportCustomerList.js

@@ -0,0 +1,142 @@
+import React, {Component} from 'react';
+import {
+    View,
+    TouchableOpacity, Text, StatusBar, DeviceEventEmitter,
+} from 'react-native';
+
+import {createAction} from '../../utils';
+import {connect} from 'react-redux';
+import {Button, Provider} from '@ant-design/react-native';
+import RefreshFlatList from 'react-native-refresh-flatlist';
+import CallPhone from '../../components/CallPhone';
+import CheckPrem from '../../components/CheckPrem';
+import ComponentsStyles from '../../components/ComponentsStyles';
+
+@connect(customer => ({...customer}))
+@connect(auth => ({...auth}))
+class ReportCustomerList extends Component {
+    // 客户报备列表
+    constructor(props) {
+        super(props);
+        this.state = {
+            rows: 10,
+            page: 1,
+        };
+    }
+
+    componentDidMount() {
+        this._fetchData();
+        this.refesh = DeviceEventEmitter.addListener('backRefesh', (param) => {
+            this.props.dispatch(createAction('auth/fetchTipsCount')());
+            this._fetchData();
+        });
+    }
+
+    componentWillUnmount() {
+        this.refesh.remove();
+    }
+
+    _fetchData = (page) => {
+        if (page) {
+            this.state.page = page;
+        }
+        this.props.dispatch(createAction('customer/fetchReportCustomerData')(this.state));
+    };
+    _fetchMore = () => {
+        const {page, total} = this.props.customer;
+        if (page * this.state.rows >= total) {
+            return;
+        }
+        const currentPage = page + 1;
+        this._fetchData(currentPage);
+    };
+    _keyExtractor = (item, index) => {
+        return index.toString();
+    };
+
+    _renderItem = (data) => {
+        const item = data.item;
+        return (
+            <TouchableOpacity style={ComponentsStyles.mainTouch}
+                              onPress={() => this.props.navigation.navigate('', {item})}>
+                <View style={{flexDirection: 'row'}}>
+                    {/*姓名 电话*/}
+                    <View style={{flex: 1, justifyContent: 'flex-start', flexDirection: 'row'}}>
+                        <Text style={ComponentsStyles.icon}>{'\ue660'} <Text style={ComponentsStyles.fontBold}>
+                            {item.name}
+                        </Text>
+                        </Text>
+                    </View>
+                    <View style={{justifyContent: 'flex-end', flexDirection: 'row'}}>
+                        <Text style={ComponentsStyles.icon}>{'\ue61a'}</Text>
+                        <Text
+                            onPress={() => CallPhone(item.tel, 1)}
+                            style={{
+                                fontSize: 15,
+                                color: '#2b90ea',
+                            }}>
+                            {item.tel}
+                        </Text>
+                    </View>
+                </View>
+                <View style={{flexDirection: 'row', paddingTop: 5, paddingRight: 10}}>
+                    <Text style={ComponentsStyles.icon}>{'\ue6ed'} <Text
+                        style={ComponentsStyles.font15}>{item.project_text}</Text>
+                    </Text>
+                </View>
+
+                <View style={{flexDirection: 'row', flex: 1, paddingTop: 5}}>
+                    <View style={ComponentsStyles.itemView}>
+                        <Text style={ComponentsStyles.icon}>{'\ue6cc'}</Text>
+                        <Text style={{fontSize: 15}}>{item.create_time}</Text>
+                    </View>
+
+                    <Text
+                        style={[ComponentsStyles.font15, item.report_status === 1 ? {color: 'green'} : {color: 'red'}]}>
+                        {item.report_status_text}</Text>
+                </View>
+            </TouchableOpacity>
+        );
+    };
+    onAddPress = () => {
+        const prem = CheckPrem(1, 'customer.add_report_customer');
+        if (!prem) {
+            return;
+        }
+        this.props.navigation.navigate('');
+    };
+
+    render() {
+        const {reportCustomerData, reportCustomerDataRState, total} = this.props.customer;
+        return (
+            <View style={{flex: 1}}>
+                <Provider>
+                    <StatusBar backgroundColor={'#fff'} barStyle='dark-content'/>
+                    <RefreshFlatList
+                        data={reportCustomerData}
+                        renderItem={(item) => this._renderItem(item)}
+                        keyExtractor={this._keyExtractor}
+                        themeColor="#5eafe4"
+                        refreshState={reportCustomerDataRState}
+                        footerRefreshingText="正在加载"
+                        footerFailureText="加载失败"
+                        onHeaderRefresh={() => this._fetchData(1)}
+                        onFooterRefresh={() => this._fetchMore()}
+                    />
+                    <View style={ComponentsStyles.bottomTotal}>
+                        <Text style={ComponentsStyles.totalText}>合计数量:<Text
+                            style={{color: '#333333'}}>{total}</Text></Text>
+                    </View>
+                    <Button
+                        type="primary"
+                        onPress={() => this.onAddPress()}
+                        style={ComponentsStyles.button}><Text
+                        style={{color: '#fff'}}>报备客户</Text>
+                    </Button>
+                </Provider>
+            </View>
+        );
+    }
+}
+
+export default ReportCustomerList;

+ 8 - 0
jscore/services/customer.js

@@ -0,0 +1,8 @@
+import {stringify} from 'qs';
+import request from './../utils/request';
+
+export async function queryReportCustomerData(params) {
+    return request(
+        `/customer/report_customer/?${stringify(params)}`,
+    );
+}