Commit 42a72dcc authored by wenmo's avatar wenmo

页面调整

parent 311685bf
...@@ -92,17 +92,6 @@ ...@@ -92,17 +92,6 @@
<discardingThreshold>0</discardingThreshold> <discardingThreshold>0</discardingThreshold>
<appender-ref ref="FileAppender"/> <appender-ref ref="FileAppender"/>
</appender> </appender>
<appender name="audit_log_async" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="audit_log"/>
</appender>
<logger name="com.datalink.log.monitor" level="debug" addtivity="false">
<appender-ref ref="point_log_async" />
</logger>
<logger name="com.datalink.log.service.impl.LoggerAuditServiceImpl" level="debug" addtivity="false">
<appender-ref ref="audit_log_async" />
</logger>
<root level="INFO"> <root level="INFO">
<appender-ref ref="StdoutAppender"/> <appender-ref ref="StdoutAppender"/>
<appender-ref ref="file_async"/> <appender-ref ref="file_async"/>
......
...@@ -12,7 +12,7 @@ const Settings: LayoutSettings & { ...@@ -12,7 +12,7 @@ const Settings: LayoutSettings & {
fixedHeader: false, fixedHeader: false,
fixSiderbar: true, fixSiderbar: true,
colorWeak: false, colorWeak: false,
title: 'Dlink 开发平台', title: 'Dlink',
pwa: false, pwa: false,
logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', logo: 'https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg',
iconfontUrl: '', iconfontUrl: '',
......
...@@ -42,6 +42,7 @@ export default [ ...@@ -42,6 +42,7 @@ export default [
{ {
path: '/dev', path: '/dev',
name: 'dev', name: 'dev',
icon: 'crown',
routes: [ routes: [
{ {
path: '/dev/flink', path: '/dev/flink',
...@@ -90,6 +91,7 @@ export default [ ...@@ -90,6 +91,7 @@ export default [
{ {
path: '/demo', path: '/demo',
name: 'demo', name: 'demo',
icon: 'crown',
//access: 'canAdmin', //access: 'canAdmin',
routes: [ routes: [
{ {
......
...@@ -6,7 +6,7 @@ export default () => { ...@@ -6,7 +6,7 @@ export default () => {
const intl = useIntl(); const intl = useIntl();
const defaultMessage = intl.formatMessage({ const defaultMessage = intl.formatMessage({
id: 'app.copyright.produced', id: 'app.copyright.produced',
defaultMessage: 'DataLink 数据中台 开源', defaultMessage: 'Dlink',
}); });
return ( return (
...@@ -14,15 +14,15 @@ export default () => { ...@@ -14,15 +14,15 @@ export default () => {
copyright={`2021 ${defaultMessage}`} copyright={`2021 ${defaultMessage}`}
links={[ links={[
{ {
key: 'DataLink', key: 'Dlink',
title: 'DataLink', title: 'Dlink',
href: '', href: '',
blankTarget: true, blankTarget: true,
}, },
{ {
key: 'github', key: 'github',
title: <GithubOutlined />, title: <GithubOutlined />,
href: 'https://github.com/aiwenmo/DataLink', href: 'https://github.com/aiwenmo/Dlink',
blankTarget: true, blankTarget: true,
}, },
]} ]}
......
import {Effect, Reducer} from "umi";
export type StateType = {
current?: string;
data?: {
sql: string;
};
};
export type ModelType = {
namespace: string;
state: StateType;
effects: {
executeSql: Effect;
};
reducers: {
saveSql: Reducer<StateType>;
};
};
...@@ -12,7 +12,7 @@ const CreateForm: React.FC<CreateFormProps> = (props) => { ...@@ -12,7 +12,7 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
return ( return (
<Modal <Modal
destroyOnClose destroyOnClose
title="添加任务" title="添加 Flink 集群"
visible={modalVisible} visible={modalVisible}
onCancel={() => onCancel()} onCancel={() => onCancel()}
footer={null} footer={null}
......
...@@ -13,25 +13,3 @@ export type ClusterTableListItem = { ...@@ -13,25 +13,3 @@ export type ClusterTableListItem = {
createTime: Date, createTime: Date,
updateTime: Date, updateTime: Date,
}; };
export type TableListPagination = {
total: number;
pageSize: number;
current: number;
};
export type TableListData = {
list: TableListItem[];
pagination: Partial<TableListPagination>;
};
export type TableListParams = {
status?: string;
name?: string;
desc?: string;
key?: number;
pageSize?: number;
currentPage?: number;
filter?: Record<string, any[]>;
sorter?: Record<string, any>;
};
import request from 'umi-request';
import type { TableListParams } from './data.d';
import {ClusterTableListItem} from "./data.d";
export async function queryCluster(params?: TableListParams) {
return request('/api/task', {
method: 'POST',
data: {
...params,
},
});
}
export async function removeCluster(params: number[]) {
return request('/api/task', {
method: 'DELETE',
data: {
...params,
},
});
}
export async function submitCluster(params: number[]) {
return request('/api/cluster/submit', {
method: 'POST',
data: {
...params,
},
});
}
export async function addOrUpdateCluster(params: ClusterTableListItem) {
return request('/api/task', {
method: 'PUT',
data: {
...params,
},
});
}
import React, {useEffect, useState} from 'react'; import React, {useEffect, useState} from 'react';
import { Form, Button, Input, Modal } from 'antd'; import {Form, Button, Input, Modal} from 'antd';
import type { TableListItem } from '../data.d'; import type {TableListItem} from '../data.d';
import Switch from "antd/es/switch"; import Switch from "antd/es/switch";
export type UpdateFormProps = { export type UpdateFormProps = {
onCancel: (flag?: boolean, formVals?: Partial<TableListItem>) => void; onCancel: (flag?: boolean, formVals?: Partial<TableListItem>) => void;
onSubmit: (values: Partial<TableListItem>) => void; onSubmit: (values: Partial<TableListItem>) => void;
updateModalVisible: boolean; updateModalVisible: boolean;
values: Partial<TableListItem>; values: Partial<TableListItem>;
}; };
const FormItem = Form.Item; const FormItem = Form.Item;
const formLayout = { const formLayout = {
labelCol: { span: 7 }, labelCol: {span: 7},
wrapperCol: { span: 13 }, wrapperCol: {span: 13},
}; };
const UpdateForm: React.FC<UpdateFormProps> = (props) => { const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const [formVals, setFormVals] = useState<Partial<TableListItem>>({ const [formVals, setFormVals] = useState<Partial<TableListItem>>({
id: props.values.id, id: props.values.id,
name: props.values.name, name: props.values.name,
alias: props.values.alias, alias: props.values.alias,
type: props.values.type, type: props.values.type,
note: props.values.note, checkPoint: props.values.checkPoint,
enabled: props.values.enabled, savePointPath: props.values.savePointPath,
createUser: props.values.createUser, parallelism: props.values.parallelism,
updateUser: props.values.updateUser, fragemnt: props.values.fragment,
tenantId: props.values.tenantId, clusterId: props.values.clusterId,
}); note: props.values.note,
enabled: props.values.enabled,
const [form] = Form.useForm(); });
const { const [form] = Form.useForm();
onSubmit: handleUpdate,
onCancel: handleUpdateModalVisible,
updateModalVisible,
values,
} = props;
const submitForm = async () => { const {
const fieldsValue = await form.validateFields(); onSubmit: handleUpdate,
setFormVals({ ...formVals, ...fieldsValue }); onCancel: handleUpdateModalVisible,
handleUpdate({ ...formVals, ...fieldsValue }); updateModalVisible,
}; values,
} = props;
const renderContent = (formVals) => { const submitForm = async () => {
return ( const fieldsValue = await form.validateFields();
<> setFormVals({...formVals, ...fieldsValue});
<FormItem handleUpdate({...formVals, ...fieldsValue});
name="name" };
label="名称"
rules={[{ required: true, message: '请输入名称!' }]} >
<Input placeholder="请输入" />
</FormItem>
<FormItem
name="alias"
label="别名"
>
<Input placeholder="请输入" />
</FormItem>
<FormItem
name="type"
label="类型"
>
<Input placeholder="请输入" />
</FormItem>
<FormItem
name="note"
label="注释"
>
<Input placeholder="请输入" />
</FormItem>
<FormItem
name="enabled"
label="是否启用"
rules={[{ required: true, message: '请输入是否启用!' }]} >
<Switch checkedChildren="启用" unCheckedChildren="禁用"
defaultChecked={formVals.enabled}/>
</FormItem>
</>
);
};
const renderFooter = () => {
return (
<>
<Button onClick={() => handleUpdateModalVisible(false, values)}>取消</Button>
<Button type="primary" onClick={() => submitForm()}>
完成
</Button>
</>
);
};
const renderContent = (formVals) => {
return ( return (
<Modal <>
width={640} <FormItem
bodyStyle={{ padding: '32px 40px 48px' }} name="name"
destroyOnClose label="名称"
title="编辑任务" rules={[{required: true, message: '请输入名称!'}]}>
visible={updateModalVisible} <Input placeholder="请输入"/>
footer={renderFooter()} </FormItem>
onCancel={() => handleUpdateModalVisible()} <FormItem
name="alias"
label="别名"
>
<Input placeholder="请输入"/>
</FormItem>
<FormItem
name="type"
label="类型"
>
<Input placeholder="请输入"/>
</FormItem>
<FormItem
name="note"
label="注释"
>
<Input placeholder="请输入"/>
</FormItem>
<FormItem
name="checkPoint"
label="CheckPoint"
>
<Input placeholder="请输入"/>
</FormItem>
<FormItem
name="savePointPath"
label="SavePointPath"
> >
<Form <Input placeholder="请输入"/>
{...formLayout} </FormItem>
form={form} <FormItem
initialValues={{ name="parallelism"
id: formVals.id, label="Parallelism"
name: formVals.name, >
alias: formVals.alias, <Input placeholder="请输入"/>
type: formVals.type, </FormItem>
note: formVals.note, <FormItem
enabled: formVals.enabled, name="fragemnt"
createUser: formVals.createUser, label="Fragment"
updateUser: formVals.updateUser, >
tenantId: formVals.tenantId, <Input placeholder="请输入"/>
}} </FormItem>
> <FormItem
{renderContent(formVals)} name="note"
</Form> label="注释"
</Modal> >
<Input placeholder="请输入"/>
</FormItem>
<FormItem
name="enabled"
label="是否启用"
rules={[{required: true, message: '请输入是否启用!'}]}>
<Switch checkedChildren="启用" unCheckedChildren="禁用"
defaultChecked={formVals.enabled}/>
</FormItem>
</>
); );
};
const renderFooter = () => {
return (
<>
<Button onClick={() => handleUpdateModalVisible(false, values)}>取消</Button>
<Button type="primary" onClick={() => submitForm()}>
完成
</Button>
</>
);
};
return (
<Modal
width={640}
bodyStyle={{padding: '32px 40px 48px'}}
destroyOnClose
title="编辑任务"
visible={updateModalVisible}
footer={renderFooter()}
onCancel={() => handleUpdateModalVisible()}
>
<Form
{...formLayout}
form={form}
initialValues={{
id: formVals.id,
name: formVals.name,
alias: formVals.alias,
type: formVals.type,
note: formVals.note,
checkPoint: formVals.checkPoint,
savePointPath: formVals.savePointPath,
parallelism: formVals.parallelism,
fragemnt: formVals.fragemnt,
clusterId: formVals.clusterId,
enabled: formVals.enabled,
}}
>
{renderContent(formVals)}
</Form>
</Modal>
);
}; };
export default UpdateForm; export default UpdateForm;
export type TaskTableListItem = { export type TaskTableListItem = {
id: number, id: number,
name: string, name: string,
alias: string, alias: string,
type: string, type: string,
checkPoint: number, checkPoint: number,
savePointPath: string, savePointPath: string,
parallelism: number, parallelism: number,
fragment: boolean, fragment: boolean,
clusterId: number, clusterId: number,
note: string, clusterName: string,
enabled: boolean, note: string,
createTime: Date, enabled: boolean,
updateTime: Date, createTime: Date,
}; updateTime: Date,
export type TableListPagination = {
total: number;
pageSize: number;
current: number;
};
export type TableListData = {
list: TableListItem[];
pagination: Partial<TableListPagination>;
};
export type TableListParams = {
status?: string;
name?: string;
desc?: string;
key?: number;
pageSize?: number;
currentPage?: number;
filter?: Record<string, any[]>;
sorter?: Record<string, any>;
}; };
...@@ -15,7 +15,7 @@ import Dropdown from "antd/es/dropdown/dropdown"; ...@@ -15,7 +15,7 @@ import Dropdown from "antd/es/dropdown/dropdown";
import Menu from "antd/es/menu"; import Menu from "antd/es/menu";
import {handleAddOrUpdate, handleRemove, handleSubmit, queryData, updateEnabled} from "@/components/Common/crud"; import {handleAddOrUpdate, handleRemove, handleSubmit, queryData, updateEnabled} from "@/components/Common/crud";
const url = '/api-dlink/task'; const url = '/api/task';
const TaskTableList: React.FC<{}> = () => { const TaskTableList: React.FC<{}> = () => {
const [createModalVisible, handleModalVisible] = useState<boolean>(false); const [createModalVisible, handleModalVisible] = useState<boolean>(false);
...@@ -112,6 +112,54 @@ const TaskTableList: React.FC<{}> = () => { ...@@ -112,6 +112,54 @@ const TaskTableList: React.FC<{}> = () => {
hideInSearch: true, hideInSearch: true,
hideInTable: false, hideInTable: false,
}, },
{
title: 'CheckPoint',
sorter: true,
dataIndex: 'checkPoint',
hideInForm: false,
hideInSearch: true,
hideInTable: true,
},
{
title: 'SavePointPath',
sorter: true,
dataIndex: 'savePointPath',
hideInForm: false,
hideInSearch: true,
hideInTable: true,
},
{
title: 'Parallelism',
sorter: true,
dataIndex: 'parallelism',
hideInForm: false,
hideInSearch: true,
hideInTable: true,
},
{
title: 'Fragment',
sorter: true,
dataIndex: 'fragment',
hideInForm: false,
hideInSearch: true,
hideInTable: true,
},
{
title: '集群ID',
sorter: true,
dataIndex: 'clusterId',
hideInForm: false,
hideInSearch: true,
hideInTable: true,
},
{
title: '集群',
sorter: true,
dataIndex: 'clusterName',
hideInForm: true,
hideInSearch: true,
hideInTable: true,
},
{ {
title: '注释', title: '注释',
sorter: true, sorter: true,
...@@ -143,23 +191,6 @@ const TaskTableList: React.FC<{}> = () => { ...@@ -143,23 +191,6 @@ const TaskTableList: React.FC<{}> = () => {
false: { text: '禁用', status: 'Error' }, false: { text: '禁用', status: 'Error' },
}, },
}, },
{
title: '创建人ID',
sorter: true,
dataIndex: 'createUser',
hideInForm: true,
hideInSearch: true,
hideInTable: true,
hideInDescriptions:true,
},
{
title: '创建人',
sorter: true,
dataIndex: 'createNickName',
hideInForm: true,
hideInSearch: true,
hideInTable: true,
},
{ {
title: '创建时间', title: '创建时间',
dataIndex: 'createTime', dataIndex: 'createTime',
...@@ -178,23 +209,6 @@ const TaskTableList: React.FC<{}> = () => { ...@@ -178,23 +209,6 @@ const TaskTableList: React.FC<{}> = () => {
return defaultRender(item); return defaultRender(item);
}, },
}, },
{
title: '更新人ID',
sorter: true,
dataIndex: 'updateUser',
hideInForm: true,
hideInSearch: true,
hideInTable: true,
hideInDescriptions:true,
},
{
title: '更新人',
sorter: true,
dataIndex: 'updateNickName',
hideInForm: true,
hideInSearch: true,
hideInTable: false,
},
{ {
title: '最近更新时间', title: '最近更新时间',
dataIndex: 'updateTime', dataIndex: 'updateTime',
......
import request from 'umi-request';
import type { TableListParams } from './data.d';
import {TaskTableListItem} from "./data.d";
export async function queryTask(params?: TableListParams) {
return request('/api/task', {
method: 'POST',
data: {
...params,
},
});
}
export async function removeTask(params: number[]) {
return request('/api/task', {
method: 'DELETE',
data: {
...params,
},
});
}
export async function submitTask(params: number[]) {
return request('/api/task/submit', {
method: 'POST',
data: {
...params,
},
});
}
export async function addOrUpdateTask(params: TaskTableListItem) {
return request('/api/task', {
method: 'PUT',
data: {
...params,
},
});
}
...@@ -95,7 +95,7 @@ const Login: React.FC = () => { ...@@ -95,7 +95,7 @@ const Login: React.FC = () => {
<div className={styles.header}> <div className={styles.header}>
<Link to="/"> <Link to="/">
<img alt="logo" className={styles.logo} src="/logo.svg" /> <img alt="logo" className={styles.logo} src="/logo.svg" />
<span className={styles.title}>DataLink</span> <span className={styles.title}>Dlink</span>
</Link> </Link>
</div> </div>
<div className={styles.desc}> <div className={styles.desc}>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment