[improvement][headless-fe] 1.Added configuration for the large language model in the agent; 2.upgraded React version from 17 to 18; 3.modified some UI effects. (#1049)

* [improvement][semantic-fe] Add model alias setting & Add view permission restrictions to the model permission management tab.
[improvement][semantic-fe] Add permission control to the action buttons for the main domain; apply high sensitivity filtering to the authorization of metrics/dimensions.
[improvement][semantic-fe] Optimize the editing mode in the dimension/metric/datasource components to use the modelId stored in the database for data, instead of relying on the data from the state manager.

* [improvement][semantic-fe] Add time granularity setting in the data source configuration.

* [improvement][semantic-fe] Dictionary import for dimension values supported in Q&A visibility

* [improvement][semantic-fe] Modification of data source creation prompt wording"

* [improvement][semantic-fe] metric market experience optimization

* [improvement][semantic-fe] enhance the analysis of metric trends

* [improvement][semantic-fe] optimize the presentation of metric trend permissions

* [improvement][semantic-fe] add metric trend download functionality

* [improvement][semantic-fe] fix the dimension initialization issue in metric correlation

* [improvement][semantic-fe] Fix the issue of database changes not taking effect when creating based on an SQL data source.

* [improvement][semantic-fe] Optimizing pagination logic and some CSS styles

* [improvement][semantic-fe] Fixing the API for the indicator list by changing "current" to "pageNum"

* [improvement][semantic-fe] Fixing the default value setting for the indicator list

* [improvement][semantic-fe] Adding batch operations for indicators/dimensions/models

* [improvement][semantic-fe] Replacing the single status update API for indicators/dimensions with a batch update API

* [improvement][semantic-fe] Redesigning the indicator homepage to incorporate trend charts and table functionality for indicators

* [improvement][semantic-fe] Optimizing the logic for setting dimension values and editing data sources, and adding system settings functionality

* [improvement][semantic-fe] Upgrading antd version to 5.x, extracting the batch operation button component, optimizing the interaction for system settings, and expanding the configuration generation types for list-to-select component.

* [improvement][semantic-fe] Adding the ability to filter dimensions based on whether they are tags or not.

* [improvement][semantic-fe] Adding the ability to edit relationships between models in the canvas.

* [improvement][semantic-fe] Updating the datePicker component to use dayjs instead.

* [improvement][semantic-fe] Fixing the issue with passing the model ID for dimensions in the indicator market.

* [improvement][semantic-fe] Fixing the abnormal state of the popup when creating a model.

* [improvement][semantic-fe] Adding permission logic for bulk operations in the indicator market.

* [improvement][semantic-fe] Adding the ability to download and transpose data.

* [improvement][semantic-fe] Fixing the initialization issue with the date selection component in the indicator details page when switching time granularity.

* [improvement][semantic-fe] Fixing the logic error in the dimension value setting.

* [improvement][semantic-fe] Fixing the synchronization issue with the question and answer settings information.

* [improvement][semantic-fe] Optimizing the canvas functionality for better performance and user experience.

* [improvement][semantic-fe] Optimizing the update process for drawing model relationship edges in the canvas.

* [improvement][semantic-fe] Changing the line type for canvas connections.

* [improvement][semantic-fe] Replacing the initialization variable from "semantic" to "headless".

* [improvement][semantic-fe] Fixing the missing migration issue for default drill-down dimension configuration in model editing. Additionally, optimizing the data retrieval method for initializing fields in the model.

* [improvement][semantic-fe] Updating the logic for the fieldName.

* [improvement][semantic-fe] Adjusting the position of the metrics tab.

* [improvement][semantic-fe] Changing the 字段名称 to 英文名称.

* [improvement][semantic-fe] Fix metric measurement deletion.

* [improvement][semantic-fe] UI optimization for metric details page.

* [improvement][semantic-fe] UI optimization for metric details page.

* [improvement][semantic-fe] UI adjustment for metric details page.

* [improvement][semantic-fe] The granularity field in the time type of model editing now supports setting it as empty.

* [improvement][semantic-fe] Added field type and metric type to the metric creation options.

* [improvement][semantic-fe] The organization structure selection feature has been added to the permission management.

* [improvement][semantic-fe] Improved user experience for the metric list.

* [improvement][semantic-fe] fix update the metric list.

* [improvement][headless-fe] Added view management functionality.

* [improvement][headless-fe] The view management functionality has been added. This feature allows users to create, edit, and manage different views within the system.

* [improvement][headless-fe] Added model editing side effect detection.

* [improvement][headless-fe] Fixed the logic error in view editing.

* [improvement][headless-fe] Fixed the issue with initializing dimension associations in metric settings.

* [improvement][headless-fe] Added the ability to hide the Q&A settings entry point.

* [improvement][headless-fe] Fixed the issue with selecting search results in metric field creation.

* [improvement][headless-fe] Added search functionality to the field list in model editing.

* [improvement][headless-fe] fix the field list in model editing

* [improvement][headless-fe] Restructured the data for the dimension value settings interface.

* [improvement][headless-fe] Added dynamic variable functionality to model creation based on SQL scripts.

* [improvement][headless-fe] Added support for passing dynamic variables as parameters in the executeSql function.

* [improvement][headless-fe] Resolved the issue where users were unable to select all options for dimensions, metrics, and fields in the metric generation process.

* [improvement][headless-fe] Replaced the term "view" with "dataset"

* [improvement][headless-fe] Added the ability to export metrics and dimensions to a specific target.

* [improvement][headless-fe] Enhanced dataset creation to support the tag mode.

* [improvement][headless-fe] Added tag value setting.

* [improvement][headless-fe] Optimized the tag setting system.

* [improvement][headless-fe] Optimized the tag setting system.

* [improvement][headless-fe] Updated the data initialization for model editing to use API requests instead.

* [improvement][headless-fe] Added search functionality to model management.

* [improvement][headless-fe] Removed field null validation during model editing.

* [improvement][headless-fe] Updated the batch operation button component.

* [improvement][headless-fe] Optimized the logic for initializing indicators in dimension value settings.

* [improvement][headless-fe] Adjusted the length of the input field for model editing names.

* [improvement][headless-fe]  Lock the version of the @ant-design/pro-table component and replace it with @ant-design/pro-components.

* [improvement][headless-fe] Optimized the style of the metrics market and tags market.

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling.

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling

* [improvement][headless-fe] The quick creation of model fields now defaults to using the "comment" field for filling.

* [improvement][headless-fe] Fixed the issue where the conditions for metric measurement creation were not being saved correctly.

* [improvement][headless-fe] Default value setting for hiding dimensions.

* [improvement][headless-fe] Updated the file imports in the project.

* [improvement][headless-fe] Adjusted the logic for displaying the tab in the theme domain.

* [improvement][headless-fe] Added term management functionality.

* [improvement][headless-fe] When creating a model, the current metric operator now allows for clearance.

* [improvement][headless-fe] Term management interface transformation

* [improvement][headless-fe] Migrating scaffold version to @umi/max

* [improvement][headless-fe] remove modle column

* [improvement][headless-fe] 1.Added configuration for the large language model in the agent; 2.upgraded React version from 17 to 18; 3.modified some UI effects.
This commit is contained in:
tristanliu
2024-05-30 10:40:01 +08:00
committed by GitHub
parent 8aab359def
commit 6aaf471582
22 changed files with 1951 additions and 2451 deletions

View File

@@ -1,6 +1,6 @@
import { Settings as LayoutSettings } from '@ant-design/pro-layout';
import { ProLayoutProps } from '@ant-design/pro-components';
const Settings: LayoutSettings & {
const Settings: ProLayoutProps & {
pwa?: boolean;
logo?: string;
} = {
@@ -14,11 +14,11 @@ const Settings: LayoutSettings & {
title: '',
pwa: false,
iconfontUrl: '//at.alicdn.com/t/c/font_4120566_x5c4www9bqm.js',
splitMenus: true,
menu: {
autoClose: false,
ignoreFlatMenu: true,
},
// splitMenus: true,
// menu: {
// autoClose: false,
// ignoreFlatMenu: true,
// },
};
export const publicPath = '/webapp/';

View File

@@ -57,7 +57,6 @@
"dependencies": {
"@ant-design/icons": "^5.2.6",
"@ant-design/pro-components": "2.7.0",
"@ant-design/pro-layout": "^7.17.15",
"@antv/dom-util": "^2.0.4",
"@antv/g6": "^4.8.23",
"@antv/g6-core": "^0.8.23",
@@ -83,22 +82,20 @@
"jsencrypt": "^3.0.1",
"lodash": "^4.17.11",
"moment": "^2.29.1",
"nprogress": "^0.2.0",
"numeral": "^2.0.6",
"omit.js": "^2.0.2",
"path-to-regexp": "^2.4.0",
"qs": "^6.9.0",
"query-string": "^9.0.0",
"react": "^17.0.0",
"react": "^18.3.1",
"react-ace": "^9.4.1",
"react-dev-inspector": "^1.8.4",
"react-dom": "^17.0.2",
"react-fast-marquee": "^1.6.0",
"react-helmet-async": "^1.0.4",
"react-spinners": "^0.10.6",
"react-dom": "^18.3.1",
"react-spinners": "^0.13.8",
"react-split-pane": "^2.0.3",
"react-syntax-highlighter": "^15.4.3",
"sql-formatter": "^2.3.3",
"supersonic-chat-sdk": "^1.1.6",
"supersonic-chat-sdk": "^1.1.7",
"supersonic-insights-flow-components": "^1.4.9",
"umi-request": "1.4.0"
},
@@ -114,11 +111,11 @@
"@types/lodash": "^4.14.144",
"@types/pinyin": "^2.8.3",
"@types/qs": "^6.5.3",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@types/react": "18.3.1",
"@types/react-dom": "^18.3.0",
"@types/react-helmet": "^6.1.0",
"@umijs/max": "^4.2.5",
"@umijs/fabric": "^4.0.1",
"@umijs/max": "^4.2.5",
"@umijs/plugin-model": "^2.6.2",
"carlo": "^0.9.46",
"cross-port-killer": "^1.1.1",
@@ -141,7 +138,7 @@
"node": ">=16.0.0 <20.0.0"
},
"resolutions": {
"@types/react": "17.0.0"
"@types/react": "18.3.1"
},
"__npminstall_done": false
}

View File

@@ -1,6 +1,6 @@
import RightContent from '@/components/RightContent';
import S2Icon, { ICON } from '@/components/S2Icon';
import type { Settings as LayoutSettings } from '@ant-design/pro-layout';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import { Space, Spin, ConfigProvider } from 'antd';
import ScaleLoader from 'react-spinners/ScaleLoader';
import { history, RunTimeLayoutConfig } from '@umijs/max';
@@ -13,6 +13,7 @@ import { Copilot } from 'supersonic-chat-sdk';
import { configProviderTheme } from '../config/themeSettings';
export { request } from './services/request';
import { ROUTE_AUTH_CODES } from '../config/routes';
import AppPage from './pages/index';
const replaceRoute = '/';
@@ -145,7 +146,8 @@ export const layout: RunTimeLayoutConfig = (params) => {
height: location.pathname.includes('chat') ? 'calc(100vh - 56px)' : undefined,
}}
>
{dom}
<AppPage dom={dom} />
{/* {dom} */}
{history.location.pathname !== '/chat' && !isMobile && (
<Copilot token={getToken() || ''} isDeveloper />
)}

