From 9b3a2683100114887332e42093c2eb145e80b5ce Mon Sep 17 00:00:00 2001 From: wang_yp <357754663@qq.com> Date: Wed, 23 Oct 2024 16:35:41 +0800 Subject: [PATCH] fix(amap):core --- src/components/form/dump_seleft.tsx | 35 ++++++ src/components/form/featch_select.tsx | 51 ++++++++ src/components/form/interface.ts | 1 + src/components/form/simple_form.tsx | 20 +++- src/components/layout/layout.tsx | 6 +- src/pages/patrol/index.tsx | 8 -- src/pages/patrolBrigade/config.tsx | 59 ++++++++++ src/pages/patrolBrigade/index.tsx | 162 ++++++++++++++++++++++++++ src/router/routers/home_router.tsx | 6 + src/store/index.ts | 5 +- src/store/patrol_brigade.ts | 18 +++ src/store/user.ts | 12 ++ src/util/config.ts | 12 +- 13 files changed, 376 insertions(+), 19 deletions(-) create mode 100644 src/components/form/dump_seleft.tsx create mode 100644 src/components/form/featch_select.tsx create mode 100644 src/pages/patrolBrigade/config.tsx create mode 100644 src/pages/patrolBrigade/index.tsx create mode 100644 src/store/patrol_brigade.ts diff --git a/src/components/form/dump_seleft.tsx b/src/components/form/dump_seleft.tsx new file mode 100644 index 0000000..a73aaed --- /dev/null +++ b/src/components/form/dump_seleft.tsx @@ -0,0 +1,35 @@ +import { useState } from "react"; +import DebounceSelect from "./featch_select"; +import { inject, observer } from "mobx-react"; +import { Store } from "antd/es/form/interface"; +interface UserValue { + label: string; + value: string; +} +const Dumbselect = (props: Store) => { + const { usrStore } = props; + const [value, setValue] = useState([]); + + async function fetchUserList(username: string): Promise { + return usrStore.serchUser(username).then((res) => { + return res.data.record.map((item) => ({ + label: item.user_name, + value: item.identity, + })); + }); + } + return ( + { + setValue(newValue as UserValue[]); + }} + style={{ width: "100%" }} + /> + ); +}; + +export default inject("usrStore")(observer(Dumbselect)); diff --git a/src/components/form/featch_select.tsx b/src/components/form/featch_select.tsx new file mode 100644 index 0000000..8e0feab --- /dev/null +++ b/src/components/form/featch_select.tsx @@ -0,0 +1,51 @@ +import React, { useMemo, useRef, useState } from 'react'; +import { Select, Spin } from 'antd'; +import type { SelectProps } from 'antd'; +import debounce from 'lodash/debounce'; + +export interface DebounceSelectProps + extends Omit, 'options' | 'children'> { + fetchOptions: (search: string) => Promise; + debounceTimeout?: number; +} + +const DebounceSelect = < + ValueType extends { key?: string; label: React.ReactNode; value: string | number } = any, +>({ fetchOptions, debounceTimeout = 800, ...props }: DebounceSelectProps) =>{ + const [fetching, setFetching] = useState(false); + const [options, setOptions] = useState([]); + const fetchRef = useRef(0); + + const debounceFetcher = useMemo(() => { + const loadOptions = (value: string) => { + fetchRef.current += 1; + const fetchId = fetchRef.current; + setOptions([]); + setFetching(true); + + fetchOptions(value).then((newOptions) => { + if (fetchId !== fetchRef.current) { + return; + } + + setOptions(newOptions); + setFetching(false); + }); + }; + + return debounce(loadOptions, debounceTimeout); + }, [fetchOptions, debounceTimeout]); + + return ( +