Skip to content

Commit 7d1010a

Browse files
authored
Merge pull request #206 from dotnetcore/feature/client-page-support-filter-by-appid-and-env
Client page support filter by env and appid
2 parents f081e07 + 4fa45d0 commit 7d1010a

File tree

3 files changed

+104
-100
lines changed

3 files changed

+104
-100
lines changed

src/AgileConfig.Server.Apisite/AgileConfig.Server.Apisite.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
55
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
6-
<AssemblyVersion>1.9.9</AssemblyVersion>
7-
<Version>1.9.9</Version>
8-
<PackageVersion>1.9.9</PackageVersion>
6+
<AssemblyVersion>1.9.10</AssemblyVersion>
7+
<Version>1.9.10</Version>
8+
<PackageVersion>1.9.10</PackageVersion>
99
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
10-
<FileVersion>1.9.9</FileVersion>
10+
<FileVersion>1.9.10</FileVersion>
1111
<Authors>kklldog</Authors>
1212
<Company>kklldog</Company>
1313
</PropertyGroup>

src/AgileConfig.Server.Apisite/Controllers/ReportController.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public IActionResult ServerNodeClients(string address)
5757
return Json(report);
5858
}
5959

60-
public async Task<IActionResult> SearchServerNodeClients(string address, int current, int pageSize)
60+
public async Task<IActionResult> SearchServerNodeClients(string address, string appId, string env, int current, int pageSize)
6161
{
6262
if (current <= 0)
6363
{
@@ -91,6 +91,17 @@ public async Task<IActionResult> SearchServerNodeClients(string address, int cur
9191
}
9292
}
9393

94+
// filter by env
95+
if (!string.IsNullOrEmpty(env))
96+
{
97+
clients = clients.Where(x => x.Env.Contains(env, StringComparison.CurrentCultureIgnoreCase)).ToList();
98+
}
99+
// filter by appid
100+
if (!string.IsNullOrEmpty(appId))
101+
{
102+
clients = clients.Where(x => x.AppId.Contains(appId, StringComparison.CurrentCultureIgnoreCase)).ToList();
103+
}
104+
94105
var page = clients.OrderBy(i => i.Address).ThenBy(i => i.Id).Skip((current - 1) * pageSize).Take(pageSize);
95106

96107
return Json(new

src/AgileConfig.Server.UI/react-ui-antd/src/pages/Clients/index.tsx

Lines changed: 88 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -12,146 +12,142 @@ import { queryNodes } from '../Nodes/service';
1212
import { queryClients, reloadClientConfigs, clientOffline } from './service';
1313
const { confirm } = Modal;
1414

15-
const handleClientReload = async (client:any)=>{
15+
const handleClientReload = async (client: any) => {
1616
const intl = getIntl(getLocale());
17-
const hide = message.loading(intl.formatMessage({id: 'refreshing'}));
17+
const hide = message.loading(intl.formatMessage({ id: 'refreshing' }));
1818
try {
1919
const result = await reloadClientConfigs(client.address, client.id);
2020
hide();
2121
const success = result.success;
2222
if (success) {
23-
message.success(intl.formatMessage({id: 'refresh_success'}));
23+
message.success(intl.formatMessage({ id: 'refresh_success' }));
2424
} else {
2525
message.error(result.message);
2626
}
2727
return success;
2828
} catch (error) {
2929
hide();
30-
message.error(intl.formatMessage({id: 'refresh_fail'}));
30+
message.error(intl.formatMessage({ id: 'refresh_fail' }));
3131
return false;
3232
}
33-
}
33+
};
3434

35-
36-
const handleClientOffline = async (client:any)=>{
35+
const handleClientOffline = async (client: any) => {
3736
const intl = getIntl(getLocale());
38-
const hide = message.loading(intl.formatMessage({id: 'disconnecting'}));
37+
const hide = message.loading(intl.formatMessage({ id: 'disconnecting' }));
3938
try {
4039
const result = await clientOffline(client.address, client.id);
4140
hide();
4241
const success = result.success;
4342
if (success) {
44-
message.success(intl.formatMessage({id: 'disconnect_success'}));
43+
message.success(intl.formatMessage({ id: 'disconnect_success' }));
4544
} else {
4645
message.error(result.message);
4746
}
4847
return success;
4948
} catch (error) {
5049
hide();
51-
message.error(intl.formatMessage({id: 'disconnect_fail'}));
50+
message.error(intl.formatMessage({ id: 'disconnect_fail' }));
5251
return false;
5352
}
54-
}
53+
};
5554

56-
const clients:React.FC = () => {
55+
const clients: React.FC = () => {
5756
const actionRef = useRef<ActionType>();
5857
const [appEnums, setAppEnums] = useState<any>();
5958
const intl = useIntl();
6059

61-
const getNodesForSelect = async () =>
62-
{
63-
const result = await queryNodes()
64-
const arr:any[] = [];
65-
result.data.forEach((x:{address:string})=>{
66-
arr.push({
67-
value: x.address,
68-
label: x.address,
69-
});
60+
const getNodesForSelect = async () => {
61+
const result = await queryNodes();
62+
const arr: any[] = [];
63+
result.data.forEach((x: { address: string }) => {
64+
arr.push({
65+
value: x.address,
66+
label: x.address,
67+
});
7068
});
7169

7270
return arr;
73-
}
74-
const getAppEnums = async () =>
75-
{
76-
const result = await queryApps({})
71+
};
72+
const getAppEnums = async () => {
73+
const result = await queryApps({});
7774
const obj = {};
78-
result.data?.forEach(x=>{
79-
if(x) {
75+
result.data?.forEach((x) => {
76+
if (x) {
8077
obj[x.id] = {
81-
text: x.name
82-
}
78+
text: x.name,
79+
};
8380
}
8481
});
8582

8683
return obj;
87-
}
88-
useEffect(()=>{
89-
getAppEnums().then(x=> {
84+
};
85+
useEffect(() => {
86+
getAppEnums().then((x) => {
9087
console.log('app enums ', x);
91-
setAppEnums({...x});
88+
setAppEnums({ ...x });
9289
});
9390
}, []);
9491
const columns: ProColumns[] = [
9592
{
9693
title: intl.formatMessage({
97-
id: 'pages.client.table.cols.id'
94+
id: 'pages.client.table.cols.id',
9895
}),
9996
dataIndex: 'id',
10097
hideInSearch: true,
101-
ellipsis: true
98+
ellipsis: true,
10299
},
103100
{
104101
title: intl.formatMessage({
105-
id: 'pages.client.table.cols.node'
102+
id: 'pages.client.table.cols.node',
106103
}),
107104
dataIndex: 'address',
108105
valueType: 'select',
109-
request: getNodesForSelect
106+
request: getNodesForSelect,
107+
},
108+
{
109+
title: '环境',
110+
dataIndex: 'env',
110111
},
111112
{
112113
title: intl.formatMessage({
113-
id: 'pages.client.table.cols.appid'
114+
id: 'pages.client.table.cols.appid',
114115
}),
115116
dataIndex: 'appId',
116-
hideInSearch: true,
117-
},
118-
{
119-
title: '环境',
120-
dataIndex: 'env',
121-
hideInSearch: true,
122117
},
123118
{
124119
title: intl.formatMessage({
125-
id: 'pages.client.table.cols.ip'
120+
id: 'pages.client.table.cols.ip',
126121
}),
127122
dataIndex: 'ip',
128123
hideInSearch: true,
129124
},
130125
{
131126
title: intl.formatMessage({
132-
id: 'pages.client.table.cols.name'
127+
id: 'pages.client.table.cols.name',
133128
}),
134129
dataIndex: 'name',
135130
hideInSearch: true,
136-
},{
131+
},
132+
{
137133
title: intl.formatMessage({
138-
id: 'pages.client.table.cols.tag'
134+
id: 'pages.client.table.cols.tag',
139135
}),
140136
dataIndex: 'tag',
141137
hideInSearch: true,
142138
},
143139
{
144140
title: intl.formatMessage({
145-
id: 'pages.client.table.cols.lastRefreshTime'
141+
id: 'pages.client.table.cols.lastRefreshTime',
146142
}),
147143
dataIndex: 'lastRefreshTime',
148144
hideInSearch: true,
149145
valueType: 'dateTime',
150-
tip: '客户端从服务器最后一次全量拉取配置的时间'
146+
tip: '客户端从服务器最后一次全量拉取配置的时间',
151147
},
152148
{
153149
title: intl.formatMessage({
154-
id: 'pages.client.table.cols.action'
150+
id: 'pages.client.table.cols.action',
155151
}),
156152
valueType: 'option',
157153
render: (text, record) => [
@@ -160,57 +156,54 @@ const clients:React.FC = () => {
160156
handleClientReload(record);
161157
}}
162158
>
163-
{
164-
intl.formatMessage({
165-
id: 'pages.client.table.cols.action.refresh'
166-
})
167-
}
159+
{intl.formatMessage({
160+
id: 'pages.client.table.cols.action.refresh',
161+
})}
168162
</a>,
169163
<AuthorizedEle judgeKey={functionKeys.Client_Disconnect}>
170-
<Button type="link" danger onClick={
171-
()=>{
172-
const msg = intl.formatMessage({
173-
id: 'pages.client.disconnect_message'
174-
}) + `【${record.id}】`;
175-
confirm({
176-
icon: <ExclamationCircleOutlined />,
177-
content: msg,
178-
async onOk() {
179-
console.log('disconnect client ' + record.id);
180-
const success = await handleClientOffline(record);
181-
if (success) {
182-
actionRef.current?.reload();
183-
}
184-
},
185-
onCancel() {
186-
},
187-
});
188-
}}>
189-
{
190-
intl.formatMessage({
191-
id: 'pages.client.table.cols.action.disconnect'
192-
})
193-
}
164+
<Button
165+
type="link"
166+
danger
167+
onClick={() => {
168+
const msg =
169+
intl.formatMessage({
170+
id: 'pages.client.disconnect_message',
171+
}) + `【${record.id}】`;
172+
confirm({
173+
icon: <ExclamationCircleOutlined />,
174+
content: msg,
175+
async onOk() {
176+
console.log('disconnect client ' + record.id);
177+
const success = await handleClientOffline(record);
178+
if (success) {
179+
actionRef.current?.reload();
180+
}
181+
},
182+
onCancel() {},
183+
});
184+
}}
185+
>
186+
{intl.formatMessage({
187+
id: 'pages.client.table.cols.action.disconnect',
188+
})}
194189
</Button>
195-
</AuthorizedEle>
196-
]
197-
}
190+
</AuthorizedEle>,
191+
],
192+
},
198193
];
199194
return (
200-
<PageContainer header={{ title:intl.formatMessage({id:'pages.client.header.title'}) }}>
201-
<ProTable
202-
search={{
203-
labelWidth: 'auto',
204-
}}
205-
actionRef={actionRef}
206-
options={
207-
false
208-
}
195+
<PageContainer header={{ title: intl.formatMessage({ id: 'pages.client.header.title' }) }}>
196+
<ProTable
197+
search={{
198+
labelWidth: 'auto',
199+
}}
200+
actionRef={actionRef}
201+
options={false}
209202
rowKey="id"
210-
columns = {columns}
211-
request = { (params, sorter, filter) => queryClients(params) }
203+
columns={columns}
204+
request={(params, sorter, filter) => queryClients(params)}
212205
/>
213206
</PageContainer>
214207
);
215-
}
208+
};
216209
export default clients;

0 commit comments

Comments
 (0)