Browse Source

提交更新

837390164@qq.com 1 week ago
parent
commit
63b71e372e

+ 7 - 3
src/App.tsx

@@ -47,6 +47,7 @@ import DIPDisease from './pages/BasicData/DIPDisease';
 import TableDataMaintenance from './pages/BasicData/TableDataMaintenance';
 import DRGCataLog from './pages/BasicData/DRGCataLog';
 import DRGSegmentationRules from './pages/BasicData/DRGSegmentationRules';
+import DIPCoreAlgorithmConfig from './pages/BasicData/DIPCoreAlgorithmConfig';
 
 // DRG pages
 import DRGWorkbench from './pages/DRG/Workbench';
@@ -70,7 +71,6 @@ import ProfitCostStructure from './pages/Profit/CostStructure';
 
 // System pages
 import SystemUsers from './pages/System/Users';
-import SystemUserApply from './pages/System/UserApply';
 import SystemRoles from './pages/System/Roles';
 // import SystemRoleManage from './pages/System/RoleManage'; // 文件不存在,已注释
 import SystemMenus from './pages/System/Menus';
@@ -165,6 +165,8 @@ const menuTitleMap: Record<string, string> = {
   'basic-data-dip': 'DIP付费病种库',
   'basic-data-drg-catalog': 'DRGs目录信息',
   'basic-data-segmentation-rules': 'ADRG细分规则',
+  'basic-data-dip-core-algorithm': 'DIP算法配置',
+  'dip-core-algorithm': 'DIP算法配置',
   'system-user': '用户管理',
   'system-role': '角色权限',
   'system-menu': '菜单配置',
@@ -254,6 +256,7 @@ const menuItems: MenuProps['items'] = [
       { key: 'basic-data-dip', label: 'DIP付费病种库' },
       { key: 'basic-data-drg-catalog', label: 'DRGs目录信息' },
       { key: 'basic-data-segmentation-rules', label: 'ADRG细分规则' },
+      { key: 'basic-data-dip-core-algorithm', label: 'DIP算法配置' },
     ],
   },
   {
@@ -670,10 +673,11 @@ function App() {
         return <DRGCataLog />;
       case 'basic-data-segmentation-rules':
         return <DRGSegmentationRules />;
+      case 'basic-data-dip-core-algorithm':
+      case 'dip-core-algorithm':
+        return <DIPCoreAlgorithmConfig />;
       case 'system-user':
         return <SystemUsers />;
-      case 'system-user-apply':
-        return <SystemUserApply />;
       case 'system-role':
         return <SystemRoles />;
       case 'system-menu':

+ 79 - 0
src/api/basicData.ts

@@ -994,3 +994,82 @@ export const confirmDrgCoreAlgorithmImport = (
 ): Promise<ApiResponse<DrgCoreAlgorithmImportResult>> => {
   return invoke('02010051', [params]);
 };
+
+// ========== DIP核心算法配置 (02010053, 02010054, 02010055) ==========
+
+/** DIP核心算法配置记录 */
+export interface DipCoreAlgorithmItem {
+  id: string;
+  principalDiagnosis: string;
+  principalDiagnosisName: string;
+  majorProcedure: string;
+  majorProcedureName: string;
+  secondaryProcedure: string;
+  secondaryProcedureName: string;
+  provinceID: string;
+  provinceDesc: string;
+  cityID: string;
+  cityDesc: string;
+  mdtrtArea: string;
+  medinsLv: string;
+  scoreValue: string;
+  adjustCoefficient: string;
+  primaryAdjustCoefficient: string;
+  secondaryAdjustCoefficient: string;
+  thirdAdjustCoefficient: string;
+  createDate: string;
+  createTime: string;
+}
+
+/** 查询DIP核心算法配置参数 */
+export interface QueryDipCoreAlgorithmParams {
+  principalDiagnosis?: string;
+  principalDiagnosisName?: string;
+  majorProcedure?: string;
+  majorProcedureName?: string;
+  provinceID?: string;
+  cityID?: string;
+  medinsLv?: string;
+}
+
+/** 保存DIP核心算法配置参数 */
+export interface SaveDipCoreAlgorithmParams {
+  id?: string;
+  principalDiagnosis: string;
+  principalDiagnosisName: string;
+  majorProcedure?: string;
+  majorProcedureName?: string;
+  secondaryProcedure?: string;
+  secondaryProcedureName?: string;
+  provinceDr: string;
+  cityDr: string;
+  mdtrtArea?: string;
+  medinsLv: string;
+  scoreValue: string;
+  adjustCoefficient?: string;
+  primaryAdjustCoefficient?: string;
+  secondaryAdjustCoefficient?: string;
+  thirdAdjustCoefficient?: string;
+}
+
+/** 查询DIP核心算法配置 (02010053) */
+export const queryDipCoreAlgorithm = (
+  params: QueryDipCoreAlgorithmParams,
+  pagination: Pagination
+): Promise<ApiResponse<PageResult<DipCoreAlgorithmItem>>> => {
+  return invoke('02010053', [params], undefined, pagination);
+};
+
+/** 保存DIP核心算法配置 (02010054) */
+export const saveDipCoreAlgorithm = (
+  params: SaveDipCoreAlgorithmParams
+): Promise<ApiResponse> => {
+  return invoke('02010054', [params]);
+};
+
+/** 删除DIP核心算法配置 (02010055) */
+export const deleteDipCoreAlgorithm = (
+  id: string
+): Promise<ApiResponse> => {
+  return invoke('02010055', [{ id }]);
+};

+ 1 - 0
src/context/MenuContext.tsx

@@ -302,6 +302,7 @@ export const defaultMenuItems: MenuProps['items'] = [
       { key: 'basic-data-dip', label: 'DIP付费病种库' },
       { key: 'basic-data-drg-catalog', label: 'DRGs目录信息表' },
       { key: 'basic-data-segmentation-rules', label: 'ADRG细分规则表' },
+      { key: 'basic-data-dip-core-algorithm', label: 'DIP算法配置' },
     ],
   },
   {

+ 32 - 22
src/pages/BasicData/CoreAlgorithmConfig.tsx

@@ -366,16 +366,20 @@ const CoreAlgorithmConfig: React.FC = () => {
 
   // 预览导入数据
   const handlePreviewImport = async () => {
-    const values = importForm.getFieldsValue();
-    if (!values.importProvinceId) {
+    // 直接从表单获取值
+    const provinceId = importForm.getFieldValue('importProvinceId');
+    const cityId = importForm.getFieldValue('importCityId');
+    const hospitalId = importForm.getFieldValue('importHospitalId');
+
+    if (!provinceId) {
       message.error('请先选择省');
       return;
     }
-    if (!values.importCityId) {
+    if (!cityId) {
       message.error('请先选择市');
       return;
     }
-    if (!values.importHospitalId) {
+    if (!hospitalId) {
       message.error('请先选择医疗机构');
       return;
     }
@@ -384,16 +388,17 @@ const CoreAlgorithmConfig: React.FC = () => {
       return;
     }
 
-    // 获取市的信息
-    const selectedCity = importCityList.find(c => c.id === values.importCityId);
+    // 获取市和医疗机构的信息
+    const selectedCity = importCityList.find(c => c.id === cityId);
+    const selectedHospital = importHospitalList.find(h => h.code === hospitalId);
 
     const params: DrgCoreAlgorithmImportParams = {
-      provinceID: values.importProvinceId,
-      cityID: values.importCityId,
-      mdtrtArea: selectedCity?.code || '',          // 市的code作为MdtrtArea
-      fixmedinsCode: values.importHospitalId,       // 医疗机构的code
-      fixmedinsName: '', // 医疗机构名称由后端填充
-      medinsLv: '', // 机构等级由后端填充
+      provinceID: provinceId,
+      cityID: cityId,
+      mdtrtArea: selectedCity?.code || '',
+      fixmedinsCode: hospitalId,
+      fixmedinsName: selectedHospital?.descripts || '',
+      medinsLv: selectedHospital?.medinsLv || selectedHospital?.MedinsLv || '',
       fileData: fileContentRef.current,
       fileName: fileNameRef.current
     };
@@ -423,32 +428,37 @@ const CoreAlgorithmConfig: React.FC = () => {
 
   // 确认导入
   const handleConfirmImport = async () => {
-    const values = importForm.getFieldsValue();
+    // 直接从表单获取值,避免getFieldsValue可能返回空值的问题
+    const provinceId = importForm.getFieldValue('importProvinceId');
+    const cityId = importForm.getFieldValue('importCityId');
+    const hospitalId = importForm.getFieldValue('importHospitalId');
 
     // 验证省市和医疗机构是否已选择
-    if (!values.importProvinceId) {
+    if (!provinceId) {
       message.error('请先选择省');
       return;
     }
-    if (!values.importCityId) {
+    if (!cityId) {
       message.error('请先选择市');
       return;
     }
-    if (!values.importHospitalId) {
+    if (!hospitalId) {
       message.error('请先选择医疗机构');
       return;
     }
 
     // 获取市的信息
-    const selectedCity = importCityList.find(c => c.id === values.importCityId);
+    const selectedCity = importCityList.find(c => c.id === cityId);
+    // 从医疗机构列表中获取名称和等级
+    const selectedHospital = importHospitalList.find(h => h.code === hospitalId);
 
     const params: DrgCoreAlgorithmImportParams = {
-      provinceID: String(values.importProvinceId),
-      cityID: String(values.importCityId),
+      provinceID: String(provinceId),
+      cityID: String(cityId),
       mdtrtArea: selectedCity?.code || '',
-      fixmedinsCode: String(values.importHospitalId),
-      fixmedinsName: '',
-      medinsLv: '',
+      fixmedinsCode: String(hospitalId),
+      fixmedinsName: selectedHospital?.descripts || '',
+      medinsLv: selectedHospital?.medinsLv || selectedHospital?.MedinsLv || '',
       fileData: fileContentRef.current,
       fileName: fileNameRef.current
     };

+ 710 - 0
src/pages/BasicData/DIPCoreAlgorithmConfig.tsx

@@ -0,0 +1,710 @@
+/**
+ * DIP核心算法配置页面
+ * 功能:列表查询、新增/编辑、删除
+ */
+
+import React, { useState, useEffect, useCallback } from 'react';
+import {
+  Table, Button, Card, Space, message, Popconfirm, Form, Select, Input, Row, Col, Modal, InputNumber
+} from 'antd';
+import {
+  PlusOutlined, SearchOutlined, ReloadOutlined
+} from '@ant-design/icons';
+import CustomPagination from '../../components/CustomPagination';
+import {
+  queryDipCoreAlgorithm, deleteDipCoreAlgorithm,
+  saveDipCoreAlgorithm,
+  getProvinceData, getCityData,
+  type DipCoreAlgorithmItem,
+  type ProvinceItem, type CityItem
+} from '../../api/basicData';
+
+const { Option } = Select;
+
+const DIPCoreAlgorithmConfig: React.FC = () => {
+  const [data, setData] = useState<DipCoreAlgorithmItem[]>([]);
+  const [total, setTotal] = useState(0);
+  const [loading, setLoading] = useState(false);
+  const [currentPage, setCurrentPage] = useState(1);
+  const [pageSize, setPageSize] = useState(15);
+
+  // 查询条件
+  const [principalDiagnosis, setPrincipalDiagnosis] = useState('');
+  const [principalDiagnosisName, setPrincipalDiagnosisName] = useState('');
+  const [majorProcedure, setMajorProcedure] = useState('');
+  const [majorProcedureName, setMajorProcedureName] = useState('');
+  const [provinceId, setProvinceId] = useState('');
+  const [cityId, setCityId] = useState('');
+  const [medinsLv, setMedinsLv] = useState('');
+
+  // 弹窗
+  const [modalVisible, setModalVisible] = useState(false);
+  const [editingRecord, setEditingRecord] = useState<DipCoreAlgorithmItem | null>(null);
+  const [form] = Form.useForm();
+  const [modalLoading, setModalLoading] = useState(false);
+
+  // 省市下拉数据(查询用)
+  const [provinceList, setProvinceList] = useState<ProvinceItem[]>([]);
+  const [cityList, setCityList] = useState<CityItem[]>([]);
+  const [provinceLoading, setProvinceLoading] = useState(false);
+  const [cityLoading, setCityLoading] = useState(false);
+
+  // 弹窗省市数据
+  const [modalProvinceList, setModalProvinceList] = useState<ProvinceItem[]>([]);
+  const [modalCityList, setModalCityList] = useState<CityItem[]>([]);
+  const [modalProvinceLoading, setModalProvinceLoading] = useState(false);
+  const [modalCityLoading, setModalCityLoading] = useState(false);
+
+  // 加载省数据(查询)
+  const loadProvinces = useCallback(async () => {
+    setProvinceLoading(true);
+    try {
+      const res = await getProvinceData();
+      if (res.errorCode === '0' && res.result) {
+        setProvinceList(res.result);
+      }
+    } catch (error) {
+      message.error('加载省数据失败');
+    } finally {
+      setProvinceLoading(false);
+    }
+  }, []);
+
+  // 加载市数据(查询)
+  const loadCities = useCallback(async (provinceId: string) => {
+    if (!provinceId) {
+      setCityList([]);
+      setCityId('');
+      return;
+    }
+    setCityLoading(true);
+    try {
+      const res = await getCityData(provinceId);
+      if (res.errorCode === '0' && res.result) {
+        setCityList(res.result);
+      }
+    } catch (error) {
+      message.error('加载市数据失败');
+    } finally {
+      setCityLoading(false);
+    }
+  }, []);
+
+  // 初始化加载省数据
+  useEffect(() => {
+    loadProvinces();
+  }, [loadProvinces]);
+
+  // 加载数据
+  const fetchData = useCallback(async () => {
+    setLoading(true);
+    try {
+      const filters = {
+        principalDiagnosis,
+        principalDiagnosisName,
+        majorProcedure,
+        majorProcedureName,
+        provinceID: provinceId,
+        cityID: cityId,
+        medinsLv,
+      };
+      const res = await queryDipCoreAlgorithm(filters, {
+        pageSize,
+        currentPage,
+      });
+      if (res.errorCode === '0' && res.result) {
+        setData(res.result.rows || []);
+        setTotal(res.result.total || 0);
+      } else {
+        message.error(res.errorMessage || '查询失败');
+      }
+    } catch (error) {
+      message.error('查询失败');
+    } finally {
+      setLoading(false);
+    }
+  }, [principalDiagnosis, principalDiagnosisName, majorProcedure, majorProcedureName, provinceId, cityId, medinsLv, currentPage, pageSize]);
+
+  useEffect(() => {
+    fetchData();
+  }, [fetchData]);
+
+  // 查询
+  const handleSearch = () => {
+    setCurrentPage(1);
+    fetchData();
+  };
+
+  // 重置
+  const handleReset = () => {
+    setPrincipalDiagnosis('');
+    setPrincipalDiagnosisName('');
+    setMajorProcedure('');
+    setMajorProcedureName('');
+    setProvinceId('');
+    setCityId('');
+    setMedinsLv('');
+    setCityList([]);
+    setCurrentPage(1);
+  };
+
+  // 省变化(查询)
+  const handleProvinceChange = (value: string) => {
+    setProvinceId(value);
+    setCityId('');
+    setCityList([]);
+    if (value) {
+      loadCities(value);
+    }
+  };
+
+  // 分页变化
+  const handlePageChange = (page: number, size: number) => {
+    setCurrentPage(page);
+    setPageSize(size);
+  };
+
+  // ========== 弹窗相关方法 ==========
+
+  // 加载弹窗省数据
+  const loadModalProvinces = useCallback(async () => {
+    setModalProvinceLoading(true);
+    try {
+      const res = await getProvinceData();
+      if (res.errorCode === '0' && res.result) {
+        setModalProvinceList(res.result);
+      }
+    } catch (error) {
+      message.error('加载省数据失败');
+    } finally {
+      setModalProvinceLoading(false);
+    }
+  }, []);
+
+  // 加载弹窗市数据
+  const loadModalCities = useCallback(async (provinceId: string) => {
+    if (!provinceId) {
+      setModalCityList([]);
+      return;
+    }
+    setModalCityLoading(true);
+    try {
+      const res = await getCityData(provinceId);
+      if (res.errorCode === '0' && res.result) {
+        setModalCityList(res.result);
+      }
+    } catch (error) {
+      message.error('加载市数据失败');
+    } finally {
+      setModalCityLoading(false);
+    }
+  }, []);
+
+  // 新增
+  const handleAdd = () => {
+    setEditingRecord(null);
+    form.resetFields();
+    setModalCityList([]);
+    setModalVisible(true);
+    loadModalProvinces();
+  };
+
+  // 编辑
+  const handleEdit = (record: DipCoreAlgorithmItem) => {
+    setEditingRecord(record);
+    setModalVisible(true);
+    loadModalProvinces().then(() => {
+      if (record.provinceID) {
+        loadModalCities(record.provinceID).then(() => {
+          form.setFieldsValue({
+            id: record.id,
+            principalDiagnosis: record.principalDiagnosis,
+            principalDiagnosisName: record.principalDiagnosisName,
+            majorProcedure: record.majorProcedure,
+            majorProcedureName: record.majorProcedureName,
+            secondaryProcedure: record.secondaryProcedure,
+            secondaryProcedureName: record.secondaryProcedureName,
+            provinceDr: record.provinceID,
+            cityDr: record.cityID,
+            mdtrtArea: record.mdtrtArea,
+            medinsLv: record.medinsLv,
+            scoreValue: record.scoreValue ? parseFloat(record.scoreValue) : undefined,
+            adjustCoefficient: record.adjustCoefficient ? parseFloat(record.adjustCoefficient) : undefined,
+            primaryAdjustCoefficient: record.primaryAdjustCoefficient ? parseFloat(record.primaryAdjustCoefficient) : undefined,
+            secondaryAdjustCoefficient: record.secondaryAdjustCoefficient ? parseFloat(record.secondaryAdjustCoefficient) : undefined,
+            thirdAdjustCoefficient: record.thirdAdjustCoefficient ? parseFloat(record.thirdAdjustCoefficient) : undefined,
+          });
+        });
+      } else {
+        form.setFieldsValue({
+          id: record.id,
+          principalDiagnosis: record.principalDiagnosis,
+          principalDiagnosisName: record.principalDiagnosisName,
+          majorProcedure: record.majorProcedure,
+          majorProcedureName: record.majorProcedureName,
+          secondaryProcedure: record.secondaryProcedure,
+          secondaryProcedureName: record.secondaryProcedureName,
+          provinceDr: record.provinceID,
+          cityDr: record.cityID,
+          mdtrtArea: record.mdtrtArea,
+          medinsLv: record.medinsLv,
+          scoreValue: record.scoreValue ? parseFloat(record.scoreValue) : undefined,
+          adjustCoefficient: record.adjustCoefficient ? parseFloat(record.adjustCoefficient) : undefined,
+          primaryAdjustCoefficient: record.primaryAdjustCoefficient ? parseFloat(record.primaryAdjustCoefficient) : undefined,
+          secondaryAdjustCoefficient: record.secondaryAdjustCoefficient ? parseFloat(record.secondaryAdjustCoefficient) : undefined,
+          thirdAdjustCoefficient: record.thirdAdjustCoefficient ? parseFloat(record.thirdAdjustCoefficient) : undefined,
+        });
+      }
+    });
+  };
+
+  // 删除
+  const handleDelete = async (id: string) => {
+    try {
+      const res = await deleteDipCoreAlgorithm(id);
+      if (res.errorCode === '0') {
+        message.success('删除成功');
+        fetchData();
+      } else {
+        message.error(res.errorMessage || '删除失败');
+      }
+    } catch (error) {
+      message.error('删除失败');
+    }
+  };
+
+  // 弹窗省变化
+  const handleModalProvinceChange = (value: string) => {
+    form.setFieldValue('cityDr', undefined);
+    setModalCityList([]);
+    if (value) {
+      loadModalCities(value);
+    }
+  };
+
+  // 弹窗保存
+  const handleModalSubmit = async () => {
+    try {
+      const values = await form.validateFields();
+      setModalLoading(true);
+      const res = await saveDipCoreAlgorithm(values as any);
+      if (res.errorCode === '0') {
+        message.success(editingRecord ? '更新成功' : '新增成功');
+        setModalVisible(false);
+        fetchData();
+      } else {
+        message.error(res.errorMessage || '保存失败');
+      }
+    } catch (error) {
+      console.error('表单校验失败:', error);
+    } finally {
+      setModalLoading(false);
+    }
+  };
+
+  // 关闭弹窗
+  const handleModalClose = () => {
+    setModalVisible(false);
+  };
+
+  // 医疗机构等级选项
+  const medinsLvOptions = [
+    { label: '一级', value: '1' },
+    { label: '二级', value: '2' },
+    { label: '三级', value: '3' },
+  ];
+
+  // 表格列定义
+  const columns = [
+    {
+      title: '序号',
+      dataIndex: 'index',
+      key: 'index',
+      width: 60,
+      render: (_text: any, _record: any, index: number) => 
+        (currentPage - 1) * pageSize + index + 1,
+    },
+    {
+      title: '主要诊断代码',
+      dataIndex: 'principalDiagnosis',
+      key: 'principalDiagnosis',
+      width: 120,
+    },
+    {
+      title: '主要诊断名称',
+      dataIndex: 'principalDiagnosisName',
+      key: 'principalDiagnosisName',
+      width: 180,
+    },
+    {
+      title: '主要手术代码',
+      dataIndex: 'majorProcedure',
+      key: 'majorProcedure',
+      width: 120,
+    },
+    {
+      title: '主要手术名称',
+      dataIndex: 'majorProcedureName',
+      key: 'majorProcedureName',
+      width: 180,
+    },
+    {
+      title: '省',
+      dataIndex: 'provinceDesc',
+      key: 'provinceDesc',
+      width: 100,
+    },
+    {
+      title: '市',
+      dataIndex: 'cityDesc',
+      key: 'cityDesc',
+      width: 100,
+    },
+    {
+      title: '医疗机构等级',
+      dataIndex: 'medinsLv',
+      key: 'medinsLv',
+      width: 100,
+      render: (text: string) => {
+        const option = medinsLvOptions.find(item => item.value === text);
+        return option ? option.label : text;
+      },
+    },
+    {
+      title: '基准分值',
+      dataIndex: 'scoreValue',
+      key: 'scoreValue',
+      width: 100,
+    },
+    {
+      title: '调节系数',
+      dataIndex: 'adjustCoefficient',
+      key: 'adjustCoefficient',
+      width: 100,
+    },
+    {
+      title: '操作',
+      key: 'action',
+      width: 120,
+      fixed: 'right' as const,
+      render: (_text: any, record: DipCoreAlgorithmItem) => (
+        <Space size="small">
+          <Button type="link" size="small" onClick={() => handleEdit(record)}>
+            编辑
+          </Button>
+          <Popconfirm
+            title="确定删除该配置吗?"
+            onConfirm={() => handleDelete(record.id)}
+            okText="确定"
+            cancelText="取消"
+          >
+            <Button type="link" danger size="small">
+              删除
+            </Button>
+          </Popconfirm>
+        </Space>
+      ),
+    },
+  ];
+
+  return (
+    <div style={{ padding: 12 }}>
+      <Card>
+        {/* 查询表单 */}
+        <Form layout="vertical" style={{ marginBottom: 1 }}>
+          <Row gutter={8}>
+            <Col span={4}>
+              <Form.Item label="主要诊断代码">
+                <Input
+                  placeholder="请输入主要诊断代码"
+                  value={principalDiagnosis}
+                  onChange={(e) => setPrincipalDiagnosis(e.target.value)}
+                />
+              </Form.Item>
+            </Col>
+            <Col span={4}>
+              <Form.Item label="主要诊断名称">
+                <Input
+                  placeholder="请输入主要诊断名称"
+                  value={principalDiagnosisName}
+                  onChange={(e) => setPrincipalDiagnosisName(e.target.value)}
+                />
+              </Form.Item>
+            </Col>
+            <Col span={4}>
+              <Form.Item label="主要手术代码">
+                <Input
+                  placeholder="请输入主要手术代码"
+                  value={majorProcedure}
+                  onChange={(e) => setMajorProcedure(e.target.value)}
+                />
+              </Form.Item>
+            </Col>
+            <Col span={4}>
+              <Form.Item label="主要手术名称">
+                <Input
+                  placeholder="请输入主要手术名称"
+                  value={majorProcedureName}
+                  onChange={(e) => setMajorProcedureName(e.target.value)}
+                />
+              </Form.Item>
+            </Col>
+          </Row>
+          <Row gutter={16}>
+            <Col span={4}>
+              <Form.Item label="省">
+                <Select
+                  placeholder="请选择省"
+                  value={provinceId || undefined}
+                  onChange={handleProvinceChange}
+                  allowClear
+                  loading={provinceLoading}
+                  style={{ width: '100%' }}
+                >
+                  {provinceList.map(item => (
+                    <Option key={item.id} value={item.id}>{item.descripts}</Option>
+                  ))}
+                </Select>
+              </Form.Item>
+            </Col>
+            <Col span={4}>
+              <Form.Item label="市">
+                <Select
+                  placeholder="请选择市"
+                  value={cityId || undefined}
+                  onChange={setCityId}
+                  allowClear
+                  disabled={!provinceId}
+                  loading={cityLoading}
+                  style={{ width: '100%' }}
+                >
+                  {cityList.map(item => (
+                    <Option key={item.id} value={item.id}>{item.descripts}</Option>
+                  ))}
+                </Select>
+              </Form.Item>
+            </Col>
+            <Col span={4}>
+              <Form.Item label="机构等级">
+                <Select
+                  placeholder="全部"
+                  value={medinsLv || undefined}
+                  onChange={setMedinsLv}
+                  allowClear
+                  style={{ width: '100%' }}
+                >
+                  {medinsLvOptions.map(item => (
+                    <Option key={item.value} value={item.value}>{item.label}</Option>
+                  ))}
+                </Select>
+              </Form.Item>
+            </Col>
+            <Col span={3}>
+              <Form.Item label=" " style={{ marginBottom: 0 }}>
+                <Space>
+                  <Button type="primary" icon={<SearchOutlined />} onClick={handleSearch}>
+                    查询
+                  </Button>
+                  <Button icon={<ReloadOutlined />} onClick={handleReset}>
+                    重置
+                  </Button>
+                </Space>
+              </Form.Item>
+            </Col>
+          </Row>
+        </Form>
+
+        {/* 操作按钮 */}
+        <Row style={{ marginBottom: 6 }}>
+          <Col>
+            <Button type="primary" icon={<PlusOutlined />} onClick={handleAdd}>
+              新增配置
+            </Button>
+          </Col>
+        </Row>
+
+        {/* 表格 */}
+        <Table
+          columns={columns}
+          dataSource={data}
+          rowKey="id"
+          loading={loading}
+          scroll={{ x: 1400 }}
+          pagination={false}
+        />
+
+        {/* 分页 */}
+        <CustomPagination
+          total={total}
+          current={currentPage}
+          pageSize={pageSize}
+          onChange={handlePageChange}
+        />
+      </Card>
+
+      {/* 新增/编辑弹窗 */}
+      <Modal
+        title={editingRecord ? '编辑DIP核心算法配置' : '新增DIP核心算法配置'}
+        open={modalVisible}
+        onOk={handleModalSubmit}
+        onCancel={handleModalClose}
+        confirmLoading={modalLoading}
+        width={800}
+        okText="保存"
+        cancelText="取消"
+        destroyOnClose
+      >
+        <Form form={form} layout="vertical">
+          <Form.Item name="id" hidden>
+            <Input />
+          </Form.Item>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item
+              label="主要诊断代码"
+              name="principalDiagnosis"
+              rules={[{ required: true, message: '请输入主要诊断代码' }]}
+            >
+              <Input placeholder="请输入主要诊断代码" />
+            </Form.Item>
+
+            <Form.Item
+              label="主要诊断名称"
+              name="principalDiagnosisName"
+              rules={[{ required: true, message: '请输入主要诊断名称' }]}
+            >
+              <Input placeholder="请输入主要诊断名称" />
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item label="主要手术代码" name="majorProcedure">
+              <Input placeholder="请输入主要手术代码" />
+            </Form.Item>
+
+            <Form.Item label="主要手术名称" name="majorProcedureName">
+              <Input placeholder="请输入主要手术名称" />
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item label="相关手术代码" name="secondaryProcedure">
+              <Input placeholder="请输入相关手术代码" />
+            </Form.Item>
+
+            <Form.Item label="相关手术名称" name="secondaryProcedureName">
+              <Input placeholder="请输入相关手术名称" />
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item
+              label="省"
+              name="provinceDr"
+              rules={[{ required: true, message: '请选择省' }]}
+            >
+              <Select
+                placeholder="请选择省"
+                onChange={handleModalProvinceChange}
+                loading={modalProvinceLoading}
+              >
+                {modalProvinceList.map(item => (
+                  <Option key={item.id} value={item.id}>{item.descripts}</Option>
+                ))}
+              </Select>
+            </Form.Item>
+
+            <Form.Item
+              label="市"
+              name="cityDr"
+              rules={[{ required: true, message: '请选择市' }]}
+            >
+              <Select
+                placeholder="请选择市"
+                disabled={!form.getFieldValue('provinceDr')}
+                loading={modalCityLoading}
+              >
+                {modalCityList.map(item => (
+                  <Option key={item.id} value={item.id}>{item.descripts}</Option>
+                ))}
+              </Select>
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item label="就医地区划代码" name="mdtrtArea">
+              <Input placeholder="请输入就医地区划代码" />
+            </Form.Item>
+
+            <Form.Item
+              label="医疗机构等级"
+              name="medinsLv"
+              rules={[{ required: true, message: '请选择医疗机构等级' }]}
+            >
+              <Select placeholder="请选择">
+                {medinsLvOptions.map(item => (
+                  <Option key={item.value} value={item.value}>{item.label}</Option>
+                ))}
+              </Select>
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0 16px' }}>
+            <Form.Item
+              label="基准分值"
+              name="scoreValue"
+              rules={[{ required: true, message: '请输入基准分值' }]}
+            >
+              <InputNumber
+                placeholder="请输入基准分值"
+                style={{ width: '100%' }}
+                precision={2}
+                min={0}
+              />
+            </Form.Item>
+
+            <Form.Item label="调节系数" name="adjustCoefficient">
+              <InputNumber
+                placeholder="请输入调节系数"
+                style={{ width: '100%' }}
+                precision={4}
+                min={0}
+              />
+            </Form.Item>
+          </div>
+
+          <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '0 16px' }}>
+            <Form.Item label="一级调节系数" name="primaryAdjustCoefficient">
+              <InputNumber
+                placeholder="一级调节系数"
+                style={{ width: '100%' }}
+                precision={4}
+                min={0}
+              />
+            </Form.Item>
+
+            <Form.Item label="二级调节系数" name="secondaryAdjustCoefficient">
+              <InputNumber
+                placeholder="二级调节系数"
+                style={{ width: '100%' }}
+                precision={4}
+                min={0}
+              />
+            </Form.Item>
+
+            <Form.Item label="三级调节系数" name="thirdAdjustCoefficient">
+              <InputNumber
+                placeholder="三级调节系数"
+                style={{ width: '100%' }}
+                precision={4}
+                min={0}
+              />
+            </Form.Item>
+          </div>
+        </Form>
+      </Modal>
+    </div>
+  );
+};
+
+export default DIPCoreAlgorithmConfig;

+ 0 - 635
src/pages/System/UserApply.tsx

@@ -1,635 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import {
-  Card,
-  Table,
-  Button,
-  Select,
-  Modal,
-  message,
-  Space,
-  Row,
-  Col,
-  DatePicker,
-  Form,
-  Tag,
-  Input,
-  Descriptions
-} from 'antd';
-import {
-  PlusOutlined,
-  SearchOutlined,
-  ReloadOutlined,
-  EyeOutlined,
-  CheckOutlined,
-  CloseOutlined
-} from '@ant-design/icons';
-import type { ColumnsType } from 'antd/es/table';
-import dayjs from 'dayjs';
-import {
-  queryApplyLogs,
-  getUserAuditLogDetail,
-  submitUserApply,
-  auditUserApply,
-  type UserAuditLogItem,
-  type UserApplyParams,
-  type AuditParams
-} from '../../api/system';
-import { queryHospitals, type HospitalItem } from '../../api/hospital';
-import CustomPagination from '../../components/CustomPagination';
-
-const { Option } = Select;
-const { RangePicker } = DatePicker;
-const { TextArea } = Input;
-
-// 分页参数
-interface PaginationParams {
-  current: number;
-  pageSize: number;
-  total: number;
-}
-
-// 审核状态选项
-const auditStatusOptions = [
-  { value: 'R', label: '待审核', color: 'orange' },
-  { value: 'Y', label: '已通过', color: 'green' },
-  { value: 'N', label: '已驳回', color: 'red' }
-];
-
-// 性别选项
-const sexOptions = [
-  { value: '1', label: '男' },
-  { value: '2', label: '女' },
-];
-
-// 证件类型选项
-const credTypeOptions = [
-  { value: '1', label: '身份证' },
-  { value: '2', label: '护照' },
-  { value: '3', label: '军官证' },
-  { value: '4', label: '其他' },
-];
-
-// 角色组选项
-const groupOptions = [
-  { value: '1', label: '系统管理员' },
-  { value: '2', label: '医院管理员' },
-  { value: '3', label: '医生' },
-  { value: '4', label: '护士' },
-];
-
-const UserApply: React.FC = () => {
-  const [applyForm] = Form.useForm();
-  const [auditForm] = Form.useForm();
-  const [data, setData] = useState<UserAuditLogItem[]>([]);
-  const [loading, setLoading] = useState(false);
-  const [pagination, setPagination] = useState<PaginationParams>({
-    current: 1,
-    pageSize: 10,
-    total: 0
-  });
-  
-  // 查询条件
-  const [searchStatus, setSearchStatus] = useState('R'); // 默认查询待审核
-  const [searchHosp, setSearchHosp] = useState('');
-  const [dateRange, setDateRange] = useState<[dayjs.Dayjs | null, dayjs.Dayjs | null] | null>(null);
-
-  // 医院列表
-  const [hospitals, setHospitals] = useState<HospitalItem[]>([]);
-  const [hospitalLoading, setHospitalLoading] = useState(false);
-
-  // 弹窗状态
-  const [detailVisible, setDetailVisible] = useState(false);
-  const [detailRecord, setDetailRecord] = useState<UserAuditLogItem | null>(null);
-  const [auditVisible, setAuditVisible] = useState(false);
-  const [auditRecord, setAuditRecord] = useState<UserAuditLogItem | null>(null);
-  const [applyVisible, setApplyVisible] = useState(false);
-
-  // 加载医院列表
-  const fetchHospitals = async () => {
-    setHospitalLoading(true);
-    try {
-      const res = await queryHospitals({ active: 'Y' }, { pageSize: 1000, currentPage: 1 });
-      if (String(res.errorCode) === '0' && res.result) {
-        setHospitals(res.result.rows || []);
-      }
-    } catch (error) {
-      console.error('加载医院列表失败:', error);
-    } finally {
-      setHospitalLoading(false);
-    }
-  };
-
-  // 表格列定义
-  const columns: ColumnsType<UserAuditLogItem> = [
-    {
-      title: '序号',
-      key: 'index',
-      width: 60,
-      render: (_, __, index) => (pagination.current - 1) * pagination.pageSize + index + 1
-    },
-    {
-      title: '申请编码',
-      dataIndex: 'code',
-      key: 'code',
-      width: 120
-    },
-    {
-      title: '姓名',
-      dataIndex: 'descripts',
-      key: 'descripts',
-      width: 120
-    },
-    {
-      title: '性别',
-      dataIndex: 'sexDesc',
-      key: 'sexDesc',
-      width: 80
-    },
-    {
-      title: '所属医院',
-      dataIndex: 'hospDesc',
-      key: 'hospDesc',
-      width: 180
-    },
-    {
-      title: '手机号',
-      dataIndex: 'mobile',
-      key: 'mobile',
-      width: 120
-    },
-    {
-      title: '证件号',
-      dataIndex: 'credNo',
-      key: 'credNo',
-      width: 150,
-      ellipsis: true
-    },
-    {
-      title: '申请时间',
-      dataIndex: 'applyDateTime',
-      key: 'applyDateTime',
-      width: 150
-    },
-    {
-      title: '审核状态',
-      dataIndex: 'auditStatus',
-      key: 'auditStatus',
-      width: 100,
-      render: (status: string) => {
-        const option = auditStatusOptions.find(o => o.value === status);
-        return (
-          <Tag color={option?.color || 'default'}>
-            {option?.label || status}
-          </Tag>
-        );
-      }
-    },
-    {
-      title: '审核人',
-      dataIndex: 'auditUserDesc',
-      key: 'auditUserDesc',
-      width: 100,
-      render: (text: string) => text || '-'
-    },
-    {
-      title: '操作',
-      key: 'action',
-      fixed: 'right',
-      width: 180,
-      render: (_, record) => (
-        <Space size="small">
-          <Button
-            type="link"
-            size="small"
-            icon={<EyeOutlined />}
-            onClick={() => handleView(record)}
-          >
-            详情
-          </Button>
-          {record.auditStatus === 'R' && (
-            <Button
-              type="link"
-              size="small"
-              icon={<CheckOutlined />}
-              onClick={() => handleAudit(record)}
-            >
-              审核
-            </Button>
-          )}
-        </Space>
-      )
-    }
-  ];
-
-  // 查询申请列表
-  const fetchData = async (page = pagination.current, size = pagination.pageSize) => {
-    setLoading(true);
-    try {
-      const res = await queryApplyLogs(
-        {
-          auditStatus: searchStatus || undefined,
-          hospitalID: searchHosp || undefined,
-          beginDate: dateRange?.[0] ? dateRange[0].format('YYYY-MM-DD') : undefined,
-          endDate: dateRange?.[1] ? dateRange[1].format('YYYY-MM-DD') : undefined
-        },
-        { pageSize: size, currentPage: page }
-      );
-
-      if (String(res.errorCode) === '0' && res.result) {
-        setData(res.result.rows || []);
-        setPagination(prev => ({
-          ...prev,
-          total: res.result?.total || 0
-        }));
-      } else {
-        message.error(res.errorMessage || '查询失败');
-      }
-    } catch (error) {
-      console.error('查询申请记录失败:', error);
-      message.error('查询申请记录失败');
-    } finally {
-      setLoading(false);
-    }
-  };
-
-  // 初始化加载
-  useEffect(() => {
-    fetchData(1, pagination.pageSize);
-    fetchHospitals();
-  }, []);
-
-  // 搜索
-  const handleSearch = () => {
-    setPagination(prev => ({ ...prev, current: 1 }));
-    fetchData(1, pagination.pageSize);
-  };
-
-  // 重置
-  const handleReset = () => {
-    setSearchStatus('R');
-    setSearchHosp('');
-    setDateRange(null);
-    setPagination(prev => ({ ...prev, current: 1 }));
-    fetchData(1, pagination.pageSize);
-  };
-
-  // 查看详情
-  const handleView = async (record: UserAuditLogItem) => {
-    try {
-      const res = await getUserAuditLogDetail({ userAuditLogID: record.id });
-      if (String(res.errorCode) === '0' && res.result) {
-        setDetailRecord(res.result);
-        setDetailVisible(true);
-      } else {
-        message.error(res.errorMessage || '获取详情失败');
-      }
-    } catch (error) {
-      console.error('获取详情失败:', error);
-      message.error('获取详情失败');
-    }
-  };
-
-  // 打开审核弹窗
-  const handleAudit = (record: UserAuditLogItem) => {
-    setAuditRecord(record);
-    auditForm.resetFields();
-    setAuditVisible(true);
-  };
-
-  // 提交审核
-  const handleSubmitAudit = async (auditStatus: string) => {
-    if (!auditRecord) return;
-    try {
-      const values = await auditForm.validateFields();
-      const params: AuditParams = {
-        userAuditLogID: auditRecord.id,
-        auditStatus: auditStatus,
-        auditRemarks: values.auditRemarks
-      };
-
-      const res = await auditUserApply(params);
-      if (String(res.errorCode) === '0') {
-        message.success(auditStatus === 'Y' ? '审核通过' : '已驳回');
-        setAuditVisible(false);
-        fetchData(pagination.current, pagination.pageSize);
-      } else {
-        message.error(res.errorMessage || '审核失败');
-      }
-    } catch (error) {
-      console.error('审核失败:', error);
-      message.error('审核失败');
-    }
-  };
-
-  // 打开新增申请弹窗
-  const handleAddApply = () => {
-    applyForm.resetFields();
-    setApplyVisible(true);
-    setTimeout(() => {
-      applyForm.setFieldsValue({ 
-        sexID: '1',
-        credTypeID: '1'
-      });
-    }, 0);
-  };
-
-  // 提交申请
-  const handleSubmitApply = async () => {
-    try {
-      const values = await applyForm.validateFields();
-      const params: UserApplyParams = {
-        code: values.code,
-        descripts: values.descripts,
-        sexID: values.sexID,
-        mobile: values.mobile,
-        credTypeID: values.credTypeID,
-        credNo: values.credNo,
-        hospitalID: values.hospitalID,
-        introduce: values.introduce,
-        auditGroupID: values.auditGroupID,
-        password: values.password
-      };
-
-      const res = await submitUserApply(params);
-      if (String(res.errorCode) === '0') {
-        message.success('申请提交成功');
-        setApplyVisible(false);
-        fetchData(pagination.current, pagination.pageSize);
-      } else {
-        message.error(res.errorMessage || '申请提交失败');
-      }
-    } catch (error) {
-      console.error('提交申请失败:', error);
-      message.error('提交申请失败');
-    }
-  };
-
-  return (
-    <div style={{ padding: 16 }}>
-      {/* 查询条件 */}
-      <Card size="small" style={{ marginBottom: 16 }}>
-        <Row gutter={16} align="middle">
-          <Col>
-            <Select
-              placeholder="审核状态"
-              value={searchStatus || undefined}
-              onChange={v => setSearchStatus(v || '')}
-              style={{ width: 120 }}
-              allowClear
-              options={auditStatusOptions}
-            />
-          </Col>
-          <Col>
-            <Select
-              placeholder="所属医院"
-              value={searchHosp || undefined}
-              onChange={v => setSearchHosp(v || '')}
-              style={{ width: 180 }}
-              allowClear
-              loading={hospitalLoading}
-              showSearch
-              filterOption={(input, option) =>
-                String(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
-              }
-              options={hospitals.map(h => ({
-                value: String(h.hospitalID),
-                label: h.descripts
-              }))}
-            />
-          </Col>
-          <Col>
-            <RangePicker
-              placeholder={['开始日期', '结束日期']}
-              value={dateRange}
-              onChange={dates => setDateRange(dates)}
-            />
-          </Col>
-          <Col>
-            <Space>
-              <Button type="primary" icon={<SearchOutlined />} onClick={handleSearch}>查询</Button>
-              <Button icon={<ReloadOutlined />} onClick={handleReset}>重置</Button>
-            </Space>
-          </Col>
-        </Row>
-      </Card>
-
-      {/* 工具栏 + 表格 */}
-      <Card size="small">
-        <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 12 }}>
-          <Button type="primary" icon={<PlusOutlined />} onClick={handleAddApply}>新增申请</Button>
-          <span>共 {pagination.total} 条记录</span>
-        </div>
-        <Table
-          columns={columns}
-          dataSource={data}
-          rowKey="id"
-          loading={loading}
-          scroll={{ x: 1400 }}
-          size="small"
-          pagination={false}
-        />
-        <div style={{ marginTop: 12, display: 'flex', justifyContent: 'flex-end' }}>
-          <CustomPagination
-            current={pagination.current}
-            pageSize={pagination.pageSize}
-            total={pagination.total}
-            onChange={(page, size) => {
-              setPagination(prev => ({ ...prev, current: page, pageSize: size }));
-              fetchData(page, size);
-            }}
-          />
-        </div>
-      </Card>
-
-      {/* 详情弹窗 */}
-      <Modal
-        title="申请详情"
-        open={detailVisible}
-        onCancel={() => setDetailVisible(false)}
-        footer={[
-          <Button key="close" onClick={() => setDetailVisible(false)}>
-            关闭
-          </Button>
-        ]}
-        width={700}
-      >
-        {detailRecord && (
-          <Descriptions bordered column={2} size="small">
-            <Descriptions.Item label="申请编码">{detailRecord.code || '-'}</Descriptions.Item>
-            <Descriptions.Item label="姓名">{detailRecord.descripts || '-'}</Descriptions.Item>
-            <Descriptions.Item label="性别">{detailRecord.sexDesc || '-'}</Descriptions.Item>
-            <Descriptions.Item label="手机号">{detailRecord.mobile || '-'}</Descriptions.Item>
-            <Descriptions.Item label="所属医院">{detailRecord.hospDesc || '-'}</Descriptions.Item>
-            <Descriptions.Item label="证件类型">{detailRecord.credTypeDesc || '-'}</Descriptions.Item>
-            <Descriptions.Item label="证件号">{detailRecord.credNo || '-'}</Descriptions.Item>
-            <Descriptions.Item label="申请时间">{detailRecord.applyDateTime || '-'}</Descriptions.Item>
-            <Descriptions.Item label="审核状态">
-              <Tag color={auditStatusOptions.find(o => o.value === detailRecord.auditStatus)?.color}>
-                {auditStatusOptions.find(o => o.value === detailRecord.auditStatus)?.label}
-              </Tag>
-            </Descriptions.Item>
-            <Descriptions.Item label="审核人">{detailRecord.auditUserDesc || '-'}</Descriptions.Item>
-            <Descriptions.Item label="审核组">{detailRecord.auditGroupDesc || '-'}</Descriptions.Item>
-            <Descriptions.Item label="审核备注">{detailRecord.auditRemarks || '-'}</Descriptions.Item>
-            <Descriptions.Item label="简介" span={2}>{detailRecord.introduce || '-'}</Descriptions.Item>
-          </Descriptions>
-        )}
-      </Modal>
-
-      {/* 审核弹窗 */}
-      <Modal
-        title="审核用户申请"
-        open={auditVisible}
-        onCancel={() => setAuditVisible(false)}
-        footer={[
-          <Button key="reject" danger icon={<CloseOutlined />} onClick={() => handleSubmitAudit('N')}>
-            驳回
-          </Button>,
-          <Button key="approve" type="primary" icon={<CheckOutlined />} onClick={() => handleSubmitAudit('Y')}>
-            通过
-          </Button>
-        ]}
-        width={600}
-      >
-        {auditRecord && (
-          <>
-            <Descriptions bordered column={2} size="small" style={{ marginBottom: 16 }}>
-              <Descriptions.Item label="申请编码">{auditRecord.code || '-'}</Descriptions.Item>
-              <Descriptions.Item label="姓名">{auditRecord.descripts || '-'}</Descriptions.Item>
-              <Descriptions.Item label="性别">{auditRecord.sexDesc || '-'}</Descriptions.Item>
-              <Descriptions.Item label="手机号">{auditRecord.mobile || '-'}</Descriptions.Item>
-              <Descriptions.Item label="所属医院">{auditRecord.hospDesc || '-'}</Descriptions.Item>
-              <Descriptions.Item label="证件号">{auditRecord.credNo || '-'}</Descriptions.Item>
-            </Descriptions>
-            <Form form={auditForm} layout="vertical">
-              <Form.Item
-                name="auditRemarks"
-                label="审核备注"
-              >
-                <TextArea placeholder="请输入审核备注" maxLength={200} rows={3} />
-              </Form.Item>
-            </Form>
-          </>
-        )}
-      </Modal>
-
-      {/* 新增申请弹窗 */}
-      <Modal
-        title="新增用户申请"
-        open={applyVisible}
-        onOk={handleSubmitApply}
-        onCancel={() => setApplyVisible(false)}
-        okText="提交"
-        cancelText="取消"
-        width={600}
-      >
-        <Form form={applyForm} layout="vertical">
-          <Row gutter={16}>
-            <Col span={12}>
-              <Form.Item
-                name="code"
-                label="用户编码"
-              >
-                <Input placeholder="请输入用户编码" maxLength={20} />
-              </Form.Item>
-            </Col>
-            <Col span={12}>
-              <Form.Item
-                name="descripts"
-                label="姓名"
-                rules={[{ required: true, message: '请输入姓名' }]}
-              >
-                <Input placeholder="请输入姓名" maxLength={50} />
-              </Form.Item>
-            </Col>
-          </Row>
-          <Row gutter={16}>
-            <Col span={12}>
-              <Form.Item
-                name="sexID"
-                label="性别"
-                rules={[{ required: true, message: '请选择性别' }]}
-              >
-                <Select placeholder="请选择性别" options={sexOptions} />
-              </Form.Item>
-            </Col>
-            <Col span={12}>
-              <Form.Item
-                name="mobile"
-                label="手机号"
-                rules={[
-                  { required: true, message: '请输入手机号' },
-                  { pattern: /^1\d{10}$/, message: '请输入正确的11位手机号' }
-                ]}
-              >
-                <Input placeholder="请输入手机号" maxLength={11} />
-              </Form.Item>
-            </Col>
-          </Row>
-          <Row gutter={16}>
-            <Col span={12}>
-              <Form.Item
-                name="credTypeID"
-                label="证件类型"
-              >
-                <Select placeholder="请选择证件类型" options={credTypeOptions} allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={12}>
-              <Form.Item
-                name="credNo"
-                label="证件号"
-              >
-                <Input placeholder="请输入证件号" maxLength={30} />
-              </Form.Item>
-            </Col>
-          </Row>
-          <Row gutter={16}>
-            <Col span={12}>
-              <Form.Item
-                name="hospitalID"
-                label="所属医院"
-                rules={[{ required: true, message: '请选择所属医院' }]}
-              >
-                <Select 
-                  placeholder="请选择所属医院"
-                  loading={hospitalLoading}
-                  showSearch
-                  filterOption={(input, option) =>
-                    String(option?.label ?? '').toLowerCase().includes(input.toLowerCase())
-                  }
-                  options={hospitals.map(h => ({
-                    value: String(h.hospitalID),
-                    label: h.descripts
-                  }))}
-                />
-              </Form.Item>
-            </Col>
-            <Col span={12}>
-              <Form.Item
-                name="auditGroupID"
-                label="审核组"
-              >
-                <Select placeholder="请选择审核组" options={groupOptions} allowClear />
-              </Form.Item>
-            </Col>
-          </Row>
-          <Form.Item
-            name="password"
-            label="密码"
-          >
-            <Input.Password placeholder="请输入密码" maxLength={20} />
-          </Form.Item>
-          <Form.Item
-            name="introduce"
-            label="简介"
-          >
-            <TextArea placeholder="请输入简介" maxLength={200} rows={3} />
-          </Form.Item>
-        </Form>
-      </Modal>
-    </div>
-  );
-};
-
-export default UserApply;