wushaodong 4 роки тому
батько
коміт
7b5c0323e9

+ 16 - 0
jscore/models/customer.js

@@ -296,6 +296,22 @@ export default {
                 yield put(createAction('queryList')({processRecordRState: REFRESH_STATE.Ready}));
             }
         },
+        * fetchProcessDict({payload, callback}, {call, put}) {
+            const response = yield call(customer.queryProcessDict, payload);
+            if (!response.code) {
+                callback(response.data)
+            } else {
+                ResponseError(response);
+            }
+        },
+        * dispatchService({payload, callback}, {call, put}) {
+            const response = yield call(customer.dispatchService, payload);
+            if (!response.code) {
+                callback()
+            } else {
+                ResponseError(response);
+            }
+        },
     },
     subscriptions: {
         setup({dispatch}) {

+ 190 - 0
jscore/pages/Sales/DispatchProcess.js

@@ -0,0 +1,190 @@
+import React, {Component} from 'react';
+import {
+    View,
+    Text,
+    StatusBar,
+    DeviceEventEmitter,
+    StyleSheet,
+} from 'react-native';
+import {Provider, Toast, Button, List, Picker} from '@ant-design/react-native';
+import {connect} from 'react-redux';
+import {ComponentsStyles} from '../../components/ComponentsStyles';
+
+@connect(customer => ({...customer}))
+class DispatchProcess extends Component {
+    //  分配
+    constructor(props) {
+        super(props);
+        this.state = {
+            customer: this.props.navigation.state.params.customer,
+            order: this.props.navigation.state.params.order,
+            now_process_text: '',
+            next_process: '',
+
+            PROCESS: [],
+            USERS: [],
+            service: '',
+        };
+    };
+
+    componentDidMount() {
+        this._fetchData();
+    }
+
+    _fetchData = () => {
+
+        this.props.dispatch({
+            type: 'customer/fetchProcessDict',
+            payload: {customer_id: this.state.customer},
+            callback: (data) => {
+                let PROCESS = [];
+                data.map((item, index) => {
+                    PROCESS.push({
+                        value: item.value, label: item.label,
+                    });
+                });
+                this.setState({PROCESS});
+            },
+        });
+
+
+        this.props.dispatch({
+            type: 'customer/getUser',
+            callback: (data) => {
+                let USERS = [];
+                data.map((item, index) => {
+                    USERS.push({
+                        value: item.value, label: item.lable,
+                    });
+                });
+                this.setState({USERS});
+            },
+        });
+        this.props.dispatch({
+            type: 'customer/getProcess',
+            payload: {customer_id: this.state.customer},
+            callback: (data) => {
+                if (data.error_message) {
+                    Toast.info(data.error_message, 2, () => {
+                        this.props.navigation.goBack();
+                    });
+                    return;
+                }
+                this.setState({
+                    now_process_text: data.now_process_text,
+                    next_process: [data.next_process_id],
+                });
+
+            },
+        });
+    };
+    onSave = () => {
+        if (!this.state.next_process.length) {
+            Toast.info('请下一进度', 1);
+            return;
+        }
+        if (!this.state.service.length) {
+            Toast.info('请选择人员', 1);
+            return;
+        }
+        this.props.dispatch({
+            type: 'customer/dispatchService',
+            payload: this.state,
+            callback: () => {
+                Toast.info('分配成功', 1, () => {
+                    DeviceEventEmitter.emit('refeshProcess');
+                    DeviceEventEmitter.emit('backRefesh');
+                    this.props.navigation.goBack();
+                });
+            },
+        });
+    };
+
+    render() {
+        const {loading} = this.props.customer;
+        return (
+            <Provider>
+                <StatusBar backgroundColor={'#fff'} barStyle='dark-content'/>
+                <View style={styles.infoContent}>
+                    <List>
+                        <List.Item
+                            extra={<Text style={ComponentsStyles.font15}>{this.state.now_process_text}</Text>}
+                            arrow="empty">
+                            <Text style={ComponentsStyles.font16}>当前进度</Text>
+                        </List.Item>
+                        <Picker
+                            data={this.state.PROCESS}
+                            cols={1}
+                            value={this.state.next_process}
+                            onChange={(val) => this.setState({next_process: val})}
+                        >
+                            <List.Item arrow="horizontal">
+                                下一进度
+                            </List.Item>
+                        </Picker>
+                        <Picker
+                            data={this.state.USERS}
+                            cols={1}
+                            value={this.state.service}
+                            onChange={(val) => this.setState({service: val})}
+                        >
+                            <List.Item arrow="horizontal">
+                                服务人员
+                            </List.Item>
+                        </Picker>
+                    </List>
+                </View>
+
+                <Button
+                    type="primary"
+                    disabled={loading}
+                    onPress={() => this.onSave()}
+                    style={ComponentsStyles.button}
+                >
+                    <Text style={{color: '#fff'}}>提交</Text></Button>
+            </Provider>
+        );
+    }
+}
+
+const styles = StyleSheet.create({
+    paperBody: {
+        flexDirection: 'row',
+        flexWrap: 'wrap',
+        // borderBottomWidth: 10,
+        // borderBottomColor: '#eee',
+        paddingLeft: 5,
+    },
+    paperBodyItem: {
+        alignItems: 'center',
+        margin: 2,
+        padding: 5,
+    },
+    dateInput: {
+        borderWidth: 0,
+        alignItems: 'flex-end',
+    },
+    infoContent: {
+        flex: 1,
+        marginTop: 5,
+        backgroundColor: '#fff',
+    },
+    infoItem: {
+        flexDirection: 'row',
+        paddingVertical: 10,
+        borderBottomWidth: 1,
+        borderColor: '#eaeaea',
+        justifyContent: 'space-between',
+    },
+    infoItemLeft: {color: '#000', fontSize: 19},
+    infoItemRight: {fontSize: 15, paddingTop: 2},
+    modelItem: {
+        borderBottomWidth: 1,
+        borderColor: '#eaeaea',
+        textAlign: 'center',
+        paddingVertical: 8,
+        fontSize: 18,
+        color: '#000',
+    },
+});
+export default DispatchProcess;

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

@@ -18,6 +18,7 @@ import CheckCustomer from './CheckCustomer';
 import UpdateProcess from './UpdateProcess';
 import ProcessList from './ProcessList';
 import ProcessDetail from './ProcessDetail';
+import DispatchProcess from './DispatchProcess';
 
 const HomeStack = createStackNavigator({
         SalesHome: {
@@ -116,6 +117,12 @@ const HomeStack = createStackNavigator({
                 title: '进度详情',
             },
         },
+        DispatchProcess: {
+            screen: DispatchProcess,
+            navigationOptions: {
+                title: '分配进度',
+            },
+        },
     },
     {
         initialRouteName: 'SalesHome',

+ 5 - 4
jscore/pages/Sales/ProcessDetail.js

@@ -34,7 +34,7 @@ class ProcessDetail extends Component {
     componentDidMount() {
         this._fetchProcessReoprt();
         this._fetchData();
-        this.refeshReport = DeviceEventEmitter.addListener('refeshReport', (param) => {
+        this.refeshProcess = DeviceEventEmitter.addListener('refeshProcess', (param) => {
             this._fetchProcessReoprt(1);
         });
         this.refeshProcessDetail = DeviceEventEmitter.addListener('refeshProcessDetail', (param) => {
@@ -43,7 +43,7 @@ class ProcessDetail extends Component {
     }
 
     componentWillUnmount() {
-        this.refeshReport.remove();
+        this.refeshProcess.remove();
         this.refeshProcessDetail.remove();
     }
 
@@ -215,9 +215,10 @@ class ProcessDetail extends Component {
                     :
                     <Button
                         type="primary"
-                        onPress={() => this.props.navigation.navigate('WriteTrackReport',
+                        onPress={() => this.props.navigation.navigate('DispatchProcess',
                             {
-                                item: 1,
+                                customer: processDetail.customer,
+                                order: processDetail.id,
                             })}
                         style={ComponentsStyles.button}
                     >

+ 15 - 1
jscore/services/customer.js

@@ -34,7 +34,7 @@ export async function queryCheckCustomer(params) {
 }
 
 export async function getProcess(params) {
-    return request(`/order/get_process/?customer_id=` + params.customer);
+    return request(`/order/get_process/?dispatch=1&customer_id=` + params.customer_id);
 }
 
 export async function queryOrderList(params) {
@@ -49,6 +49,10 @@ export async function queryProcessRecord(params) {
     return request(`/order/get_details/?${stringify(params)}`);
 }
 
+export async function queryProcessDict(params) {
+    return request(`/option/get_option/?types=4`);
+}
+
 export async function dispatchUser(params) {
     let formdata = new FormData();
     formdata.append('user', params.user[0]);
@@ -58,6 +62,16 @@ export async function dispatchUser(params) {
     });
 }
 
+export async function dispatchService(params) {
+    let formdata = new FormData();
+    formdata.append('service', params.service[0]);
+    formdata.append('next_process', params.next_process[0]);
+    return request('/order/' + params.order + '/dispatch_service/', {
+        method: 'POST',
+        body: formdata,
+    });
+}
+
 export async function addOrder(params) {
     let formdata = new FormData();
     formdata.append('notes', params.notes);