View File

@@ -1,6 +1,6 @@
.title {
font-family: var(--tencent-font-family);
margin-bottom: 5px;
// margin-bottom: 5px;
}
.subTitleContainer {

View File

@@ -96,42 +96,35 @@ ol {
}
}
.ant-card-body {
padding: 24px !important;
}
// .ant-card-body {
// padding: 24px !important;
// }
.ant-modal-body {
padding: 24px;
}
.ant-pro-page-container-children-content {
margin: 12px 12px 0 !important;
}
// .ant-pro-page-container-children-content {
// margin: 12px 12px 0 !important;
// }
// .ant-page-header {
// padding-bottom: 10px !important;
// }
.ant-spin-spinning {
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
// .ant-spin-spinning {
// display: flex !important;
// align-items: center !important;
// justify-content: center !important;
// }
// .ant-table-selection-extra {
// .ant-dropdown-trigger {
// display: none !important;
// }
// }
.ant-table-selection-extra {
.ant-dropdown-trigger {
display: none !important;
}
}
.initialLoading {
.ant-spin-spinning {
max-height: none !important;
}
.loadingPlaceholder {
height: 100vh;
}
}
.ant-pro-layout .ant-pro-layout-bg-list {
background: #fafafb;
}
@@ -146,57 +139,40 @@ ol {
text-overflow: ellipsis;
}
// .ant-menu-root>.ant-menu-item,
// .ant-menu-root>.ant-menu-submenu {
// font-weight: bold;
// font-size: 14px;
// &>span>a,
// &>a {
// color: white;
// &:hover {
// color: white;
// }
// }
// &:hover {
// background-color: #296DF3!important;
// }
// }
.ant-table-wrapper {
.ant-spin .ant-spin-dot {
font-size: 30px;
}
}
.ant-menu-root>.ant-menu-item.ant-menu-item-selected {
// background-color: #296DF3!important;
color: var(--tme-primary-color);
font-size: 15px;
font-weight: 500;
}
.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected::after {
.ant-menu-light.ant-menu-horizontal >.ant-menu-item:hover {
background: #f0f5ff;
}
.ant-menu-light .ant-menu-item:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected):hover {
color: var(--tme-primary-color);
}
.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected:hover::after {
border-bottom-color: var(--tme-primary-color);
border-bottom-width: 2px;
}
.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected::after {
border-bottom-color: var(--tme-primary-color);
border-bottom-width: 2px;
}
.ant-menu-light.ant-menu-horizontal >.ant-menu-item:hover::after {
border-bottom-color: var(--tme-primary-color);
}
// .ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected::hover {
// border-bottom-width: 2px;
// border-bottom-color: var(--tme-primary-color);
// }
.ant-pro-top-nav-header-logo h1 {
// font-size: 18px;
color: var(--tme-primary-color)
.ant-pro-table-list-toolbar-container-mobile {
flex-direction: unset;
}
// .ant-pro-top-nav-header-main-left {
// min-width: 100px !important;
// }
// .ant-pro-top-nav-header-logo {
// min-width: 100px !important;
// }
.logo {
position: relative;
color: #fff;
@@ -291,4 +267,50 @@ ol {
color: rgb(38, 38, 38);
}
}
.ant-form-item .ant-form-item-label > label {
font-family: "tencentFont", sans-serif;
margin-right: 10px;
}
.supersonicForm {
padding: 0 20px;
:global {
.ant-input-search .ant-input-search-button {
height: 42px;
}
.ant-switch.ant-switch-checked {
background: var(--tme-primary-color);
}
.ant-form-item .ant-form-item-label > label {
color:#262626;
}
.ant-form-item-label {
font-family: "tencentFont", sans-serif;
margin-right: 10px;
}
.ant-input {
padding: 9px 14px 9px 12px;
}
.ant-select {
&.ant-select-single {
height: auto;
}
&.ant-select-multiple {
.ant-select-selector {
padding: 6px 14px 6px 12px;
}
}
.ant-select-selector {
padding: 5px 14px 5px 12px;
.ant-select-selection-placeholder {
padding: 0px 8px 0px 8px;
}
.ant-select-selection-overflow-item {
.ant-select-selection-item {
color: rgb(22, 119, 255);
background-color: rgb(230, 244, 255);
}
}
}
}
}
}

View File

@@ -1,9 +1,23 @@
import { Form, Modal, Input, Button, Switch } from 'antd';
import {
Form,
Modal,
Input,
Button,
Switch,
Tabs,
Slider,
InputNumber,
Select,
Row,
Col,
Space,
} from 'antd';
import { AgentType } from './type';
import { useEffect, useState } from 'react';
import styles from './style.less';
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
import { uuid } from '@/utils/utils';
import globalStyles from '@/global.less';
const FormItem = Form.Item;
const { TextArea } = Input;
@@ -17,6 +31,7 @@ type Props = {
const AgentModal: React.FC<Props> = ({ editAgent, onSaveAgent, onCancel }) => {
const [saveLoading, setSaveLoading] = useState(false);
const [examples, setExamples] = useState<{ id: string; question?: string }[]>([]);
const [formData, setFormData] = useState<any>({});
const [form] = Form.useForm();
useEffect(() => {
@@ -32,7 +47,8 @@ const AgentModal: React.FC<Props> = ({ editAgent, onSaveAgent, onCancel }) => {
const layout = {
labelCol: { span: 6 },
wrapperCol: { span: 14 },
wrapperCol: { span: 16 },
// layout: 'vertical',
};
const onOk = async () => {
@@ -48,22 +64,48 @@ const AgentModal: React.FC<Props> = ({ editAgent, onSaveAgent, onCancel }) => {
setSaveLoading(false);
};
return (
<Modal
open
title={editAgent ? '编辑助理' : '新建助理'}
confirmLoading={saveLoading}
width={800}
onOk={onOk}
onCancel={onCancel}
const formTabList = [
{
label: '基本信息',
children: (
<>
<FormItem
name="name"
label="名称"
rules={[{ required: true, message: '请输入助理名称' }]}
>
<Form {...layout} form={form} initialValues={{ enableSearch: true }}>
<FormItem name="name" label="名称" rules={[{ required: true, message: '请输入助理名称' }]}>
<Input placeholder="请输入助理名称" />
</FormItem>
{/* <FormItem name={['visualConfig', 'defaultShowType']} label="问答默认格式">
<Select
placeholder=""
options={[
{
label: '文本',
value: 'TEXT',
},
{
label: '表格',
value: 'TABLE',
},
{
label: '图表',
value: 'WIDGET',
},
]}
/>
</FormItem> */}
<FormItem name="enableSearch" label="支持联想" valuePropName="checked">
<Switch checkedChildren="开启" unCheckedChildren="关闭" />
<Switch />
</FormItem>
<FormItem
name={['multiTurnConfig', 'enableMultiTurn']}
label="开启多轮"
valuePropName="checked"
>
<Switch />
</FormItem>
<FormItem name="examples" label="示例问题">
<div className={styles.paramsSection}>
{examples.map((example) => {
@@ -101,6 +143,91 @@ const AgentModal: React.FC<Props> = ({ editAgent, onSaveAgent, onCancel }) => {
<FormItem name="description" label="描述">
<TextArea placeholder="请输入助理描述" />
</FormItem>
</>
),
},
{
label: '大模型配置',
children: (
<>
<FormItem name={['llmConfig', 'provider']} label="模型提供方式">
<Select placeholder="">
{['OPEN_AI'].map((item) => (
<Select.Option key={item} value={item}>
{item}
</Select.Option>
))}
</Select>
</FormItem>
<FormItem name={['llmConfig', 'modelName']} label="大模型名称">
<Input placeholder="请输入大模型名称" />
</FormItem>
<FormItem name={['llmConfig', 'baseUrl']} label="Base URL">
<Input placeholder="请输入Base URL" />
</FormItem>
<FormItem
name={['llmConfig', 'apiKey']}
label="API KEY"
// hidden={formData?.llmConfig?.provider === 'LOCAL_AI'}
>
<Input placeholder="请输入API KEY" />
</FormItem>
<FormItem name={['llmConfig', 'temperature']} label="回复随机性">
<Slider
min={0}
max={1}
step={0.1}
marks={{
0: '精准',
1: '随机',
}}
defaultValue={0}
/>
</FormItem>
<FormItem name={['llmConfig', 'timeOut']} label="超时时间(秒)">
<InputNumber />
</FormItem>
</>
),
},
];
return (
<Modal
open
title={editAgent ? '编辑助理' : '新建助理'}
confirmLoading={saveLoading}
width={800}
onOk={onOk}
onCancel={onCancel}
>
<Form
{...layout}
form={form}
initialValues={{
enableSearch: true,
llmConfig: {
timeOut: 60,
provider: 'OPEN_AI',
},
}}
onValuesChange={(value, values) => {
setFormData(values);
}}
className={globalStyles.supersonicForm}
>
<Tabs
tabPosition={'left'}
items={formTabList.map((item) => {
const { label, children } = item;
return {
label,
key: label,
children,
};
})}
/>
</Form>
</Modal>
);

View File

@@ -93,19 +93,50 @@ const ToolsSection: React.FC<Props> = ({ currentAgent, onSaveAgent, onEditAgent,
onEditAgent(currentAgent);
}}
>
</Button>
</div>
<div className={styles.infoContent}>
<div className={styles.infoItem}>
<span className={styles.label}> </span>
<Space>
{currentAgent?.examples?.map((item) => (
<Tag key={item}>{item}</Tag>
))}
</Space>
</div>
<div className={styles.infoItem}>{currentAgent?.description}</div>
<div className={styles.infoItem}>
<span className={styles.label}> </span>
{currentAgent?.description}
</div>
</div>
</div>
<div className={styles.basicInfo}>
<div className={styles.basicInfoTitle}></div>
<div className={styles.infoContent}>
<div className={styles.infoItem}>
<span className={styles.label}> </span>
{currentAgent?.llmConfig?.provider}
</div>
<div className={styles.infoItem}>
<span className={styles.label}>:</span>
{currentAgent?.llmConfig?.modelName}
</div>
<div className={styles.infoItem}>
<span className={styles.label}>Base URL: </span>
{currentAgent?.llmConfig?.baseUrl}
</div>
<div className={styles.infoItem}>
<span className={styles.label}>API KEY:</span>
{currentAgent?.llmConfig?.apiKey}
</div>
<div className={styles.infoItem}>
<span className={styles.label}>: </span>
{currentAgent?.llmConfig?.temperature}
</div>
<div className={styles.infoItem}>
<span className={styles.label}>(): </span> {currentAgent?.llmConfig?.timeOut}
</div>
</div>
</div>
<div className={styles.toolSection}>

View File

@@ -15,13 +15,13 @@
}
.content {
margin-top: 20px;
// margin-top: 20px;
.searchBar {
display: flex;
align-items: center;
column-gap: 30px;
margin-bottom: 40px;
margin-bottom: 20px;
justify-content: right;
.searchControl {
width: 500px;
}
@@ -195,6 +195,14 @@
display: flex;
flex-direction: column;
row-gap: 12px;
.infoItem {
margin-bottom: 10px;
.label {
font-family: var(--tencent-font-family);
margin-right: 10px;
font-size: 14px;
}
}
}
}

View File

@@ -27,7 +27,7 @@ export const AGENT_TOOL_TYPE_LIST = [
export enum QueryModeEnum {
METRIC = 'METRIC',
TAG = 'TAG',
DETAIL = 'DETAIL',
}
export const QUERY_MODE_LIST = [
@@ -36,8 +36,8 @@ export const QUERY_MODE_LIST = [
value: QueryModeEnum.METRIC,
},
{
label: '标签模式',
value: QueryModeEnum.TAG,
label: '明细模式',
value: QueryModeEnum.DETAIL,
},
];
@@ -56,6 +56,22 @@ export type AgentConfigType = {
tools: AgentToolType[];
};
export type LlmConfigType = {
provider: string;
baseUrl: string;
apiKey: string;
modelName: string;
temperature: number;
timeOut: number;
};
export type MultiTurnConfig = {
enableMultiTurn: boolean;
};
export type VisualConfig = {
defaultShowType: string;
};
export type AgentType = {
id?: number;
name?: string;
@@ -68,6 +84,9 @@ export type AgentType = {
status?: 0 | 1;
enableSearch?: 0 | 1;
agentConfig?: AgentConfigType;
llmConfig?: LlmConfigType;
multiTurnConfig?: MultiTurnConfig;
visualConfig?: VisualConfig;
};
export type ModelType = {

View File

@@ -191,6 +191,17 @@ const ModelBasicForm: React.FC<Props> = ({
<FormItem name="description" label="模型描述">
<TextArea placeholder="请输入模型描述" />
</FormItem>
<FormItem
name={['ext', 'usId']}
label="上游任务ID"
>
<Select
mode="tags"
placeholder="输入ID后回车确认多ID输入、复制粘贴支持英文逗号自动分隔"
tokenSeparators={[',']}
maxTagCount={9}
/>
</FormItem>
</Spin>
);
};

View File

@@ -337,26 +337,10 @@ const ModelCreateForm: React.FC<CreateFormProps> = ({
};
const formatterInitData = (columns: any[], extendParams: Record<string, any> = {}) => {
const {
id,
name,
bizName,
description,
modelDetail,
databaseId,
filterSql,
alias,
drillDownDimensions = [],
} = modelItem;
const { modelDetail, filterSql, drillDownDimensions = [] } = modelItem;
const { dimensions, identifiers, measures } = modelDetail || {};
const initValue = {
id,
name,
bizName,
description,
databaseId,
filterSql,
alias,
...modelItem,
drillDownDimensions: Array.isArray(drillDownDimensions)
? drillDownDimensions.map((item) => {
return item.dimensionId;

View File

@@ -34,7 +34,7 @@ const ClassMetricTable: React.FC<Props> = ({}) => {
total: 0,
};
const [pagination, setPagination] = useState(defaultPagination);
const [loading, setLoading] = useState<boolean>(false);
const [loading, setLoading] = useState<boolean>(true);
const [dataSource, setDataSource] = useState<ISemantic.ITagItem[]>([]);
const [tagItem, setTagItem] = useState<ISemantic.ITagItem>();
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);

View File

@@ -23,9 +23,7 @@ import { ISemantic } from '../data';
import BatchCtrlDropDownButton from '@/components/BatchCtrlDropDownButton';
import { ColumnsConfig } from '../components/TableColumnRender';
type Props = {
};
type Props = {};
type QueryMetricListParams = {
id?: string;
@@ -46,7 +44,7 @@ const ClassMetricTable: React.FC<Props> = ({ }) => {
total: 0,
};
const [pagination, setPagination] = useState(defaultPagination);
const [loading, setLoading] = useState<boolean>(false);
const [loading, setLoading] = useState<boolean>(true);
const [dataSource, setDataSource] = useState<ISemantic.IMetricItem[]>([]);
const [metricItem, setMetricItem] = useState<ISemantic.IMetricItem>();
const [selectedRowKeys, setSelectedRowKeys] = useState<React.Key[]>([]);
@@ -154,8 +152,9 @@ const ClassMetricTable: React.FC<Props> = ({ }) => {
};
const handleMetricEdit = (metricItem: ISemantic.IMetricItem) => {
setMetricItem(metricItem);
setCreateModalVisible(true);
// setMetricItem(metricItem);
// setCreateModalVisible(true);
history.push(`/model/metric/edit/${metricItem.id}`);
};
const queryBatchUpdatePublish = async (ids: React.Key[], status: boolean) => {
@@ -458,4 +457,4 @@ const ClassMetricTable: React.FC<Props> = ({ }) => {
</>
);
};
export default ClassMetricTable
export default ClassMetricTable;

View File

@@ -38,6 +38,7 @@ import { createMetric, updateMetric, mockMetricAlias, getMetricTags } from '../.
import { MetricSettingKey, MetricSettingWording } from '../constants';
import { ISemantic } from '../../data';
import { history } from '@umijs/max';
import globalStyles from '@/global.less';
export type CreateFormProps = {
datasourceId?: number;
@@ -868,7 +869,7 @@ const MetricInfoCreateForm: React.FC<CreateFormProps> = ({
</div>
<div className={styles.infoCardContainer}>
<Form
className={styles.supersonicForm}
className={globalStyles.supersonicForm}
{...formLayout}
form={form}
initialValues={{

View File

@@ -124,7 +124,6 @@ const OverviewContainer: React.FC<Props> = ({ mode }) => {
};
const handleModelChange = (model?: ISemantic.IModelItem) => {
console.log(model, 1111);
if (!model) {
return;
}

View File

@@ -167,19 +167,6 @@ const ViewCreateFormModal: React.FC<ModelCreateFormModalProps> = ({
return (
<>
<div style={{ display: currentStep === 1 ? 'block' : 'none' }}>
{/* <div style={{ marginBottom: 10, paddingLeft: 12 }}>
<Radio.Group
buttonStyle="solid"
value={queryType}
onChange={(e) => {
setQueryType(e.target.value);
}}
>
<Radio.Button value="METRIC">指标模式</Radio.Button>
<Radio.Button value="TAG">标签模式</Radio.Button>
</Radio.Group>
</div> */}
<ViewModelConfigTransfer
key={queryType}
queryType={queryType}

View File

@@ -141,7 +141,7 @@ const ViewSearchFormModal: React.FC<ModelCreateFormModalProps> = ({
)}
{viewItem?.queryType === TransType.TAG && (
<ProCard title="标签模式">
<ProCard title="明细模式">
<DefaultSettingForm form={form} tagList={tagList} chatConfigType={ChatConfigType.TAG} />
</ProCard>
)}

View File

@@ -57,14 +57,13 @@ const DomainManagerTab: React.FC<Props> = ({
children:
showModelType === 'list' ? (
<OverView
key={selectDomainId}
modelList={modelList}
onModelChange={(model) => {
handleModelChange(model);
}}
/>
) : (
<div style={{ width: '100%' }}>
<div style={{ width: '100%' }} key={selectDomainId}>
<SemanticGraphCanvas />
{/* <HeadlessFlows /> */}
</div>
@@ -208,6 +207,7 @@ const DomainManagerTab: React.FC<Props> = ({
className={styles.tab}
items={!isModel ? tabItem : isModelItem}
activeKey={getActiveKey()}
// destroyInactiveTabPane
tabBarExtraContent={{
right:
getActiveKey() === 'overview' ? (

View File

@@ -2,7 +2,7 @@ import { Space, Tag, Typography } from 'antd';
import { StatusEnum } from '../enum';
import { SENSITIVE_LEVEL_ENUM, SENSITIVE_LEVEL_COLOR } from '../constant';
import { TagsOutlined, ReadOutlined } from '@ant-design/icons';
import { history } from 'umi';
import { history } from '@umijs/max';
import { ISemantic } from '../data';
import { isString } from 'lodash';
import dayjs from 'dayjs';

View File

@@ -445,43 +445,5 @@
}
}
.supersonicForm {
padding: 0 20px;
:global {
.ant-input-search .ant-input-search-button {
height: 42px;
}
.ant-form-item .ant-form-item-label > label {
color:#262626;
}
.ant-form-item-label {
font-family: "tencentFont", sans-serif;
}
.ant-input {
padding: 9px 14px 9px 12px;
}
.ant-select {
&.ant-select-single {
height: auto;
}
&.ant-select-multiple {
.ant-select-selector {
padding: 6px 14px 6px 12px;
}
}
.ant-select-selector {
padding: 5px 14px 5px 12px;
.ant-select-selection-placeholder {
padding: 0px 8px 0px 8px;
}
.ant-select-selection-overflow-item {
.ant-select-selection-item {
color: rgb(22, 119, 255);
background-color: rgb(230, 244, 255);
}
}
}
}
}
}

View File

@@ -0,0 +1,39 @@
import { useEffect, useTransition } from 'react';
import { useLocation } from '@umijs/max';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
NProgress.configure({ showSpinner: false });
const startProgress = () => {
NProgress.start();
};
const stopProgress = () => {
NProgress.done();
};
const Page = ({ dom }) => {
const [isPending, startTransition] = useTransition();
const location = useLocation();
useEffect(() => {
startTransition(() => {
startProgress();
});
return () => {
stopProgress();
};
}, [location]);
useEffect(() => {
if (!isPending) {
stopProgress();
}
}, [isPending]);
return <>{dom}</>;
};
export default Page;

3756
webapp/pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff