// Preload script runs in a context that has access to both Node.js and browser APIs const { contextBridge, ipcRenderer } = require("electron"); // 暴露API给渲染进程 contextBridge.exposeInMainWorld("electronAPI", { // 数据库相关 checkDatabaseInitialized: () => ipcRenderer.invoke("check-database-initialized"), initializeDatabase: () => ipcRenderer.invoke("initialize-database"), // 添加检查user.db是否存在的API checkUserDbExists: () => ipcRenderer.invoke("checkUserDbExists"), // 添加静默初始化用户数据库的API initializeUserDatabaseSilently: () => ipcRenderer.invoke("initializeUserDatabaseSilently"), // 配置服务相关接口 adminLogin: (credentials) => ipcRenderer.invoke("admin-login", credentials), systemGetConfig: () => ipcRenderer.invoke("system-get-config"), systemUpdateConfig: (config) => ipcRenderer.invoke("system-update-config", config), systemIncreaseQuestionBankVersion: () => ipcRenderer.invoke("system-increase-question-band-version"), configFetchAll: () => ipcRenderer.invoke("config-fetch-all"), configFetchById: (id) => ipcRenderer.invoke("config-fetch-by-id", id), configSave: (key, value) => ipcRenderer.invoke("config-save", { key, value }), configDelete: (id) => ipcRenderer.invoke("config-delete", id), // 字典服务相关接口 dictFetchTypes: () => ipcRenderer.invoke("dict-fetch-types"), dictFetchItemsByType: (typeCode, isActive = undefined) => ipcRenderer.invoke("dict-fetch-items-by-type", typeCode, isActive), dictCreateType: (dictType) => ipcRenderer.invoke("dict-create-type", dictType), dictUpdateType: (dictType) => ipcRenderer.invoke("dict-update-type", dictType), dictDeleteType: (typeCode) => ipcRenderer.invoke("dict-delete-type", typeCode), dictCreateItem: (dictItem) => ipcRenderer.invoke("dict-create-item", dictItem), dictUpdateItem: (dictItem) => ipcRenderer.invoke("dict-update-item", dictItem), dictDeleteItem: (id) => ipcRenderer.invoke("dict-delete-item", id), dictFetchAllItemsWithTypes: () => ipcRenderer.invoke("dict-fetch-all-items-with-types"), dictCheckParentCode: (parentCode) => ipcRenderer.invoke("dict-check-parent-code", parentCode), dictCheckChildReferences: (itemCode) => ipcRenderer.invoke("dict-check-child-references", itemCode), // 试题服务相关接口 questionCreate: (questionData) => ipcRenderer.invoke("question-create", questionData), questionFetchAll: () => ipcRenderer.invoke("question-fetch-all"), questionFetchAllWithRelations: () => ipcRenderer.invoke("question-fetch-all-with-relations"), questionUpdateDescription: (questionData) => ipcRenderer.invoke("question-update-description", questionData), questionAddChoice: (choiceData) => ipcRenderer.invoke("question-add-choice", choiceData), // 修改questionUpdateChoice方法,使其接收两个参数并正确传递 questionUpdateChoice: (id, choiceData) => ipcRenderer.invoke("question-update-choice", id, choiceData), questionDeleteChoice: (id) => ipcRenderer.invoke("question-delete-choice", id), // 添加questionCreateChoice方法,调用主进程中已注册的'question-create-choice'通道 questionCreateChoice: (choiceData) => ipcRenderer.invoke("question-create-choice", choiceData), questionAddFillBlank: (fillBlankData) => ipcRenderer.invoke("question-add-fill-blank", fillBlankData), // 添加新的questionCreateFillBlank方法,调用主进程中已注册的'question-create-fill-blank'通道 questionCreateFillBlank: (fillBlankData) => ipcRenderer.invoke("question-create-fill-blank", fillBlankData), // 修改questionUpdateFillBlank方法,使其接收两个参数并正确传递 questionUpdateFillBlank: (id, fillBlankData) => ipcRenderer.invoke("question-update-fill-blank", id, fillBlankData), questionDeleteFillBlank: (id) => ipcRenderer.invoke("question-delete-fill-blank", id), questionGetQuestionWithChoices: (questionId) => ipcRenderer.invoke("question-get-question-with-choices", questionId), questionGetQuestionWithFillBlanks: (questionId) => ipcRenderer.invoke("question-get-question-with-fill-blanks", questionId), questionRemove: (questionId) => ipcRenderer.invoke("question-remove", questionId), // 添加新的questionDelete方法,调用主进程中已注册的'question-delete'通道 questionDelete: (questionId) => ipcRenderer.invoke("question-delete", questionId), // 修改后 questionGetStatistics: () => ipcRenderer.invoke("question-get-count-and-score"), questionGetQuestionById: (questionId) => ipcRenderer.invoke("question-get-question-by-id", questionId), // 考试服务相关接口 examCreate: (examData) => ipcRenderer.invoke("exam-create", examData), examUpdate: (id, examData) => ipcRenderer.invoke("exam-update", { id, examData }), examFetchLast: () => ipcRenderer.invoke("exam-fetch-last"), examFetchAll: () => ipcRenderer.invoke("exam-fetch-all"), examFetchById: (id) => ipcRenderer.invoke("exam-fetch-by-id", id), examDelete: (id) => ipcRenderer.invoke("exam-delete", id), // 考生服务相关接口 examineeFetchAll: () => ipcRenderer.invoke("examinee-fetch-all"), userLogin: ({ idCard, admissionTicket }) => ipcRenderer.invoke("user-login", { idCard, admissionTicket }), examineeFetchById: (id) => ipcRenderer.invoke("examinee-fetch-by-id", id), examineeCreate: (examineeData) => ipcRenderer.invoke("examinee-create", examineeData), examineeUpdate: (id, examineeData) => ipcRenderer.invoke("examinee-update", { id, examineeData }), examineeDelete: (id) => ipcRenderer.invoke("examinee-delete", id), // 在"考生考试服务相关接口"部分添加getPaper接口 examingGetPaper: ({ paperId }) => ipcRenderer.invoke("examing-get-paper", { paperId }), // 在考生考试服务相关接口 examingGeneratePaper: ({ examineeId, examId }) => ipcRenderer.invoke("examing-generate-paper", { examineeId, examId }), examingGetPaperStatus: ({ examineeId, examId }) => ipcRenderer.invoke("examing-get-paper-status", { examineeId, examId }), examingUpdatePaperStatus: ({ paperId, status }) => ipcRenderer.invoke("examing-update-paper-status", { paperId, status }), examingLoadPaperSerial: ({ paperId }) => ipcRenderer.invoke("examing-load-paper-serial", { paperId }), examingGetQuestionByRelatedId: ({ tableName, relatedId }) => ipcRenderer.invoke("examing-get-question-by-related-id", { tableName, relatedId, }), examingUpdateAnswer: ({ tableName, id, answers }) => ipcRenderer.invoke("examing-update-answer", { tableName, id, answers }), examingStartPaper: ({ paperId }) => ipcRenderer.invoke("examing-start-paper", { paperId }), examingSubmitPaper: ({ paperId, duration_seconds = 0 }) => ipcRenderer.invoke("examing-submit-paper", { paperId, duration_seconds }), examingGetExamResult: ({ paperId }) => ipcRenderer.invoke("examing-get-exam-result", { paperId }), examingCheckPaperAnswers: ({ paperId }) => ipcRenderer.invoke("examing-check-paper-answers", { paperId }), examingProcessPaper: ({ paperId, duration_seconds = 0 }) => ipcRenderer.invoke("examing-process-paper", { paperId, duration_seconds }), examingGetExamineePaper: ({ examineeId }) => ipcRenderer.invoke("examing-get-examinee-paper", { examineeId }), // 继续考试接口 examingContinuePaper: ({ paperId }) => ipcRenderer.invoke("examing-continue-paper", { paperId }), // 新增:结束考试接口 examingEndPaper: ({ paperId }) => ipcRenderer.invoke("examing-end-paper", { paperId }), // 新增:清理试卷数据接口 examingClearPaper: ({ paperId }) => ipcRenderer.invoke("examing-clear-paper", { paperId }), // 文件服务相关接口 // 保留一个fileGeneratePaperPdf定义,移除重复的 fileGeneratePaperPdf: (jsonString) => ipcRenderer.invoke("file-generate-paper-pdf", jsonString), fileTest: () => ipcRenderer.invoke("file-test"), fileGeneratePdf: (pdfData, fileName) => ipcRenderer.invoke("file-generate-pdf", pdfData, fileName), fileCopyToDesktop: (filePath) => ipcRenderer.invoke("file-copy-to-desktop", filePath), // 保留原有的ipcRenderer接口,确保兼容性 ipcRenderer: { invoke: (channel, data) => ipcRenderer.invoke(channel, data), }, // 新增:获取可执行文件路径的API getExePath: () => ipcRenderer.invoke("get-exe-path"), // 新增:获取数据库路径的API getDatabasePaths: () => ipcRenderer.invoke("get-database-paths"), }); // 也保留原来的electron对象,确保现有功能正常 contextBridge.exposeInMainWorld("electron", { ipcRenderer: { invoke: (channel, data) => ipcRenderer.invoke(channel, data), }, });