178 lines
8.5 KiB
JavaScript
178 lines
8.5 KiB
JavaScript
// 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 }),
|
||
|
||
// 文件服务相关接口
|
||
// 保留一个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),
|
||
},
|
||
});
|