diff --git a/webapp/packages/chat-sdk/src/Chat/MessageContainer/index.tsx b/webapp/packages/chat-sdk/src/Chat/MessageContainer/index.tsx index e0a609689..25fcf3b7f 100644 --- a/webapp/packages/chat-sdk/src/Chat/MessageContainer/index.tsx +++ b/webapp/packages/chat-sdk/src/Chat/MessageContainer/index.tsx @@ -45,7 +45,6 @@ const MessageContainer: React.FC = ({ onSendMsg, }) => { const [triggerResize, setTriggerResize] = useState(false); - const onResize = useCallback(() => { setTriggerResize(true); setTimeout(() => { @@ -71,6 +70,7 @@ const MessageContainer: React.FC = ({ {messageList.map((msgItem: MessageItem, index: number) => { const { id: msgId, + questionId, modelId, agentId, type, @@ -95,6 +95,7 @@ const MessageContainer: React.FC = ({ {identityMsg && } = ( const convertHistoryMsg = (list: HistoryMsgItemType[]) => { return list.map((item: HistoryMsgItemType) => ({ id: item.questionId, + questionId: item.questionId, type: MessageTypeEnum.QUESTION, msg: item.queryText, parseInfos: item.parseInfos, diff --git a/webapp/packages/chat-sdk/src/Chat/type.ts b/webapp/packages/chat-sdk/src/Chat/type.ts index 63b15efab..0d236440c 100644 --- a/webapp/packages/chat-sdk/src/Chat/type.ts +++ b/webapp/packages/chat-sdk/src/Chat/type.ts @@ -17,6 +17,7 @@ export type MessageItem = { id: string | number; type?: MessageTypeEnum; msg?: string; + questionId?: number; msgValue?: string; identityMsg?: string; modelId?: number; diff --git a/webapp/packages/chat-sdk/src/components/ChatItem/ExpandParseTip.tsx b/webapp/packages/chat-sdk/src/components/ChatItem/ExpandParseTip.tsx index 88f7c9a76..38475f724 100644 --- a/webapp/packages/chat-sdk/src/components/ChatItem/ExpandParseTip.tsx +++ b/webapp/packages/chat-sdk/src/components/ChatItem/ExpandParseTip.tsx @@ -1,7 +1,7 @@ import React, { ReactNode } from 'react'; import { ChatContextType, DateInfoType, EntityInfoType, FilterItemType } from '../../common/type'; -import { Button, DatePicker, Row, Col, Tag } from 'antd'; -import { CheckCircleFilled, CloseCircleFilled, ReloadOutlined } from '@ant-design/icons'; +import { Button, DatePicker, Row, Col } from 'antd'; +import { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons'; import Loading from './Loading'; import FilterItem from './FilterItem'; import classNames from 'classnames'; @@ -9,6 +9,7 @@ import { isMobile } from '../../utils/utils'; import dayjs, { Dayjs } from 'dayjs'; import quarterOfYear from 'dayjs/plugin/quarterOfYear'; import { prefixCls, getTipNode } from './ParseTipUtils'; +import MarkDown from '../ChatMsg/MarkDown'; import 'dayjs/locale/zh-cn'; @@ -18,14 +19,10 @@ dayjs.locale('zh-cn'); const { RangePicker } = DatePicker; type Props = { - parseLoading: boolean; + isSimpleMode?: boolean; parseInfoOptions: ChatContextType[]; - parseTip: string; currentParseInfo?: ChatContextType; agentId?: number; - dimensionFilters: FilterItemType[]; - dateInfo: DateInfoType; - entityInfo: EntityInfoType; integrateSystem?: string; parseTimeCost?: number; isDeveloper?: boolean; @@ -41,14 +38,10 @@ type RangeValue = [Dayjs, Dayjs]; type RangeKeys = '近7日' | '近14日' | '近30日' | '本周' | '本月' | '上月' | '本季度' | '本年'; const ExpandParseTip: React.FC = ({ - parseLoading, + isSimpleMode = false, parseInfoOptions, - parseTip, currentParseInfo, agentId, - dimensionFilters, - dateInfo, - entityInfo, integrateSystem, parseTimeCost, isDeveloper, @@ -76,21 +69,26 @@ const ExpandParseTip: React.FC = ({ const getNode = (tipTitle: ReactNode, tipNode?: ReactNode, failed?: boolean) => { return (
-
- {!failed ? ( - - ) : ( - - )} -
- {tipTitle} - {tipNode === undefined && } + {isSimpleMode ? ( + <> + ) : ( +
+ {!failed ? ( + + ) : ( + + )} +
+ {tipTitle} + {tipNode === undefined && } +
-
+ )} + {(tipNode || tipNode === null) && (
= ({ ); }; - if (parseLoading) { - return getNode('意图解析中'); - } - - if (parseTip) { - return getNode( - <> - 意图解析失败 - {!!parseTimeCost && isDeveloper && ( - (耗时: {parseTimeCost}ms) - )} - , - parseTip, - true - ); - } - - if (parseInfoOptions.length === 0) { - return null; - } - const { modelId, queryMode, entity, nativeQuery } = currentParseInfo || {}; const entityAlias = entity?.alias?.[0]?.split('.')?.[0]; - const getFilterContent = (filters: any) => { + const getFilterContent = (filters: any, dateInfo: DateInfoType) => { const itemValueClass = `${prefixCls}-tip-item-value`; const { startDate, endDate } = dateInfo || {}; const tipItemOptionClass = classNames(`${prefixCls}-tip-item-option`, { [`${prefixCls}-mobile-tip-item-option`]: isMobile, }); + const disabled = true; return (
{!!dateInfo && ( @@ -147,6 +125,7 @@ const ExpandParseTip: React.FC = ({ value={[dayjs(startDate), dayjs(endDate)]} onChange={onDateInfoChange} format="YYYY-MM-DD" + disabled={disabled} renderExtraFooter={() => ( {Object.keys(ranges).map(key => ( @@ -167,6 +146,7 @@ const ExpandParseTip: React.FC = ({ )} {filters?.map((filter: any, index: number) => ( = ({ }; const getFiltersNode = parseInfo => { + const { dateInfo, dimensionFilters } = parseInfo; return ( <> {(!!dateInfo || !!dimensionFilters?.length) && (
筛选条件:
- {getFilterContent(dimensionFilters)} + {getFilterContent(dimensionFilters, dateInfo)}
)} @@ -202,59 +183,109 @@ const ExpandParseTip: React.FC = ({ return getNode(
- 意图解析 + 意图确认 {!!parseTimeCost && isDeveloper && ( (耗时: {parseTimeCost}ms) )}
, - queryMode === 'PLAIN_TEXT' ? null : ( - <> -
- {parseInfoOptions.map((parseInfo, index) => { - const { queryMode, properties } = parseInfo || {}; - const { type: agentType } = properties || {}; - return ( -
-
- - 解析{index + 1}: - -
-
+ + <> +
+ {parseInfoOptions.map((parseInfo, index) => { + const { queryMode, properties, textInfo, id, dimensionFilters, entityInfo } = + parseInfo || {}; + const { type: agentType } = properties || {}; + return isSimpleMode ? ( + <> +
+ + 解析{index + 1}: {' '} + + +
+ + ) : ( +
+
+ + 解析{index + 1}: + +
+
+ <> {getTipNode({ parseInfo, dimensionFilters, entityInfo })} {!(!!agentType && queryMode !== 'LLM_S2SQL') && getFiltersNode(parseInfo)} -
+
- ); - })} - {parseInfoOptions?.length > 1 && ( -
-
+
+ ); + })} + {/* {parseInfoOptions.map((parseInfo, index) => { + const { queryMode, properties, textInfo, id, dimensionFilters, entityInfo } = + parseInfo || {}; + const { type: agentType } = properties || {}; + return ( +
+
+ + 解析{index + 1}: + +
+
+ {isSimpleMode ? ( + + ) : ( + <> + {getTipNode({ parseInfo, dimensionFilters, entityInfo })} + {!(!!agentType && queryMode !== 'LLM_S2SQL') && getFiltersNode(parseInfo)} + + )} +
+
+ ); + })} */} + {parseInfoOptions?.length > 1 && ( +
+
+ {!currentParseInfo && ( 请选择适合的解析意图,并进行下一步: - {parseInfoOptions.map((parseInfo, index) => ( -
{ - onSelectParseInfo(parseInfo); - }} - key={parseInfo.id} - > - 解析{index + 1} -
- ))} -
+ )} + + {parseInfoOptions.map((parseInfo, index) => ( +
{ + if (currentParseInfo) { + return; + } + onSelectParseInfo(parseInfo); + }} + key={parseInfo.id} + > + 解析{index + 1} +
+ ))}
- )} -
- - ) +
+ )} +
+ ); }; diff --git a/webapp/packages/chat-sdk/src/components/ChatItem/FilterItem.tsx b/webapp/packages/chat-sdk/src/components/ChatItem/FilterItem.tsx index b40c3c4da..d2b7a96b7 100644 --- a/webapp/packages/chat-sdk/src/components/ChatItem/FilterItem.tsx +++ b/webapp/packages/chat-sdk/src/components/ChatItem/FilterItem.tsx @@ -14,6 +14,7 @@ type Props = { index: number; chatContext: ChatContextType; agentId?: number; + disabled?: boolean; entityAlias?: string; integrateSystem?: string; onFiltersChange: (filters: FilterItemType[]) => void; @@ -21,6 +22,7 @@ type Props = { }; const FilterItem: React.FC = ({ + disabled = false, modelId, filters, filter, @@ -151,6 +153,7 @@ const FilterItem: React.FC = ({ { label: '小于等于', value: '<=' }, { label: '小于', value: '<' }, ]} + disabled={disabled} className={`${prefixCls}-operator-control`} value={filter.operator} onChange={onOperatorChange} @@ -159,6 +162,7 @@ const FilterItem: React.FC = ({ {(typeof filter.value === 'number' || filter.value === null) && !filter.bizName?.includes('_id') ? ( = ({ ) : (typeof filter.value === 'string' || isArray(filter.value)) && !filter.bizName?.includes('_id') ? ( { - setFilterParams((preState) => { - return { - ...preState, - sensitiveLevel: value, - }; - }); - }} - /> - ), - }, - { - label: '是否为标签', - component: ( - { + setFilterParams((preState) => { + return { + ...preState, + sensitiveLevel: value, + }; + }); + }} + /> + ), + }, + { + label: '是否为标签', + component: ( + { - setFilterParams((preState) => { - return { - ...preState, - sensitiveLevel: value, - }; - }); - }} - /> - ), - }, - { - label: '是否为标签', - component: ( - { + setFilterParams((preState) => { + return { + ...preState, + sensitiveLevel: value, + }; + }); + }} + /> + ), + }, + { + label: '是否为标签', + component: ( +