@ai-group/chat-sdk 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +14 -5
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/index.js +21 -102
- package/dist/cjs/components/XAiChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAiChatbot/styles.d.ts +2 -14
- package/dist/cjs/components/XAiChatbot/styles.js +19 -161
- package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +4 -3
- package/dist/cjs/components/XAiConversations/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.d.ts +4 -0
- package/dist/cjs/components/XAiConversations/styles.js +23 -0
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +3 -3
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAiProvider/demo.styles.d.ts +2 -0
- package/dist/cjs/components/XAiProvider/index.d.ts +2 -2
- package/dist/cjs/components/XAiProvider/index.js +42 -12
- package/dist/cjs/components/XAiProvider/index.js.map +3 -3
- package/dist/cjs/components/XAiSender/XAiSender.stories.d.ts +6 -0
- package/dist/cjs/components/XAiSender/XAiSender.stories.js +86 -0
- package/dist/cjs/components/XAiSender/XAiSender.stories.js.map +7 -0
- package/dist/cjs/components/XAiSender/index.d.ts +4 -0
- package/dist/cjs/components/XAiSender/index.js +168 -0
- package/dist/cjs/components/XAiSender/index.js.map +7 -0
- package/dist/cjs/components/XAiSender/styles.d.ts +47 -0
- package/dist/cjs/components/XAiSender/styles.js +157 -0
- package/dist/cjs/components/XAiSender/styles.js.map +7 -0
- package/dist/cjs/constants/index.d.ts +1 -0
- package/dist/cjs/constants/index.js +3 -0
- package/dist/cjs/constants/index.js.map +2 -2
- package/dist/cjs/hooks/useAgentGenerator.js.map +1 -1
- package/dist/cjs/styles/common.d.ts +9 -0
- package/dist/cjs/styles/common.js +30 -0
- package/dist/cjs/styles/common.js.map +2 -2
- package/dist/cjs/types/XAiChatbot.d.ts +5 -17
- package/dist/cjs/types/XAiChatbot.js.map +1 -1
- package/dist/cjs/types/XAiConversations.d.ts +2 -0
- package/dist/cjs/types/XAiConversations.js.map +1 -1
- package/dist/cjs/types/XAiProvider.d.ts +6 -0
- package/dist/cjs/types/XAiProvider.js.map +2 -2
- package/dist/cjs/types/XAiSender.d.ts +13 -0
- package/dist/cjs/types/XAiSender.js +18 -0
- package/dist/cjs/types/XAiSender.js.map +7 -0
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +2 -0
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/umdEntry.js +2 -2
- package/dist/cjs/utils/umdEntry.js.map +2 -2
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +17 -6
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -1
- package/dist/esm/components/XAiChatbot/index.js +37 -177
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +2 -14
- package/dist/esm/components/XAiChatbot/styles.js +13 -33
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +8 -3
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.d.ts +4 -0
- package/dist/esm/components/XAiConversations/styles.js +9 -7
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +14 -7
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/esm/components/XAiProvider/demo.styles.d.ts +2 -0
- package/dist/esm/components/XAiProvider/index.d.ts +2 -2
- package/dist/esm/components/XAiProvider/index.js +50 -3
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiSender/XAiSender.stories.d.ts +6 -0
- package/dist/esm/components/XAiSender/XAiSender.stories.js +66 -0
- package/dist/esm/components/XAiSender/XAiSender.stories.js.map +1 -0
- package/dist/esm/components/XAiSender/index.d.ts +4 -0
- package/dist/esm/components/XAiSender/index.js +211 -0
- package/dist/esm/components/XAiSender/index.js.map +1 -0
- package/dist/esm/components/XAiSender/styles.d.ts +47 -0
- package/dist/esm/components/XAiSender/styles.js +21 -0
- package/dist/esm/components/XAiSender/styles.js.map +1 -0
- package/dist/esm/constants/index.d.ts +1 -0
- package/dist/esm/constants/index.js +3 -0
- package/dist/esm/constants/index.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.js +1 -1
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/styles/common.d.ts +9 -0
- package/dist/esm/styles/common.js +9 -2
- package/dist/esm/styles/common.js.map +1 -1
- package/dist/esm/types/XAiChatbot.d.ts +5 -17
- package/dist/esm/types/XAiChatbot.js.map +1 -1
- package/dist/esm/types/XAiConversations.d.ts +2 -0
- package/dist/esm/types/XAiConversations.js.map +1 -1
- package/dist/esm/types/XAiProvider.d.ts +6 -0
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/XAiSender.d.ts +13 -0
- package/dist/esm/types/XAiSender.js +2 -0
- package/dist/esm/types/XAiSender.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/umdEntry.js +16 -2
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAiProvider.ts"],
|
|
4
|
-
"sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport { Messages, sessionData } from '@/types';\n\n/**\n * 主题类型\n * @type {'default'}\n * @version 1.0.0\n */\nexport type ThemeType = 'default';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: string) => void;\n \n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n \n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n \n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n \n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => sessionData[];\n \n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSessionDetail: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n}\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n \n /**\n * 授权方式\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n pt?: string;\n \n /**\n * 租户key\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n tc?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n \n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n \n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n \n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n \n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n \n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n \n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n \n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n \n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n \n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n \n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n \n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAiB1B,IAAK,eAAL,kBAAKA,kBAAL;AAEL,EAAAA,cAAA,oBAAiB;AAEjB,EAAAA,cAAA,iBAAc;AAEd,EAAAA,cAAA,mBAAgB;AAEhB,EAAAA,cAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,iBAAc;AAEd,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;
|
|
4
|
+
"sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport { Messages, sessionData } from '@/types';\n\n/**\n * 主题类型\n * @type {'default'}\n * @version 1.0.0\n */\nexport type ThemeType = 'default';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: string) => void;\n \n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n \n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n \n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n \n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => sessionData[];\n \n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSessionDetail: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n}\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n \n /**\n * 授权方式\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n pt?: string;\n \n /**\n * 租户key\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n tc?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n \n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n \n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n \n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n \n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n \n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n \n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n \n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n \n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n \n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n \n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n \n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n \n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAiB1B,IAAK,eAAL,kBAAKA,kBAAL;AAEL,EAAAA,cAAA,oBAAiB;AAEjB,EAAAA,cAAA,iBAAc;AAEd,EAAAA,cAAA,mBAAgB;AAEhB,EAAAA,cAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,iBAAc;AAEd,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAgUL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
|
|
6
6
|
"names": ["ErrorCodeNum", "ErrorCode", "SuccessCode", "React"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SenderProps } from "@ant-design/x";
|
|
2
|
+
export interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel'> {
|
|
3
|
+
/** 是否展示清空按钮 */
|
|
4
|
+
clearBtnShow?: boolean;
|
|
5
|
+
/** 底部文案 */
|
|
6
|
+
footerTips?: string;
|
|
7
|
+
/** 清空对话框按钮回调 */
|
|
8
|
+
onClear?: () => void;
|
|
9
|
+
/** 加载中,点击停止生成按钮回调 */
|
|
10
|
+
onStop?: () => void;
|
|
11
|
+
/** 点击发送按钮的回调 */
|
|
12
|
+
onSubmit?: (type: string, content: string) => void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/types/XAiSender.ts
|
|
16
|
+
var XAiSender_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(XAiSender_exports);
|
|
18
|
+
//# sourceMappingURL=XAiSender.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/XAiSender.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SenderProps } from \"@ant-design/x\";\n\nexport interface XAiSenderProps extends Omit<SenderProps, 'onSubmit' | 'onCancel'> {\n /** 是否展示清空按钮 */\n clearBtnShow? : boolean;\n /** 底部文案 */\n footerTips?: string;\n /** 清空对话框按钮回调 */\n onClear?: () => void;\n /** 加载中,点击停止生成按钮回调 */\n onStop?: () => void;\n /** 点击发送按钮的回调 */\n onSubmit?: (type: string, content: string) => void;\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -19,12 +19,14 @@ module.exports = __toCommonJS(types_exports);
|
|
|
19
19
|
__reExport(types_exports, require("./XAiChatbot"), module.exports);
|
|
20
20
|
__reExport(types_exports, require("./XAiMessage"), module.exports);
|
|
21
21
|
__reExport(types_exports, require("./XAiProvider"), module.exports);
|
|
22
|
+
__reExport(types_exports, require("./XAiSender"), module.exports);
|
|
22
23
|
__reExport(types_exports, require("./XAiConversations"), module.exports);
|
|
23
24
|
// Annotate the CommonJS export names for ESM import in node:
|
|
24
25
|
0 && (module.exports = {
|
|
25
26
|
...require("./XAiChatbot"),
|
|
26
27
|
...require("./XAiMessage"),
|
|
27
28
|
...require("./XAiProvider"),
|
|
29
|
+
...require("./XAiSender"),
|
|
28
30
|
...require("./XAiConversations")
|
|
29
31
|
});
|
|
30
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './XAiChatbot';\nexport * from './XAiMessage';\nexport * from './XAiProvider';\nexport * from './XAiConversations'
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,+
|
|
4
|
+
"sourcesContent": ["export * from './XAiChatbot';\nexport * from './XAiMessage';\nexport * from './XAiProvider';\nexport * from './XAiSender';\nexport * from './XAiConversations';"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -52,11 +52,11 @@ var XAiWebSDK = class {
|
|
|
52
52
|
if (import_client.default.createRoot) {
|
|
53
53
|
this.root = import_client.default.createRoot(this.container);
|
|
54
54
|
this.root.render(
|
|
55
|
-
/* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_b = (_a = this.props.config) == null ? void 0 : _a.session) == null ? void 0 : _b.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))
|
|
55
|
+
/* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_b = (_a = this.props.config) == null ? void 0 : _a.session) == null ? void 0 : _b.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", justifyContent: "center", flex: 1 } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null))))
|
|
56
56
|
);
|
|
57
57
|
} else {
|
|
58
58
|
import_client.default.render(
|
|
59
|
-
/* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_d = (_c = this.props.config) == null ? void 0 : _c.session) == null ? void 0 : _d.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null))),
|
|
59
|
+
/* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, ((_d = (_c = this.props.config) == null ? void 0 : _c.session) == null ? void 0 : _d.showSessionList) && /* @__PURE__ */ import_react.default.createElement(import_XAiConversations.default, null), /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", justifyContent: "center", flex: 1 } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))),
|
|
60
60
|
this.container
|
|
61
61
|
);
|
|
62
62
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/umdEntry.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport { Messages } from '@/types/XAiMessage';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '@/components/XAiChatbot';\nimport XAiConversations from '@/components/XAiConversations';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: Messages) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <XAiChatbot />\n </XAiProvider>\n </div>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <XAiChatbot />\n </XAiProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n chat(text: string) {\n this.providerRef.current?.chat(text);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AACjC,oBAAqB;AAGrB,yBAAwB;AACxB,wBAAuB;AACvB,8BAA6B;AAE7B,IAAM,YAAN,MAAgB;AAAA,EAgBd,YAAY,WAAwB,OAAoB;AATxD,2BAAc,wBAA6B;AAUzC,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,UAAU,MAAM;AACrB,SAAK,YAAY,MAAM;AACvB,SAAK,YAAY,MAAM;AACvB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ;AAjCV;AAkCI,QAAI,cAAAA,QAAS,YAAY;AACvB,WAAK,OAAO,cAAAA,QAAS,WAAW,KAAK,SAAS;AAC9C,WAAK,KAAK;AAAA,QACR,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,KAC1C,6BAAAA,QAAA,cAAC,mBAAAC,SAAA,EAAY,KAAK,KAAK,aAAc,GAAG,KAAK,WACvC,gBAAK,MAAM,WAAX,mBAAmB,YAAnB,mBAA4B,oBAAmB,6BAAAD,QAAA,cAAC,wBAAAE,SAAA,IAAiB,GACnE,6BAAAF,QAAA,cAAC,kBAAAG,SAAA,IAAW,
|
|
4
|
+
"sourcesContent": ["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport { Messages } from '@/types/XAiMessage';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '@/components/XAiChatbot';\nimport XAiConversations from '@/components/XAiConversations';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: Messages) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: '100%', height: '100%' }}>\n <XAiProvider ref={this.providerRef} {...this.props}>\n { this.props.config?.session?.showSessionList && <XAiConversations />}\n <div style={{ display: 'flex', justifyContent: 'center', flex: 1 }}>\n <XAiChatbot />\n </div>\n </XAiProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n chat(text: string) {\n this.providerRef.current?.chat(text);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ReactDOM", "React", "XAiProvider", "XAiConversations", "XAiChatbot"]
|
|
7
7
|
}
|
|
@@ -11,7 +11,7 @@ import { useProviderContext, useProviderMethods } from "../../hooks/useProviderC
|
|
|
11
11
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
13
|
var meta = {
|
|
14
|
-
title: 'AI组件/XAiChatbot',
|
|
14
|
+
title: 'AI组件/XAiChatbot 聊天框',
|
|
15
15
|
component: XAiChatbot,
|
|
16
16
|
parameters: {
|
|
17
17
|
layout: 'centered'
|
|
@@ -182,14 +182,18 @@ var BasicUsageStory = function BasicUsageStory(args) {
|
|
|
182
182
|
_useState2 = _slicedToArray(_useState, 2),
|
|
183
183
|
messages = _useState2[0],
|
|
184
184
|
setMessages = _useState2[1];
|
|
185
|
-
|
|
185
|
+
var _useState3 = useState(false),
|
|
186
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
187
|
+
loading = _useState4[0],
|
|
188
|
+
setLoading = _useState4[1];
|
|
186
189
|
// 模拟流式返回AI消息
|
|
187
190
|
var handleSendMessage = function handleSendMessage(_type, msg) {
|
|
191
|
+
setLoading(true);
|
|
188
192
|
var userMsg = {
|
|
189
193
|
id: String(Date.now()),
|
|
190
194
|
type: 'TextMessage',
|
|
191
195
|
createdAt: new Date(),
|
|
192
|
-
status: MessageStatus.
|
|
196
|
+
status: MessageStatus.pending,
|
|
193
197
|
role: MessageRole.user,
|
|
194
198
|
content: {
|
|
195
199
|
text: msg
|
|
@@ -205,7 +209,7 @@ var BasicUsageStory = function BasicUsageStory(args) {
|
|
|
205
209
|
aiMsg += chunk;
|
|
206
210
|
setMessages(function (prev) {
|
|
207
211
|
var aiIndex = prev.findIndex(function (m) {
|
|
208
|
-
return m.id === 'stream-ai';
|
|
212
|
+
return m.id === 'stream-ai' && m.status === MessageStatus.pending;
|
|
209
213
|
});
|
|
210
214
|
if (aiIndex > -1) {
|
|
211
215
|
var updated = _toConsumableArray(prev);
|
|
@@ -214,13 +218,18 @@ var BasicUsageStory = function BasicUsageStory(args) {
|
|
|
214
218
|
updated[aiIndex] = _objectSpread(_objectSpread({}, oldMsg), {}, {
|
|
215
219
|
content: {
|
|
216
220
|
text: aiMsg
|
|
217
|
-
}
|
|
221
|
+
},
|
|
222
|
+
status: MessageStatus.pending
|
|
218
223
|
});
|
|
219
224
|
}
|
|
225
|
+
if (idx === 2) {
|
|
226
|
+
updated[aiIndex].status = MessageStatus.done;
|
|
227
|
+
setLoading(false);
|
|
228
|
+
}
|
|
220
229
|
return updated;
|
|
221
230
|
}
|
|
222
231
|
var aiMessage = {
|
|
223
|
-
id:
|
|
232
|
+
id: "stream-ai",
|
|
224
233
|
type: 'TextMessage',
|
|
225
234
|
createdAt: new Date(),
|
|
226
235
|
status: MessageStatus.pending,
|
|
@@ -299,7 +308,9 @@ var BasicUsageStory = function BasicUsageStory(args) {
|
|
|
299
308
|
borderRadius: '8px'
|
|
300
309
|
},
|
|
301
310
|
children: /*#__PURE__*/_jsx(XAiChatbot, _objectSpread(_objectSpread({}, args), {}, {
|
|
311
|
+
inputShow: false,
|
|
302
312
|
messages: messages,
|
|
313
|
+
loading: loading,
|
|
303
314
|
messageTooltip: ToolTip,
|
|
304
315
|
onClear: handleClear,
|
|
305
316
|
onSuggestMessageClick: handleSuggestMessageClick,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","user","parentMessageId","extra","cost","token","format","bytes","thinks","name","arguments","param1","action","icon","noFooter","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","handleSendMessage","_type","msg","userMsg","String","now","prev","concat","_toConsumableArray","aiMsg","stream","forEach","chunk","idx","setTimeout","aiIndex","findIndex","m","updated","oldMsg","_objectSpread","aiMessage","pending","length","map","doneMsg","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","ToolTip","_ref","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref2","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","loading","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","架构对比演示"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '检索从北京到上海的车票数据给我',\n },\n parentMessageId: '1',\n },\n // {\n // id: '22',\n // type: 'TextMessage',\n // createdAt: new Date(),\n // status: MessageStatus.done,\n // role: MessageRole.assistant,\n // content: {\n // text: '{\"data\":\"车次 | 出发站 -> 到达站 | 出发时间 -> 到达时间 | 历时\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 20:01 -> 21:50 历时:01:49\\\\n- 二等座: 有票 47元\\\\n- 一等座: 有票 75元\\\\n- 无座: 有票 47元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:21 -> 20:08 历时:01:47\\\\n- 二等座: 无票 47元\\\\n- 一等座: 无票 75元\\\\n- 无座: 有票 47元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海(telecode: SHH) 20:00 -> 21:39 历时:01:39\\\\n- 商务座: 剩余16张票 278元\\\\n- 一等座: 有票 149元\\\\n- 二等座: 有票 93元\\\\n- 无座: 有票 93元\\\\nC482(实际车次train_no: 560000C48220) 杭州(telecode: HZH) -> 上海南(telecode: SNH) 19:42 -> 21:20 历时:01:38\\\\n- 二等座: 有票 49元\\\\n- 一等座: 有票 77元\\\\n- 无座: 有票 49元\\\\nG8358(实际车次train_no: 56000G835800) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:11 -> 19:38 历时:01:27\\\\n- 商务座: 剩余11张票 357元\\\\n- 一等座: 有票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG1440(实际车次train_no: 57000G144005) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:55 -> 22:21 历时:01:26\\\\n- 商务座: 剩余17张票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 优选一等座: 有票 202元\\\\n- 无座: 有票 92元\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 20:01 -> 21:25 历时:01:24\\\\n- 二等座: 有票 40元\\\\n- 一等座: 有票 63元\\\\n- 无座: 有票 40元\\\\nC3050(实际车次train_no: 52000C305000) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 19:34 -> 20:58 历时:01:24\\\\n- 商务座: 无票 351元\\\\n- 一等座: 剩余13张票 161元\\\\n- 二等座: 有票 101元\\\\n- 无座: 有票 101元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海西(telecode: SXH) 20:00 -> 21:23 历时:01:23\\\\n- 商务座: 剩余16张票 271元\\\\n- 一等座: 有票 144元\\\\n- 二等座: 有票 90元\\\\n- 无座: 有票 90元\\\\nG7140(实际车次train_no: 56000G714000) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:38 -> 20:01 历时:01:23\\\\n- 商务座: 剩余3张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG8386(实际车次train_no: 54000G838601) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:25 -> 19:48 历时:01:23\\\\n- 商务座: 剩余1张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:21 -> 19:42 历时:01:21\\\\n- 二等座: 无票 40元\\\\n- 一等座: 无票 63元\\\\n- 无座: 有票 40元\\\\nG7124(实际车次train_no: 56000G712400) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:03 -> 19:24 历时:01:21\\\\n- 商务座: 剩余5张票 357元\\\\n- 一等座: 剩余5张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG3092(实际车次train_no: 5n000G309205) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:40 -> 21:59 历时:01:19\\\\n- 商务座: 剩余10张票 332元\\\\n- 一等座: 有票 152元\\\\n- 二等座: 有票 95元\\\\n- 无座: 有票 95元\\\\nG7112(实际车次train_no: 54000G711200) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:12 -> 21:31 历时:01:19\\\\n- 二等座: 有票 110元\\\\n- 一等座: 有票 174元\\\\n- 无座: 有票 110元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:51 -> 19:10 历时:01:19\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 17:55 -> 19:13 历时:01:18\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海南(telecode: SNH) 19:34 -> 20:50 历时:01:16\\\\n- 商务座: 剩余9张票 248元\\\\n- 一等座: 有票 132元\\\\n- 二等座: 有票 82元\\\\n- 无座: 有票 82元\\\\nG3078(实际车次train_no: 65000G307810) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 21:12 -> 22:26 历时:01:14\\\\n- 商务座: 有票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 无座: 有票 92元\\\\nG8304(实际车次train_no: 56000G830410) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:59 -> 21:11 历时:01:12\\\\n- 二等座: 有票 103元\\\\n- 一等座: 有票 163元\\\\n- 无座: 有票 103元\\\\nG8360(实际车次train_no: 5j000G836002) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:15 -> 20:27 历时:01:12\\\\n- 商务座: 剩余2张票 405元\\\\n- 一等座: 无票 185元\\\\n- 二等座: 有票 116元\\\\n- 无座: 有票 116元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 18:35 -> 19:47 历时:01:12\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG100(实际车次train_no: 6x0000G1000A) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:31 -> 19:43 历时:01:12\\\\n- 商务座: 剩余7张票 405元\\\\n- 一等座: 剩余19张票 185元\\\\n- 二等座: 有票 116元\\\\nG1306(实际车次train_no: 65000G130601) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:39 -> 22:49 历时:01:10\\\\n- 商务座: 剩余8张票 279元\\\\n- 一等座: 剩余15张票 128元\\\\n- 二等座: 有票 81元\\\\n- 无座: 有票 81元\\\\nG1372(实际车次train_no: 80000G13720S) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:02 -> 22:12 历时:01:10\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 无票 65元\\\\nG7314(实际车次train_no: 52000G731401) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:18 -> 20:27 历时:01:09\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 129元\\\\n- 二等座: 剩余5张票 80元\\\\n- 无座: 有票 80元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:34 -> 19:41 历时:01:07\\\\n- 商务座: 剩余5张票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:47 -> 18:54 历时:01:07\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:07 -> 19:13 历时:01:06\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG1388(实际车次train_no: 57000G138800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:52 -> 22:56 历时:01:04\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG998(实际车次train_no: 6i0000G99800) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:24 -> 22:27 历时:01:03\\\\n- 商务座: 剩余4张票 315元\\\\n- 一等座: 剩余11张票 145元\\\\n- 二等座: 有票 91元\\\\n- 无座: 有票 91元\\\\nG1316(实际车次train_no: 5n000G131600) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:01 -> 22:04 历时:01:03\\\\n- 商务座: 剩余6张票 374元\\\\n- 一等座: 剩余6张票 172元\\\\n- 二等座: 有票 108元\\\\n- 无座: 有票 108元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:25 -> 21:27 历时:01:02\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1510(实际车次train_no: 4z000G15100D) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:01 -> 19:03 历时:01:02\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:49 -> 20:50 历时:01:01\\\\n- 商务座: 剩余9张票 216元\\\\n- 一等座: 有票 115元\\\\n- 二等座: 有票 72元\\\\n- 无座: 有票 72元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海虹桥(telecode: AOH) 20:00 -> 21:00 历时:01:00\\\\n- 商务座: 剩余19张票 232元\\\\n- 一等座: 有票 124元\\\\n- 二等座: 有票 78元\\\\n- 无座: 有票 78元\\\\nG1350(实际车次train_no: 62000G135002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:02 -> 23:01 历时:00:59\\\\n- 商务座: 剩余7张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1506(实际车次train_no: 71000G150632) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:48 -> 22:47 历时:00:59\\\\n- 商务座: 剩余19张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:57 -> 20:56 历时:00:59\\\\n- 商务座: 剩余14张票 242元\\\\n- 一等座: 剩余1张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1378(实际车次train_no: 80000G13780O) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:19 -> 19:18 历时:00:59\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海松江(telecode: IMH) 19:34 -> 20:32 历时:00:58\\\\n- 商务座: 剩余9张票 208元\\\\n- 一等座: 有票 111元\\\\n- 二等座: 有票 68元\\\\n- 无座: 有票 68元\\\\nG1302(实际车次train_no: 6e000G130206) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:50 -> 21:47 历时:00:57\\\\n- 商务座: 剩余14张票 263元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7366(实际车次train_no: 56000G736606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:14 -> 21:11 历时:00:57\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:51 -> 18:48 历时:00:57\\\\n- 商务座: 剩余2张票 212元\\\\n- 一等座: 剩余1张票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7340(实际车次train_no: 5j000G734003) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:54 -> 21:50 历时:00:56\\\\n- 商务座: 剩余14张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1638(实际车次train_no: 5n000G163800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:45 -> 22:40 历时:00:55\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG7350(实际车次train_no: 5j000G735074) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:40 -> 21:35 历时:00:55\\\\n- 商务座: 剩余7张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG1328(实际车次train_no: 78000G13280E) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:35 -> 21:30 历时:00:55\\\\n- 商务座: 剩余6张票 242元\\\\n- 一等座: 剩余9张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:52 -> 19:47 历时:00:55\\\\n- 商务座: 无票 263元\\\\n- 一等座: 剩余1张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7528(实际车次train_no: 5j000G752802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:27 -> 22:21 历时:00:54\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 剩余8张票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG7588(实际车次train_no: 5j000G758802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:05 -> 19:59 历时:00:54\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 剩余1张票 87元\\\\nG3060(实际车次train_no: 5n000G306000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:10 -> 21:03 历时:00:53\\\\n- 商务座: 剩余2张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7566(实际车次train_no: 5j000G756606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:09 -> 20:02 历时:00:53\\\\n- 商务座: 剩余1张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG1640(实际车次train_no: 5n000G164000) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 22:38 -> 23:30 历时:00:52\\\\n- 商务座: 剩余12张票 216元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1390(实际车次train_no: 5w000G139010) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:34 -> 23:26 历时:00:52\\\\n- 商务座: 有票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG2190(实际车次train_no: 76000G21910F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:35 -> 22:27 历时:00:52\\\\n- 商务座: 剩余17张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1616(实际车次train_no: 71000G161602) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:29 -> 19:21 历时:00:52\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 105元\\\\n- 二等座: 无票 65元\\\\n- 无座: 无票 65元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:34 -> 19:25 历时:00:51\\\\n- 商务座: 剩余8张票 194元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 64元\\\\n- 无座: 有票 64元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:47 -> 18:37 历时:00:50\\\\n- 商务座: 无票 212元\\\\n- 一等座: 无票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 金山北(telecode: EGH) 18:35 -> 19:24 历时:00:49\\\\n- 商务座: 无票 219元\\\\n- 一等座: 剩余2张票 116元\\\\n- 二等座: 无票 72元\\\\n- 无座: 有票 72元\\\\nG820(实际车次train_no: 6c0000G82002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:07 -> 21:54 历时:00:47\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 优选一等座: 有票 177元\\\\n- 无座: 有票 80元\\\\nG470(实际车次train_no: 640000G47100) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:11 -> 21:57 历时:00:46\\\\n- 商务座: 剩余19张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG240(实际车次train_no: 800000G24000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:34 -> 20:20 历时:00:46\\\\n- 商务座: 剩余5张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7312(实际车次train_no: 52000G731207) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:24 -> 20:10 历时:00:46\\\\n- 商务座: 剩余3张票 239元\\\\n- 一等座: 剩余4张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG1386(实际车次train_no: 5u000G138620) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:01 -> 19:47 历时:00:46\\\\n- 商务座: 有票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 17:51 -> 18:37 历时:00:46\\\\n- 商务座: 剩余6张票 184元\\\\n- 一等座: 剩余17张票 98元\\\\n- 二等座: 剩余2张票 61元\\\\n- 无座: 有票 61元\\\\nG4918(实际车次train_no: 57000G49184G) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 23:20 -> 00:05 历时:00:45\\\\n- 商务座: 剩余7张票 242元\\\\n- 一等座: 剩余12张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1374(实际车次train_no: 80000G137410) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:30 -> 23:15 历时:00:45\\\\n- 商务座: 剩余18张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 无票 73元\\\\nG7536(实际车次train_no: 5j000G753603) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:22 -> 23:07 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余11张票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG358(实际车次train_no: 780000G35800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:19 -> 23:04 历时:00:45\\\\n- 商务座: 剩余17张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG822(实际车次train_no: 6c0000G82200) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:58 -> 22:43 历时:00:45\\\\n- 商务座: 剩余9张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG356(实际车次train_no: 780000G35600) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:16 -> 22:01 历时:00:45\\\\n- 商务座: 剩余18张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7562(实际车次train_no: 5e000G756250) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:38 -> 20:23 历时:00:45\\\\n- 商务座: 有票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG416(实际车次train_no: 5n0000G41600) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:30 -> 20:15 历时:00:45\\\\n- 商务座: 剩余6张票 239元\\\\n- 一等座: 剩余3张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG500(实际车次train_no: 710000G50000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:45 -> 19:30 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余6张票 117元\\\\n- 二等座: 剩余1张票 73元\\\\n- 无座: 有票 73元\\\\nG800(实际车次train_no: 650000G80000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:40 -> 19:25 历时:00:45\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 剩余18张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 19:49 -> 20:32 历时:00:43\\\\n- 商务座: 剩余9张票 176元\\\\n- 一等座: 有票 94元\\\\n- 二等座: 有票 58元\\\\n- 无座: 有票 58元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 20:25 -> 21:07 历时:00:42\\\\n- 商务座: 剩余9张票 153元\\\\n- 一等座: 有票 82元\\\\n- 二等座: 有票 51元\\\\n- 无座: 有票 51元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 19:57 -> 20:36 历时:00:39\\\\n- 商务座: 剩余18张票 169元\\\\n- 一等座: 剩余4张票 90元\\\\n- 二等座: 有票 56元\\\\n- 无座: 有票 56元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 18:52 -> 19:24 历时:00:32\\\\n- 商务座: 无票 184元\\\\n- 一等座: 剩余5张票 98元\\\\n- 二等座: 有票 61元\\\\n- 无座: 有票 61元\\\\n\"}',\n // },\n // extra: {\n // noFooter: true,\n // },\n // },\n {\n id: '3',\n type: 'ImageMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n extra: {\n cost: 6.09,\n token: 1999,\n },\n content: {\n format: 'svg',\n bytes: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n },\n thinks: [\n // 工具库调用(MCP_TOOL)\n {\n type: 'ActionExecutionMessage',\n createdAt: new Date(),\n id: 'tool-1',\n name: '已调用MCP智能工具',\n arguments: { param1: 'foo' },\n extra: {\n action: 'INVOKE_AGENT_TOOL_START',\n icon: documentIcon,\n type: 'MCP_TOOL',\n cost: '3.9',\n },\n },\n // // 工具库调用(PLUGIN_TOOL)\n // {\n // id: 'tool-2',\n // arguments: { param2: 'bar' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // type: 'AGENT_TOOL',\n\n // toolType: 'PLUGIN_TOOL',\n // agentToolName: '插件工具',\n // },\n // },\n // // 工具库调用(SKILL)\n // {\n // action: 'INVOKE_AGENT_TOOL_START',\n // id: 'tool-3',\n // toolType: 'SKILL',\n // agentToolName: '技能工具',\n // args: { param3: 'baz' },\n\n // },\n // // 知识库调用(FAQ)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-1',\n // processStatus: 'START',\n // args: { question: '什么是FAQ?' },\n // knowledgeType: 'FAQ',\n // },\n // // 知识库调用(DOCUMENT)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-2',\n // processStatus: 'START',\n // args: { question: '文档库介绍' },\n // knowledgeType: 'DOCUMENT',\n // },\n // 运行完毕\n {\n id: '5',\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n createdAt: new Date(),\n },\n ],\n parentMessageId: '2',\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n\n // 模拟流式返回AI消息\n const handleSendMessage = (_type: string, msg: string) => {\n const userMsg: Messages = {\n id: String(Date.now()),\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: { text: msg },\n };\n setMessages((prev) => [\n ...prev,\n userMsg,\n ]);\n let aiMsg = '';\n const stream = ['好的,', '我正在为你查询', '相关信息...'];\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n aiMsg += chunk;\n setMessages((prev) => {\n const aiIndex = prev.findIndex((m) => m.id === 'stream-ai');\n if (aiIndex > -1) {\n const updated = [...prev];\n const oldMsg = updated[aiIndex];\n if (oldMsg.type === 'TextMessage') {\n updated[aiIndex] = {\n ...oldMsg,\n content: { text: aiMsg },\n };\n }\n return updated;\n }\n const aiMessage: Messages = {\n id: 'stream-ai',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.assistant,\n content: { text: aiMsg },\n };\n return [\n ...prev,\n aiMessage,\n ];\n });\n if (idx === stream.length - 1) {\n setTimeout(() => {\n setMessages((prev) => prev.map((m) => {\n if (m.id === 'stream-ai') {\n const doneMsg: Messages = { ...m, status: MessageStatus.done };\n return doneMsg;\n }\n return m;\n }));\n }, 500);\n }\n }, 800 * (idx + 1));\n });\n };\n\n // 模拟清空数据\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { cost && <div>{ cost }s</div>}\n { token && <Divider type=\"vertical\" /> }\n { token && <div>{ token } tokens</div> }\n </div>\n );\n };\n\n return (\n <div style={{ height: '600px', width: '400px', border: '1px solid #e7e7e7', borderRadius: '8px' }}>\n <XAiChatbot\n {...args}\n messages={messages}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","user","parentMessageId","extra","cost","token","format","bytes","thinks","name","arguments","param1","action","icon","noFooter","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","_useState3","_useState4","loading","setLoading","handleSendMessage","_type","msg","userMsg","String","now","pending","prev","concat","_toConsumableArray","aiMsg","stream","forEach","chunk","idx","setTimeout","aiIndex","findIndex","m","updated","oldMsg","_objectSpread","aiMessage","length","map","doneMsg","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","ToolTip","_ref","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","inputShow","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref2","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","架构对比演示"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot 聊天框',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '检索从北京到上海的车票数据给我',\n },\n parentMessageId: '1',\n },\n // {\n // id: '22',\n // type: 'TextMessage',\n // createdAt: new Date(),\n // status: MessageStatus.done,\n // role: MessageRole.assistant,\n // content: {\n // text: '{\"data\":\"车次 | 出发站 -> 到达站 | 出发时间 -> 到达时间 | 历时\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 20:01 -> 21:50 历时:01:49\\\\n- 二等座: 有票 47元\\\\n- 一等座: 有票 75元\\\\n- 无座: 有票 47元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:21 -> 20:08 历时:01:47\\\\n- 二等座: 无票 47元\\\\n- 一等座: 无票 75元\\\\n- 无座: 有票 47元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海(telecode: SHH) 20:00 -> 21:39 历时:01:39\\\\n- 商务座: 剩余16张票 278元\\\\n- 一等座: 有票 149元\\\\n- 二等座: 有票 93元\\\\n- 无座: 有票 93元\\\\nC482(实际车次train_no: 560000C48220) 杭州(telecode: HZH) -> 上海南(telecode: SNH) 19:42 -> 21:20 历时:01:38\\\\n- 二等座: 有票 49元\\\\n- 一等座: 有票 77元\\\\n- 无座: 有票 49元\\\\nG8358(实际车次train_no: 56000G835800) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:11 -> 19:38 历时:01:27\\\\n- 商务座: 剩余11张票 357元\\\\n- 一等座: 有票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG1440(实际车次train_no: 57000G144005) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:55 -> 22:21 历时:01:26\\\\n- 商务座: 剩余17张票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 优选一等座: 有票 202元\\\\n- 无座: 有票 92元\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 20:01 -> 21:25 历时:01:24\\\\n- 二等座: 有票 40元\\\\n- 一等座: 有票 63元\\\\n- 无座: 有票 40元\\\\nC3050(实际车次train_no: 52000C305000) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 19:34 -> 20:58 历时:01:24\\\\n- 商务座: 无票 351元\\\\n- 一等座: 剩余13张票 161元\\\\n- 二等座: 有票 101元\\\\n- 无座: 有票 101元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海西(telecode: SXH) 20:00 -> 21:23 历时:01:23\\\\n- 商务座: 剩余16张票 271元\\\\n- 一等座: 有票 144元\\\\n- 二等座: 有票 90元\\\\n- 无座: 有票 90元\\\\nG7140(实际车次train_no: 56000G714000) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:38 -> 20:01 历时:01:23\\\\n- 商务座: 剩余3张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG8386(实际车次train_no: 54000G838601) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:25 -> 19:48 历时:01:23\\\\n- 商务座: 剩余1张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:21 -> 19:42 历时:01:21\\\\n- 二等座: 无票 40元\\\\n- 一等座: 无票 63元\\\\n- 无座: 有票 40元\\\\nG7124(实际车次train_no: 56000G712400) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:03 -> 19:24 历时:01:21\\\\n- 商务座: 剩余5张票 357元\\\\n- 一等座: 剩余5张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG3092(实际车次train_no: 5n000G309205) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:40 -> 21:59 历时:01:19\\\\n- 商务座: 剩余10张票 332元\\\\n- 一等座: 有票 152元\\\\n- 二等座: 有票 95元\\\\n- 无座: 有票 95元\\\\nG7112(实际车次train_no: 54000G711200) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:12 -> 21:31 历时:01:19\\\\n- 二等座: 有票 110元\\\\n- 一等座: 有票 174元\\\\n- 无座: 有票 110元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:51 -> 19:10 历时:01:19\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 17:55 -> 19:13 历时:01:18\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海南(telecode: SNH) 19:34 -> 20:50 历时:01:16\\\\n- 商务座: 剩余9张票 248元\\\\n- 一等座: 有票 132元\\\\n- 二等座: 有票 82元\\\\n- 无座: 有票 82元\\\\nG3078(实际车次train_no: 65000G307810) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 21:12 -> 22:26 历时:01:14\\\\n- 商务座: 有票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 无座: 有票 92元\\\\nG8304(实际车次train_no: 56000G830410) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:59 -> 21:11 历时:01:12\\\\n- 二等座: 有票 103元\\\\n- 一等座: 有票 163元\\\\n- 无座: 有票 103元\\\\nG8360(实际车次train_no: 5j000G836002) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:15 -> 20:27 历时:01:12\\\\n- 商务座: 剩余2张票 405元\\\\n- 一等座: 无票 185元\\\\n- 二等座: 有票 116元\\\\n- 无座: 有票 116元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 18:35 -> 19:47 历时:01:12\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG100(实际车次train_no: 6x0000G1000A) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:31 -> 19:43 历时:01:12\\\\n- 商务座: 剩余7张票 405元\\\\n- 一等座: 剩余19张票 185元\\\\n- 二等座: 有票 116元\\\\nG1306(实际车次train_no: 65000G130601) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:39 -> 22:49 历时:01:10\\\\n- 商务座: 剩余8张票 279元\\\\n- 一等座: 剩余15张票 128元\\\\n- 二等座: 有票 81元\\\\n- 无座: 有票 81元\\\\nG1372(实际车次train_no: 80000G13720S) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:02 -> 22:12 历时:01:10\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 无票 65元\\\\nG7314(实际车次train_no: 52000G731401) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:18 -> 20:27 历时:01:09\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 129元\\\\n- 二等座: 剩余5张票 80元\\\\n- 无座: 有票 80元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:34 -> 19:41 历时:01:07\\\\n- 商务座: 剩余5张票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:47 -> 18:54 历时:01:07\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:07 -> 19:13 历时:01:06\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG1388(实际车次train_no: 57000G138800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:52 -> 22:56 历时:01:04\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG998(实际车次train_no: 6i0000G99800) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:24 -> 22:27 历时:01:03\\\\n- 商务座: 剩余4张票 315元\\\\n- 一等座: 剩余11张票 145元\\\\n- 二等座: 有票 91元\\\\n- 无座: 有票 91元\\\\nG1316(实际车次train_no: 5n000G131600) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:01 -> 22:04 历时:01:03\\\\n- 商务座: 剩余6张票 374元\\\\n- 一等座: 剩余6张票 172元\\\\n- 二等座: 有票 108元\\\\n- 无座: 有票 108元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:25 -> 21:27 历时:01:02\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1510(实际车次train_no: 4z000G15100D) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:01 -> 19:03 历时:01:02\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:49 -> 20:50 历时:01:01\\\\n- 商务座: 剩余9张票 216元\\\\n- 一等座: 有票 115元\\\\n- 二等座: 有票 72元\\\\n- 无座: 有票 72元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海虹桥(telecode: AOH) 20:00 -> 21:00 历时:01:00\\\\n- 商务座: 剩余19张票 232元\\\\n- 一等座: 有票 124元\\\\n- 二等座: 有票 78元\\\\n- 无座: 有票 78元\\\\nG1350(实际车次train_no: 62000G135002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:02 -> 23:01 历时:00:59\\\\n- 商务座: 剩余7张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1506(实际车次train_no: 71000G150632) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:48 -> 22:47 历时:00:59\\\\n- 商务座: 剩余19张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:57 -> 20:56 历时:00:59\\\\n- 商务座: 剩余14张票 242元\\\\n- 一等座: 剩余1张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1378(实际车次train_no: 80000G13780O) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:19 -> 19:18 历时:00:59\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海松江(telecode: IMH) 19:34 -> 20:32 历时:00:58\\\\n- 商务座: 剩余9张票 208元\\\\n- 一等座: 有票 111元\\\\n- 二等座: 有票 68元\\\\n- 无座: 有票 68元\\\\nG1302(实际车次train_no: 6e000G130206) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:50 -> 21:47 历时:00:57\\\\n- 商务座: 剩余14张票 263元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7366(实际车次train_no: 56000G736606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:14 -> 21:11 历时:00:57\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:51 -> 18:48 历时:00:57\\\\n- 商务座: 剩余2张票 212元\\\\n- 一等座: 剩余1张票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7340(实际车次train_no: 5j000G734003) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:54 -> 21:50 历时:00:56\\\\n- 商务座: 剩余14张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1638(实际车次train_no: 5n000G163800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:45 -> 22:40 历时:00:55\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG7350(实际车次train_no: 5j000G735074) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:40 -> 21:35 历时:00:55\\\\n- 商务座: 剩余7张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG1328(实际车次train_no: 78000G13280E) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:35 -> 21:30 历时:00:55\\\\n- 商务座: 剩余6张票 242元\\\\n- 一等座: 剩余9张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:52 -> 19:47 历时:00:55\\\\n- 商务座: 无票 263元\\\\n- 一等座: 剩余1张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7528(实际车次train_no: 5j000G752802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:27 -> 22:21 历时:00:54\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 剩余8张票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG7588(实际车次train_no: 5j000G758802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:05 -> 19:59 历时:00:54\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 剩余1张票 87元\\\\nG3060(实际车次train_no: 5n000G306000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:10 -> 21:03 历时:00:53\\\\n- 商务座: 剩余2张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7566(实际车次train_no: 5j000G756606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:09 -> 20:02 历时:00:53\\\\n- 商务座: 剩余1张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG1640(实际车次train_no: 5n000G164000) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 22:38 -> 23:30 历时:00:52\\\\n- 商务座: 剩余12张票 216元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1390(实际车次train_no: 5w000G139010) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:34 -> 23:26 历时:00:52\\\\n- 商务座: 有票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG2190(实际车次train_no: 76000G21910F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:35 -> 22:27 历时:00:52\\\\n- 商务座: 剩余17张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1616(实际车次train_no: 71000G161602) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:29 -> 19:21 历时:00:52\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 105元\\\\n- 二等座: 无票 65元\\\\n- 无座: 无票 65元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:34 -> 19:25 历时:00:51\\\\n- 商务座: 剩余8张票 194元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 64元\\\\n- 无座: 有票 64元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:47 -> 18:37 历时:00:50\\\\n- 商务座: 无票 212元\\\\n- 一等座: 无票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 金山北(telecode: EGH) 18:35 -> 19:24 历时:00:49\\\\n- 商务座: 无票 219元\\\\n- 一等座: 剩余2张票 116元\\\\n- 二等座: 无票 72元\\\\n- 无座: 有票 72元\\\\nG820(实际车次train_no: 6c0000G82002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:07 -> 21:54 历时:00:47\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 优选一等座: 有票 177元\\\\n- 无座: 有票 80元\\\\nG470(实际车次train_no: 640000G47100) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:11 -> 21:57 历时:00:46\\\\n- 商务座: 剩余19张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG240(实际车次train_no: 800000G24000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:34 -> 20:20 历时:00:46\\\\n- 商务座: 剩余5张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7312(实际车次train_no: 52000G731207) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:24 -> 20:10 历时:00:46\\\\n- 商务座: 剩余3张票 239元\\\\n- 一等座: 剩余4张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG1386(实际车次train_no: 5u000G138620) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:01 -> 19:47 历时:00:46\\\\n- 商务座: 有票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 17:51 -> 18:37 历时:00:46\\\\n- 商务座: 剩余6张票 184元\\\\n- 一等座: 剩余17张票 98元\\\\n- 二等座: 剩余2张票 61元\\\\n- 无座: 有票 61元\\\\nG4918(实际车次train_no: 57000G49184G) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 23:20 -> 00:05 历时:00:45\\\\n- 商务座: 剩余7张票 242元\\\\n- 一等座: 剩余12张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1374(实际车次train_no: 80000G137410) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:30 -> 23:15 历时:00:45\\\\n- 商务座: 剩余18张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 无票 73元\\\\nG7536(实际车次train_no: 5j000G753603) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:22 -> 23:07 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余11张票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG358(实际车次train_no: 780000G35800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:19 -> 23:04 历时:00:45\\\\n- 商务座: 剩余17张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG822(实际车次train_no: 6c0000G82200) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:58 -> 22:43 历时:00:45\\\\n- 商务座: 剩余9张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG356(实际车次train_no: 780000G35600) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:16 -> 22:01 历时:00:45\\\\n- 商务座: 剩余18张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7562(实际车次train_no: 5e000G756250) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:38 -> 20:23 历时:00:45\\\\n- 商务座: 有票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG416(实际车次train_no: 5n0000G41600) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:30 -> 20:15 历时:00:45\\\\n- 商务座: 剩余6张票 239元\\\\n- 一等座: 剩余3张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG500(实际车次train_no: 710000G50000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:45 -> 19:30 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余6张票 117元\\\\n- 二等座: 剩余1张票 73元\\\\n- 无座: 有票 73元\\\\nG800(实际车次train_no: 650000G80000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:40 -> 19:25 历时:00:45\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 剩余18张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 19:49 -> 20:32 历时:00:43\\\\n- 商务座: 剩余9张票 176元\\\\n- 一等座: 有票 94元\\\\n- 二等座: 有票 58元\\\\n- 无座: 有票 58元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 20:25 -> 21:07 历时:00:42\\\\n- 商务座: 剩余9张票 153元\\\\n- 一等座: 有票 82元\\\\n- 二等座: 有票 51元\\\\n- 无座: 有票 51元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 19:57 -> 20:36 历时:00:39\\\\n- 商务座: 剩余18张票 169元\\\\n- 一等座: 剩余4张票 90元\\\\n- 二等座: 有票 56元\\\\n- 无座: 有票 56元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 18:52 -> 19:24 历时:00:32\\\\n- 商务座: 无票 184元\\\\n- 一等座: 剩余5张票 98元\\\\n- 二等座: 有票 61元\\\\n- 无座: 有票 61元\\\\n\"}',\n // },\n // extra: {\n // noFooter: true,\n // },\n // },\n {\n id: '3',\n type: 'ImageMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n extra: {\n cost: 6.09,\n token: 1999,\n },\n content: {\n format: 'svg',\n bytes: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n },\n thinks: [\n // 工具库调用(MCP_TOOL)\n {\n type: 'ActionExecutionMessage',\n createdAt: new Date(),\n id: 'tool-1',\n name: '已调用MCP智能工具',\n arguments: { param1: 'foo' },\n extra: {\n action: 'INVOKE_AGENT_TOOL_START',\n icon: documentIcon,\n type: 'MCP_TOOL',\n cost: '3.9',\n },\n },\n // // 工具库调用(PLUGIN_TOOL)\n // {\n // id: 'tool-2',\n // arguments: { param2: 'bar' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // type: 'AGENT_TOOL',\n\n // toolType: 'PLUGIN_TOOL',\n // agentToolName: '插件工具',\n // },\n // },\n // // 工具库调用(SKILL)\n // {\n // action: 'INVOKE_AGENT_TOOL_START',\n // id: 'tool-3',\n // toolType: 'SKILL',\n // agentToolName: '技能工具',\n // args: { param3: 'baz' },\n\n // },\n // // 知识库调用(FAQ)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-1',\n // processStatus: 'START',\n // args: { question: '什么是FAQ?' },\n // knowledgeType: 'FAQ',\n // },\n // // 知识库调用(DOCUMENT)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-2',\n // processStatus: 'START',\n // args: { question: '文档库介绍' },\n // knowledgeType: 'DOCUMENT',\n // },\n // 运行完毕\n {\n id: '5',\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n createdAt: new Date(),\n },\n ],\n parentMessageId: '2',\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n const [loading, setLoading] = useState<Boolean>(false);\n // 模拟流式返回AI消息\n const handleSendMessage = (_type: string, msg: string) => {\n setLoading(true);\n const userMsg: Messages = {\n id: String(Date.now()),\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.user,\n content: { text: msg },\n };\n setMessages((prev) => [\n ...prev,\n userMsg,\n ]);\n let aiMsg = '';\n const stream = ['好的,', '我正在为你查询', '相关信息...'];\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n aiMsg += chunk;\n setMessages((prev) => {\n const aiIndex = prev.findIndex((m) => m.id === 'stream-ai' && m.status === MessageStatus.pending);\n if (aiIndex > -1) {\n const updated = [...prev];\n const oldMsg = updated[aiIndex];\n if (oldMsg.type === 'TextMessage') {\n updated[aiIndex] = {\n ...oldMsg,\n content: { text: aiMsg },\n status: MessageStatus.pending,\n };\n }\n\n if (idx === 2) {\n updated[aiIndex].status = MessageStatus.done;\n setLoading(false);\n }\n return updated;\n }\n const aiMessage: Messages = {\n id: `stream-ai`,\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.assistant,\n content: { text: aiMsg },\n };\n return [\n ...prev,\n aiMessage,\n ];\n });\n if (idx === stream.length - 1) {\n setTimeout(() => {\n setMessages((prev) => prev.map((m) => {\n if (m.id === 'stream-ai') {\n const doneMsg: Messages = { ...m, status: MessageStatus.done };\n return doneMsg;\n }\n return m;\n }));\n }, 500);\n }\n }, 800 * (idx + 1));\n });\n };\n\n // 模拟清空数据\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { cost && <div>{ cost }s</div>}\n { token && <Divider type=\"vertical\" /> }\n { token && <div>{ token } tokens</div> }\n </div>\n );\n };\n\n return (\n <div style={{ height: '600px', width: '400px', border: '1px solid #e7e7e7', borderRadius: '8px' }}>\n <XAiChatbot\n {...args}\n inputShow={false}\n messages={messages}\n loading={loading}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
|