Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@kne-components/components-admin",
"version": "1.1.41",
"version": "1.1.42",
"description": "用于实现一个后台管理系统的必要组件",
"scripts": {
"init": "husky",
Expand Down
21 changes: 21 additions & 0 deletions src/components/Apis/getApis.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,23 @@ const getApis = options => {
url: `${prefix}/tenant/admin/org-batch-import`,
method: 'POST'
},
orgLinkConfig: {
url: `${prefix}/tenant/admin/org-link-config`,
method: 'GET'
},
orgLinkSave: {
url: `${prefix}/tenant/admin/org-link-save`,
method: 'POST'
},
orgLinkCancel: {
url: `${prefix}/tenant/admin/org-link-cancel`,
method: 'POST'
},
orgLinkSync: {
url: `${prefix}/tenant/admin/org-link-sync`,
method: 'POST'
},

userList: {
url: `${prefix}/tenant/admin/user-list`,
method: 'GET'
Expand Down Expand Up @@ -407,6 +424,10 @@ const getApis = options => {
url: `${prefix}/tenant/org-batch-import`,
method: 'POST'
},
orgLinkConfig: {
url: `${prefix}/tenant/org-link-config`,
method: 'GET'
},
userList: {
url: `${prefix}/tenant/user-list`,
method: 'GET'
Expand Down
38 changes: 16 additions & 22 deletions src/components/MessageManger/Dashboard/useRealtimeStatisticsSSE.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { useEffect, useState } from 'react';
import { useMemo, useState } from 'react';
import { getToken } from '@kne/token-storage';
import { buildUrlWithParams } from './constants';
import { getClientIanaTimezone } from '../utils';
import useManagedEventSource from '../../../utils/useManagedEventSource';

const isLikelyStatisticsPayload = obj =>
obj &&
Expand Down Expand Up @@ -44,21 +45,19 @@ const useRealtimeStatisticsSSE = sseUrl => {
const [isConnected, setIsConnected] = useState(false);
const [lastUpdatedAt, setLastUpdatedAt] = useState(null);

useEffect(() => {
if (!sseUrl || typeof window === 'undefined' || typeof window.EventSource !== 'function') {
return undefined;
}

const source = new EventSource(
buildUrlWithParams(sseUrl, {
interval: 5,
token: getToken('X-User-Token'),
timezone: getClientIanaTimezone()
})
);
const streamUrl = useMemo(() => {
if (!sseUrl) return null;
return buildUrlWithParams(sseUrl, {
interval: 5,
token: getToken('X-User-Token'),
timezone: getClientIanaTimezone()
});
}, [sseUrl]);

source.onopen = () => setIsConnected(true);
source.onmessage = event => {
useManagedEventSource(streamUrl, {
onOpen: () => setIsConnected(true),
onError: () => setIsConnected(false),
onMessage: event => {
try {
const parsed = JSON.parse(event.data);
const nextData = unwrapStatisticsPayload(parsed);
Expand All @@ -69,13 +68,8 @@ const useRealtimeStatisticsSSE = sseUrl => {
} catch {
// ignore parse errors
}
};
source.onerror = () => setIsConnected(false);

return () => {
source.close();
};
}, [sseUrl]);
}
});

return { realtimeData, isConnected, lastUpdatedAt };
};
Expand Down
32 changes: 13 additions & 19 deletions src/components/MessageQueue/Dashboard/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { createWithRemoteLoader } from '@kne/remote-loader';
import Fetch from '@kne/react-fetch';
import { useEffect, useState } from 'react';
import { useEffect, useMemo, useState } from 'react';
import { Button, Card, Col, Row, Space, Statistic, Table, Tag } from 'antd';
import { ReloadOutlined } from '@ant-design/icons';
import withLocale from '../withLocale';
import { useIntl } from '@kne/react-intl';
import Menu from '../Menu';
import { buildUrlWithParams, formatPercent, formatRate, getMetricTotal } from '../utils';
import useManagedEventSource from '../../../utils/useManagedEventSource';

const toTopicRows = current => {
const topics = new Set([
Expand Down Expand Up @@ -42,29 +43,22 @@ const DashboardContent = withLocale(({ Page, baseUrl, pageProps, apis, initialDa
setLastUpdatedAt(initialData?.timestamp);
}, [initialData]);

useEffect(() => {
if (!apis?.mq?.dashboard?.sse?.url || typeof window === 'undefined' || typeof window.EventSource !== 'function') {
return undefined;
}
const mqStreamUrl = useMemo(() => {
const url = apis?.mq?.dashboard?.sse?.url;
if (!url) return null;
return buildUrlWithParams(url, { interval: 1000 });
}, [apis]);

const source = new EventSource(buildUrlWithParams(apis.mq.dashboard.sse.url, { interval: 1000 }));
source.onopen = () => {
setIsConnected(true);
};
source.onmessage = event => {
useManagedEventSource(mqStreamUrl, {
onOpen: () => setIsConnected(true),
onError: () => setIsConnected(false),
onMessage: event => {
const nextData = JSON.parse(event.data);
setData(nextData);
setLastUpdatedAt(nextData.timestamp || Date.now());
setIsConnected(true);
};
source.onerror = () => {
setIsConnected(false);
};

return () => {
source.close();
};
}, [apis]);
}
});

const current = data?.current || {};
const rows = toTopicRows(current);
Expand Down
4 changes: 2 additions & 2 deletions src/components/Task/locale/zh-CN.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const locale = {
// Status Enums
Pending: '等待执行',
Running: '执行中',
Waiting: '等待操作',
Waiting: '等待',
Success: '成功',
Failed: '失败',
Canceled: '已取消',
Expand Down Expand Up @@ -76,7 +76,7 @@ const locale = {
ManualExecutionStats: '手动执行任务',
ManualExecutionGoMyTaskTitle: '点击此处查看我的任务',
ManualExecutionTasks: '手动执行数量',
ManualPendingTasks: '等待操作',
ManualPendingTasks: '等待',
ManualExecutedTasks: '当日完成',
ManualPendingMaxWaitLabel: '最长等待',
ManualCompletedTotalDurationLabel: '总耗时',
Expand Down
6 changes: 3 additions & 3 deletions src/components/Tenant/JoinInvitation/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import Fetch from '@kne/react-fetch';
import CountDown from '@kne/count-down';
import { useSearchParams, useNavigate } from 'react-router-dom';
import CompanyInfo from '../CompanyInfo';
import TenantUserPersonalCard from '../UserList/TenantUserPersonalCard';
import normalizeTenantUserForPersonalCard from '../UserList/normalizeTenantUserForPersonalCard';
import TenantUserPersonalCard from '../UserList/UserPersonalCard';

import withLocale from '../withLocale';
import { useIntl } from '@kne/react-intl';
import style from './style.module.scss';
Expand Down Expand Up @@ -174,7 +174,7 @@ const JoinInvitation = createWithRemoteLoader({
{formatMessage({ id: 'ConfirmEmployeeInfoHint' })}
</Typography.Paragraph>
<TenantUserPersonalCard
data={normalizeTenantUserForPersonalCard(tenantUser)}
data={tenantUser}
positionList={data.positionList}
/>
</div>
Expand Down
37 changes: 37 additions & 0 deletions src/components/Tenant/OrgInfo/LeaderFormInner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { createWithRemoteLoader } from '@kne/remote-loader';
import { useIntl } from '@kne/react-intl';
import merge from 'lodash/merge';
import withLocale from '../withLocale';

const LeaderFormInnerCore = createWithRemoteLoader({
modules: ['components-core:FormInfo']
})(({ remoteModules, apis, orgId }) => {
const [FormInfo] = remoteModules;
const { formatMessage } = useIntl();
const { SuperSelect } = FormInfo.fields;
const list = [];
if (apis?.userList) {
list.push(
<SuperSelect
name="leaderUserId"
label={formatMessage({ id: 'OrgLeader' })}
api={merge({}, apis.userList, {
params: merge(
{ perPage: 100, currentPage: 1 },
apis.userList.params || {},
orgId ? { filter: { tenantOrgId: orgId } } : {}
)
})}
description={formatMessage({ id: 'OrgLeaderMustBeMember' })}
interceptor="object-output-value"
valueKey="id"
labelKey="name"
single
allowClear
/>
);
}
return <FormInfo column={1} list={list} />;
});

export default withLocale(LeaderFormInnerCore);
Loading
Loading