request.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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. path: string;
  56. sessionID: string;
  57. errorMessageTime: string;
  58. language: string;
  59. messageTime: number;
  60. }
  61. /**
  62. * 获取默认 Session 信息
  63. * 从 localStorage 中读取或使用默认值
  64. */
  65. export const getDefaultSession = (): SessionInfo => {
  66. try {
  67. const sessionStr = localStorage.getItem('drg_session');
  68. if (sessionStr) {
  69. const session = JSON.parse(sessionStr);
  70. return {
  71. userID: session.userID || '',
  72. userCode: session.userCode || '',
  73. userName: session.userName || '',
  74. locID: session.locID || '',
  75. locDesc: session.locDesc || '',
  76. groupID: session.groupID || '',
  77. groupDesc: session.groupDesc || '',
  78. hospID: session.hospID || '',
  79. hospCode: session.hospCode || '',
  80. hospDesc: session.hospDesc || '',
  81. langID: session.langID || 1,
  82. langDesc: session.langDesc || '简体中文',
  83. changeFlag: session.changeFlag || 'N',
  84. changeDesc: session.changeDesc || '',
  85. lastLoginDate: session.lastLoginDate || '',
  86. lastLoginTime: session.lastLoginTime || '',
  87. directorAuth: session.directorAuth || 'N',
  88. defaultMenuType: session.defaultMenuType || '',
  89. titleDesc: session.titleDesc || '',
  90. userYBCode: session.userYBCode || '',
  91. hospYBCode: session.hospYBCode || '',
  92. provID: session.provID || '',
  93. cityID: session.cityID || '',
  94. areaCode: session.areaCode || '',
  95. path: session.path || '',
  96. sessionID: session.sessionID || '',
  97. errorMessageTime: session.errorMessageTime || '',
  98. language: session.language || 'CN',
  99. messageTime: session.messageTime || 1,
  100. };
  101. }
  102. } catch (e) {
  103. console.warn('读取 session 失败:', e);
  104. }
  105. // 返回空session(未登录状态)
  106. return {
  107. userID: '',
  108. userCode: '',
  109. userName: '',
  110. locID: '',
  111. locDesc: '',
  112. groupID: '',
  113. groupDesc: '',
  114. hospID: '',
  115. hospCode: '',
  116. hospDesc: '',
  117. langID: 1,
  118. langDesc: '简体中文',
  119. changeFlag: 'N',
  120. changeDesc: '',
  121. lastLoginDate: '',
  122. lastLoginTime: '',
  123. directorAuth: 'N',
  124. defaultMenuType: '',
  125. titleDesc: '',
  126. userYBCode: '',
  127. hospYBCode: '',
  128. provID: '',
  129. cityID: '',
  130. areaCode:'',
  131. path: '',
  132. sessionID: '',
  133. errorMessageTime: '',
  134. language: 'CN',
  135. messageTime: 1,
  136. };
  137. };
  138. /**
  139. * 通用接口调用方法
  140. * @param code 接口代码
  141. * @param params 接口参数数组
  142. * @param session Session 信息(可选,默认从 localStorage 读取)
  143. * @param pagination 分页参数(可选,仅查询接口使用)
  144. */
  145. export const invoke = (
  146. code: string,
  147. params?: any[],
  148. session?: SessionInfo,
  149. pagination?: any
  150. ) => {
  151. const requestData: any = {
  152. code,
  153. params: params || [],
  154. session: [session || getDefaultSession()],
  155. };
  156. // 如果有分页参数,添加到请求中(仅查询接口使用)
  157. if (pagination) {
  158. requestData.pagination = [pagination];
  159. }
  160. return request({
  161. url: '/invoke',
  162. method: 'post',
  163. data: requestData,
  164. }).catch((error) => {
  165. // 如果是开发模式,返回模拟数据
  166. console.warn('接口调用失败,返回模拟数据:', error.message);
  167. return getMockResponse(code);
  168. });
  169. };
  170. /**
  171. * 获取模拟响应数据(用于开发预览)
  172. */
  173. const getMockResponse = (code: string): any => {
  174. if (code === '02010001') {
  175. // DRG分组器模拟响应 - 最新结构
  176. return {
  177. errorCode: '0',
  178. errorMessage: 'success',
  179. result: {
  180. mdc: 'MDCC',
  181. mdcDesc: '主诊断大类入组MDCC:眼疾病及功能障碍',
  182. complicationInfo: [
  183. {
  184. diagCode: 'E10.700x022',
  185. diagName: '1型糖尿病性高血压',
  186. complication: 'CC',
  187. complicationDesc: '并发症'
  188. }
  189. ],
  190. drgInfo: [
  191. {
  192. code: 'CB55',
  193. desc: '晶状体手术:表示不伴有并发症与合并症'
  194. },
  195. {
  196. code: 'CW15',
  197. desc: '各种类型白内障:表示不伴有并发症与合并症'
  198. }
  199. ],
  200. checkTime: new Date().toLocaleString(),
  201. },
  202. };
  203. }
  204. return { errorCode: '-1', errorMessage: '未实现的接口' };
  205. };
  206. export default request;