P1: ChatList.vue — 添加 conversationStats watch fallback,检测 stats>0
但 chatList 为空时自动触发 fetchConversations
P2: api.js parseAPIErrorResponse — 处理 error 字段为对象时提取 .message
P3: CopilotContainer.vue — activeAssistant 判空保护
P3: 新建 super_admin.html + vite.config.ts rewrite 规则
(注:entrypoint 仅含样式,Vue应用代码待补)
防御: NotificationTable.vue — 可选链保护 primary_actor.meta 路径
80 lines
2.9 KiB
HTML
80 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=0" />
|
|
<title>GoChat Super Admin</title>
|
|
<link rel="icon" type="image/png" href="/favicon-32x32.png" />
|
|
<script>
|
|
(function () {
|
|
var cfg = window.__GOCHAT_CONFIG__ || {};
|
|
window.chatwootConfig = Object.assign(
|
|
{
|
|
hostURL: '',
|
|
helpCenterURL: '',
|
|
fbAppId: '',
|
|
instagramAppId: '',
|
|
tiktokAppId: '',
|
|
googleOAuthClientId: '',
|
|
googleOAuthCallbackUrl: '',
|
|
allowedLoginMethods: ['email'],
|
|
fbApiVersion: '',
|
|
whatsappAppId: '',
|
|
whatsappConfigurationId: '',
|
|
whatsappApiVersion: '',
|
|
signupEnabled: 'false',
|
|
isMfaEnabled: 'false',
|
|
inboxEventsEnabled: 'false',
|
|
selectedLocale: 'zh_CN',
|
|
enabledLanguages: [
|
|
{ name: '中文', iso_639_1_code: 'zh_CN' },
|
|
{ name: 'English', iso_639_1_code: 'en' },
|
|
],
|
|
helpUrls: {},
|
|
},
|
|
cfg
|
|
);
|
|
window.globalConfig = Object.assign(
|
|
{
|
|
INSTALLATION_NAME: 'GoChat',
|
|
CREATE_NEW_ACCOUNT_FROM_DASHBOARD: false,
|
|
DISPLAY_MANIFEST: false,
|
|
LOGO_THUMBNAIL: '/favicon-32x32.png',
|
|
},
|
|
cfg.globalConfig || {}
|
|
);
|
|
window.errorLoggingConfig = '';
|
|
window.browserConfig = { browser_name: navigator.userAgent };
|
|
|
|
// sync auth tokens from cookie to localStorage
|
|
(function() {
|
|
try {
|
|
var cookies = document.cookie.split('; ');
|
|
var sessionCookie = cookies.find(function(c) { return c.startsWith('cw_d_session_info='); });
|
|
if (sessionCookie) {
|
|
var raw = decodeURIComponent(sessionCookie.split('=').slice(1).join('='));
|
|
var extract = function(key) {
|
|
var match = raw.match(new RegExp('"' + key + '":"([^"]+)"'));
|
|
return match ? match[1] : '';
|
|
};
|
|
var token = extract('access-token');
|
|
if (token) {
|
|
localStorage.setItem('access-token', token);
|
|
localStorage.setItem('client', extract('client'));
|
|
localStorage.setItem('uid', extract('uid'));
|
|
localStorage.setItem('token-type', extract('token-type') || 'Bearer');
|
|
localStorage.setItem('expiry', extract('expiry'));
|
|
}
|
|
}
|
|
} catch(e) { /* ignore */ }
|
|
})();
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body class="text-slate-600">
|
|
<div id="app"></div>
|
|
<noscript>This app works best with JavaScript enabled.</noscript>
|
|
<script type="module" src="/app/javascript/entrypoints/superadmin.js"></script>
|
|
</body>
|
|
</html>
|