Skip to content

Commit 13bd2f7

Browse files
committed
Merge branch 'dev-4.3.2' of https://code.alipay.com/oceanbase/oceanbase-developer-center into dev-4.3.2
2 parents 35a348f + aea920f commit 13bd2f7

File tree

17 files changed

+161
-97
lines changed

17 files changed

+161
-97
lines changed

src/common/datasource/pg/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const items: Record<ConnectType.PG, IDataSourceModeConfig> = {
6464
sys: false,
6565
ssl: false,
6666
jdbcDoc: 'https://jdbc.postgresql.org/documentation/use/',
67+
disableURLParse: true,
6768
},
6869
features: {
6970
task: [TaskType.DATA_ARCHIVE, TaskType.DATA_DELETE],

src/component/Task/DataArchiveTask/CreateModal/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import ArchiveRange from './ArchiveRange';
5353
import styles from './index.less';
5454
import VariableConfig, { timeUnitOptions } from './VariableConfig';
5555
import ShardingStrategyItem from '../../component/ShardingStrategyItem';
56+
import { disabledDate } from '@/util/utils';
5657

5758
export enum IArchiveRange {
5859
PORTION = 'portion',
@@ -654,7 +655,11 @@ const CreateModal: React.FC<IProps> = (props) => {
654655
})}
655656
/*执行时间*/ required
656657
>
657-
<DatePicker showTime suffixIcon={<FieldTimeOutlined />} />
658+
<DatePicker
659+
showTime
660+
suffixIcon={<FieldTimeOutlined />}
661+
disabledDate={disabledDate}
662+
/>
658663
</Form.Item>
659664
);
660665
}

src/component/Task/DataClearTask/CreateModal/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import ArchiveRange from './ArchiveRange';
5353
import styles from './index.less';
5454
import VariableConfig from './VariableConfig';
5555
import ShardingStrategyItem from '../../component/ShardingStrategyItem';
56+
import { disabledDate } from '@/util/utils';
5657

