广州市综治平台前端
liuwh
3 days ago fa5361c6776f01975737fb5630594a9c60924fc5
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
168
169
170
171
172
173
import React, { useEffect, useRef, useState } from 'react';
import MyDrawer from '@/components/MyDrawer';
import { caselogo } from '@/assets/images';
import * as $$ from '@/utils/utility';
import { Scrollbars } from 'react-custom-scrollbars';
// import { Col, Button, Input, Form } from 'antd';
import { Input, Select, Button } from '@arco-design/web-react';
import { aiSubmit, Aimge } from '@/assets/images';
 
//手动输入的级联数据
function createAiChatMessageApi(data) {
    return $$.ax.request({ url: `syRegion/getRegionTree`, type: 'get', service: 'sys', data });
}
 
const SelectAddr = ({ addAdressClick }) => {
    const [cascaderList, setCascaderList] = useState([]);
    const [oneList, setOneList] = useState([]);
    const [twoList, setTwoList] = useState([]);
    const [threeList, setThreeList] = useState([]);
    const [formData, setFormData] = useState({});
 
    async function createAiChatMessage() {
        global.setSpinning(true);
        const res = await createAiChatMessageApi();
        global.setSpinning(false);
        if (res.type) {
            console.log('res', res.data);
            let list = res?.data[0]?.children || [];
            let nowList = flattenArray(list) || [];
            // 转换为一维数组
            setCascaderList(nowList);
            setOneList(nowList?.filter((i) => i.level === '2'));
        }
    }
 
    // 多维数组转一维数组
    function flattenArray(arr) {
        let result = [];
        function recursiveFlatten(items) {
            items.forEach((item) => {
                // 将当前对象推入结果数组
                result.push(item);
 
                // 如果该对象有 children 属性且是数组,则递归处理
                if (Array.isArray(item.children)) {
                    recursiveFlatten(item.children);
                }
            });
        }
 
        recursiveFlatten(arr);
        return result;
    }
 
    // 区级下拉事件
    function handleOneChange(e) {
        console.log('e', e);
 
        if (e) {
            setFormData({ ...formData, queArea: e, queRoad: '', village: '' });
            setTwoList(cascaderList?.filter((i) => i.parentId === e));
        }
    }
 
    function handleTwoChange(e) {
        if (e) {
            setFormData({ ...formData, queRoad: e, village: '' });
            setThreeList(cascaderList?.filter((i) => i.parentId === e));
        }
    }
 
    function handleThreeChange(e) {
        setFormData({ ...formData, village: e });
    }
 
    function submit() {
        if (!formData.queArea) {
            return $$.info({ type: 'warning', content: '请选择区、街镇、村社' });
        }
        let queAreaName = cascaderList?.find((i) => i.value === formData.queArea)?.label;
        let queRoadName = cascaderList?.find((i) => i.value === formData.queRoad)?.label;
        let villageName = cascaderList?.find((i) => i.value === formData.village)?.label;
        let address = `${queAreaName}${queRoadName || ''}${villageName || ''}${formData.addr || ''}`;
        addAdressClick &&
            addAdressClick({
                addr: address,
                addrNameList: [queAreaName, queRoadName],
                addrList: formData.queRoad ? [formData.queArea, formData.queRoad] : [formData.queArea],
            });
    }
 
    useEffect(() => {
        createAiChatMessage();
    }, []);
 
    return (
        <div style={{ height: '356px' }}>
            <div style={{ display: 'flex', gap: '16px' }}>
                <div style={{ width: '200px' }}>
                    <Select
                        placeholder="请选择区域"
                        allowClear
                        onChange={handleOneChange}
                        onClear={() => {
                            setFormData({ ...formData, queArea: '', queRoad: '', village: '' });
                            setTwoList([]);
                            setThreeList([]);
                        }}
                        value={formData.queArea || undefined}
                        style={{ width: 200 }}
                    >
                        {oneList.map((i, idx) => (
                            <Select.Option key={i.value} value={i.value}>
                                {i.label}
                            </Select.Option>
                        ))}
                    </Select>
                </div>
                <div style={{ width: '200px' }}>
                    <Select
                        allowClear
                        placeholder="请选择街镇"
                        onChange={handleTwoChange}
                        onClear={() => {
                            setFormData({ ...formData, queRoad: '', village: '' });
                            setThreeList([]);
                        }}
                        value={formData.queRoad || undefined}
                        style={{ width: 200 }}
                    >
                        {twoList.map((i, idx) => (
                            <Select.Option key={i.value} value={i.value}>
                                {i.label}
                            </Select.Option>
                        ))}
                    </Select>
                </div>
                <div style={{ width: '200px' }}>
                    <Select
                        allowClear
                        onClear={() => {
                            setFormData({ ...formData, village: '' });
                        }}
                        placeholder="请选择村社"
                        onChange={handleThreeChange}
                        value={formData.village || undefined}
                        style={{ width: 200 }}
                    >
                        {threeList.map((i, idx) => (
                            <Select.Option key={i.value} value={i.value}>
                                {i.label}
                            </Select.Option>
                        ))}
                    </Select>
                </div>
                <div style={{ width: '100%' }}>
                    <Input
                        placeholder="请填写具体地点信息"
                        style={{ width: '100%' }}
                        onChange={(e) => {
                            setFormData({ ...formData, addr: e });
                        }}
                    />
                </div>
            </div>
            <Button style={{ marginTop: '16px' }} type="primary" onClick={() => submit()}>
                提交
            </Button>
        </div>
    );
};
 
export default SelectAddr;