[improvement][semantic-fe] Fixing the synchronization issue with the question and answer settings information. (#508)

* [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.
This commit is contained in:
tristanliu
2023-12-14 16:37:19 +08:00
committed by GitHub
parent 3d30632b41
commit 3bf5b86535
7 changed files with 114 additions and 84 deletions

View File

@@ -27,6 +27,12 @@ type Props = {
const FormItem = Form.Item;
const Option = Select.Option;
const formDefaultValue = {
unit: 7,
period: 'DAY',
timeMode: 'LAST',
};
const DefaultSettingForm: ForwardRefRenderFunction<any, Props> = (
{ metricList, dimensionList, entityData, chatConfigKey, chatConfigType, onSubmit },
ref,
@@ -44,11 +50,12 @@ const DefaultSettingForm: ForwardRefRenderFunction<any, Props> = (
useEffect(() => {
form.resetFields();
if (!entityData?.chatDefaultConfig) {
if (!(entityData?.id && entityData?.chatDefaultConfig)) {
return;
}
const { chatDefaultConfig, id } = formatEntityData;
form.setFieldsValue({
...formDefaultValue,
...chatDefaultConfig,
id,
});
@@ -152,11 +159,7 @@ const DefaultSettingForm: ForwardRefRenderFunction<any, Props> = (
form={form}
layout="vertical"
className={styles.form}
initialValues={{
unit: 7,
period: 'DAY',
timeMode: 'LAST',
}}
initialValues={formDefaultValue}
>
<FormItem hidden={true} name="id" label="ID">
<Input placeholder="id" />

View File

@@ -1,5 +1,6 @@
import { message, Space } from 'antd';
import React, { useState, useEffect } from 'react';
import { useEffect, useState, forwardRef, useImperativeHandle, Ref } from 'react';
import type { ForwardRefRenderFunction } from 'react';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import type { StateType } from '../../model';
@@ -12,82 +13,92 @@ import { ChatConfigType } from '../../enum';
type Props = {
chatConfigType: ChatConfigType.DETAIL | ChatConfigType.AGG;
onConfigSave?: () => void;
dispatch: Dispatch;
domainManger: StateType;
};
const EntitySection: React.FC<Props> = ({
domainManger,
chatConfigType = ChatConfigType.DETAIL,
}) => {
const { selectDomainId, selectModelId: modelId, dimensionList, metricList } = domainManger;
const EntitySection: React.FC<Props> = forwardRef(
({ domainManger, chatConfigType = ChatConfigType.DETAIL, onConfigSave }, ref: Ref<any>) => {
const { selectDomainId, selectModelId: modelId, dimensionList, metricList } = domainManger;
const [entityData, setEntityData] = useState<IChatConfig.IChatRichConfig>();
const [entityData, setEntityData] = useState<IChatConfig.IChatRichConfig>();
const queryThemeListData: any = async () => {
const { code, data } = await getDomainExtendDetailConfig({
modelId,
});
useImperativeHandle(ref, () => ({
refreshConfigData: queryThemeListData,
}));
if (code === 200) {
const { chatAggRichConfig, chatDetailRichConfig, id, domainId, modelId } = data;
if (chatConfigType === ChatConfigType.DETAIL) {
setEntityData({ ...chatDetailRichConfig, id, domainId, modelId });
const queryThemeListData: any = async () => {
const { code, data } = await getDomainExtendDetailConfig({
modelId,
});
if (code === 200) {
const { chatAggRichConfig, chatDetailRichConfig, id, domainId, modelId } = data;
if (chatConfigType === ChatConfigType.DETAIL) {
setEntityData({ ...chatDetailRichConfig, id, domainId, modelId });
}
if (chatConfigType === ChatConfigType.AGG) {
setEntityData({ ...chatAggRichConfig, id, domainId, modelId });
}
return;
}
if (chatConfigType === ChatConfigType.AGG) {
setEntityData({ ...chatAggRichConfig, id, domainId, modelId });
message.error('获取问答设置信息失败');
};
const initPage = async () => {
queryThemeListData();
};
useEffect(() => {
if (!modelId) {
return;
}
return;
}
initPage();
}, [modelId]);
message.error('获取问答设置信息失败');
};
const initPage = async () => {
queryThemeListData();
};
useEffect(() => {
if (!modelId) {
return;
}
initPage();
}, [modelId]);
return (
<div style={{ width: 800, margin: '0 auto' }}>
<Space direction="vertical" style={{ width: '100%' }} size={20}>
<ProCard bordered title="默认设置">
<DefaultSettingForm
domainId={Number(selectDomainId)}
entityData={entityData || {}}
chatConfigType={chatConfigType}
chatConfigKey={
chatConfigType === ChatConfigType.DETAIL ? 'chatDetailConfig' : 'chatAggConfig'
}
dimensionList={dimensionList.filter((item) => {
const blackDimensionList = entityData?.visibility?.blackDimIdList;
if (Array.isArray(blackDimensionList)) {
return !blackDimensionList.includes(item.id);
return (
<div style={{ width: 800, margin: '0 auto' }}>
<Space direction="vertical" style={{ width: '100%' }} size={20}>
<ProCard bordered title="默认设置">
<DefaultSettingForm
domainId={Number(selectDomainId)}
entityData={entityData || {}}
chatConfigType={chatConfigType}
chatConfigKey={
chatConfigType === ChatConfigType.DETAIL ? 'chatDetailConfig' : 'chatAggConfig'
}
return false;
})}
metricList={metricList.filter((item) => {
const blackMetricIdList = entityData?.visibility?.blackMetricIdList;
if (Array.isArray(blackMetricIdList)) {
return !blackMetricIdList.includes(item.id);
}
return false;
})}
onSubmit={() => {
queryThemeListData();
}}
/>
</ProCard>
</Space>
</div>
);
};
export default connect(({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}))(EntitySection);
dimensionList={dimensionList.filter((item) => {
const blackDimensionList = entityData?.visibility?.blackDimIdList;
if (Array.isArray(blackDimensionList)) {
return !blackDimensionList.includes(item.id);
}
return false;
})}
metricList={metricList.filter((item) => {
const blackMetricIdList = entityData?.visibility?.blackMetricIdList;
if (Array.isArray(blackMetricIdList)) {
return !blackMetricIdList.includes(item.id);
}
return false;
})}
onSubmit={() => {
queryThemeListData();
onConfigSave?.();
}}
/>
</ProCard>
</Space>
</div>
);
},
);
export default connect(
({ domainManger }: { domainManger: StateType }) => ({
domainManger,
}),
() => {},
null,
{ forwardRef: true },
)(EntitySection);