1.添加移动端用户的检测工具类,移动端用户只能访问对话页面。
2.评查点列表添加文档属性类型字段。 3.优化dify的对话侧边栏的显示效果。 4.评查点规则添加使用文档属性类型的输入框。添加多实体开关的操作开关。
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* 移动端检测工具函数(服务端)
|
||||
* 通过 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 + '/')
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user