exam11/background/preload.js
2025-09-14 11:24:26 +08:00

188 lines
9.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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),
// 试卷管理相关接口
paperGetAll: () => ipcRenderer.invoke('paper-get-all'),
paperGetById: (paperId) => ipcRenderer.invoke('paper-get-by-id', paperId),
paperGetByExamineeId: (examineeId) => ipcRenderer.invoke('paper-get-by-examinee-id', examineeId),
paperGetByStatus: (status) => ipcRenderer.invoke('paper-get-by-status', status),
// 新增获取可执行文件路径的API
getExePath: () => ipcRenderer.invoke("get-exe-path"),
// 添加文件打开API
fileOpenFile: (filePath) => ipcRenderer.invoke("file-open-file", filePath),
// 新增获取数据库路径的API
getDatabasePaths: () => ipcRenderer.invoke("get-database-paths"),
// 保留原有的ipcRenderer接口确保兼容性
ipcRenderer: {
invoke: (channel, data) => ipcRenderer.invoke(channel, data),
},
});
// 也保留原来的electron对象确保现有功能正常
contextBridge.exposeInMainWorld("electron", {
ipcRenderer: {
invoke: (channel, data) => ipcRenderer.invoke(channel, data),
},
});