Commit 09595810f07a908df63814b39e3882db0c26adc6
Merge branch 'ww' into 'main'
perf: 企业信息所在城市接口新增查询参数 See merge request yunteng/thingskit-front!511
Showing
1 changed file
with
75 additions
and
114 deletions
@@ -2,6 +2,13 @@ import type { FormSchema } from '/@/components/Form/index'; | @@ -2,6 +2,13 @@ import type { FormSchema } from '/@/components/Form/index'; | ||
2 | import { getAreaList } from '/@/api/oem/index'; | 2 | import { getAreaList } from '/@/api/oem/index'; |
3 | import { emailRule, phoneRule } from '/@/utils/rules'; | 3 | import { emailRule, phoneRule } from '/@/utils/rules'; |
4 | 4 | ||
5 | +export enum Level { | ||
6 | + PROVINCE = 'PROVINCE', | ||
7 | + CITY = 'CITY', | ||
8 | + COUNTY = 'COUNTY', | ||
9 | + TOWN = 'TOWN', | ||
10 | +} | ||
11 | + | ||
5 | export const schemas: FormSchema[] = [ | 12 | export const schemas: FormSchema[] = [ |
6 | { | 13 | { |
7 | field: 'name', | 14 | field: 'name', |
@@ -201,150 +208,104 @@ export const provSchemas: FormSchema[] = [ | @@ -201,150 +208,104 @@ export const provSchemas: FormSchema[] = [ | ||
201 | colProps: { | 208 | colProps: { |
202 | span: 6, | 209 | span: 6, |
203 | }, | 210 | }, |
204 | - componentProps({ formModel, formActionType }) { | ||
205 | - const { updateSchema } = formActionType; | 211 | + componentProps({ formActionType }) { |
212 | + const { setFieldsValue } = formActionType; | ||
206 | return { | 213 | return { |
207 | api: getAreaList, | 214 | api: getAreaList, |
208 | labelField: 'name', | 215 | labelField: 'name', |
209 | valueField: 'code', | 216 | valueField: 'code', |
210 | placeholder: '省份', | 217 | placeholder: '省份', |
211 | - params: { parentId: 1 }, | ||
212 | - async onChange(value) { | ||
213 | - if (value === undefined) { | ||
214 | - formModel.nameCity = undefined; // reset city value | ||
215 | - formModel.nameCoun = undefined; | ||
216 | - formModel.nameTown = undefined; | ||
217 | - updateSchema([ | ||
218 | - { | ||
219 | - field: 'nameCity', | ||
220 | - componentProps: { | ||
221 | - options: [], | ||
222 | - placeholder: '城市', | ||
223 | - }, | ||
224 | - }, | ||
225 | - { | ||
226 | - field: 'nameCoun', | ||
227 | - componentProps: { | ||
228 | - options: [], | ||
229 | - placeholder: '区/县', | ||
230 | - }, | ||
231 | - }, | ||
232 | - { | ||
233 | - field: 'nameTown', | ||
234 | - componentProps: { | ||
235 | - options: [], | ||
236 | - placeholder: '城镇/街道', | ||
237 | - }, | ||
238 | - }, | ||
239 | - ]); | ||
240 | - } else { | ||
241 | - const nameCity = await getAreaList({ parentId: value }); | ||
242 | - nameCity.forEach((item) => { | ||
243 | - item.label = item.name; | ||
244 | - item.value = item.code; | ||
245 | - }); | ||
246 | - formModel.nameCity = undefined; // reset city value | ||
247 | - formModel.nameCoun = undefined; | ||
248 | - formModel.nameTown = undefined; | ||
249 | - updateSchema({ | ||
250 | - field: 'nameCity', | ||
251 | - componentProps: { | ||
252 | - options: nameCity, | ||
253 | - placeholder: '城市', | ||
254 | - async onChange(value) { | ||
255 | - if (value === undefined) { | ||
256 | - formModel.nameCoun = undefined; // reset city value | ||
257 | - formModel.nameTown = undefined; | ||
258 | - updateSchema([ | ||
259 | - { | ||
260 | - field: 'nameCoun', | ||
261 | - componentProps: { | ||
262 | - options: [], | ||
263 | - }, | ||
264 | - }, | ||
265 | - { | ||
266 | - field: 'nameTown', | ||
267 | - componentProps: { | ||
268 | - options: [], | ||
269 | - }, | ||
270 | - }, | ||
271 | - ]); | ||
272 | - } else { | ||
273 | - // 获取区数据 | ||
274 | - const nameCoun = await getAreaList({ parentId: value }); | ||
275 | - nameCoun.forEach((item) => { | ||
276 | - item.label = item.name; | ||
277 | - item.value = item.code; | ||
278 | - }); | ||
279 | - updateSchema({ | ||
280 | - field: 'nameCoun', | ||
281 | - componentProps: { | ||
282 | - // 请选择区 | ||
283 | - options: nameCoun, | ||
284 | - async onChange(value) { | ||
285 | - if (value === undefined) { | ||
286 | - formModel.nameTown = undefined; | ||
287 | - updateSchema({ | ||
288 | - field: 'nameTown', | ||
289 | - componentProps: { | ||
290 | - placeholder: '城镇/街道', | ||
291 | - options: [], | ||
292 | - }, | ||
293 | - }); | ||
294 | - } else { | ||
295 | - const nameTown = await getAreaList({ parentId: value }); | ||
296 | - nameTown.forEach((item) => { | ||
297 | - item.label = item.name; | ||
298 | - item.value = item.code; | ||
299 | - }); | ||
300 | - updateSchema({ | ||
301 | - field: 'nameTown', | ||
302 | - componentProps: { | ||
303 | - placeholder: '城镇/街道', | ||
304 | - options: nameTown, | ||
305 | - }, | ||
306 | - }); | ||
307 | - } | ||
308 | - }, | ||
309 | - }, | ||
310 | - }); | ||
311 | - } | ||
312 | - }, | ||
313 | - }, | ||
314 | - }); | ||
315 | - } | 218 | + params: { parentId: 1, level: Level.PROVINCE }, |
219 | + onChange: () => { | ||
220 | + setFieldsValue({ nameCity: null, nameCoun: null, nameTown: null }); | ||
316 | }, | 221 | }, |
317 | }; | 222 | }; |
318 | }, | 223 | }, |
319 | }, | 224 | }, |
320 | { | 225 | { |
321 | field: 'nameCity', | 226 | field: 'nameCity', |
322 | - component: 'Select', | 227 | + component: 'ApiSelect', |
323 | label: '', | 228 | label: '', |
324 | colProps: { | 229 | colProps: { |
325 | span: 6, | 230 | span: 6, |
326 | }, | 231 | }, |
232 | + componentProps: ({ formActionType, formModel }) => { | ||
233 | + const nameProv = Reflect.get(formModel, 'nameProv'); | ||
234 | + const { setFieldsValue } = formActionType; | ||
235 | + return { | ||
236 | + api: async (params: Recordable) => { | ||
237 | + try { | ||
238 | + if (!nameProv) return; | ||
239 | + const result = await getAreaList(params); | ||
240 | + return result; | ||
241 | + } catch (error) { | ||
242 | + return []; | ||
243 | + } | ||
244 | + }, | ||
245 | + labelField: 'name', | ||
246 | + valueField: 'code', | ||
247 | + placeholder: '城市', | ||
248 | + params: { parentId: nameProv, level: Level.CITY }, | ||
249 | + onChange: () => { | ||
250 | + setFieldsValue({ nameCoun: null, nameTown: null }); | ||
251 | + }, | ||
252 | + }; | ||
253 | + }, | ||
327 | }, | 254 | }, |
328 | { | 255 | { |
329 | field: 'nameCoun', | 256 | field: 'nameCoun', |
330 | - component: 'Select', | 257 | + component: 'ApiSelect', |
331 | label: '', | 258 | label: '', |
332 | colProps: { | 259 | colProps: { |
333 | span: 6, | 260 | span: 6, |
334 | }, | 261 | }, |
335 | - componentProps: { | ||
336 | - placeholder: '区/县', | 262 | + componentProps: ({ formActionType, formModel }) => { |
263 | + const nameCity = Reflect.get(formModel, 'nameCity'); | ||
264 | + const { setFieldsValue } = formActionType; | ||
265 | + return { | ||
266 | + api: async (params: Recordable) => { | ||
267 | + try { | ||
268 | + if (!nameCity) return; | ||
269 | + const result = await getAreaList(params); | ||
270 | + return result; | ||
271 | + } catch (error) { | ||
272 | + return []; | ||
273 | + } | ||
274 | + }, | ||
275 | + labelField: 'name', | ||
276 | + valueField: 'code', | ||
277 | + placeholder: '区/县', | ||
278 | + params: { parentId: nameCity, level: Level.COUNTY }, | ||
279 | + onChange: () => { | ||
280 | + setFieldsValue({ nameTown: null }); | ||
281 | + }, | ||
282 | + }; | ||
337 | }, | 283 | }, |
338 | }, | 284 | }, |
339 | { | 285 | { |
340 | field: 'nameTown', | 286 | field: 'nameTown', |
341 | - component: 'Select', | 287 | + component: 'ApiSelect', |
342 | label: '', | 288 | label: '', |
343 | colProps: { | 289 | colProps: { |
344 | span: 6, | 290 | span: 6, |
345 | }, | 291 | }, |
346 | - componentProps: { | ||
347 | - placeholder: '城镇/街道', | 292 | + componentProps: ({ formModel }) => { |
293 | + const nameCoun = Reflect.get(formModel, 'nameCoun'); | ||
294 | + return { | ||
295 | + api: async (params: Recordable) => { | ||
296 | + try { | ||
297 | + if (!nameCoun) return; | ||
298 | + const result = await getAreaList(params); | ||
299 | + return result; | ||
300 | + } catch (error) { | ||
301 | + return []; | ||
302 | + } | ||
303 | + }, | ||
304 | + labelField: 'name', | ||
305 | + valueField: 'code', | ||
306 | + placeholder: '城镇/街道', | ||
307 | + params: { parentId: nameCoun, level: Level.TOWN }, | ||
308 | + }; | ||
348 | }, | 309 | }, |
349 | }, | 310 | }, |
350 | ]; | 311 | ]; |