5758
export enum IArchiveRange {
5859
PORTION = 'portion',
@@ -612,7 +613,11 @@ const CreateModal: React.FC<IProps> = (props) => {
612613
if (triggerStrategy === TaskExecStrategy.START_AT) {
613614
return (
614615
<Form.Item name="startAt">
615-
<DatePicker showTime suffixIcon={<FieldTimeOutlined />} />
616+
<DatePicker
617+
showTime
618+
suffixIcon={<FieldTimeOutlined />}
619+
disabledDate={disabledDate}
620+
/>
616621
</Form.Item>
617622
);
618623
}

src/component/Task/DetailModal.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,13 @@ const DetailModal: React.FC<IProps> = React.memo((props) => {
174174
}
175175
};
176176

177-
const getLog = async function () {
177+
const getLog = async function (args?: ITableLoadOptions) {
178178
if (isLogicalDbChangeTask(task?.type)) {
179-
const flowId = subTasks?.contents?.[0]?.id;
179+
let flowId = subTasks?.contents?.[0]?.id;
180+
if (!flowId) {
181+
const data = await loadDataArchiveSubTask(args);
182+
flowId = data?.contents?.[0]?.id;
183+
}
180184
if (flowId) {
181185
const res = await getCycleTaskLog(task?.id, flowId, logType);
182186
setLog({
@@ -220,7 +224,7 @@ const DetailModal: React.FC<IProps> = React.memo((props) => {
220224
const data = await getDataArchiveSubTask(task?.id, { page: current, size: pageSize });
221225
setLoading(false);
222226
setSubTasks(data);
223-
// debugger;
227+
return data;
224228
};
225229

226230
const getResult = async function () {
@@ -286,8 +290,7 @@ const DetailModal: React.FC<IProps> = React.memo((props) => {
286290
switch (detailType) {
287291
case TaskDetailType.LOG: {
288292
if (isLogicalDbChangeTask(task?.type)) {
289-
await getExecuteRecord(args);
290-
getLog();
293+
getLog(args);
291294
} else {
292295
getLog();
293296
}

src/component/Task/LogicDatabaseAsyncTask/CreateModal/index.tsx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import type { TaskStore } from '@/store/task';
2424
import utils, { IEditor } from '@/util/editor';
2525
import { formatMessage } from '@/util/intl';
2626
import { FieldTimeOutlined } from '@ant-design/icons';
27-
27+
import { disabledDate } from '@/util/utils';
2828
import { ICycleTaskTriggerConfig, TaskOperationType } from '@/d.ts';
2929
import {
3030
Alert,
@@ -93,6 +93,7 @@ const CreateModal: React.FC<IProps> = (props) => {
9393
useEffect(() => {
9494
if (logicDatabaseInfo?.ddl) {
9595
form?.setFieldValue('sqlContent', logicDatabaseInfo?.ddl);
96+
form?.setFieldValue('databaseId', logicDatabaseInfo?.databaseId);
9697
}
9798
}, [logicDatabaseInfo?.ddl]);
9899

@@ -243,19 +244,13 @@ const CreateModal: React.FC<IProps> = (props) => {
243244
name="basic"
244245
initialValues={{
245246
triggerStrategy: TaskExecStrategy.START_NOW,
246-
databaseId: logicDatabaseInfo?.databaseId,
247247
}}
248248
layout="vertical"
249249
requiredMark="optional"
250250
form={form}
251251
onFieldsChange={handleFieldsChange}
252252
>
253-
<DatabaseSelect
254-
isLogicalDatabase
255-
label={'逻辑库'}
256-
type={TaskType.ALTER_SCHEDULE}
257-
projectId={logicDatabaseInfo?.projectId}
258-
/>
253+
<DatabaseSelect isLogicalDatabase label={'逻辑库'} type={TaskType.ALTER_SCHEDULE} />
259254
<Form.Item label="SQL 内容" required>
260255
<div
261256
style={{
@@ -395,7 +390,11 @@ const CreateModal: React.FC<IProps> = (props) => {
395390
})}
396391
/*执行时间*/ required
397392
>
398-
<DatePicker showTime suffixIcon={<FieldTimeOutlined />} />
393+
<DatePicker
394+
showTime
395+
suffixIcon={<FieldTimeOutlined />}
396+
disabledDate={disabledDate}
397+
/>
399398
</Form.Item>
400399
);
401400
}

src/component/Task/MutipleAsyncTask/CreateModal/DatabaseQueue.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export const DatabaseQueueSelect: React.FC<{
3939
const form = Form.useFormInstance();
4040
const statusMap = datasourceStatus.statusMap;
4141
const projectId = Form.useWatch('projectId', form);
42+
const orderedDatabaseIds = Form.useWatch(['parameters', 'orderedDatabaseIds'], form);
4243
const [databaseIdMap, setDatabaseIdMap] = useState<Map<number, boolean>>(new Map());
4344
const [_databaseOptions, setDatabaseOptions] = useState<DatabaseOption[]>([]);
4445
const {
@@ -87,6 +88,7 @@ export const DatabaseQueueSelect: React.FC<{
8788
DatabasePermissionType.CHANGE,
8889
),
8990
expired: checkDbExpiredByDataSourceStatus(statusInfo?.status),
91+
connectType: item?.connectType,
9092
};
9193
}),
9294
);
@@ -98,13 +100,27 @@ export const DatabaseQueueSelect: React.FC<{
98100
};
99101

100102
const databaseOptions = useMemo(() => {
101-
return _databaseOptions?.map((item) => {
102-
return {
103-
...item,
104-
expired: checkDbExpiredByDataSourceStatus(statusMap.get(item?.dataSource?.id)?.status),
105-
};
106-
});
107-
}, [statusMap, _databaseOptions]);
103+
const selectedDbId = orderedDatabaseIds?.flat()?.filter(Boolean)?.[0];
104+
const selectedDbInfo = _databaseOptions?.find((_db) => _db.value === selectedDbId);
105+
if (selectedDbId) {
106+
// 这里加同数据源类型的限制
107+
return _databaseOptions
108+
?.filter((_db) => _db?.connectType === selectedDbInfo?.connectType)
109+
?.map((item) => {
110+
return {
111+
...item,
112+
expired: checkDbExpiredByDataSourceStatus(statusMap.get(item?.dataSource?.id)?.status),
113+
};
114+
});
115+
} else {
116+
return _databaseOptions?.map((item) => {
117+
return {
118+
...item,
119+
expired: checkDbExpiredByDataSourceStatus(statusMap.get(item?.dataSource?.id)?.status),
120+
};
121+
});
122+
}
123+
}, [statusMap, _databaseOptions, orderedDatabaseIds]);
108124

109125
useEffect(() => {
110126
if (multipleDatabaseChangeOpen && projectId) {

src/component/Task/MutipleAsyncTask/CreateModal/InnerSelecter.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { getDataSourceStyleByConnectType } from '@/common/datasource';
22
import ConnectionPopover from '@/component/ConnectionPopover';
33
import RiskLevelLabel from '@/component/RiskLevelLabel';
4-
import { IConnection } from '@/d.ts';
4+
import { ConnectType, IConnection } from '@/d.ts';
55
import { IEnvironment } from '@/d.ts/environment';
66
import { ReactComponent as DragSvg } from '@/svgr/drag.svg';
77
import { formatMessage } from '@/util/intl';
@@ -22,6 +22,7 @@ export type DatabaseOption = {
2222
existed: boolean;
2323
unauthorized: boolean;
2424
expired: boolean;
25+
connectType: ConnectType;
2526
};
2627
const InnerSelect: React.FC<{
2728
rootName: (number | string)[];

src/component/Task/MutipleAsyncTask/components/Template/EditTemplate.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ const EditTemplate: React.FC<{
8080
DatabasePermissionType.CHANGE,
8181
),
8282
expired: checkDbExpiredByDataSourceStatus(statusInfo?.status),
83+
connectType: item?.connectType,
8384
};
8485
}),
8586
);

src/component/Task/component/CommonDetailModal/TaskExecuteModal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,11 @@ const getColumns = () => {
9090
dataIndex: 'traceId',
9191
ellipsis: true,
9292
render: (value: string, row: any) => {
93-
if (!value) return '-';
94-
return value;
93+
return (
94+
<Tooltip placement="topLeft" title={value || '-'}>
95+
{value || '-'}
96+
</Tooltip>
97+
);
9598
},
9699
width: 200,
97100
},

src/component/Task/component/TaskTable/index.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ const TaskTable: React.FC<IProps> = inject(
203203
return !start || !end ? null : [moment(start), moment(end)];
204204
});
205205
const [loading, setLoading] = useState(false);
206+
const [hoverInNewTaskMenuBtn, setHoverInNewTaskMenuBtn] = useState(false);
207+
const [hoverInNewTaskMenu, setHoverInNewTaskMenu] = useState(false);
206208
const [listParams, setListParams] = useState(null);
207209
const loadParams = useRef(null);
208210
const { activePageKey } = pageStore;
@@ -486,7 +488,12 @@ const TaskTable: React.FC<IProps> = inject(
486488
.filter(Boolean),
487489
);
488490
return (
489-
<Space align="start" size={20}>
491+
<Space
492+
align="start"
493+
size={20}
494+
onMouseMove={() => setHoverInNewTaskMenuBtn(true)}
495+
onMouseLeave={() => setHoverInNewTaskMenuBtn(false)}
496+
>
490497
{items?.map((i) => {
491498
return (
492499
<Space direction="vertical">
@@ -499,6 +506,7 @@ const TaskTable: React.FC<IProps> = inject(
499506
<div
500507
className={styles.menuItem}
501508
onClick={() => {
509+
setHoverInNewTaskMenuBtn(false);
502510
props.onMenuClick(i?.key as TaskPageType);
503511
}}
504512
>
@@ -525,8 +533,20 @@ const TaskTable: React.FC<IProps> = inject(
525533
? {
526534
type: IOperationOptionType.custom,
527535
render: () => (
528-
<Popover content={newTaskMenu} placement="bottomLeft">
529-
<Button type="primary">
536+
<Popover
537+
content={newTaskMenu}
538+
placement="bottomLeft"
539+
open={hoverInNewTaskMenuBtn || hoverInNewTaskMenu}
540+
>
541+
<Button
542+
type="primary"
543+
onMouseMove={() => setHoverInNewTaskMenu(true)}
544+
onMouseLeave={() => {
545+
setTimeout(() => {
546+
setHoverInNewTaskMenu(false);
547+
}, 500);
548+
}}
549+
>
530550
{
531551
formatMessage({
532552
id: 'odc.component.TaskTable.NewWorkOrder',

0 commit comments

Comments
 (0)