397 lines
34 KiB
HTML
397 lines
34 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<link rel="icon" href="/favicon.ico" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>后台管理系统</title>
|
||
<style>
|
||
* {
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
.preload {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
height: 100vh;
|
||
width: 100vw;
|
||
}
|
||
|
||
.circular {
|
||
height: 42px;
|
||
width: 42px;
|
||
animation: loading-rotate 2s linear infinite;
|
||
}
|
||
|
||
.circular .path {
|
||
animation: loading-dash 1.5s ease-in-out infinite;
|
||
stroke-dasharray: 90, 150;
|
||
stroke-dashoffset: 0;
|
||
stroke-width: 2;
|
||
stroke: #4073fa;
|
||
stroke-linecap: round;
|
||
}
|
||
|
||
@keyframes loading-rotate {
|
||
100% {
|
||
transform: rotate(1turn);
|
||
}
|
||
}
|
||
|
||
@keyframes loading-dash {
|
||
0% {
|
||
stroke-dasharray: 90, 150;
|
||
stroke-dashoffset: -40px;
|
||
}
|
||
|
||
100% {
|
||
stroke-dasharray: 90, 150;
|
||
stroke-dashoffset: -120px;
|
||
}
|
||
}
|
||
</style>
|
||
<script>
|
||
// 动态加载 Chat UIKit 样式
|
||
(function() {
|
||
var link = document.createElement('link');
|
||
link.rel = 'stylesheet';
|
||
link.href = 'https://web.sdk.qcloud.com/im/assets/latest/index.css';
|
||
document.head.appendChild(link);
|
||
})();
|
||
</script>
|
||
<!-- Dify AI 客服机器人(全局悬浮气泡) -->
|
||
<script>
|
||
window.difyChatbotConfig = {
|
||
token: 'OcRvj5VVR76cME9J',
|
||
baseUrl: 'https://ai.zhenyangtang.com.cn/',
|
||
draggable: true,
|
||
dragAxis: 'both',
|
||
inputs: {},
|
||
systemVariables: {},
|
||
userVariables: {}
|
||
}
|
||
</script>
|
||
<script
|
||
src="'https://ai.zhenyangtang.com.cn/embed.min.js"
|
||
id="OcRvj5VVR76cME9J"
|
||
defer
|
||
></script>
|
||
<style>
|
||
/* 气泡按钮使用自定义 AI 图标(base 为 /admin/,public 资源在该路径下) */
|
||
#dify-chatbot-bubble-button {
|
||
background-color: #fff !important;
|
||
background-image: url('data:image/png;base64,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');
|
||
background-size: cover;
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
}
|
||
/* 隐藏 embed.min.js 内置的笑脸/关闭 SVG 图标 */
|
||
#dify-chatbot-bubble-button svg {
|
||
display: none !important;
|
||
}
|
||
/* 聊天窗口 iframe 默认透明。小窗口布局顶栏是白色文字,
|
||
顶部 56px 垫深蓝衬托,下方近白作聊天区底色 */
|
||
#dify-chatbot-bubble-window {
|
||
background: linear-gradient(
|
||
to bottom,
|
||
#1c64f2 0,
|
||
#1c64f2 56px,
|
||
#f7f8fc 56px
|
||
) !important;
|
||
}
|
||
/* 全屏(宽屏布局)顶栏是深色文字,用整片近白底色 */
|
||
#dify-chatbot-bubble-window.dify-chatbot-fullscreen {
|
||
background: #f7f8fc !important;
|
||
}
|
||
/* 全屏态:#dify-chatbot-bubble-window 是 iframe 本身,用 !important 覆盖其内联样式 */
|
||
#dify-chatbot-bubble-window.dify-chatbot-fullscreen {
|
||
position: fixed !important;
|
||
top: 0 !important;
|
||
left: 0 !important;
|
||
right: 0 !important;
|
||
bottom: 0 !important;
|
||
width: 100vw !important;
|
||
height: 100vh !important;
|
||
max-width: 100vw !important;
|
||
max-height: 100vh !important;
|
||
min-width: 0 !important;
|
||
min-height: 0 !important;
|
||
border-radius: 0 !important;
|
||
}
|
||
/* 聊天窗口控制按钮(全屏切换 / 关闭),仅窗口打开时显示,位置由脚本计算 */
|
||
#dify-fullscreen-toggle,
|
||
#dify-chat-close {
|
||
position: fixed;
|
||
display: none;
|
||
width: 32px;
|
||
height: 32px;
|
||
border: none;
|
||
border-radius: 8px;
|
||
background-color: rgba(255, 255, 255, 0.18);
|
||
color: #fff;
|
||
font-size: 16px;
|
||
line-height: 32px;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
z-index: 2147483646;
|
||
}
|
||
#dify-fullscreen-toggle:hover,
|
||
#dify-chat-close:hover {
|
||
background-color: rgba(255, 255, 255, 0.35);
|
||
}
|
||
/* 全屏时顶栏是浅色的,按钮改用实色圆形放在左上角 */
|
||
#dify-fullscreen-toggle.is-fullscreen,
|
||
#dify-chat-close.is-fullscreen {
|
||
width: 40px;
|
||
height: 40px;
|
||
border-radius: 20px;
|
||
background-color: #1c64f2;
|
||
box-shadow: rgba(0, 0, 0, 0.2) 0 4px 8px 0;
|
||
line-height: 40px;
|
||
}
|
||
#dify-fullscreen-toggle.is-fullscreen:hover,
|
||
#dify-chat-close.is-fullscreen:hover {
|
||
background-color: #1a56db;
|
||
}
|
||
/* 遮盖聊天窗口底部的 POWERED BY Dify 版权条(该区域在 iframe 内部,只能覆盖) */
|
||
#dify-brand-cover,
|
||
#dify-brand-transition-cover {
|
||
position: fixed;
|
||
display: none;
|
||
background: #f2f4f7;
|
||
z-index: 2147483641;
|
||
}
|
||
</style>
|
||
<script type="module" crossorigin src="/admin/assets/index-d3j0BX4t.js"></script>
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@babel/runtime-BanGtE2-.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/fflate-_ayOYiT1.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/jspdf-BsthCvR5.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/lodash-D3kF6u-c.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vue/shared-mAAVTE9n.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vue/reactivity-DiY1c2vO.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vue/runtime-core-C6bnekPw.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/vue-router-QlpZ4wdW.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/pinia-B8cvXbiZ.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/axios-C80V62Fs.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vue/runtime-dom-DDAG46FW.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@element-plus/icons-vue-B0jSCQ-G.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/lodash-es-C2A-Pj28.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@popperjs/core-C5az9QE8.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/dayjs-DG77mNTn.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@ctrl/tinycolor-BuyEbX8F.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/async-validator-CFA_igpM.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/normalize-wheel-es-BQoi3Ox2.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/element-plus-Bolc0EfP.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vueuse/shared-Cl3lVqjz.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@vueuse/core-1S4fJlii.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/balanced-match-BdS7OldZ.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/clone-DBZ6_OiU.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/color-name-Dju3oUBS.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/color-convert-OrFsTA_V.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/color-string-pUQDDJII.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/color-B2zxaWkI.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/ms-CzQ2E3wO.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/css-color-function-DI01JAaZ.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/clipboard-CHgxszqY.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/vue-clipboard3-DByT_rEQ.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/tslib-BDyQ-Jie.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/zrender-DRNXw7y3.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/echarts-CNLwa9wG.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/highlight.js-Bxt7hFFy.js">
|
||
<link rel="modulepreload" crossorigin href="/admin/assets/@highlightjs/vue-plugin-C4onkBvW.js">
|
||
<link rel="stylesheet" crossorigin href="/admin/assets/element-plus-CL62-hT2.css">
|
||
<link rel="stylesheet" crossorigin href="/admin/assets/highlight-BfC0goYb.css">
|
||
<link rel="stylesheet" crossorigin href="/admin/assets/index-B8eb0l7L.css">
|
||
</head>
|
||
<body>
|
||
<div id="app">
|
||
<div class="preload">
|
||
<svg viewBox="25 25 50 50" class="circular">
|
||
<circle cx="50" cy="50" r="20" fill="none" class="path"></circle>
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
// Dify 聊天窗口全屏切换:#dify-chatbot-bubble-window 是 iframe 本身,
|
||
// 无法往其内部挂按钮,故在气泡旁放一个独立按钮,窗口打开时才显示
|
||
(function () {
|
||
var btn = document.createElement('button')
|
||
btn.type = 'button'
|
||
btn.id = 'dify-fullscreen-toggle'
|
||
btn.title = '全屏 / 还原'
|
||
btn.textContent = '⛶'
|
||
var transitionUntil = 0
|
||
// 全屏切换(放大和还原都算)后的过渡期:Dify 内部重排期间版权位置不定,
|
||
// 用大面积遮盖兜底,并逐帧跟踪窗口尺寸动画
|
||
function startTransition() {
|
||
transitionUntil = Date.now() + TRANSITION_MS
|
||
function loop() {
|
||
sync()
|
||
if (Date.now() < transitionUntil) requestAnimationFrame(loop)
|
||
}
|
||
loop()
|
||
}
|
||
btn.addEventListener('click', function () {
|
||
var win = document.getElementById('dify-chatbot-bubble-window')
|
||
if (!win) return
|
||
win.classList.toggle('dify-chatbot-fullscreen')
|
||
startTransition()
|
||
})
|
||
document.body.appendChild(btn)
|
||
|
||
// 自定义关闭按钮:窗口打开时气泡被隐藏,由它代替气泡的关闭功能
|
||
var closeBtn = document.createElement('button')
|
||
closeBtn.type = 'button'
|
||
closeBtn.id = 'dify-chat-close'
|
||
closeBtn.title = '关闭'
|
||
closeBtn.textContent = '✕'
|
||
closeBtn.addEventListener('click', function () {
|
||
var win = document.getElementById('dify-chatbot-bubble-window')
|
||
var difyBubble = document.getElementById('dify-chatbot-bubble-button')
|
||
if (win) win.classList.remove('dify-chatbot-fullscreen')
|
||
// 复用 embed.min.js 的开关逻辑,保证气泡图标状态同步
|
||
if (difyBubble) difyBubble.click()
|
||
sync()
|
||
})
|
||
document.body.appendChild(closeBtn)
|
||
|
||
// 隐藏 Dify 头部自带的展开按钮:该按钮仅在收到 isToggledByButton:true 时渲染
|
||
// (embed.min.js 默认发送),在其后补发 false 覆盖即可
|
||
var DIFY_ORIGIN = 'http://chat.zhenyangtang.com.cn:8088'
|
||
window.addEventListener('message', function (event) {
|
||
if (event.origin !== DIFY_ORIGIN) return
|
||
if (!event.data || event.data.type !== 'dify-chatbot-iframe-ready') return
|
||
var win = document.getElementById('dify-chatbot-bubble-window')
|
||
if (!win || event.source !== win.contentWindow) return
|
||
setTimeout(function () {
|
||
win.contentWindow.postMessage(
|
||
{
|
||
type: 'dify-chatbot-config',
|
||
payload: { isToggledByButton: false, isDraggable: false }
|
||
},
|
||
DIFY_ORIGIN
|
||
)
|
||
}, 200)
|
||
})
|
||
|
||
var cover = document.createElement('div')
|
||
cover.id = 'dify-brand-cover'
|
||
document.body.appendChild(cover)
|
||
var transitionCover = document.createElement('div')
|
||
transitionCover.id = 'dify-brand-transition-cover'
|
||
document.body.appendChild(transitionCover)
|
||
|
||
var BRAND_BAR_HEIGHT = 38
|
||
// 全屏后 Dify 内部布局重排的过渡时长,期间用大面积遮盖兜底
|
||
var TRANSITION_MS = 1500
|
||
// Dify 宽屏布局断点 40rem:窄窗口版权条在底部,宽窗口(展开/全屏)移到顶栏右侧
|
||
var WIDE_BREAKPOINT = 640
|
||
|
||
function sync() {
|
||
var win = document.getElementById('dify-chatbot-bubble-window')
|
||
var opened = win && win.style.display !== 'none'
|
||
var difyBubble = document.getElementById('dify-chatbot-bubble-button')
|
||
btn.style.display = opened ? 'block' : 'none'
|
||
closeBtn.style.display = opened ? 'block' : 'none'
|
||
if (!opened) {
|
||
cover.style.display = 'none'
|
||
transitionCover.style.display = 'none'
|
||
// 窗口关闭后恢复气泡(可拖动)
|
||
if (difyBubble) difyBubble.style.display = ''
|
||
return
|
||
}
|
||
var rect = win.getBoundingClientRect()
|
||
var fullscreen = win.classList.contains('dify-chatbot-fullscreen')
|
||
var inTransition = Date.now() < transitionUntil
|
||
cover.style.display = 'block'
|
||
// 窗口打开期间隐藏气泡(气泡可能被拖到任意位置,浮在窗口上很突兀),
|
||
// 控制按钮统一停靠在窗口顶栏
|
||
if (difyBubble) difyBubble.style.display = 'none'
|
||
btn.classList.toggle('is-fullscreen', fullscreen)
|
||
closeBtn.classList.toggle('is-fullscreen', fullscreen)
|
||
if (fullscreen) {
|
||
// 全屏:实色圆钮放左上角,避开右上角版权遮盖区和底部输入区
|
||
btn.style.top = '12px'
|
||
btn.style.left = '12px'
|
||
closeBtn.style.top = '12px'
|
||
closeBtn.style.left = '60px'
|
||
} else {
|
||
// 小窗口:白色幽灵按钮停靠在蓝色顶栏右侧,避开 iframe 内部右上角的重置按钮
|
||
btn.style.top = rect.top + 12 + 'px'
|
||
btn.style.left = rect.right - 132 + 'px'
|
||
closeBtn.style.top = rect.top + 12 + 'px'
|
||
closeBtn.style.left = rect.right - 92 + 'px'
|
||
}
|
||
if (inTransition) {
|
||
// 过渡期:版权可能出现在顶部或底部,两处都盖住并跟随窗口动画;
|
||
// 顶部遮盖的配色须与当前状态的 iframe 背景一致
|
||
cover.style.left = rect.left + 'px'
|
||
cover.style.top = rect.top + 'px'
|
||
cover.style.width = rect.width + 'px'
|
||
cover.style.height = '100px'
|
||
cover.style.borderRadius = fullscreen ? '0' : '1rem 1rem 0 0'
|
||
cover.style.background = fullscreen
|
||
? '#f7f8fc'
|
||
: 'linear-gradient(to bottom, #1c64f2 0, #1c64f2 56px, #f7f8fc 56px)'
|
||
transitionCover.style.display = 'block'
|
||
transitionCover.style.left = rect.left + 'px'
|
||
transitionCover.style.top = rect.bottom - BRAND_BAR_HEIGHT + 'px'
|
||
transitionCover.style.bottom = 'auto'
|
||
transitionCover.style.width = rect.width + 'px'
|
||
transitionCover.style.height = BRAND_BAR_HEIGHT + 'px'
|
||
transitionCover.style.background = '#f7f8fc'
|
||
return
|
||
}
|
||
transitionCover.style.display = 'none'
|
||
if (fullscreen) {
|
||
// 全屏:版权信息在顶栏右侧,遮到窗口右边缘
|
||
cover.style.left = rect.right - 390 + 'px'
|
||
cover.style.top = rect.top + 'px'
|
||
cover.style.width = '390px'
|
||
cover.style.height = '56px'
|
||
cover.style.borderRadius = '0'
|
||
cover.style.background = '#f7f8fc'
|
||
} else if (rect.width >= WIDE_BREAKPOINT) {
|
||
// 宽窗口(浏览器缩放等场景):版权信息在顶栏右侧
|
||
cover.style.left = rect.right - 390 + 'px'
|
||
cover.style.top = rect.top + 'px'
|
||
cover.style.width = '390px'
|
||
cover.style.height = '84px'
|
||
cover.style.borderRadius = '0'
|
||
cover.style.background = '#f7f8fc'
|
||
} else {
|
||
// 窄窗口布局:版权条横贯底部
|
||
cover.style.left = rect.left + 'px'
|
||
cover.style.top = rect.bottom - BRAND_BAR_HEIGHT + 'px'
|
||
cover.style.width = rect.width + 'px'
|
||
cover.style.height = BRAND_BAR_HEIGHT + 'px'
|
||
cover.style.borderRadius = '0 0 1rem 1rem'
|
||
cover.style.background = '#f2f4f7'
|
||
}
|
||
}
|
||
// 监听 iframe 的创建及 display 切换(embed.min.js 通过内联 style 开关窗口),
|
||
// 再加低频轮询兜底,跟住窗口尺寸过渡动画和视口变化
|
||
var observer = new MutationObserver(sync)
|
||
observer.observe(document.body, {
|
||
childList: true,
|
||
subtree: true,
|
||
attributes: true,
|
||
attributeFilter: ['style', 'class']
|
||
})
|
||
window.addEventListener('resize', sync)
|
||
window.addEventListener('keydown', function (event) {
|
||
if (event.key !== 'Escape') return
|
||
var win = document.getElementById('dify-chatbot-bubble-window')
|
||
if (win && win.classList.contains('dify-chatbot-fullscreen')) {
|
||
win.classList.remove('dify-chatbot-fullscreen')
|
||
startTransition()
|
||
}
|
||
})
|
||
setInterval(sync, 300)
|
||
sync()
|
||
})()
|
||
</script>
|
||
</body>
|
||
</html>
|