From 2267ab2e6eebdfa506085bd7f20cdd3d2a683d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E6=99=AF=E5=AD=A6?= <5412262+sun_jing_xue@user.noreply.gitee.com> Date: Thu, 24 Jul 2025 09:10:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=9C=B0=E5=B8=82=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommonSelect/DictRegionSelect.tsx | 58 +++++++++++++++++++ src/components/CommonSelect/services.ts | 11 ++++ .../CompanyInfo/component/BankFormModal.tsx | 39 ++----------- src/pages/login/login.tsx | 34 ++++++----- 4 files changed, 92 insertions(+), 50 deletions(-) create mode 100644 src/components/CommonSelect/DictRegionSelect.tsx create mode 100644 src/components/CommonSelect/services.ts diff --git a/src/components/CommonSelect/DictRegionSelect.tsx b/src/components/CommonSelect/DictRegionSelect.tsx new file mode 100644 index 0000000..5439e82 --- /dev/null +++ b/src/components/CommonSelect/DictRegionSelect.tsx @@ -0,0 +1,58 @@ +import React, { useState, useEffect } from 'react'; +import { Cascader, Spin } from 'antd'; +import type { DefaultOptionType } from 'antd/es/cascader'; +import { getChild } from './services'; + +// 只用函数式组件的 props,不声明泛型 +const DictRegionSelect: React.FC>> = (props) => { + const [options, setOptions] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + setLoading(true); + fetchRegionOptions('0').then(data => { + setOptions(data); + setLoading(false); + }); + }, []); + + const loadData = async (selectedOptions: DefaultOptionType[]) => { + const targetOption = selectedOptions[selectedOptions.length - 1]; + targetOption.loading = true; + const children = await fetchRegionOptions(targetOption.value!); + targetOption.loading = false; + targetOption.children = children; + setOptions([...options]); + }; + + const fetchRegionOptions = async (pId: string | number): Promise => { + console.log(pId,'pId'); + + const res = await getChild({ pId }); + if (res && res.code === 200 && Array.isArray(res.data)) { + return res.data.map((item: any) => ({ + value: item.id, + label: item.name, + isLeaf: item.level === '2', + })); + } + return []; + }; + + // 明确指定 loadData 类型,解决 ts 推断 + const cascaderProps = { + changeOnSelect: true, + options, + loadData: loadData as (selectedOptions: DefaultOptionType[]) => void, // 关键类型断言! + placeholder: "请选择地区", + ...props, + }; + + return ( + + + + ); +}; + +export default DictRegionSelect; diff --git a/src/components/CommonSelect/services.ts b/src/components/CommonSelect/services.ts new file mode 100644 index 0000000..61c3c7b --- /dev/null +++ b/src/components/CommonSelect/services.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request'; + + +/** +* 地市 +*/ +interface getChildParams { + pId: string | number; +} + +export const getChild = (params: getChildParams) => request.get(`/v1/dictRegion/getChild`, {params}); \ No newline at end of file diff --git a/src/components/CompanyInfo/component/BankFormModal.tsx b/src/components/CompanyInfo/component/BankFormModal.tsx index d3a8ee2..f392531 100644 --- a/src/components/CompanyInfo/component/BankFormModal.tsx +++ b/src/components/CompanyInfo/component/BankFormModal.tsx @@ -1,18 +1,10 @@ import React, { useEffect, useState } from 'react'; -import { Modal, Form, Input, message, Row, Col, Descriptions, Cascader, Select } from 'antd'; +import { Modal, Form, Input, message, Row, Col, Descriptions, Select } from 'antd'; import { getDictList } from '@/servers/api/dicts'; import { bankView, bankAdd, bankEdit } from '../services'; -import { getRegionTree } from '@/servers/api/register'; import type { DictItem } from '@/servers/api/dicts'; +import DictRegionSelect from '@/components/CommonSelect/DictRegionSelect' -// 地区字段转换 -function convertToCascaderOptions(data: any[]): any[] { - return data.map(item => ({ - label: item.name, - value: item.id, - children: item.children && item.children.length > 0 ? convertToCascaderOptions(item.children) : undefined, - })); -} interface props { visible: boolean; onOk: () => void; @@ -54,8 +46,6 @@ const InvoiceFormModal: React.FC = ({ const [form] = Form.useForm(); //查看 const [viewData, setViewData] = useState({}); - // 地区 - const [addressOptions, setAddressOptions] = useState([]); //提交防抖 const [submitting, setSubmitting] = useState(false); const [currency, setCurrency] = useState([]); @@ -82,14 +72,8 @@ const InvoiceFormModal: React.FC = ({ } }); } else { - form.resetFields(); // ✅ 只有无 initialValues 才重置 + form.resetFields(); } - getRegionTree().then(res => { - if (res.code === 200) { - setAddressOptions(convertToCascaderOptions(res.data)); - } - }); - getDictList('currency').then((res) => { if (res.code === 200) { @@ -190,22 +174,7 @@ const InvoiceFormModal: React.FC = ({ - { - return path.some((option) => { - if (typeof option.label === 'string') { - return ( - option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1 - ); - } - return false; - }); - }, - }} - /> + {/* diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index 5023db5..6ec447a 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -26,19 +26,28 @@ const LoginPage: React.FC = () => { useEffect(() => { fetchCaptcha(); + if(!sessionStorage.getItem('dict')) { + refreshDictCache().then((res) => { + if(res.code == 200) { + sessionStorage.setItem('dict', JSON.stringify(res.data)) + } + }) + } + + }, [activeKey]); // 组件挂载时,检查是否有记住的用户名 useEffect(() => { - const savedUser = localStorage.getItem('remember_user'); - if (savedUser) { - const user = JSON.parse(savedUser); - form.setFieldsValue({ - username: user.username, - password: user.password, - remember: true, - }); - } + // const savedUser = localStorage.getItem('remember_user'); + // if (savedUser) { + // const user = JSON.parse(savedUser); + // form.setFieldsValue({ + // username: user.username, + // password: user.password, + // remember: true, + // }); + // } }, [form]); const onFinish = async (values: any) => { setLoading(true); @@ -80,12 +89,7 @@ const LoginPage: React.FC = () => { } sessionStorage.setItem('currentUser', JSON.stringify(loginRes.data)); - refreshDictCache().then((res) => { - if(res.code == 200) { - sessionStorage.setItem('dict', JSON.stringify(res.data)) - } - }) - + getUserinfo().then(async (res) => { // if(res.code == 200) { const roleIdList = res.authorityList.map((item: any) => { From ae0bca7f7e7aa726754e4dc24f4afa19f3dba5a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E6=99=AF=E5=AD=A6?= <5412262+sun_jing_xue@user.noreply.gitee.com> Date: Thu, 24 Jul 2025 09:27:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=9C=B0=E5=B8=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../register/supplier/CommonFormSections.tsx | 18 ++++++++++-------- src/pages/register/supplier/ForeignForm.tsx | 2 +- src/servers/api/register.ts | 10 ++++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/pages/register/supplier/CommonFormSections.tsx b/src/pages/register/supplier/CommonFormSections.tsx index 0229568..1da3215 100644 --- a/src/pages/register/supplier/CommonFormSections.tsx +++ b/src/pages/register/supplier/CommonFormSections.tsx @@ -25,6 +25,7 @@ import { getRegionTree, getregionInternational } from '@/servers/api/register'; import { getDictList } from '@/servers/api/dicts'; import type { DictItem } from '@/servers/api/dicts'; import FileUpload from '@/components/FileUpload/FileUpload'; +import DictRegionSelect from '@/components/CommonSelect/DictRegionSelect' const { Option } = Select; @@ -407,12 +408,12 @@ export const BankAccountSection: React.FC = ({ form, su }, []); useEffect(() => { if (supplierType) { - const submitInterface = supplierType === 'dvs' ? getRegionTree : getregionInternational; - submitInterface().then((res) => { - if (res.code === 200) { - setAddressOptions(convertToCascaderOptions(res.data)); - } - }); + // const submitInterface = supplierType === 'dvs' ? getRegionTree : getregionInternational; + // submitInterface({ pId: 0 }).then((res) => { + // if (res.code === 200) { + // setAddressOptions(convertToCascaderOptions(res.data)); + // } + // }); } }, [supplierType]); @@ -592,7 +593,8 @@ export const BankAccountSection: React.FC = ({ form, su noStyle rules={[{ required: true, message: '请选择地址' }]} > - handleAddressChange(value as string[], record)} /> + {/* handleAddressChange(value, record)} @@ -608,7 +610,7 @@ export const BankAccountSection: React.FC = ({ form, su }); }, }} - /> + /> */} ), diff --git a/src/pages/register/supplier/ForeignForm.tsx b/src/pages/register/supplier/ForeignForm.tsx index d098d3d..906f67a 100644 --- a/src/pages/register/supplier/ForeignForm.tsx +++ b/src/pages/register/supplier/ForeignForm.tsx @@ -53,7 +53,7 @@ const ForeignForm: React.FC = ({ } }); - getregionInternational().then((res) => { + getregionInternational({ pId: 0 }).then((res) => { if (res.code === 200) { setRegionOptions(res.data); } diff --git a/src/servers/api/register.ts b/src/servers/api/register.ts index 1a1d8ac..63ebcee 100644 --- a/src/servers/api/register.ts +++ b/src/servers/api/register.ts @@ -28,11 +28,13 @@ export async function getRegionTree(){ method: 'GET', }) } - -// 获取全球 -export async function getregionInternational(){ - return request('/api/cosco/dictRegion/regionInternational', { +interface getregionInternationalParams { + pId: string | number; +} +export async function getregionInternational(params:getregionInternationalParams){ + return request('/api/v1/dictRegionInternational/getChild', { method: 'GET', + params }) } export async function getAllAreaList(){