diff --git a/.env.development b/.env.development index d4989df..df0b713 100644 --- a/.env.development +++ b/.env.development @@ -10,6 +10,7 @@ VITE_APP_BASE_API = '/dev-api' VITE_APP_DOMAIN = 'file.ysaix.com' VITE_APP_UPLOAD_API = 'https://file.ysaix.com:7868/prod-api' +#VITE_APP_UPLOAD_API = 'http://192.168.2.52:7863' VITE_APP_RES_FILE_PATH = 'https://file.ysaix.com:7868/src/assets/textbook/booktxt/' diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 55db58d..517a19c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -10,6 +10,7 @@ module.exports = { ], rules: { 'vue/require-default-prop': 'off', - 'vue/multi-word-component-names': 'off' + 'vue/multi-word-component-names': 'off', + 'prettier/prettier': 'off' } } diff --git a/electron.vite.config.mjs b/electron.vite.config.mjs index 74db0cc..18b8cea 100644 --- a/electron.vite.config.mjs +++ b/electron.vite.config.mjs @@ -25,6 +25,7 @@ export default defineConfig({ proxy: { '/dev-api': { target: 'http://27.128.240.72:7865', + // target: 'http://36.134.181.164:7863', // target: 'http://192.168.2.52:7863', changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') diff --git a/package.json b/package.json index f070ac6..bc6282a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aix-win", - "version": "1.1.6", + "version": "2.0.2", "description": "An Electron application with Vue", "main": "./out/main/index.js", "author": "example.com", @@ -25,24 +25,31 @@ "@electron/remote": "^2.1.2", "@element-plus/icons-vue": "^2.3.1", "@vitejs/plugin-vue-jsx": "^4.0.0", + "@vue-office/docx": "^1.6.2", + "@vue-office/excel": "^1.7.11", + "@vue-office/pdf": "^2.0.2", "@vueuse/core": "^10.11.0", + "circular-json": "^0.5.9", "cropperjs": "^1.6.2", "crypto-js": "^4.2.0", + "echarts": "^5.5.1", "electron-dl-manager": "^3.0.0", "electron-log": "^5.1.7", "electron-store": "8.0.0", "electron-updater": "^6.1.7", + "element-china-area-data": "^6.1.0", "element-plus": "^2.7.6", "fabric": "^5.3.0", + "im_electron_sdk": "^8.0.5904", "js-cookie": "^3.0.5", "jsencrypt": "^3.3.2", "jsondiffpatch": "0.6.0", - "im_electron_sdk": "^8.0.5904", "lodash": "^4.17.21", "pdfjs-dist": "4.4.168", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", "spark-md5": "^3.0.2", + "vue-qr": "^4.0.9", "vue-router": "^4.4.0", "xgplayer": "^3.0.19", "xlsx": "^0.18.5" diff --git a/src/main/file.js b/src/main/file.js index ddabb2c..58ee5ec 100644 --- a/src/main/file.js +++ b/src/main/file.js @@ -224,7 +224,7 @@ export default async function ({ app, shell, BrowserWindow, ipcMain }) { formData.append(key, uploadData[key]) } } - formData.append('fileFlag', '教案') + formData.append('fileFlag', '课件') uploadFileByFS({ url: uploadUrl, path, diff --git a/src/main/index.js b/src/main/index.js index e4559b2..ac96916 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -53,7 +53,7 @@ function createLoginWindow() { updateInit(loginWindow) } - // loginWindow.webContents.openDevTools() + loginWindow.webContents.openDevTools() loginWindow.once('ready-to-show', () => { loginWindow.show() }) @@ -68,7 +68,7 @@ function createLoginWindow() { function createMainWindow() { mainWindow = new BrowserWindow({ width: 1200, - minWidth: 1200, + minWidth: 1350, height: 700, show: false, frame: false, // 无边框 @@ -133,7 +133,7 @@ async function createLinkWin(data) { contextIsolation: true } }) - linkWin[data.key].type = 'link' // 唯一标识 + linkWin[data.key].type = 'link'+data.key // 唯一标识 let cookieDetails = { ...data.cookieData } await linkWin[data.key].webContents.session.cookies @@ -142,9 +142,9 @@ async function createLinkWin(data) { .catch((error) => {}) data.fullPath = data.fullPath.replaceAll('//', '/') if (data.fullPath.indexOf('?') !== -1) { - data.fullPath += '&urlSource=smarttalk' + data.fullPath += '&urlSource=smarttalk&t' + Date.now() }else { - data.fullPath += '?urlSource=smarttalk' + data.fullPath += '?urlSource=smarttalk&t' + Date.now() } linkWin[data.key].loadURL(data.fullPath) @@ -297,4 +297,4 @@ function appWatchError() { app.on('child-process-gone', async (event, details) => { console.error(`APP-ERROR:child-process-gone; event: ${JSON.stringify(event)}; details:${JSON.stringify(details)}`) }) -} \ No newline at end of file +} diff --git a/src/renderer/public/img/logo.png b/src/renderer/public/img/logo.png new file mode 100644 index 0000000..45f6e65 Binary files /dev/null and b/src/renderer/public/img/logo.png differ diff --git a/src/renderer/src/api/ai/index.js b/src/renderer/src/api/ai/index.js new file mode 100644 index 0000000..ef5cfd6 --- /dev/null +++ b/src/renderer/src/api/ai/index.js @@ -0,0 +1,20 @@ +import request from '@/utils/request' + +// 创建对话 +export const createChart = ({ headers, data }) => { + return request({ + url: '/qf/createChart', + method: 'post', + headers, + data, + }) +} +// 大模型对话 +export const sendChart = ({ headers, data }) => { + return request({ + url: '/qf/sendTalk', + method: 'post', + headers, + data, + }) +} \ No newline at end of file diff --git a/src/renderer/src/api/classManage/index.js b/src/renderer/src/api/classManage/index.js index 14471ee..6b82a81 100644 --- a/src/renderer/src/api/classManage/index.js +++ b/src/renderer/src/api/classManage/index.js @@ -187,3 +187,14 @@ export function getClassInfo(id) { params: {id} }) } +//加入班级 +export function addClasses(data) { + return request({ + url: '/smarttalk/audit/applyAddClass', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} diff --git a/src/renderer/src/api/classTask/index.js b/src/renderer/src/api/classTask/index.js new file mode 100644 index 0000000..61154ff --- /dev/null +++ b/src/renderer/src/api/classTask/index.js @@ -0,0 +1,64 @@ +// 查询evaluation列表 +import request from '@/utils/request' + +// 查询作业列表 +export function listByDeadDate(query) { + return request({ + url: '/education/classwork/listByDeadDate', + method: 'get', + params: query + }) +} +//多个班级学生作业数据 +export function listClassworkdataByDeadDate(query) { + return request({ + url: '/education/classworkdata/listByDeadDate', + method: 'get', + params: query + }) +} + +// 查询classworkdata列表 班级作业列表 +export function listClassworkdata(query) { + return request({ + url: '/education/classworkdata/list', + method: 'get', + params: query + }) +} + +// 查询entpcoursework列表 课程作业列表 +export function listEntpcoursework(query) { + return request({ + url: '/education/entpcoursework/list', + method: 'get', + params: query + }) +} + +// 查询classworkeval列表 课堂作业列表 +export function listClassworkeval(query) { + return request({ + url: '/education/classworkeval/list', + method: 'get', + params: query + }) +} + +// 修改classworkeval +export function updateClassworkeval(data) { + return request({ + url: '/education/classworkeval', + method: 'put', + data: data + }) +} + +// 修改classworkdata +export function updateClassworkdata(data) { + return request({ + url: '/education/classworkdata', + method: 'put', + data: data + }) +} diff --git a/src/renderer/src/api/education/entpCourseWork.js b/src/renderer/src/api/education/entpCourseWork.js new file mode 100644 index 0000000..0ba694c --- /dev/null +++ b/src/renderer/src/api/education/entpCourseWork.js @@ -0,0 +1,111 @@ +import request from '@/utils/request' + +// 查询entpcoursework列表 +export function listEntpcoursework(query) { + return request({ + url: '/education/entpcoursework/list', + method: 'get', + params: query + }) +} + +// 查询entpcoursework详细 +export function getEntpcoursework(id) { + return request({ + url: '/education/entpcoursework/' + id, + method: 'get' + }) +} + +// 新增entpcoursework +export function addEntpcoursework(data) { + return request({ + url: '/education/entpcoursework', + method: 'post', + data: data + }) +} + +// 修改entpcoursework +export function updateEntpcoursework(data) { + return request({ + url: '/education/entpcoursework', + method: 'put', + data: data + }) +} + +// 删除entpcoursework +export function delEntpcoursework(id) { + return request({ + url: '/education/entpcoursework/' + id, + method: 'delete' + }) +} + + +// xuekubaoapi +export function xuekubaoAPI(data) { + return request({ + url: '/education/entpcoursework/xuekubaoapi', + method: 'post', + data: data + }) +} + +// PPT文件上传 +export function uploadEntpcourseworkFile(data) { + return request({ + url: '/education/entpcoursework/uploadWord', + method: 'post', + data: data + }) +} + + +// 查询entpcoursework列表 +export function listEntpcourseworkNew(query) { + return request({ + url: '/education/entpcoursework/new/list', + method: 'get', + params: query + }) +} + + +/** + * @desc: 学科网接口api + * @return: {*} + * @param {*} path 请求路径 /xopqbm/questions(无需全拼, 后端学科网sdk自动处理) + * @param {*} method 请求方式 post/get + * @param {*} params 请求参数 {key: value,} + */ +export function xkwAPI(path, method, isPostBody, params) { + return request({ + url: '/xkw/post', + method: 'post', + data: { + path: path, + method: method, + isPostBody: isPostBody, + params: params, + } + }) +} + +/** + * @desc: 图文识别接口 python_OCR_api + * @return: {*} + * @param {*} path 请求路径 /ocrApi/data + * @param {*} method 请求方式 post + * @param {*} params 请求参数 {key: value,} + */ +export function pyOCRAPI(path) { + return request({ + url: '/ocrApi/data', + method: 'post', + data: { + imageBas64: path, + } + }) +} \ No newline at end of file diff --git a/src/renderer/src/api/education/entpcoursefile.js b/src/renderer/src/api/education/entpcoursefile.js new file mode 100644 index 0000000..c6c26c5 --- /dev/null +++ b/src/renderer/src/api/education/entpcoursefile.js @@ -0,0 +1,162 @@ +import request from '@/utils/request' + +// 查询entpcoursefile列表 +export function listEntpcoursefile(query) { + return request({ + url: '/education/entpcoursefile/list', + method: 'get', + params: query + }) +} +// zdg:查询entpcoursefile列表-新 +export function listEntpcoursefileNew(query) { + return request({ + url: '/education/entpcoursefile/new/list', + method: 'get', + params: query + }) +} +// 查询entpcoursefile详细 +export function getEntpcoursefile(id) { + return request({ + url: '/education/entpcoursefile/' + id, + method: 'get' + }) +} + +// 新增entpcoursefile +export function addEntpcoursefile(data) { + return request({ + url: '/education/entpcoursefile', + method: 'post', + data: data + }) +} + +// 新增entpcoursefile +export function addEntpcoursefileReturnId(data) { + return request({ + url: '/education/entpcoursefile/addReturnId', + method: 'post', + data: data + }) +} + + +// addFromId +export function addFromId(fromid, toid, entpid, entpcourseid, edituserid) { + return request({ + url: '/education/entpcoursefile/addFromId/'+fromid+'/'+toid+'/'+entpid+'/'+entpcourseid+'/'+edituserid, + method: 'post' + }) +} + +// 修改entpcoursefile +export function updateEntpcoursefile(data) { + return request({ + url: '/education/entpcoursefile', + method: 'put', + data: data + }) +} +// 新增 修改接口 +export function updateEntpcoursefileNew(data) { + return request({ + url: '/education/entpcoursefile/newUpdateFile', + method: 'post', + data: data + }) +} + +// updateFileByIds +export function updateFileByIds(data) { + return request({ + url: '/education/entpcoursefile/updateFileByIds', + method: 'post', + data: data + }) +} + +// updateFileByArray +export function updateFileByArray(data) { + return request({ + url: '/education/entpcoursefile/updateFileByArray', + method: 'post', + data: data + }) +} + +// 修改entpcoursefile +export function updateFile2Redis(data) { + return request({ + url: '/education/entpcoursefile/updateFile2Redis', + method: 'post', + data: data + }) +} + +// 删除entpcoursefile +export function delEntpcoursefile(id) { + return request({ + url: '/education/entpcoursefile/' + id, + method: 'delete' + }) +} + +// 保存base64图片,返回url +export function saveEntpCourseBase64File(data) { + return request({ + url: '/education/entpcoursefile/saveBase64File', + method: 'post', + data: data + }) +} + + +// 文件上传 +export function saveEntpCourseBase64File2(data) { + return request({ + url: '/education/entpcoursefile/saveBase64File2', + method: 'post', + data: data + }) +} + +// 保存PPT页面预览base64图片,返回url +export function savePPTPreviewBase64File(data) { + return request({ + url: '/education/entpcoursefile/savePreviewBase64', + method: 'post', + data: data + }) +} + + +// PPT文件上传 +export function saveEntpCoursePPT(data) { + return request({ + url: '/education/entpcoursefile/importPPT', + method: 'post', + data: data + }) +} + +// PPT文件解析 +export function parsePPT(data) { + return request({ + url: '/education/entpcoursefile/parsePPT', + method: 'post', + data: data + }) +} + + +// 修改ppt.slide.index +export function updateSlideIndex(data) { + return request({ + url: '/education/entpcoursefile/saveSlideOrder', + method: 'post', + data: data + }) +} + diff --git a/src/renderer/src/api/file/index.js b/src/renderer/src/api/file/index.js index 5bfe721..e655614 100644 --- a/src/renderer/src/api/file/index.js +++ b/src/renderer/src/api/file/index.js @@ -9,6 +9,14 @@ export const getSmarttalkPage = (params) => { }) } +export const creatAPT = (params) => { + return request({ + url: '/smarttalk/file/createApt', + method: 'post', + params + }) +} + export const getPrepareById = (id) => { return request({ url: '/smarttalk/file/' + id, diff --git a/src/renderer/src/api/login.js b/src/renderer/src/api/login.js index 649f59c..16c03cf 100644 --- a/src/renderer/src/api/login.js +++ b/src/renderer/src/api/login.js @@ -56,4 +56,77 @@ export function getCodeImg() { method: 'get', timeout: 20000 }) +} + +// 注册模块-生成人机验证 +export function captchaImg(data) { + return request({ + url: '/captchaImg', + headers: { + isToken: false + }, + method: 'get', + params: data + }) +} + +//注册模块-发送验证码 +export function sendCode(data) { + return request({ + url: '/smarttalk/register/authSendCode', + method: 'post', + data:data + }) +} + +//注册模块-申请注册 +export function signIn(data) { + return request({ + url: '/smarttalk/register/authSignIn', + method: 'post', + data:data + }) +} + +//登录模块-找回密码 +export function retrievePwd(data) { + return request({ + url: '/smarttalk/register/authRetrievePwd', + method: 'post', + data + }) +} + +//注册模块-获取学校 +export function deptTree(data) { + return request({ + url: '/smarttalk/register/authDeptTree', + method: 'get', + params:data + }) +} +// 查询部门详细 +export function getDept(query) { + return request({ + url: '/system/dept/detail', + method: 'get', + params: query + }) +} + +// 查询classmain列表 +export function listClassmain(query) { + return request({ + url: '/education/classmain/list', + method: 'get', + params: query + }) +} +// 查询evaluation列表 +export function listEvaluation(query) { + return request({ + url: '/smarttalk/register/authEvaluationList', + method: 'get', + params: query + }) } \ No newline at end of file diff --git a/src/renderer/src/api/teaching/classcourse.js b/src/renderer/src/api/teaching/classcourse.js new file mode 100644 index 0000000..665489c --- /dev/null +++ b/src/renderer/src/api/teaching/classcourse.js @@ -0,0 +1,89 @@ +import request from '@/utils/request' + +// 查询classcourse列表 +export function listClasscourse(query) { + return request({ + url: '/education/classcourse/list', + method: 'get', + params: query + }) +} + +// 查询classcourse详细 +export function getClasscourse(id) { + return request({ + url: '/education/classcourse/' + id, + method: 'get' + }) +} + +// 新增classcourse +export function addClasscourse(data) { + return request({ + url: '/education/classcourse', + method: 'post', + data: data + }) +} + +// 新增classcourse +export function addClasscourseReturnId(data) { + return request({ + url: '/education/classcourse/saveReturnId', + method: 'post', + data: data + }) +} + +// 修改classcourse +export function updateClasscourse(data) { + return request({ + url: '/education/classcourse', + method: 'put', + data: data + }) +} + +// 删除classcourse +export function delClasscourse(id) { + return request({ + url: '/education/classcourse/' + id, + method: 'delete' + }) +} + + +// 删除classcourse +export function delClasscourseWithData(id) { + return request({ + url: '/education/classcourse/removeData/' + id, + method: 'delete' + }) +} + + +// classcourse开始上课 +export function startCourseTeaching(id) { + return request({ + url: '/education/classcourse/startCourseTeaching/'+id, + method: 'post', + }) +} + +// 老师学生发送新的消息 +export function sendCourseTeachingMsg(data) { + return request({ + url: '/education/classcourse/sendCourseTeachingMsg', + method: 'post', + data: data + }) +} + +// 老师学生获取新的交互消息 +export function getCourseTeachingMsg(id) { + return request({ + url: '/education/classcourse/getCourseTeachingMsg/'+id, + method: 'post', + }) +} + diff --git a/src/renderer/src/assets/iconfont/iconfont.css b/src/renderer/src/assets/iconfont/iconfont.css index c1fab69..da8460e 100644 --- a/src/renderer/src/assets/iconfont/iconfont.css +++ b/src/renderer/src/assets/iconfont/iconfont.css @@ -1,9 +1,9 @@ @font-face { font-family: "iconfont"; /* Project id 2794390 */ - src: url('iconfont.woff2?t=1724212790213') format('woff2'), - url('iconfont.woff?t=1724212790213') format('woff'), - url('iconfont.ttf?t=1724212790213') format('truetype'), - url('iconfont.svg?t=1724212790213#iconfont') format('svg'); + src: url('iconfont.woff2?t=1725847033097') format('woff2'), + url('iconfont.woff?t=1725847033097') format('woff'), + url('iconfont.ttf?t=1725847033097') format('truetype'), + url('iconfont.svg?t=1725847033097#iconfont') format('svg'); } .iconfont { @@ -14,6 +14,38 @@ -moz-osx-font-smoothing: grayscale; } +.icon-aijiqiren:before { + content: "\e73c"; +} + +.icon-saoyisao:before { + content: "\e691"; +} + +.icon-jiaoxuezhiliangfenxi:before { + content: "\e690"; +} + +.icon-jiaoxuejihua:before { + content: "\e7e9"; +} + +.icon-tongji:before { + content: "\e68f"; +} + +.icon-pigai:before { + content: "\e68d"; +} + +.icon-jiaoxuefansi:before { + content: "\e6b2"; +} + +.icon-kaoshi:before { + content: "\e68a"; +} + .icon-yiwen:before { content: "\e687"; } diff --git a/src/renderer/src/assets/iconfont/iconfont.js b/src/renderer/src/assets/iconfont/iconfont.js index 2ad9df4..acf827f 100644 --- a/src/renderer/src/assets/iconfont/iconfont.js +++ b/src/renderer/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_2794390='',(c=>{var h=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var a,t,z,p,i,v=function(h,l){l.parentNode.insertBefore(h,l)};if(h&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}a=function(){var h,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_2794390,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(h=document.body).firstChild?v(l,h.firstChild):h.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),a()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(z=a,p=c.document,i=!1,d(),p.onreadystatechange=function(){"complete"==p.readyState&&(p.onreadystatechange=null,M())})}function M(){i||(i=!0,z())}function d(){try{p.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}M()}})(window); \ No newline at end of file +window._iconfont_svg_string_2794390='',(l=>{var c=(h=(h=document.getElementsByTagName("script"))[h.length-1]).getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var a,t,z,i,p,v=function(c,h){h.parentNode.insertBefore(c,h)};if(c&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}a=function(){var c,h=document.createElement("div");h.innerHTML=l._iconfont_svg_string_2794390,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(c=document.body).firstChild?v(h,c.firstChild):c.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),a()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(z=a,i=l.document,p=!1,d(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,M())})}function M(){p||(p=!0,z())}function d(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(d,50)}M()}})(window); \ No newline at end of file diff --git a/src/renderer/src/assets/iconfont/iconfont.json b/src/renderer/src/assets/iconfont/iconfont.json index 30d5f43..1536757 100644 --- a/src/renderer/src/assets/iconfont/iconfont.json +++ b/src/renderer/src/assets/iconfont/iconfont.json @@ -5,6 +5,62 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "34666608", + "name": "ai机器人", + "font_class": "aijiqiren", + "unicode": "e73c", + "unicode_decimal": 59196 + }, + { + "icon_id": "12657402", + "name": "资源库", + "font_class": "saoyisao", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "6513175", + "name": "教学质量分析", + "font_class": "jiaoxuezhiliangfenxi", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "38447338", + "name": "教学计划", + "font_class": "jiaoxuejihua", + "unicode": "e7e9", + "unicode_decimal": 59369 + }, + { + "icon_id": "8455509", + "name": "统计", + "font_class": "tongji", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "5969226", + "name": "批改", + "font_class": "pigai", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "36295514", + "name": "教学反思", + "font_class": "jiaoxuefansi", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "21088705", + "name": "考试", + "font_class": "kaoshi", + "unicode": "e68a", + "unicode_decimal": 59018 + }, { "icon_id": "20574719", "name": "疑问", diff --git a/src/renderer/src/assets/iconfont/iconfont.svg b/src/renderer/src/assets/iconfont/iconfont.svg index 8201a34..4949c8e 100644 --- a/src/renderer/src/assets/iconfont/iconfont.svg +++ b/src/renderer/src/assets/iconfont/iconfont.svg @@ -14,6 +14,22 @@ /> + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/assets/iconfont/iconfont.ttf b/src/renderer/src/assets/iconfont/iconfont.ttf index 43f8dc3..43ac2dc 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.ttf and b/src/renderer/src/assets/iconfont/iconfont.ttf differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff b/src/renderer/src/assets/iconfont/iconfont.woff index 9fc1445..10961b9 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.woff and b/src/renderer/src/assets/iconfont/iconfont.woff differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff2 b/src/renderer/src/assets/iconfont/iconfont.woff2 index e1759ea..e8cb594 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.woff2 and b/src/renderer/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/renderer/src/assets/images/ai-01.png b/src/renderer/src/assets/images/ai-01.png new file mode 100644 index 0000000..f2c02f2 Binary files /dev/null and b/src/renderer/src/assets/images/ai-01.png differ diff --git a/src/renderer/src/assets/images/ai-02.png b/src/renderer/src/assets/images/ai-02.png new file mode 100644 index 0000000..f330465 Binary files /dev/null and b/src/renderer/src/assets/images/ai-02.png differ diff --git a/src/renderer/src/assets/images/ai-03.png b/src/renderer/src/assets/images/ai-03.png new file mode 100644 index 0000000..c7e3c98 Binary files /dev/null and b/src/renderer/src/assets/images/ai-03.png differ diff --git a/src/renderer/src/assets/images/ai-04.png b/src/renderer/src/assets/images/ai-04.png new file mode 100644 index 0000000..09cd45a Binary files /dev/null and b/src/renderer/src/assets/images/ai-04.png differ diff --git a/src/renderer/src/assets/images/logo.png b/src/renderer/src/assets/images/logo.png new file mode 100644 index 0000000..45f6e65 Binary files /dev/null and b/src/renderer/src/assets/images/logo.png differ diff --git a/src/renderer/src/assets/styles/JYStyle.css b/src/renderer/src/assets/styles/JYStyle.css new file mode 100644 index 0000000..f44e280 --- /dev/null +++ b/src/renderer/src/assets/styles/JYStyle.css @@ -0,0 +1,99 @@ +body{font-family: "微软雅黑", Arial,"宋体"; color: #333;} +a{ text-decoration: none; color: #2489f6;} +dl, ul, ol, ul { list-style: none; padding: 0; margin: 0; } +.wrapper{ width: 1200px; margin: 0 auto; } +.ques-detail{} +.ques-detail ul li{margin-bottom: 20px;border: 1px solid #dadada;background: #fff;border-radius: 10px;} +.ques-detail ul li:last-child{ margin-bottom: 0; } + +table.edittable{ border-collapse: collapse; text-align: center; margin: 2px; } +table.edittable th, table.edittable td{ line-height: 30px; padding: 5px; white-space: normal; word-break: break-all; border: 1px solid #000; vertical-align: middle; } +table.composition{ border-collapse: collapse; text-align: left; margin: 2px; width: 98%; } +table.composition th, table.composition td{ line-height: 30px; white-space: normal; word-break: break-all; border-width: 0px; vertical-align: middle; } +table.composition2{ border-collapse: collapse;width:auto } +table.composition2 th, table.composition2 td{text-align:left;line-height:30px; white-space:normal;word-break:break-all;border:none;border-width: 0px;vertical-align: middle; } +.MathJye{ border: 0 none; direction: ltr; line-height: normal; display: inline-block; float: none; font-family: 'Times New Roman','宋体'; font-size: 15px; font-style: normal; font-weight: normal; letter-spacing: 1px; line-height: normal; margin: 0; padding: 0; text-align: left; text-indent: 0; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; -webkit-text-size-adjust: none; } +.MathJye div, .MathJye span{ border: 0 none; margin: 0; padding: 0; line-height: normal; text-align: left; height: auto; _height: auto; white-space: normal; } +.MathJye table{ border-collapse: collapse; margin: 0; padding: 0; text-align: center; vertical-align: middle; line-height: normal; font-size: inherit; *font-size: 100%; _font-size: 100%; font-style: normal; font-weight: normal; border: 0; float: none; display: inline-block; *display: inline; zoom: 0; } +.MathJye table td{ padding: 0; font-size: inherit; line-height: normal; white-space: nowrap; border: 0 none; width: auto; _height: auto; } +.MathJye_mi{ font-style: italic; } +.flipv{-ms-transform: scaleX(-1);-moz-transform: scaleX(-1);-webkit-transform: scaleX(-1);-o-transform: scaleX(-1);transform: scaleX(-1);filter: FlipH;} +.fliph{-ms-transform: scaleY(-1);-moz-transform: scaleY(-1);-webkit-transform: scaleY(-1);-o-transform: scaleY(-1);transform: scaleY(-1);filter: FlipV;} +.mathjye-bold{font-weight:800} +.mathjye-del{text-decoration:line-through} +.mathjye-underline{border-bottom:1px solid #000;padding-bottom:2px;} +@-moz-document url-prefix() {.mathjye-underline{padding-bottom:0px;}} +.mathjye-underpline{border-bottom:2px dotted #000; padding-bottom:3px;} +@-moz-document url-prefix() {.mathjye-underpline {padding-bottom:1px;}} +.mathjye-underpoint{background: url(http://img.jyeoo.net/images/formula/point.png) no-repeat center bottom; padding-bottom:4px;} +.mathjye-underpoint2{border-bottom:2px dotted #000; padding-bottom:3px;} +@-moz-document url-prefix() {.mathjye-underpoint{padding-bottom:1px;}} +.mathjye-underwave{background: url(http://img.jyeoo.net/images/formula/wave.png) bottom repeat-x; padding-bottom:4px;} +@-moz-document url-prefix() {.mathjye-underwave {padding-bottom:1px;}} +.mathjye-alignleft{display:block;text-align:left;} +.mathjye-aligncenter{display:block;text-align:center;} +.mathjye-alignright{display:block;text-align:right;} + + +/*试题*/ +.artpreview fieldset { padding-top: 10px; font-size: 14px; clear: both; overflow: hidden; zoom: 1; line-height: 24px; font-family: 'Times New Roman',宋体,sans-serif; position: relative; } +.artpreview fieldset legend { padding: 5px 0; display: block; margin: 5px; background: #f1f1f1; color: #000; overflow: hidden; zoom: 1; } +.queserror { border: 1px dotted #f00; padding: 2px; } +fieldset.quesborder {display: block;padding: 0;line-height: 25px;letter-spacing: 1px;word-break: break-all;margin: 0;} +fieldset.queserror { border: 1px solid #f00; font-size: 12px; padding: 2px; margin-bottom: 1px; } +fieldset.quesborder td, fieldset.queserror td { line-height: 16px; } +fieldset.quesborder em, fieldset.queserror em { font-style: normal; font-weight: bold; position: absolute; left: 20px; } +fieldset.thiserror1 { border: 1px solid #f00; } +fieldset.thiserror1 legend { border: 4px solid #f00; } +fieldset.thiserror2 { border: 1px solid #ADCD3C; } +fieldset.thiserror2 legend { border: 4px solid #ADCD3C; } +fieldset.thisques { border: 1px solid blue; } +fieldset.thison { border: 1px solid #A9C9E2; } +fieldset.thison div.border { border: 1px solid #ADCD3C; background-color: #F2FDDB; } +fieldset, img { border: 0 none; } +table.thison { border: 1px solid #00F; } +table.thiserr { border: 1px solid #F00; } +fieldset.thisvip1 { border: 1px solid #00F; } +fieldset.thisvip1 legend { border: 4px solid #00F; } +fieldset.status17 { border: 1px solid #ff00ff; } +fieldset.status17 legend { border: 4px solid #ff00ff; } +.selectoption { vertical-align: middle; font-size: 14px; padding: 2px; } +.selectoption:hover { color: #EA8511; } +.selectoption label { padding: 4px; line-height: 24px; } +fieldset.quesbordere { border: 2px dotted #f00; } +.answer { border: 1px dotted #ffffff; } +ol.answer li, ul.answer li { padding: 1px; font-size: 14px; } +ol.answer li:hover { background: #f2f2f2; } +.collapseContainerPanel { border: 0; } +.collapsePanelHeader { height: 30px; font-weight: bold; padding: 6px 0 0 0; } +.collapseHeaderContent { float: left; padding-left: 5px; } +.collapseContent { margin: 0; padding: 0; border: 1px solid #ccc; border-top: 0; } +.pt0 { padding: 2px 0 5px 0; font-size: 14px; font-family: "黑体",sans-serif; font-weight: 700; } +.pt1 {overflow: hidden;zoom: 1;clear: both;line-height: 25px;font-size: 14px;padding: 20px;position: relative;word-break: break-word;} +fieldset.quesborder .pt1 em { position: static; } +.pt1 img { position: relative; } +.pt2 {padding: 20px;padding-top: 0;} +.pt3, .pt4, .pt5, .pt6, .pt7 { clear: both; zoom: 1; position: relative; padding: 0px 20px 20px 80px; } +.pt8 a:link, .pt8 a:visited { margin-right: 10px; padding: 2px 5px; } +.pt8 a:hover { background: #fc0; } +.pt9 { padding: 20px; border: 0 none; color: #999999; font-size: 12px; } +.fieldtip {height: 36px;line-height: 36px;background-color: #f4f4f4;border-top: 1px solid #dadada;padding: 0 20px;color: #666666;position: relative;font-size: 12px;border-radius: 0 0 10px 10px;} +.newFieldtip .pt1, .newFieldtip .pt2, .newFieldtip .pt3, .newFieldtip .pt4, .newFieldtip .pt5, .newFieldtip .pt6, .newFieldtip .pt7, .newFieldtip .pt8, .newFieldtip.pt9, .newFieldtip + .fieldtip { padding: 0; } +fieldset img { max-width: 100%; } + +.fieldtip-left {float: left;} +.fieldtip-left >* {margin-right: 20px;} +.fieldtip-right { float: right; } +.fieldtip-right>* { margin-left: 20px; display: inline-block; color: #666666; } +.fieldtip .btn {display: inline-block;margin-bottom: 0;font-weight: normal;text-align: center;vertical-align: middle;-ms-touch-action: manipulation;touch-action: manipulation;cursor: pointer;background-image: none;border: 1px solid transparent;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;font-size: 14px;border-radius: 4px;color: #ffffff;background-color: #ff8a00;line-height: 18px;min-width: 28px;padding: 0 5px;} +.fieldtip .btn:hover, .fieldtip .btn:active, .fieldtip .btn:active:hover, .fieldtip .btn:hover { color: #ffffff; background-color: #faad4a; } + +/*填空题*/ +div.quizPutTag { display: inline-block; *display: inline; padding: 3px 10px 1px 10px; margin: 0 3px; font-size: 14px; min-width: 1em; min-height: 16px; line-height: 18px; height: auto; border-bottom: 1px solid #0033FF; text-decoration: none; zoom: 1; color: #127176; word-break: break-all; } +div.quizPutTag:hover { color: #f60; } +div.quizPutTag img { cursor: pointer; width: 200px; margin-left: 10px; } +.sanwser { padding: 4px 10px; margin: 0px; border: 1px solid #ADCD3C; background-color: #F2FDDB; color: #000; display: none; } +/*答案*/ +.selectoption label.s, div.s { border: 1px solid #91cbed; background-color: #deeeff; display: inline-block; } +.selectoption label.s.sh, div.s.sh { margin: 1px; border: none; background: none; } +del { text-decoration: none; color: #f00; font-style: normal; font-weight: normal; } \ No newline at end of file diff --git a/src/renderer/src/components/ai-chart/container/text.vue b/src/renderer/src/components/ai-chart/container/text.vue new file mode 100644 index 0000000..3372051 --- /dev/null +++ b/src/renderer/src/components/ai-chart/container/text.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/renderer/src/components/ai-chart/index.vue b/src/renderer/src/components/ai-chart/index.vue new file mode 100644 index 0000000..8d95703 --- /dev/null +++ b/src/renderer/src/components/ai-chart/index.vue @@ -0,0 +1,453 @@ + + + + + \ No newline at end of file diff --git a/src/renderer/src/components/choose-textbook/index.vue b/src/renderer/src/components/choose-textbook/index.vue index 3c2a18c..2436521 100644 --- a/src/renderer/src/components/choose-textbook/index.vue +++ b/src/renderer/src/components/choose-textbook/index.vue @@ -2,12 +2,12 @@
- {{ curBookName }} + {{ curBook.data.itemtitle }}
-