广州矛调粤政易端
xusd
7 days ago d27794814b69d18aeb8ee96a46cae91d5613570c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import React, { useState, useEffect } from 'react';
import { useHistory } from 'react-router-dom';
import { Button } from 'dingtalk-design-mobile';
import { WriteEditOutlined } from 'dd-icons';
import NavBarPage from '../../../../components/NavBarPage';
import CustomFormView from '../../../../components/CustomFormView';
import * as $$ from '../../../../utils/utility';
import './index.less';
 
//选择纠纷发生地的字典值
function getRegionTreeApi(data) {
    return $$.ax.request({ url: `syRegion/getRegionTree`, type: 'get', service: 'sys', data });
}
 
const LocationPicker = () => {
    const history = useHistory();
    const [isManualInput, setIsManualInput] = useState(false);
    const [selectedArea, setSelectedArea] = useState('');
    const [detailLocation, setDetailLocation] = useState('');
    const [regionTree, setRegionTree] = useState([]);
    const [formData, setFormData] = useState({});
 
    // 加载缓存数据
    useEffect(() => {
        getRegionTree();
        // 尝试从sessionStorage读取之前的数据
        const cachedLocation = JSON.parse($$.getSessionStorage('selectedLocationData'));
        if (cachedLocation) {
            setSelectedArea(cachedLocation.area || '');
            setDetailLocation(cachedLocation.detailLocation || '');
            setFormData({
                ...cachedLocation,
                area: cachedLocation.area || '',
                detailLocation: cachedLocation.detailLocation || '',
            });
            $$.clearSessionStorage('selectedLocationData');
        }
    }, []);
 
    const getRegionTree = async () => {
        global.setSpinning(true);
        const res = await getRegionTreeApi();
        global.setSpinning(false);
        if (res.type) {
            setRegionTree(res?.data[0]?.children || []);
        }
    };
 
    // 切换到手动填写
    const handleManualInput = () => {
        setIsManualInput(true);
    };
 
    // 处理表单数据变化
    const handleFormChange = (values, name) => {
        console.log('表单值变化:', values, name);
        setFormData({ ...formData, ...values });
    };
 
    // 保存并返回
    const handleSave = () => {
        // 验证表单
        if (!formData.area) {
            $$.showToast({ type: 'fail', content: '请选择区域' });
            return;
        }
        if (!formData.detailLocation) {
            $$.showToast({ type: 'fail', content: '请输入具体地点' });
            return;
        }
        // 构造区域的中文名称
        let areaLabels = [];
        if (Array.isArray(formData.area)) {
            // 递归查找多级区域的名称
            let currentList = regionTree;
            formData.area.forEach((areaCode) => {
                const found = currentList.find((item) => item.value === areaCode);
                if (found) {
                    areaLabels.push(found.label);
                    currentList = found.children || [];
                }
            });
        }
        // 构造完整的地点信息
        const locationData = {
            ...formData,
            area: formData.area,
            detailLocation: formData.detailLocation,
            que: [formData.area[0], formData.area[1]],
            queArea: formData.area[0],
            queAreaName: areaLabels[0],
            queRoad: formData.area[1],
            queRoadName: areaLabels[1],
            addr: `${areaLabels.join('')}${formData.detailLocation}`, // 完整地址
        };
        // 保存到sessionStorage以便传递回表单页面
        sessionStorage.setItem('selectedLocation', JSON.stringify(locationData));
        // 返回上一页
        history.goBack();
    };
 
    // CustomFormView的配置
    const formConfig = [
        {
            list: [
                {
                    type: 'cascader',
                    name: 'area',
                    label: '选择区域',
                    placeholder: '请选择',
                    cols: 3,
                    require: true,
                    list: regionTree,
                    value: selectedArea,
                },
                {
                    type: 'text',
                    name: 'detailLocation',
                    label: '纠纷发生具体地点',
                    placeholder: '请填写具体地点',
                    require: true,
                    value: detailLocation,
                },
            ],
        },
    ];
 
    return (
        <>
            <NavBarPage
                title="纠纷发生地点"
                leftContentFunc={() => history.goBack()}
                rightContentFunc={handleManualInput}
                rightChildren={
                    <>
                        <WriteEditOutlined />
                        手动填写
                    </>
                }
            />
 
            <div className="location-picker-container">
                {!isManualInput ? (
                    <div className="placeholder-container">
                        {/* 占位内容,可以添加地图或其他选择界面 */}
                        <div className="placeholder-content">地点选择区域(占位)</div>
                    </div>
                ) : (
                    <div className="manual-input-container">
                        <CustomFormView formConfig={formConfig} formData={formData} onChange={handleFormChange} />
                    </div>
                )}
 
                {/* 底部保存按钮 */}
                {isManualInput && (
                    <div className="bottom-bar">
                        <Button type="primary" className="save-button" onClick={handleSave}>
                            保存
                        </Button>
                    </div>
                )}
            </div>
        </>
    );
};
 
export default LocationPicker;