66d2f7cef4
2.评查点列表添加文档属性类型字段。 3.优化dify的对话侧边栏的显示效果。 4.评查点规则添加使用文档属性类型的输入框。添加多实体开关的操作开关。
107 lines
2.4 KiB
TypeScript
107 lines
2.4 KiB
TypeScript
/**
|
|
* 移动端检测工具函数(服务端)
|
|
* 通过 User-Agent 判断设备类型
|
|
*/
|
|
|
|
// 移动端 User-Agent 关键词
|
|
const MOBILE_UA_KEYWORDS = [
|
|
'Mobile',
|
|
'Android',
|
|
'iPhone',
|
|
'iPad',
|
|
'iPod',
|
|
'BlackBerry',
|
|
'Windows Phone',
|
|
'Opera Mini',
|
|
'IEMobile',
|
|
'webOS',
|
|
'Kindle',
|
|
'Silk',
|
|
'UCBrowser',
|
|
'MiuiBrowser',
|
|
'HuaweiBrowser',
|
|
'VivoBrowser',
|
|
'OppoBrowser'
|
|
];
|
|
|
|
// 平板设备关键词(可能需要区分对待)
|
|
const TABLET_UA_KEYWORDS = [
|
|
'iPad',
|
|
'Tablet',
|
|
'PlayBook',
|
|
'Silk'
|
|
];
|
|
|
|
/**
|
|
* 检测请求是否来自移动端设备
|
|
* @param request - HTTP 请求对象
|
|
* @returns true 表示移动端设备(包括平板)
|
|
*/
|
|
export function isMobileDevice(request: Request): boolean {
|
|
const userAgent = request.headers.get('User-Agent') || '';
|
|
|
|
// 检查是否包含移动端关键词
|
|
return MOBILE_UA_KEYWORDS.some(keyword =>
|
|
userAgent.toLowerCase().includes(keyword.toLowerCase())
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 检测请求是否来自平板设备
|
|
* @param request - HTTP 请求对象
|
|
* @returns true 表示平板设备
|
|
*/
|
|
export function isTabletDevice(request: Request): boolean {
|
|
const userAgent = request.headers.get('User-Agent') || '';
|
|
|
|
return TABLET_UA_KEYWORDS.some(keyword =>
|
|
userAgent.toLowerCase().includes(keyword.toLowerCase())
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 检测请求是否来自手机设备(排除平板)
|
|
* @param request - HTTP 请求对象
|
|
* @returns true 表示手机设备
|
|
*/
|
|
export function isPhoneDevice(request: Request): boolean {
|
|
return isMobileDevice(request) && !isTabletDevice(request);
|
|
}
|
|
|
|
/**
|
|
* 获取设备类型
|
|
* @param request - HTTP 请求对象
|
|
* @returns 'mobile' | 'tablet' | 'desktop'
|
|
*/
|
|
export function getDeviceType(request: Request): 'mobile' | 'tablet' | 'desktop' {
|
|
if (isTabletDevice(request)) {
|
|
return 'tablet';
|
|
}
|
|
if (isMobileDevice(request)) {
|
|
return 'mobile';
|
|
}
|
|
return 'desktop';
|
|
}
|
|
|
|
// 移动端用户专属的聊天页面路径
|
|
export const MOBILE_CHAT_PATH = '/chat-with-llm/chat';
|
|
|
|
// 移动端允许访问的路径(白名单)
|
|
export const MOBILE_ALLOWED_PATHS = [
|
|
'/chat-with-llm/chat',
|
|
'/login',
|
|
'/callback',
|
|
'/favicon.ico'
|
|
];
|
|
|
|
/**
|
|
* 检查路径是否为移动端允许访问的路径
|
|
* @param pathname - 当前访问的路径
|
|
* @returns true 表示允许访问
|
|
*/
|
|
export function isMobileAllowedPath(pathname: string): boolean {
|
|
return MOBILE_ALLOWED_PATHS.some(path =>
|
|
pathname === path || pathname.startsWith(path + '/')
|
|
);
|
|
}
|