Browse Source

代码更新提交

837390164@qq.com 1 month ago
parent
commit
70f2e2de4c

+ 52 - 5
src/App.tsx

@@ -1,4 +1,4 @@
-import { useState, useEffect } from 'react';
+import { useState, useEffect, useRef } from 'react';
 import { Layout, Menu, Card, Row, Col, Statistic, Table, Tag, Progress, List, Avatar, Typography, Tabs, Input, Dropdown, Badge, Button, Popconfirm, message, Modal, Form } from 'antd';
 import dayjs from 'dayjs';
 import 'dayjs/locale/zh-cn';
@@ -26,13 +26,14 @@ import {
   LogoutOutlined,
   DownOutlined,
   LockOutlined,
-  SyncOutlined
+  SyncOutlined,
+  SwapOutlined
 } from '@ant-design/icons';
 import type { MenuProps, TabsProps } from 'antd';
 import './App.css';
 import { invoke } from './api/request';
 import { getUserMenus } from './api/menu';
-import { getSession } from './utils/auth';
+import { getSession, setTempUserInfo } from './utils/auth';
 import { encryptPassword } from './utils/encryption';
 import { MenuProvider, useMenu, defaultMenuItems } from './context/MenuContext';
 import DRGCustomQuery from './pages/DRG/CustomQuery';
@@ -320,6 +321,9 @@ function App() {
   const [authState, setAuthState] = useState<AuthState>('login');
   const [userInfo, setUserInfo] = useState<{ userName: string; hospName: string; roleName: string; userID?: string } | null>(null);
 
+  // ★ 标记是否为"切换登录"操作,用于判断是否需要关闭所有已打开标签页
+  const isSwitchingLogin = useRef(false);
+
   // 修改密码弹窗状态
   const [pwdModalVisible, setPwdModalVisible] = useState(false);
   const [pwdForm] = Form.useForm();
@@ -435,6 +439,29 @@ function App() {
     message.success('已登出');
   };
 
+  // 处理切换登录角色
+  const handleSwitchLogin = () => {
+    // ★ 标记为切换登录操作,登录成功后需要关闭所有标签页
+    isSwitchingLogin.current = true;
+    
+    // 保存当前用户信息到临时存储,避免重新输入密码
+    if (userInfo?.userID && userInfo?.userName) {
+      const session = getSession();
+      setTempUserInfo({
+        userID: userInfo.userID,
+        userCode: session?.userCode || '',
+        userName: userInfo.userName
+      });
+    }
+    // 清除当前session和菜单
+    localStorage.removeItem('drg_session');
+    clearMenus();
+    // 跳转到选择角色页面
+    setAuthState('select');
+    setUserInfo(null);
+    message.success('请选择新的登录角色');
+  };
+
   // 处理打开修改密码弹窗
   const handleOpenPwdModal = () => {
     pwdForm.resetFields();
@@ -511,8 +538,10 @@ function App() {
             return;
           }
 
-          const res = await invoke('InitUserPassword', [{
-            userID: userID
+          const res = await invoke('01040091', [{
+            userID: String(userID),
+            password: '123456',
+            confirmPassword: '123456'
           }]);
 
           if (String(res.errorCode) === '0') {
@@ -789,6 +818,15 @@ function App() {
               roleName: session.groupDesc,
               userID: session.userID
             });
+            
+            // ★ 切换登录时关闭所有已打开的标签页
+            if (isSwitchingLogin.current) {
+              console.log('[App] 切换登录完成,关闭所有标签页');
+              setOpenTabs([{ key: 'dashboard', label: '监控仪表盘', closable: false }]);
+              setCurrentMenu('dashboard');
+              isSwitchingLogin.current = false;
+            }
+            
             setUserInfo({
               userName: session.userName || '管理员',
               hospName: session.hospDesc || session.hospID || '',
@@ -952,6 +990,15 @@ function App() {
             <Dropdown
               menu={{
                 items: [
+                  {
+                    key: 'switch-login',
+                    icon: <SwapOutlined />,
+                    label: '切换登录',
+                    onClick: handleSwitchLogin
+                  },
+                  {
+                    type: 'divider'
+                  },
                   {
                     key: 'password',
                     icon: <LockOutlined />,

+ 6 - 2
src/components/Layout/MainLayout.tsx

@@ -11,6 +11,8 @@ import { useNavigate } from 'react-router-dom';
 import { logout, getLogonGroupByUserId, updateLogonGroupById } from '../../api/logon';
 import { queryHospitals } from '../../api/hospital';
 import { invoke } from '../../api/request';
+import { getSession } from '../../utils/auth';
+import { encryptPassword } from '../../utils/encryption';
 import { useMenu } from '../../context/MenuContext';
 
 const { Header, Content } = Layout;
@@ -195,8 +197,10 @@ const MainLayout: React.FC<{ children: React.ReactNode }> = ({ children }) => {
       async onOk() {
         setPwdLoading(true);
         try {
-          const res = await invoke('InitUserPassword', [{
-            userID: currentUser?.userID
+          const res = await invoke('01040091', [{
+            userID: currentUser?.userID,
+            password: '123456',
+            confirmPassword: '123456'
           }]);
 
           if (String(res.errorCode) === '0') {

+ 16 - 2
src/pages/BasicData/DIPCoreAlgorithmConfig.tsx

@@ -86,6 +86,8 @@ const DIPCoreAlgorithmConfig: React.FC = () => {
 
   // 当前用户是否为管理员
   const [isAdmin, setIsAdmin] = useState(false);
+  // ★ 标记筛选条件默认值是否已完成赋值
+  const [isInitialized, setIsInitialized] = useState(false);
 
   // 初始化:根据登录用户角色判断是否为管理员,非管理员默认锁定省份/市/机构等级
   useEffect(() => {
@@ -107,6 +109,8 @@ const DIPCoreAlgorithmConfig: React.FC = () => {
         }
       }
     }
+    // ★ 默认值赋值完成,标记已初始化
+    setIsInitialized(true);
   }, []);
 
   // 加载省数据(查询)
@@ -181,8 +185,11 @@ const DIPCoreAlgorithmConfig: React.FC = () => {
   }, [principalDiagnosis, principalDiagnosisName, majorProcedure, majorProcedureName, provinceId, cityId, medinsLv, year, currentPage, pageSize]);
 
   useEffect(() => {
-    fetchData();
-  }, [fetchData]);
+    // ★ 仅在筛选条件默认值赋值完成后才执行查询
+    if (isInitialized) {
+      fetchData();
+    }
+  }, [fetchData, isInitialized]);
 
   // 查询
   const handleSearch = () => {
@@ -221,6 +228,13 @@ const DIPCoreAlgorithmConfig: React.FC = () => {
     }
   };
 
+  // ★ 初始化或省值变更时自动加载市列表(解决非手动切换省时市下拉为空的问题)
+  useEffect(() => {
+    if (provinceId) {
+      loadCities(provinceId);
+    }
+  }, [provinceId, loadCities]);
+
   // 分页变化
   const handlePageChange = (page: number, size: number) => {
     setCurrentPage(page);

+ 4 - 2
src/pages/System/Users.tsx

@@ -228,8 +228,10 @@ const Users: React.FC = () => {
       async onOk() {
         setPwdLoading(true);
         try {
-          const res = await invoke('InitUserPassword', [{
-            userID: pwdUserId
+          const res = await invoke('01040091', [{
+            userID: pwdUserId,
+            password: '123456',
+            confirmPassword: '123456'
           }]);
 
           if (String(res.errorCode) === '0') {