request.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import axios from 'axios';
  2. // 创建 axios 实例
  3. const request = axios.create({
  4. baseURL: '/iris-api', // 通过 Nginx 代理访问 IRIS
  5. timeout: 30000,
  6. });
  7. // 请求拦截器
  8. request.interceptors.request.use(
  9. (config) => {
  10. // 可以在这里添加 token 等认证信息
  11. return config;
  12. },
  13. (error) => {
  14. return Promise.reject(error);
  15. }
  16. );
  17. // 响应拦截器
  18. request.interceptors.response.use(
  19. (response) => {
  20. return response.data;
  21. },
  22. (error) => {
  23. console.error('API请求错误:', error);
  24. return Promise.reject(error);
  25. }
  26. );
  27. /**
  28. * Session 信息类型 - 完整字段定义
  29. */
  30. export interface SessionInfo {
  31. userID: string;
  32. userCode: string;
  33. userName: string;
  34. locID: string;
  35. locDesc: string;
  36. groupID: string;
  37. groupDesc: string;
  38. hospID: string;
  39. hospCode: string;
  40. hospDesc: string;
  41. langID: number;
  42. langDesc: string;
  43. changeFlag: string;
  44. changeDesc: string;
  45. lastLoginDate: string;
  46. lastLoginTime: string;
  47. directorAuth: string;
  48. defaultMenuType: string;
  49. titleDesc: string;
  50. userYBCode: string;
  51. hospYBCode: string;
  52. provID: string;
  53. cityID: string;
  54. areaCode:string;
  55. medinsLv:string;
  56. path: string;
  57. sessionID: string;
  58. errorMessageTime: string;
  59. language: string;
  60. messageTime: number;
  61. }
  62. /**
  63. * 获取默认 Session 信息
  64. * 从 localStorage 中读取或使用默认值
  65. */
  66. export const getDefaultSession = (): SessionInfo => {
  67. try {
  68. const sessionStr = localStorage.getItem('drg_session');
  69. if (sessionStr) {
  70. const session = JSON.parse(sessionStr);
  71. return {
  72. userID: session.userID || '',
  73. userCode: session.userCode || '',
  74. userName: session.userName || '',
  75. locID: session.locID || '',
  76. locDesc: session.locDesc || '',
  77. groupID: session.groupID || '',
  78. groupDesc: session.groupDesc || '',
  79. hospID: session.hospID || '',
  80. hospCode: session.hospCode || '',
  81. hospDesc: session.hospDesc || '',
  82. langID: session.langID || 1,
  83. langDesc: session.langDesc || '简体中文',
  84. changeFlag: session.changeFlag || 'N',
  85. changeDesc: session.changeDesc || '',
  86. lastLoginDate: session.lastLoginDate || '',
  87. lastLoginTime: session.lastLoginTime || '',
  88. directorAuth: session.directorAuth || 'N',
  89. defaultMenuType: session.defaultMenuType || '',
  90. titleDesc: session.titleDesc || '',
  91. userYBCode: session.userYBCode || '',
  92. hospYBCode: session.hospYBCode || '',
  93. provID: session.provID || '',
  94. cityID: session.cityID || '',
  95. areaCode: session.areaCode || '',
  96. medinsLv:session.medinsLv || '',
  97. path: session.path || '',
  98. sessionID: session.sessionID || '',
  99. errorMessageTime: session.errorMessageTime || '',
  100. language: session.language || 'CN',
  101. messageTime: session.messageTime || 1,
  102. };
  103. }
  104. } catch (e) {
  105. console.warn('读取 session 失败:', e);
  106. }
  107. // 返回空session(未登录状态)
  108. return {
  109. userID: '',
  110. userCode: '',
  111. userName: '',
  112. locID: '',
  113. locDesc: '',
  114. groupID: '',
  115. groupDesc: '',
  116. hospID: '',
  117. hospCode: '',
  118. hospDesc: '',
  119. langID: 1,
  120. langDesc: '简体中文',
  121. changeFlag: 'N',
  122. changeDesc: '',
  123. lastLoginDate: '',
  124. lastLoginTime: '',
  125. directorAuth: 'N',
  126. defaultMenuType: '',
  127. titleDesc: '',
  128. userYBCode: '',
  129. hospYBCode: '',
  130. provID: '',
  131. cityID: '',
  132. areaCode:'',
  133. medinsLv:'',
  134. path: '',
  135. sessionID: '',
  136. errorMessageTime: '',
  137. language: 'CN',
  138. messageTime: 1,
  139. };
  140. };
  141. /**
  142. * 通用接口调用方法
  143. * @param code 接口代码
  144. * @param params 接口参数数组
  145. * @param session Session 信息(可选,默认从 localStorage 读取)
  146. * @param pagination 分页参数(可选,仅查询接口使用)
  147. */
  148. export const invoke = (
  149. code: string,
  150. params?: any[],
  151. session?: SessionInfo,
  152. pagination?: any
  153. ) => {
  154. const requestData: any = {
  155. code,
  156. params: params || [],
  157. session: [session || getDefaultSession()],
  158. };
  159. // 如果有分页参数,添加到请求中(仅查询接口使用)
  160. if (pagination) {
  161. requestData.pagination = [pagination];
  162. }
  163. return request({
  164. url: '/invoke',
  165. method: 'post',
  166. data: requestData,
  167. }).catch((error) => {
  168. // 如果是开发模式,返回模拟数据
  169. console.warn('接口调用失败,返回模拟数据:', error.message);
  170. return getMockResponse(code);
  171. });
  172. };
  173. /**
  174. * 获取模拟响应数据(用于开发预览)
  175. */
  176. const getMockResponse = (code: string): any => {
  177. if (code === '02010001') {
  178. // DRG分组器模拟响应 - 最新结构
  179. return {
  180. errorCode: '0',
  181. errorMessage: 'success',
  182. result: {
  183. mdc: 'MDCC',
  184. mdcDesc: '主诊断大类入组MDCC:眼疾病及功能障碍',
  185. complicationInfo: [
  186. {
  187. diagCode: 'E10.700x022',
  188. diagName: '1型糖尿病性高血压',
  189. complication: 'CC',
  190. complicationDesc: '并发症'
  191. }
  192. ],
  193. drgInfo: [
  194. {
  195. code: 'CB55',
  196. desc: '晶状体手术:表示不伴有并发症与合并症'
  197. },
  198. {
  199. code: 'CW15',
  200. desc: '各种类型白内障:表示不伴有并发症与合并症'
  201. }
  202. ],
  203. checkTime: new Date().toLocaleString(),
  204. },
  205. };
  206. }
  207. return { errorCode: '-1', errorMessage: '未实现的接口' };
  208. };
  209. export default request;