i18n.ts 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. /**
  2. * I18n Mock Handlers
  3. * 国际化相关的 mock 处理器
  4. */
  5. /**
  6. * 获取多语言列表 - 成功场景
  7. *
  8. * @description 获取系统支持的语言列表
  9. * @method GET
  10. * @url /dr/api/v1/pub/language
  11. * @access 公开接口
  12. *
  13. * @returns {Object[]} data - 语言列表
  14. * @returns {string} data[].language - 语言代码(en/zh)
  15. * @returns {string} data[].display - 语言显示名称
  16. *
  17. * @example
  18. * mockGetLanguageListSuccess();
  19. * cy.wait('@getLanguageListSuccess').its('response.body.data').should('have.length', 2);
  20. *
  21. * @see docs/DR.md - 章节4
  22. */
  23. export function mockGetLanguageListSuccess() {
  24. cy.intercept('GET', '/dr/api/v1/pub/language', {
  25. statusCode: 200,
  26. body: {
  27. code: "0x000000",
  28. data: [
  29. {
  30. language: "en",
  31. display: "English"
  32. },
  33. {
  34. language: "zh",
  35. display: "简体中文"
  36. }
  37. ],
  38. description: "Success",
  39. solution: ""
  40. }
  41. }).as('getLanguageListSuccess');
  42. }
  43. /**
  44. * 获取多语言列表 - 空列表场景
  45. *
  46. * @description 获取多语言列表,返回空列表
  47. * @method GET
  48. * @url /dr/api/v1/pub/language
  49. * @access 公开接口
  50. *
  51. * @returns {Object[]} data - 空语言列表
  52. *
  53. * @example
  54. * mockGetLanguageListEmpty();
  55. * cy.wait('@getLanguageListEmpty');
  56. *
  57. * @see docs/DR.md - 章节4
  58. */
  59. export function mockGetLanguageListEmpty() {
  60. cy.intercept('GET', '/dr/api/v1/pub/language', {
  61. statusCode: 200,
  62. body: {
  63. code: "0x000000",
  64. data: [],
  65. description: "Success",
  66. solution: ""
  67. }
  68. }).as('getLanguageListEmpty');
  69. }
  70. /**
  71. * 获取翻译文件 - 成功场景
  72. *
  73. * @description 获取指定语言的翻译文件
  74. * @method GET
  75. * @url /dr/api/v1/pub/trans/{locale}/{locale}.js
  76. * @access 公开接口
  77. *
  78. * @param {string} locale - 语言代码(zh_CN/en_US)
  79. *
  80. * @returns {Object} 翻译键值对
  81. *
  82. * @example
  83. * mockI18nSuccess('en_US');
  84. * cy.wait('@getI18nZHSuccess');
  85. *
  86. * @see docs/DR.md - 章节3
  87. */
  88. export function mockI18nSuccess(locale: 'zh_CN' | 'en_US') {
  89. const mockData = locale === 'zh_CN' ? {
  90. "greeting": "你好,世界!",
  91. "name": "张三",
  92. "patient": "患者管理",
  93. "animal.patient": "宠物管理",
  94. "register": "注册",
  95. "tasklist": "任务清单",
  96. "historylist": "历史清单",
  97. "archivelist": "归档清单",
  98. "bin": "回收站",
  99. "outputlist": "传输清单",
  100. "exam": "检查",
  101. "examlist": "检查清单",
  102. "process": "处理",
  103. "print": "打印",
  104. "printlist": "打印清单",
  105. "worklist": "任务清单",
  106. "worklist.operationPanel": "操作面板",
  107. "register.basicInfoPanel": "基本信息表单区域",
  108. "register.protocolListPanel": "待选择协议列表区域",
  109. "register.selectedProtocolListPanel": "已选择协议列表区域",
  110. "worklistTable.patientId": "患者编号22",
  111. "worklistTable.name": "患者姓名",
  112. "worklistTable.alias": "曾用名",
  113. "worklistTable.englishName": "英文名",
  114. "worklistTable.registrationId": "登记号",
  115. "worklistTable.birthDate": "出生日期",
  116. "worklistTable.age": "年龄",
  117. "worklistTable.gender": "性别",
  118. "worklistTable.bodyType": "病人体型",
  119. "worklistTable.weight": "体重",
  120. "worklistTable.height": "身高",
  121. "worklistTable.pregnancyStatus": "怀孕状态",
  122. "worklistTable.referringDoctor": "转诊医师",
  123. "searchPanel.name": "按姓名查询",
  124. "searchPanel.patientId": "按患者编号查询",
  125. "searchPanel.registrationId": "按登记号查询",
  126. "searchPanel.startDate": "开始日期",
  127. "searchPanel.endDate": "结束日期",
  128. "searchPanel.search": "查询",
  129. "register.patientId": "患者编号",
  130. "animal.register.patientId": "宠物编号",
  131. "register.patientId.placeholder": "请输入患者编号",
  132. "animal.register.patientId.placeholder": "请输入宠物编号",
  133. "register.patientName": "患者姓名",
  134. "animal.register.patientName": "宠物昵称",
  135. "register.patientName.placeholder": "请输入患者姓名",
  136. "animal.register.patientName.placeholder": "请输入宠物昵称",
  137. "register.previousName": "曾用名",
  138. "register.previousName.placeholder": "请输入曾用名",
  139. "register.englishName": "英文名",
  140. "register.englishName.placeholder": "请输入英文名",
  141. "register.registrationNo": "登记号",
  142. "register.registrationNo.placeholder": "请输入登记号",
  143. "register.dateOfBirth": "出生日期",
  144. "register.age": "年龄",
  145. "register.gender": "性别",
  146. "register.gender.male": "男",
  147. "register.gender.female": "女",
  148. "register.gender.other": "其他",
  149. "register.gender.unknown": "未知",
  150. "register.gender.male_pet": "公",
  151. "register.gender.female_pet": "母",
  152. "register.gender.other_pet": "其他",
  153. "register.gender.unknown_pet": "未知",
  154. "register.gender.castration": "阉割",
  155. "register.gender.sterilization": "绝育",
  156. "register.owner_name": "宠主姓名",
  157. "register.owner_name.placeholder": "请输入宠主姓名",
  158. "register.bodyType": "病人体型",
  159. "register.bodyType.slim": "瘦",
  160. "register.bodyType.average": "平均",
  161. "register.bodyType.fat": "重",
  162. "register.weight": "体重",
  163. "register.height": "身高",
  164. "register.pregnancyStatus": "怀孕状态",
  165. "register.pregnancyStatus.yes": "是",
  166. "register.pregnancyStatus.no": "否",
  167. "register.pregnancyStatus.na": "不适用",
  168. "register.referringPhysician": "转诊医师",
  169. "register.referringPhysician.placeholder": "请输入转诊医师姓名",
  170. "register.bodyPart": "身体部位",
  171. "register.bodyPart.head": "头部",
  172. "register.bodyPart.chest": "胸部",
  173. "register.accessionNumber": "登记号",
  174. "register.accessionNumber.placeholder": "请输入登记号",
  175. "register.protocol.A": "协议A",
  176. "register.protocol.B": "协议B",
  177. "register.protocol.C": "协议C",
  178. "register.protocol.D": "协议D",
  179. "register.protocol.E": "协议E",
  180. "register.protocol.F": "协议F",
  181. "register.selectedProtocol.A": "已选协议A",
  182. "register.selectedProtocol.B": "已选协议B",
  183. "register.selectedProtocol.C": "已选协议C",
  184. "register.selectedProtocol.remove": "移除",
  185. "outputTable.name": "病人姓名",
  186. "outputTable.id": "病人ID",
  187. "outputTable.priority": "优先级",
  188. "outputTable.status": "状态",
  189. "outputTable.retryCount": "重试次数",
  190. "outputTable.target": "目标",
  191. "outputAction.retry": "重试",
  192. "outputAction.delete": "删除",
  193. "bin.diskCapacity": "磁盘容量:",
  194. "bin.freeSpace": "剩余空间:",
  195. "bin.binCapacity": "回收站容量:",
  196. "bin.delete": "删除",
  197. "bin.restore": "恢复",
  198. "bin.empty": "清空",
  199. "dicomNodeDetail.title": "DICOM节点详情",
  200. "dicomNodeDetail.nodeList": "DICOM节点列表",
  201. "dicomNodeDetail.selectNode": "请选择DICOM节点",
  202. "dicomNodeDetail.host": "主机名称",
  203. "dicomNodeDetail.ip": "主机IP",
  204. "dicomNodeDetail.port": "主机端口",
  205. "dicomNodeDetail.calledAET": "被叫实体名",
  206. "dicomNodeDetail.callingAET": "主叫实体名",
  207. "dicomNodeDetail.testConnection": "测试连接状态",
  208. "dicomNodeDetail.archive": "归档",
  209. "actionPanel.deleteTask": "删除检查任务",
  210. "actionPanel.editPatient": "编辑患者信息",
  211. "actionPanel.lockTask": "锁定任务",
  212. "actionPanel.risSync": "RIS同步",
  213. "actionPanel.reRegister": "再登记",
  214. "actionPanel.saveLocal": "保存本地",
  215. "actionPanel.importXLS": "从XLS导入",
  216. "actionPanel.sortList": "列表排序",
  217. "actionPanel.cloudShare": "云分享",
  218. "actionPanel.imageExchange": "图像交换",
  219. "actionPanel.qrPrint": "二维码打印",
  220. "actionPanel.send": "发送",
  221. "actionPanel.burn": "刻录",
  222. "actionPanel.export": "导出",
  223. "actionPanel.import": "导入",
  224. "actionPanel.showReport": "显示报告",
  225. "Small": "小",
  226. "Medium": "中",
  227. "Large": "大",
  228. "workstation.free": "自由位",
  229. "workstation.direct": "传统位",
  230. "workstation.table": "卧位",
  231. "workstation.wall": "立位",
  232. "register.patientSize": "患者体型",
  233. "register.patientSize.placeholder": "请输入患者体型",
  234. "animal.register.patientSize": "宠物体型",
  235. "animal.register.patientSize.placeholder": "请输入宠物体型",
  236. "register.sexNeutered": "绝育情况",
  237. "register.sexNeutered.placeholder": "请输入绝育情况",
  238. "register.sexNeutered.altered": "绝育",
  239. "register.sexNeutered.unaltered": "未绝育",
  240. "register.chipNumber": "芯片编号",
  241. "register.chipNumber.placeholder": "请输入芯片编号",
  242. "register.variety": "品种",
  243. "register.variety.placeholder": "请输入品种",
  244. "register.patientType": "患者类型",
  245. "register.patientType.placeholder": "请输入患者类型",
  246. "register.operatorId": "操作员ID",
  247. "register.operatorId.placeholder": "请输入操作员ID",
  248. "register.modality": "物理疗法",
  249. "register.modality.placeholder": "请输入物理疗法",
  250. "register.thickness": "厚度",
  251. "register.studyType": "检查类型",
  252. "register.studyType.placeholder": "请输入检查类型",
  253. "register.comment": "备注",
  254. "register.comment.placeholder": "请输入备注",
  255. "register.cat": "猫",
  256. "register.dog": "狗",
  257. "register.equine": "马",
  258. "register.lizard": "蜥蜴",
  259. "register.birds": "鸟类",
  260. "register.rabbit": "兔",
  261. "register.snake": "蛇",
  262. "register.turtle": "龟",
  263. "register.gnawer": "啮齿类",
  264. "worklistTable.StudyInstanceUID": "检查实例UID",
  265. "worklistTable.StudyID": "检查ID",
  266. "worklistTable.SpecificCharacterSet": "特定字符集",
  267. "worklistTable.AccessionNumber": "登记号",
  268. "worklistTable.PatientID": "患者ID",
  269. "worklistTable.PatientName": "患者姓名",
  270. "worklistTable.DisplayPatientName": "显示患者姓名",
  271. "worklistTable.PatientSize": "患者体型",
  272. "worklistTable.PatientAge": "患者年龄",
  273. "worklistTable.PatientSex": "患者性别",
  274. "animal.worklistTable.PatientID": "宠物ID",
  275. "animal.worklistTable.PatientName": "宠物昵称",
  276. "animal.worklistTable.PatientAge": "宠物年龄",
  277. "animal.worklistTable.PatientSex": "宠物性别",
  278. "worklistTable.AdmittingTime": "入院时间",
  279. "worklistTable.RegSource": "登记来源",
  280. "worklistTable.StudyStatus": "检查状态",
  281. "worklistTable.RequestedProcedureID": "请求的程序ID",
  282. "worklistTable.PerformedProtocolCodeValue": "执行的协议代码值",
  283. "worklistTable.PerformedProtocolCodeMeaning": "执行的协议代码含义",
  284. "worklistTable.PerformedProcedureStepID": "执行的程序步骤ID",
  285. "worklistTable.StudyDescription": "检查描述",
  286. "worklistTable.StudyStartDatetime": "检查开始日期时间",
  287. "worklistTable.ScheduledProcedureStepStartDate": "计划的程序步骤开始日期",
  288. "worklistTable.StudyLock": "检查锁定",
  289. "worklistTable.OperatorID": "操作员ID",
  290. "worklistTable.Modality": "模态",
  291. "worklistTable.Views": "视图",
  292. "worklistTable.Thickness": "厚度",
  293. "worklistTable.PatientType": "患者类型",
  294. "worklistTable.StudyType": "检查类型",
  295. "worklistTable.QRCode": "二维码",
  296. "worklistTable.IsExported": "是否已导出",
  297. "worklistTable.IsEdited": "是否已编辑",
  298. "worklistTable.WorkRef": "工作参考",
  299. "worklistTable.IsAppended": "是否已附加",
  300. "worklistTable.CreationTime": "创建时间",
  301. "worklistTable.MappedStatus": "映射状态",
  302. "worklistTable.IsDelete": "是否已删除",
  303. "login.username": "用户名",
  304. "login.username.placeholder": "请输入用户名",
  305. "login.username.required": "请输入用户名",
  306. "login.password": "密码",
  307. "login.password.placeholder": "请输入密码",
  308. "login.password.required": "请输入密码",
  309. "login.submit": "登录",
  310. "login.emergency": "急诊",
  311. "login.success": "登录成功",
  312. "login.failed": "登录失败",
  313. "login.failedDetail": ",详情:",
  314. "login.networkError": ",网络错误:",
  315. "login.unknownError": "未知错误",
  316. "login.emergency.success": "急诊模式启动成功",
  317. "login.emergency.failed": "急诊操作失败:",
  318. "nav.config": "配置",
  319. "nav.logout": "退出",
  320. "register.filter.protocol": "协议",
  321. "register.filter.view": "体位",
  322. "register.register": "注册",
  323. "register.exam": "检查",
  324. "register.no.views": "暂无可选择体位",
  325. "state.quota": "配额",
  326. "exam.close.aec": "关闭 AEC",
  327. "exam.open.aec": "打开 AEC",
  328. "exam.thinkness": "厚度",
  329. "exam.exposure.mode": "曝光模式",
  330. "exam.bodysize.placeholder": "选择体型",
  331. "exam.thickness.label": "厚度 (cm)",
  332. "exam.thickness.placeholder": "厚度",
  333. "exam.exposureMode.label": "曝光模式",
  334. "exam.exposureMode.placeholder": "选择曝光模式",
  335. "exam.aec.enabled": "开启AEC",
  336. "exam.aec.disabled": "关闭AEC",
  337. "exam.action.resetParams": "重置参数",
  338. "exam.action.deletePosition": "删除选择的体位",
  339. "exam.action.copyPosition": "复制选择的体位",
  340. "exam.action.saveParams": "保存参数",
  341. "exam.action.toggleCamera": "打开/关闭摄像头",
  342. "exam.action.reject": "拒绝",
  343. "exam.action.restore": "恢复",
  344. "exam.action.addMorePositions": "添加更多体位"
  345. } : {
  346. greeting: 'Hello, world!',
  347. name: 'John Doe',
  348. patient: 'Patient Management',
  349. register: 'Register',
  350. tasklist: 'Task List',
  351. historylist: 'History List',
  352. archivelist: 'Archive List',
  353. bin: 'Recycle Bin',
  354. outputlist: 'Transfer List',
  355. exam: 'Examination',
  356. examlist: 'Examination List',
  357. process: 'Process',
  358. print: 'Print',
  359. printlist: 'Print List',
  360. worklist: 'Task List',
  361. 'worklist.operationPanel': 'Operation Panel',
  362. 'register.basicInfoPanel': 'Basic Information Form Area',
  363. 'register.protocolListPanel': 'Protocol Selection List Area',
  364. 'register.selectedProtocolListPanel': 'Selected Protocol List Area',
  365. 'worklistTable.patientId': 'Patient ID',
  366. 'worklistTable.name': 'Patient Name',
  367. 'register.patientId': 'Patient ID',
  368. 'register.patientName': 'Patient Name',
  369. 'register.gender': 'Gender',
  370. 'register.gender.male': 'Male',
  371. 'register.gender.female': 'Female',
  372. // Login page
  373. 'login.username': 'Username',
  374. 'login.username.placeholder': 'Enter username',
  375. 'login.username.required': 'Please enter username',
  376. 'login.password': 'Password',
  377. 'login.password.placeholder': 'Enter password',
  378. 'login.password.required': 'Please enter password',
  379. 'login.submit': 'Login',
  380. 'login.emergency': 'Emergency',
  381. 'login.success': 'Login successful',
  382. 'login.failed': 'Login failed',
  383. 'login.failedDetail': ', details: ',
  384. 'login.networkError': ', network error: ',
  385. 'login.unknownError': 'Unknown error',
  386. 'login.emergency.success': 'Emergency mode activated successfully',
  387. 'login.emergency.failed': 'Emergency operation failed: '
  388. };
  389. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  390. req.reply({
  391. statusCode: 200,
  392. body: mockData
  393. });
  394. }).as(`getI18n${locale.toUpperCase()}Success`);
  395. }
  396. // 封装获取多语言资源失败的 mock (404错误)
  397. export function mockI18nError(locale: 'zh_CN' | 'en_US') {
  398. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  399. req.reply({
  400. statusCode: 404,
  401. body: {
  402. message: 'Not Found',
  403. error: 'Translation file not found'
  404. }
  405. });
  406. }).as(`getI18n${locale.toUpperCase()}Error`);
  407. }
  408. // 封装获取多语言资源服务器错误的 mock (500错误)
  409. export function mockI18nServerError(locale: 'zh_CN' | 'en_US') {
  410. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  411. req.reply({
  412. statusCode: 500,
  413. body: {
  414. message: 'Internal Server Error',
  415. error: 'Server error occurred'
  416. }
  417. });
  418. }).as(`getI18n${locale.toUpperCase()}ServerError`);
  419. }
  420. // 封装获取多语言资源超时的 mock
  421. export function mockI18nTimeout(locale: 'zh_CN' | 'en_US') {
  422. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  423. req.reply({
  424. delay: 30000, // 30秒延迟,模拟超时
  425. statusCode: 200,
  426. body: {}
  427. });
  428. }).as(`getI18n${locale.toUpperCase()}Timeout`);
  429. }
  430. // 封装获取多语言资源格式错误的 mock
  431. export function mockI18nInvalidFormat(locale: 'zh_CN' | 'en_US') {
  432. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  433. req.reply({
  434. statusCode: 200,
  435. body: "invalid json format" // 返回非JSON格式数据
  436. });
  437. }).as(`getI18n${locale.toUpperCase()}InvalidFormat`);
  438. }
  439. // 封装获取多语言资源空数据的 mock
  440. export function mockI18nEmptyData(locale: 'zh_CN' | 'en_US') {
  441. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  442. req.reply({
  443. statusCode: 200,
  444. body: {} // 返回空对象
  445. });
  446. }).as(`getI18n${locale.toUpperCase()}EmptyData`);
  447. }
  448. // 封装获取多语言资源网络错误的 mock
  449. export function mockI18nNetworkError(locale: 'zh_CN' | 'en_US') {
  450. cy.intercept('GET', `/dr/api/v1/pub/trans/${locale}/${locale.split('_')[0]}.js`, (req) => {
  451. req.reply({
  452. forceNetworkError: true
  453. });
  454. }).as(`getI18n${locale.toUpperCase()}NetworkError`);
  455. }
  456. // 封装软件信息API的 mock,避免影响页面加载
  457. export function mockSoftwareInfo(locale: 'zh_CN' | 'en_US' = 'zh_CN') {
  458. cy.intercept('GET', '/dr/api/v1/pub/software_info', (req) => {
  459. req.reply({
  460. statusCode: 200,
  461. body: {
  462. code: "0x000000",
  463. data: {
  464. FPD: "Physics",
  465. GEN: "Physics",
  466. current_locale: locale,
  467. default_locale: "zh_CN",
  468. guest: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjA0OTc2NDksImlkIjoyLCJuYW1lIjoiZ3Vlc3QifQ.hUV5_GOzlWKDeFioJCsHMG2IXa0oJPfNNlPsr69ypqc",
  469. language: ["en", "zh"],
  470. product: "VETDROS",
  471. server: {
  472. auth: {
  473. build: "2025-10-08 11:06:08",
  474. desc: "Authentication Server repo",
  475. submodule: ["0baa8db0[rpc_idl]"],
  476. version: "0.4.0-21-g4a37cc7"
  477. },
  478. dcmtk: {
  479. build: "2025-09-29 16:35:39",
  480. desc: "Dcmtk Server repo",
  481. submodule: ["c2039235[rpc_idl]"],
  482. version: "0.4.0-2-g36bc18f"
  483. },
  484. imgProc: {
  485. build: "2025-09-29 16:36:36",
  486. desc: "Img Proc Server repo",
  487. submodule: [
  488. "d00bfca5[auto_wwwl]",
  489. "89fd9218[collimator_circle]",
  490. "c9582bbe[collimator_rect]",
  491. "98c510bd[enhance]",
  492. "6f9bf7de[enhance_v3]",
  493. "5905e001[rpc_idl]"
  494. ],
  495. version: "0.4.0-7-gca1c8a4"
  496. },
  497. protocol: {
  498. build: "2025-10-08 11:06:13",
  499. desc: "Protocol Server repo",
  500. submodule: ["0baa8db0[rpc_idl]"],
  501. version: "0.4.0-8-g47990eb"
  502. },
  503. resource: {
  504. build: "2025-10-08 11:06:17",
  505. desc: "Resource Server repo",
  506. submodule: ["9725e654[rpc_idl]"],
  507. version: "0.4.0-9-g10766e8"
  508. },
  509. study: {
  510. build: "2025-10-08 11:06:15",
  511. desc: "Study Server repo",
  512. submodule: ["8595ea2d[rpc_idl]"],
  513. version: "0.5.0-1-g7620712"
  514. },
  515. task: {
  516. build: "2025-10-08 11:06:19",
  517. desc: "Task Server repo",
  518. submodule: ["8595ea2d[rpc_idl]"],
  519. version: "0.4.0-11-g494849d"
  520. }
  521. },
  522. sn: "19d5d2eb-8b720370-7d617b19-670dd1ae"
  523. },
  524. description: "Success",
  525. solution: ""
  526. }
  527. });
  528. }).as('getSoftwareInfo');
  529. }
  530. // 封装logger API的 mock,避免影响页面加载
  531. export function mockLogger() {
  532. cy.intercept('POST', '/log', (req) => {
  533. req.reply({
  534. statusCode: 204, // No Content - 更适合日志请求,不会被误认为页面导航
  535. body: null, // 明确返回 null,避免任何可能的页面影响
  536. headers: {
  537. 'content-type': 'application/json',
  538. 'cache-control': 'no-cache'
  539. }
  540. });
  541. }).as('postLog');
  542. }
  543. // 封装所有必要的API mock,避免影响页面加载
  544. export function mockAllRequiredAPIs(locale: 'zh_CN' | 'en_US' = 'zh_CN') {
  545. mockSoftwareInfo(locale);
  546. mockLogger();
  547. }