diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index 06f069381..5b4bd55a9 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -243,7 +243,7 @@ export default { || /meet\.google\.com/i.test(url)) { return true; } - if ($A.getDomain(url) == $A.getDomain($A.apiUrl('../'))) { + if ($A.getDomain(url) == $A.getDomain($A.mainUrl())) { try { if (/^\/uploads\//i.test(new URL(url).pathname)) { return true; diff --git a/resources/assets/js/components/Drawio.vue b/resources/assets/js/components/Drawio.vue index 400f372a5..edeb1225d 100644 --- a/resources/assets/js/components/Drawio.vue +++ b/resources/assets/js/components/Drawio.vue @@ -81,7 +81,7 @@ export default { if (this.$Electron) { this.url = $A.originUrl(`drawio/webapp/index.html${query}`); } else { - this.url = $A.apiUrl(`../drawio/webapp/${query}`); + this.url = $A.mainUrl(`drawio/webapp/${query}`); } }, mounted() { diff --git a/resources/assets/js/components/ImgUpload.vue b/resources/assets/js/components/ImgUpload.vue index e9d292b72..ef8ed66fc 100755 --- a/resources/assets/js/components/ImgUpload.vue +++ b/resources/assets/js/components/ImgUpload.vue @@ -366,7 +366,7 @@ browseStyle(thumb) { if (!/https*:\/\//.test(thumb) && !/^\//.test(thumb)) { - thumb = $A.apiUrl(`../${thumb}`); + thumb = $A.mainUrl(thumb); } return { 'background-image': `url("${thumb}")` diff --git a/resources/assets/js/components/ImgView.vue b/resources/assets/js/components/ImgView.vue index 3f6a30ba7..c332ff5ee 100755 --- a/resources/assets/js/components/ImgView.vue +++ b/resources/assets/js/components/ImgView.vue @@ -24,7 +24,7 @@ export default { src.substring(0, 1) === "/") { return src; } - return $A.apiUrl(`../${src}`) + return $A.mainUrl(src) } } } diff --git a/resources/assets/js/components/Minder.vue b/resources/assets/js/components/Minder.vue index c030af73f..115486c35 100644 --- a/resources/assets/js/components/Minder.vue +++ b/resources/assets/js/components/Minder.vue @@ -307,7 +307,7 @@ }, computed: { url() { - return $A.apiUrl(`../minder/index.html?type=manual&readonly=${this.readOnly ? 'yes' : 'no'}`) + return $A.mainUrl(`minder/index.html?type=manual&readonly=${this.readOnly ? 'yes' : 'no'}`) } }, watch: { diff --git a/resources/assets/js/components/OnlyOffice.vue b/resources/assets/js/components/OnlyOffice.vue index 82c1f2a14..8f41aa67d 100644 --- a/resources/assets/js/components/OnlyOffice.vue +++ b/resources/assets/js/components/OnlyOffice.vue @@ -156,7 +156,7 @@ export default { } this.loading = true; this.loadError = false; - $A.loadScript($A.apiUrl("../office/web-apps/apps/api/documents/api.js")).then(_ => { + $A.loadScript($A.mainUrl("office/web-apps/apps/api/documents/api.js")).then(_ => { if (!this.documentKey) { this.handleClose(); return diff --git a/resources/assets/js/components/RightBottom.vue b/resources/assets/js/components/RightBottom.vue index 61e3011d9..371d7cef5 100644 --- a/resources/assets/js/components/RightBottom.vue +++ b/resources/assets/js/components/RightBottom.vue @@ -154,7 +154,7 @@ export default { if (this.compareVersion(this.apiVersion, '0.19.0') === -1) { $A.modalWarning({ title: '温馨提示', - message: `服务器(${$A.getDomain($A.apiUrl('../'))})接口版本过低,部分功能可能无法正常使用。`, + message: `服务器(${$A.getDomain($A.mainUrl())})接口版本过低,部分功能可能无法正常使用。`, }); } if (this.$Electron) { diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js index 1c59a902f..c63b58f0b 100755 --- a/resources/assets/js/functions/web.js +++ b/resources/assets/js/functions/web.js @@ -42,6 +42,25 @@ import {MarkdownPreview} from "../store/markdown"; return str }, + /** + * 主页地址 + * @param str + * @returns {string} + */ + mainUrl(str = null) { + if (!str) { + str = "" + } + if (str.substring(0, 2) === "//" || + str.substring(0, 7) === "http://" || + str.substring(0, 8) === "https://" || + str.substring(0, 6) === "ftp://" || + str.substring(0, 1) === "/") { + return str; + } + return $A.apiUrl(`../${str}`) + }, + /** * 服务地址 * @param str @@ -73,7 +92,7 @@ import {MarkdownPreview} from "../store/markdown"; * @returns {*} */ onlinePreviewUrl(name, key) { - return $A.apiUrl(`../online/preview/${name}?key=${key}&version=${window.systemInfo.version}&__=${new Date().getTime()}`) + return $A.mainUrl(`online/preview/${name}?key=${key}&version=${window.systemInfo.version}&__=${new Date().getTime()}`) }, /** @@ -759,7 +778,7 @@ import {MarkdownPreview} from "../store/markdown"; text = text.trim().replace(/(\n\x20*){3,}/g, "\n\n"); text = text.replace(/ /g, ' ') text = text.replace(/

<\/p>/g, '


') - text = text.replace(/\{\{RemoteURL\}\}/g, $A.apiUrl('../')) + text = text.replace(/\{\{RemoteURL\}\}/g, $A.mainUrl()) text = text.replace(atReg, ``) // 处理内容连接 if (/https*:\/\//.test(text)) { @@ -801,7 +820,7 @@ import {MarkdownPreview} from "../store/markdown"; * @returns {*[]} */ getTextImagesInfo(text) { - const baseUrl = $A.apiUrl('../'); + const baseUrl = $A.mainUrl(); const array = text.match(new RegExp(`]*?>`, "g")); const list = []; if (array) { @@ -890,7 +909,7 @@ import {MarkdownPreview} from "../store/markdown"; * @returns {boolean} */ isDooServer() { - const u = $A.getDomain($A.apiUrl('../')) + const u = $A.getDomain($A.mainUrl()) return /dootask\.com$/.test(u) || /hitosea\.com$/.test(u) || /^127\.0\.0\.1/.test(u) diff --git a/resources/assets/js/pages/index.vue b/resources/assets/js/pages/index.vue index c237034f0..b2fe3e54c 100644 --- a/resources/assets/js/pages/index.vue +++ b/resources/assets/js/pages/index.vue @@ -54,9 +54,9 @@ export default { goIndex() { if (languageName === "zh" || languageName === "zh-CHT") { - window.location.href = $A.apiUrl("../site/zh/index.html") + window.location.href = $A.mainUrl("site/zh/index.html") } else { - window.location.href = $A.apiUrl("../site/en/index.html") + window.location.href = $A.mainUrl("site/en/index.html") } }, diff --git a/resources/assets/js/pages/login.vue b/resources/assets/js/pages/login.vue index 53425b140..712d4c4a4 100644 --- a/resources/assets/js/pages/login.vue +++ b/resources/assets/js/pages/login.vue @@ -291,7 +291,7 @@ export default { }, qrcodeUrl() { - return $A.apiUrl('../login?qrcode=' + this.qrcodeVal) + return $A.mainUrl('login?qrcode=' + this.qrcodeVal) }, }, diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue index 4f3f99365..946c57462 100644 --- a/resources/assets/js/pages/manage.vue +++ b/resources/assets/js/pages/manage.vue @@ -472,7 +472,7 @@ export default { // okr路由 okrUrl() { - return import.meta.env.VITE_OKR_WEB_URL || $A.apiUrl("../apps/okr") + return import.meta.env.VITE_OKR_WEB_URL || $A.mainUrl("apps/okr") }, /** diff --git a/resources/assets/js/pages/manage/application.vue b/resources/assets/js/pages/manage/application.vue index 09b9f149b..10163fc37 100644 --- a/resources/assets/js/pages/manage/application.vue +++ b/resources/assets/js/pages/manage/application.vue @@ -248,31 +248,31 @@ export default { { value: "openai", label: "ChatGPT", - src: $A.apiUrl('../images/avatar/default_openai.png'), + src: $A.mainUrl('images/avatar/default_openai.png'), desc: this.$L('我是一个人工智能助手,为用户提供问题解答和指导。我没有具体的身份,只是一个程序。您有什么问题可以问我哦?') }, { value: "gemini", label: "Gemini", - src: $A.apiUrl('../images/avatar/default_gemini.png'), + src: $A.mainUrl('images/avatar/default_gemini.png'), desc: `${this.$L('我是由Google开发的生成式人工智能聊天机器人。')}${this.$L('它基于同名的Gemini系列大型语言模型。')}${this.$L('是应对OpenAI公司开发的ChatGPT聊天机器人的崛起而开发的。')}` }, { value: "claude", label: "Claude", - src: $A.apiUrl('../images/avatar/default_claude.png'), + src: $A.mainUrl('images/avatar/default_claude.png'), desc: this.$L('我是Claude,一个由Anthropic公司创造出来的AI助手机器人。我的工作是帮助人类,与人对话并给出解答。') }, { value: "wenxin", label: "Wenxin", - src: $A.apiUrl('../avatar/%E6%96%87%E5%BF%83.png'), + src: $A.mainUrl('avatar/%E6%96%87%E5%BF%83.png'), desc: this.$L('我是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。') }, { value: "qianwen", label: "Qianwen", - src: $A.apiUrl('../avatar/%E9%80%9A%E4%B9%89%E5%8D%83%E9%97%AE.png'), + src: $A.mainUrl('avatar/%E9%80%9A%E4%B9%89%E5%8D%83%E9%97%AE.png'), desc: this.$L('我是达摩院自主研发的超大规模语言模型,能够回答问题、创作文字,还能表达观点、撰写代码。') }, ], @@ -520,10 +520,10 @@ export default { const arr = (text + "").match(/^https*:\/\/(.*?)\/login\?qrcode=(.*?)$/) if (arr) { // 扫码登录 - if ($A.getDomain(text) != $A.getDomain($A.apiUrl('../'))) { + if ($A.getDomain(text) != $A.getDomain($A.mainUrl())) { let content = this.$L('请确认扫码的服务器与当前服务器一致') content += `
${this.$L('二维码服务器')}: ${$A.getDomain(text)}` - content += `
${this.$L('当前服务器')}: ${$A.getDomain($A.apiUrl('../'))}` + content += `
${this.$L('当前服务器')}: ${$A.getDomain($A.mainUrl())}` $A.modalWarning({ language: false, title: this.$L('扫码登录'), diff --git a/resources/assets/js/pages/manage/approve/details.vue b/resources/assets/js/pages/manage/approve/details.vue index d3b1ae415..cf62da9cc 100644 --- a/resources/assets/js/pages/manage/approve/details.vue +++ b/resources/assets/js/pages/manage/approve/details.vue @@ -117,7 +117,7 @@

{{$L('抄送')}}

- +

{{$L('系统')}}

{{$L('自动抄送')}} @@ -134,7 +134,7 @@

{{$L('结束')}}

- +

{{$L('系统')}}

{{ datas.is_finished ? $L('已结束') : $L('未结束') }}

@@ -476,7 +476,7 @@ export default { }, // 打开图片 onViewPicture(currentUrl) { - this.$store.dispatch("previewImage", $A.apiUrl('../' + currentUrl)) + this.$store.dispatch("previewImage", $A.mainUrl(currentUrl)) } } } diff --git a/resources/assets/js/pages/manage/approve/setting.vue b/resources/assets/js/pages/manage/approve/setting.vue index 227e040a0..55e5d0f7b 100644 --- a/resources/assets/js/pages/manage/approve/setting.vue +++ b/resources/assets/js/pages/manage/approve/setting.vue @@ -48,7 +48,7 @@ export default { watch: { approvalSettingShow(val) { if (val) { - this.iframeSrc = $A.apiUrl(`../approve/#/?name=${this.name}&token=${store.userToken}&lang=${languageName}`) + this.iframeSrc = $A.mainUrl(`approve/#/?name=${this.name}&token=${store.userToken}&lang=${languageName}`) } } }, diff --git a/resources/assets/js/pages/manage/apps.vue b/resources/assets/js/pages/manage/apps.vue index 9452cbe3c..afbdc133a 100644 --- a/resources/assets/js/pages/manage/apps.vue +++ b/resources/assets/js/pages/manage/apps.vue @@ -26,7 +26,7 @@ export default { if (to.name == 'manage-apps') { this.$nextTick(() => { this.loading = false; - this.appUrl = import.meta.env.VITE_OKR_WEB_URL || $A.apiUrl("../apps/okr") + this.appUrl = import.meta.env.VITE_OKR_WEB_URL || $A.mainUrl("apps/okr") this.path = this.$route.query.path || ''; }) }else{ diff --git a/resources/assets/js/pages/manage/components/ChatInput/emoji.vue b/resources/assets/js/pages/manage/components/ChatInput/emoji.vue index e4cb89127..e1898c555 100644 --- a/resources/assets/js/pages/manage/components/ChatInput/emoji.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/emoji.vue @@ -138,7 +138,7 @@ export default { 'js/emoji.all.js', 'js/emoticon.all.js', ]).then(_ => { - const baseUrl = $A.apiUrl("../images/emoticon") + const baseUrl = $A.mainUrl("images/emoticon") if ($A.isArray(window.emojiData)) { this.emojiData = window.emojiData.sort(function (a, b) { return a.emoji_order - b.emoji_order; @@ -228,7 +228,7 @@ export default { const container = this.$refs['chatEmojiMenuRef']; container?.addEventListener("wheel", (event) =>{ event.preventDefault(); - container.scrollLeft += event.deltaY; + container.scrollLeft = container.scrollLeft + event.deltaY; }); }, @@ -242,7 +242,6 @@ export default { onHandleScroll(event) { this.emojiMenuScrollLeft = event.target.scrollLeft; } - } } diff --git a/resources/assets/js/pages/manage/components/ChatInput/index.vue b/resources/assets/js/pages/manage/components/ChatInput/index.vue index 0854212e5..847f2e5e2 100755 --- a/resources/assets/js/pages/manage/components/ChatInput/index.vue +++ b/resources/assets/js/pages/manage/components/ChatInput/index.vue @@ -903,7 +903,7 @@ export default { && $A.isArray(window.emoticonData)) { // 显示快捷选择表情窗口 this.emojiQuickItems = []; - const baseUrl = $A.apiUrl("../images/emoticon") + const baseUrl = $A.mainUrl("images/emoticon") window.emoticonData.some(data => { let j = 0 data.list.some(item => { diff --git a/resources/assets/js/pages/manage/components/DialogUpload.vue b/resources/assets/js/pages/manage/components/DialogUpload.vue index 08070caf0..11ef27902 100644 --- a/resources/assets/js/pages/manage/components/DialogUpload.vue +++ b/resources/assets/js/pages/manage/components/DialogUpload.vue @@ -92,9 +92,9 @@ export default { ext = 'ppt' } if (["ai", "avi", "bmp", "cdr", "doc", "eps", "gif", "mov", "mp3", "mp4", "pdf", "ppt", "pr", "psd", "rar", "svg", "tif", "txt", "xls", "zip"].includes(ext)) { - data.thumb = $A.apiUrl(`../images/ext/${ext}.png`) + data.thumb = $A.mainUrl(`images/ext/${ext}.png`) } else { - data.thumb = $A.apiUrl(`../images/ext/file.png`) + data.thumb = $A.mainUrl(`images/ext/file.png`) } this.fileMsgCaches[cacheName] = data }, diff --git a/resources/assets/js/pages/manage/components/DialogWrapper.vue b/resources/assets/js/pages/manage/components/DialogWrapper.vue index 24fe34b86..4b6e4d611 100644 --- a/resources/assets/js/pages/manage/components/DialogWrapper.vue +++ b/resources/assets/js/pages/manage/components/DialogWrapper.vue @@ -1503,7 +1503,7 @@ export default { if (this.dialogData.extra_quote_type === 'update') { // 修改 if (textType === "text") { - textBody = textBody.replace(new RegExp(`src=(["'])${$A.apiUrl('../')}`, "g"), "src=$1{{RemoteURL}}") + textBody = textBody.replace(new RegExp(`src=(["'])${$A.mainUrl()}`, "g"), "src=$1{{RemoteURL}}") } const update_id = this.quoteId this.$store.dispatch("setLoad", { @@ -3180,7 +3180,7 @@ export default { }, }) } else { - window.open($A.apiUrl(`..${path}`)) + window.open($A.mainUrl(path.substring(1))) } }, diff --git a/resources/assets/js/pages/manage/components/FileHistory.vue b/resources/assets/js/pages/manage/components/FileHistory.vue index bf8ec670c..abedaafdd 100644 --- a/resources/assets/js/pages/manage/components/FileHistory.vue +++ b/resources/assets/js/pages/manage/components/FileHistory.vue @@ -209,7 +209,7 @@ export default { }, }) } else { - window.open($A.apiUrl(`..${path}`)) + window.open($A.mainUrl(path.substring(1))) } break; } diff --git a/resources/assets/js/pages/manage/components/ProjectLog.vue b/resources/assets/js/pages/manage/components/ProjectLog.vue index 2d4765d1b..95a0a9774 100644 --- a/resources/assets/js/pages/manage/components/ProjectLog.vue +++ b/resources/assets/js/pages/manage/components/ProjectLog.vue @@ -185,7 +185,7 @@ export default { vNode.push(h('span', ': ')) vNode.push(h('a', { attrs: { - href: $A.baseUrl(url), + href: $A.mainUrl(url), target: '_blank' } }, this.$L(title))) diff --git a/resources/assets/js/pages/manage/components/TaskContentHistory.vue b/resources/assets/js/pages/manage/components/TaskContentHistory.vue index 680ea187b..1bb1dfb27 100644 --- a/resources/assets/js/pages/manage/components/TaskContentHistory.vue +++ b/resources/assets/js/pages/manage/components/TaskContentHistory.vue @@ -168,7 +168,20 @@ export default { case 'preview': const title = (this.taskName || `ID: ${this.taskId}`) + ` [${row.created_at}]`; const path = `/single/task/content/${this.taskId}?history_id=${row.id}&history_title=${title}`; - if (this.$isEEUiApp) { + if (this.$Electron) { + this.$store.dispatch('openChildWindow', { + name: `task-content-${this.taskId}-${row.id}`, + path: path, + force: false, + config: { + title: title, + titleFixed: true, + parent: null, + width: Math.min(window.screen.availWidth, 1440), + height: Math.min(window.screen.availHeight, 900), + }, + }); + } else if (this.$isEEUiApp) { this.$store.dispatch('openAppChildPage', { pageType: 'app', pageTitle: title, @@ -180,7 +193,7 @@ export default { }, }) } else { - window.open($A.apiUrl(`..${path}`)) + window.open($A.mainUrl(path.substring(1))) } break; } diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index b8b78811f..5ae0d68c5 100755 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -1660,7 +1660,7 @@ export default { }, }); } else { - window.open($A.apiUrl(`..${path}`)) + window.open($A.mainUrl(path.substring(1))) } }, diff --git a/resources/assets/js/pages/manage/file.vue b/resources/assets/js/pages/manage/file.vue index 048eabff1..90ea76916 100644 --- a/resources/assets/js/pages/manage/file.vue +++ b/resources/assets/js/pages/manage/file.vue @@ -1162,7 +1162,7 @@ export default { }, }); } else { - window.open($A.apiUrl(`..${path}`)) + window.open($A.mainUrl(path.substring(1))) } this.browseFile(0); }, diff --git a/resources/assets/js/pages/manage/setting/index.vue b/resources/assets/js/pages/manage/setting/index.vue index 7fcf742b7..728ce0259 100644 --- a/resources/assets/js/pages/manage/setting/index.vue +++ b/resources/assets/js/pages/manage/setting/index.vue @@ -209,7 +209,7 @@ export default { onVersion() { const array = [] this.getServerVersion().then(version => { - array.push(`${this.$L('服务器')}: ${$A.getDomain($A.apiUrl('../'))}`) + array.push(`${this.$L('服务器')}: ${$A.getDomain($A.mainUrl())}`) array.push(`${this.$L('服务器版本')}: v${version}`) array.push(`${this.$L('客户端版本')}: v${this.version}`) $A.modalInfo({ diff --git a/resources/assets/js/pages/pro.vue b/resources/assets/js/pages/pro.vue index 697c0db6d..7aaeb00ab 100644 --- a/resources/assets/js/pages/pro.vue +++ b/resources/assets/js/pages/pro.vue @@ -7,9 +7,9 @@ import {languageName} from "../language"; export default { mounted() { if (languageName === "zh" || languageName === "zh-CHT") { - window.location.href = $A.apiUrl("../site/zh/price.html") + window.location.href = $A.mainUrl("site/zh/price.html") } else { - window.location.href = $A.apiUrl("../site/en/price.html") + window.location.href = $A.mainUrl("site/en/price.html") } }, } diff --git a/resources/assets/js/pages/single/apps.vue b/resources/assets/js/pages/single/apps.vue index 564402c4b..66abd0d5e 100644 --- a/resources/assets/js/pages/single/apps.vue +++ b/resources/assets/js/pages/single/apps.vue @@ -28,7 +28,7 @@ export default { if (to.name == 'single-apps') { this.$nextTick(() => { this.loading = false; - this.appUrl = import.meta.env.VITE_OKR_WEB_URL || $A.apiUrl("../apps/okr") + this.appUrl = import.meta.env.VITE_OKR_WEB_URL || $A.mainUrl("apps/okr") this.path = this.$route.query.path || ''; }) }else{ diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 5809020d8..77a2270f6 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -644,13 +644,13 @@ export default { $A.eeuiAppSendMessage({ action: 'userChatList', token: state.userToken, - url: $A.apiUrl('../api/users/share/list') + `?token=${state.userToken}` + url: $A.mainUrl('api/users/share/list') + `?token=${state.userToken}` }); $A.eeuiAppSendMessage({ action:"userUploadUrl", token: state.userToken, - dirUrl: $A.apiUrl('../api/file/content/upload') + `?token=${state.userToken}`, - chatUrl: $A.apiUrl('../api/dialog/msg/sendfiles') + `?token=${state.userToken}`, + dirUrl: $A.mainUrl('api/file/content/upload') + `?token=${state.userToken}`, + chatUrl: $A.mainUrl('api/dialog/msg/sendfiles') + `?token=${state.userToken}`, }); // resolve() @@ -991,7 +991,7 @@ export default { * @param url */ openWebTabWindow({dispatch}, url) { - if ($A.getDomain(url) != $A.getDomain($A.apiUrl('../'))) { + if ($A.getDomain(url) != $A.getDomain($A.mainUrl())) { $A.Electron.sendMessage('openWebTabWindow', {url}) return } @@ -3298,7 +3298,7 @@ export default { */ streamDialogMsg({state, dispatch}, streamUrl) { if (!/^https*:\/\//i.test(streamUrl)) { - streamUrl = $A.apiUrl(`..${streamUrl}`) + streamUrl = $A.mainUrl(streamUrl.substring(1)) } if (state.dialogSseList.find(item => item.streamUrl == streamUrl)) { return @@ -3488,7 +3488,7 @@ export default { return; } // - let url = $A.apiUrl('../ws'); + let url = $A.mainUrl('ws'); url = url.replace("https://", "wss://"); url = url.replace("http://", "ws://"); url += `?action=web&token=${state.userToken}&language=${languageName}`; diff --git a/resources/assets/sass/pages/common.scss b/resources/assets/sass/pages/common.scss index 6dda6d1af..35e937fd1 100755 --- a/resources/assets/sass/pages/common.scss +++ b/resources/assets/sass/pages/common.scss @@ -127,6 +127,13 @@ body { .ivu-table-cell { padding-left: 12px; padding-right: 12px; + + .common-avatar { + .avatar-name { + width: 0; + flex: 1; + } + } } thead {