mirror of
https://github.com/tencentmusic/supersonic.git
synced 2026-04-21 14:14:19 +08:00
[improvement][headless-fe] Optimized the tag setting system. (#846)
* [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.
This commit is contained in:
@@ -5,7 +5,13 @@ import DataSourceFieldForm from './DataSourceFieldForm';
|
||||
import { formLayout } from '@/components/FormHelper/utils';
|
||||
import { EnumDataSourceType } from '../constants';
|
||||
import styles from '../style.less';
|
||||
import { updateModel, createModel, getColumns, getUnAvailableItem } from '../../service';
|
||||
import {
|
||||
updateModel,
|
||||
createModel,
|
||||
getColumns,
|
||||
getUnAvailableItem,
|
||||
getTagObjectList,
|
||||
} from '../../service';
|
||||
import type { Dispatch } from 'umi';
|
||||
import type { StateType } from '../../model';
|
||||
import { connect } from 'umi';
|
||||
@@ -63,7 +69,8 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
const [effectTipsData, setEffectTipsData] = useState<
|
||||
(ISemantic.IDimensionItem | ISemantic.IMetricItem)[]
|
||||
>([]);
|
||||
|
||||
const [tagObjectList, setTagObjectList] = useState<ISemantic.ITagObjectItem[]>([]);
|
||||
const [tagObjectIdState, setTagObjectIdState] = useState(modelItem?.tagObjectId);
|
||||
const formValRef = useRef(initFormVal as any);
|
||||
const [form] = Form.useForm();
|
||||
const { databaseConfigList, selectModelId: modelId, selectDomainId } = domainManger;
|
||||
@@ -91,9 +98,23 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
}
|
||||
}, [scriptColumns]);
|
||||
|
||||
useEffect(() => {
|
||||
queryTagObjectList();
|
||||
}, []);
|
||||
|
||||
const forward = () => setCurrentStep(currentStep + 1);
|
||||
const backward = () => setCurrentStep(currentStep - 1);
|
||||
|
||||
const queryTagObjectList = async () => {
|
||||
const { code, msg, data } = await getTagObjectList({ domainId: selectDomainId });
|
||||
if (code === 200) {
|
||||
setTagObjectList(data);
|
||||
|
||||
return;
|
||||
}
|
||||
message.error(msg);
|
||||
};
|
||||
|
||||
const checkAvailableItem = async (fields: string[] = []) => {
|
||||
if (!modelItem) {
|
||||
return false;
|
||||
@@ -151,7 +172,7 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
(fieldsClassify, item: any) => {
|
||||
const {
|
||||
type,
|
||||
bizName,
|
||||
// bizName,
|
||||
fieldName,
|
||||
timeGranularity,
|
||||
agg,
|
||||
@@ -159,7 +180,7 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
name,
|
||||
isCreateMetric: createMetric,
|
||||
dateFormat,
|
||||
entityNames,
|
||||
// entityNames,
|
||||
isTag,
|
||||
} = item;
|
||||
const isCreateDimension = createDimension ? 1 : 0;
|
||||
@@ -194,7 +215,8 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
isCreateDimension,
|
||||
name,
|
||||
type,
|
||||
entityNames,
|
||||
// entityNames,
|
||||
tagObjectId: modelItem?.tagObjectId,
|
||||
});
|
||||
break;
|
||||
case EnumDataSourceType.MEASURES:
|
||||
@@ -253,6 +275,7 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
sqlQuery: sql,
|
||||
sqlVariables: sqlParams,
|
||||
},
|
||||
tagObjectId: tagObjectIdState,
|
||||
};
|
||||
setQueryParamsState(queryParams);
|
||||
const checkState = await checkAvailableItem(fieldColumns.map((item) => item.nameEn));
|
||||
@@ -370,6 +393,7 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
initFields([], fieldColumns);
|
||||
}
|
||||
}
|
||||
setTagObjectIdState(modelItem?.tagObjectId);
|
||||
}, [modelItem]);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -423,6 +447,11 @@ const DataSourceCreateForm: React.FC<CreateFormProps> = ({
|
||||
<div style={{ display: currentStep === 1 ? 'block' : 'none' }}>
|
||||
<DataSourceFieldForm
|
||||
fields={fields}
|
||||
tagObjectList={tagObjectList}
|
||||
tagObjectId={tagObjectIdState}
|
||||
onTagObjectChange={(tagObjectId) => {
|
||||
setTagObjectIdState(tagObjectId);
|
||||
}}
|
||||
onFieldChange={handleFieldChange}
|
||||
onSqlChange={(sql) => {
|
||||
setSqlFilter(sql);
|
||||
|
||||
@@ -4,6 +4,7 @@ import TableTitleTooltips from '../../components/TableTitleTooltips';
|
||||
import { isUndefined } from 'lodash';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons';
|
||||
import SqlEditor from '@/components/SqlEditor';
|
||||
import { ISemantic } from '../../data';
|
||||
import {
|
||||
TYPE_OPTIONS,
|
||||
DATE_FORMATTER,
|
||||
@@ -23,7 +24,8 @@ type FieldItem = {
|
||||
checked?: number;
|
||||
dateFormat?: string;
|
||||
timeGranularity?: string;
|
||||
entityNames?: string[];
|
||||
// entityNames?: string[];
|
||||
// tagObjectId?: number;
|
||||
isTag?: number;
|
||||
};
|
||||
const { Search } = Input;
|
||||
@@ -32,8 +34,11 @@ const FormItem = Form.Item;
|
||||
type Props = {
|
||||
onSqlChange: (sql: string) => void;
|
||||
sql: string;
|
||||
tagObjectList: ISemantic.ITagObjectItem[];
|
||||
tagObjectId?: number;
|
||||
fields: FieldItem[];
|
||||
onFieldChange: (fieldName: string, data: Partial<FieldItem>) => void;
|
||||
onTagObjectChange?: (tagObjectId: number) => void;
|
||||
};
|
||||
|
||||
const { Option } = Select;
|
||||
@@ -47,7 +52,15 @@ const getCreateFieldName = (type: EnumDataSourceType) => {
|
||||
return isCreateName;
|
||||
};
|
||||
|
||||
const DataSourceFieldForm: React.FC<Props> = ({ fields, sql, onFieldChange, onSqlChange }) => {
|
||||
const DataSourceFieldForm: React.FC<Props> = ({
|
||||
fields,
|
||||
sql,
|
||||
tagObjectList,
|
||||
tagObjectId,
|
||||
onTagObjectChange,
|
||||
onFieldChange,
|
||||
onSqlChange,
|
||||
}) => {
|
||||
const handleFieldChange = (record: FieldItem, fieldName: string, value: any) => {
|
||||
onFieldChange(record.bizName, {
|
||||
...record,
|
||||
@@ -123,12 +136,28 @@ const DataSourceFieldForm: React.FC<Props> = ({ fields, sql, onFieldChange, onSq
|
||||
width: 185,
|
||||
render: (_: any, record: FieldItem) => {
|
||||
const { type } = record;
|
||||
console.log(record, 3333);
|
||||
if (type === EnumDataSourceType.PRIMARY) {
|
||||
const entityNames =
|
||||
fields.find((field) => field.bizName === record.bizName)?.entityNames || [];
|
||||
return (
|
||||
<Space>
|
||||
{/* <FormItem name="tagObjectId"> */}
|
||||
<Select
|
||||
style={{ minWidth: 150 }}
|
||||
value={tagObjectId}
|
||||
placeholder="请选择所属对象"
|
||||
onChange={(value) => {
|
||||
// handleFieldChange(record, 'tagObjectId', value);
|
||||
onTagObjectChange?.(value);
|
||||
}}
|
||||
options={tagObjectList.map((item: ISemantic.ITagObjectItem) => {
|
||||
return {
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
};
|
||||
})}
|
||||
/>
|
||||
{/* </FormItem> */}
|
||||
{/* <Select
|
||||
style={{ minWidth: 345 }}
|
||||
mode="tags"
|
||||
value={entityNames}
|
||||
@@ -141,7 +170,7 @@ const DataSourceFieldForm: React.FC<Props> = ({ fields, sql, onFieldChange, onSq
|
||||
/>
|
||||
<Tooltip title="主键可以作为一个实体,在此设置一个或多个实体名称">
|
||||
<ExclamationCircleOutlined />
|
||||
</Tooltip>
|
||||
</Tooltip> */}
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user