From fbde5a52dfe32c4220e384ceb49bbfc929fb31eb Mon Sep 17 00:00:00 2001 From: dagu <1182810784@qq.com> Date: Mon, 3 Jun 2024 14:16:44 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=9D=99=E6=80=81?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E6=98=A0=E5=B0=84=EF=BC=8C=E9=9D=99=E6=80=81?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E7=BB=9F=E4=B8=80=E8=B5=B0/static?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite.dev.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.dev.config.ts b/vite.dev.config.ts index f5d904fc..a37590d5 100644 --- a/vite.dev.config.ts +++ b/vite.dev.config.ts @@ -4,7 +4,7 @@ import react from '@vitejs/plugin-react' export default defineConfig({ server: { proxy: { - '^/(api|images|covers)/.*': { + '^/(api|static)/.*': { target: 'http://127.0.0.1:8080', changeOrigin: true, } From ff6321e900e10e341a936d2493b04655b0c46a42 Mon Sep 17 00:00:00 2001 From: dagu <1182810784@qq.com> Date: Tue, 4 Jun 2024 20:23:36 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E6=B6=88=E9=99=A4=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/Demo.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/test/Demo.tsx b/src/test/Demo.tsx index d4492896..9e8e9e21 100644 --- a/src/test/Demo.tsx +++ b/src/test/Demo.tsx @@ -1,13 +1,10 @@ import './DemoMain.less'; import "@amap/amap-jsapi-types"; -import ProjectItem from "../pages/home/project-list/ProjectItem.tsx"; export default function Demo() { return ( - { - }} - cover={'blob:http://localhost:5173/9fdc377b-540b-4fa2-a9fd-8d33b6b5735b'}/> +
); } From 7de54da75e87e4fb0cf03d138f1b76ef68c4632b Mon Sep 17 00:00:00 2001 From: dagu <1182810784@qq.com> Date: Tue, 4 Jun 2024 20:44:24 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E5=8F=96=E6=B6=88=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E7=9A=84=E5=BC=82=E6=AD=A5=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=EF=BC=8C=E9=87=8D=E6=96=B0=E6=94=B9=E4=B8=BA=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/designer/loader/AbstractDesignerLoader.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/designer/loader/AbstractDesignerLoader.ts b/src/designer/loader/AbstractDesignerLoader.ts index 4df751cb..60c743ce 100644 --- a/src/designer/loader/AbstractDesignerLoader.ts +++ b/src/designer/loader/AbstractDesignerLoader.ts @@ -13,9 +13,9 @@ export abstract class AbstractDesignerLoader { /** * 加载设计器 */ - public async load(id: string, type: SaveType): Promise { + public load(id: string, type: SaveType): void { //扫描组件 - await this.scanComponents(); + this.scanComponents(); //初始化项目 this.initProject(id, type); } @@ -23,11 +23,10 @@ export abstract class AbstractDesignerLoader { /** * 扫描设计器组件 */ - protected async scanComponents(): Promise { - const glob = import.meta.glob('../../comps/**/*.ts') as Record; + protected scanComponents(): void { + const glob = import.meta.glob('../../comps/**/*.ts', {eager: true}) as Record; for (const key of Object.keys(glob)) { - const module = await glob[key](); - const Clazz = module?.default; + const Clazz = glob[key]?.default; if (Clazz && AbstractDefinition.isPrototypeOf(Clazz)) { const definition: AbstractDefinition = new Clazz(); //获取组件的基础信息 From ef947994e83c06028ac9591f71a40d98a29684a5 Mon Sep 17 00:00:00 2001 From: dagu <1182810784@qq.com> Date: Wed, 5 Jun 2024 12:26:48 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtable=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9B=B4=E6=96=B0=E5=A4=B1=E8=B4=A5bug?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E7=BB=84=E4=BB=B6=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E6=97=B6=E5=85=A8=E9=80=89->=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8A=A5=E9=94=99=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/comps/lc/base-table/BaseTableController.ts | 4 ++-- src/designer/operate-provider/hot-key/HotKeyImpl.ts | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/comps/lc/base-table/BaseTableController.ts b/src/comps/lc/base-table/BaseTableController.ts index 4a714ccd..6967a320 100644 --- a/src/comps/lc/base-table/BaseTableController.ts +++ b/src/comps/lc/base-table/BaseTableController.ts @@ -23,8 +23,8 @@ export class BaseTableController extends AbstractDesignerController { const {layerConfigs} = layerManager; const {setTargetIds, calculateGroupCoordinate} = eventOperateStore; - const selected = Object.values(layerConfigs).map((item: ILayerItem) => { + const selected = []; + for (const id in layerConfigs) { + const item = layerConfigs[id]; if (!item.lock && !item.hide) - return item.id; - }); - setTargetIds(selected as string[]); + selected.push(id); + } - if (selected.length > 0) + if (selected.length > 0) { + setTargetIds(selected as string[]); calculateGroupCoordinate(selected.map((id: string | undefined) => document.getElementById(id!))?.filter((item: HTMLElement | null) => !!item) as HTMLElement[]); + } } /** From 2176ca4fc210289f84b65c2134a0e300ffe25796 Mon Sep 17 00:00:00 2001 From: dagu <1182810784@qq.com> Date: Sat, 15 Jun 2024 11:23:52 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E4=BC=98=E5=8C=96Home=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../antd-common/config/axis/AxisConfig.less | 0 .../antd-common/config/axis/AxisConfig.tsx | 1 - .../data-config/database/DatabaseConfig.tsx | 4 +- .../FourAngleGloeBorder.less | 3 - .../text-scroller/TextScrollerComponent.less | 2 +- src/designer/blueprint/line/LineLayer.less | 0 src/designer/blueprint/line/LineLayer.tsx | 1 - src/framework/message/GlobalModal.tsx | 33 +++++ src/index.less | 1 + src/json-schema/ui/radio/Radio.less | 3 - src/pages/home/Home.less | 1 + src/pages/home/datasource/DataSourceList.less | 10 +- src/pages/home/datasource/DataSourceList.tsx | 106 ++++++++++---- src/pages/home/datasource/DataSourcePanel.tsx | 107 ++++++++++++++ src/pages/home/datasource/DataSourceStore.ts | 135 ++++++++++++------ .../datasource/edit/EditDataSourceDialog.less | 34 ----- .../datasource/edit/EditDataSourceDialog.tsx | 99 ------------- src/pages/home/project-list/ProjectList.less | 7 +- src/pages/home/project-list/ProjectList.tsx | 27 ++-- src/pages/result/Error.tsx | 13 ++ src/pages/result/NoAuth.tsx | 13 ++ src/pages/result/NotFound.tsx | 13 ++ src/router/MainRouter.tsx | 58 +++++++- src/test/Demo.tsx | 3 +- src/utils/FetchUtil.ts | 36 ++++- 25 files changed, 462 insertions(+), 248 deletions(-) delete mode 100644 src/comps/antd-common/config/axis/AxisConfig.less delete mode 100644 src/designer/blueprint/line/LineLayer.less create mode 100644 src/framework/message/GlobalModal.tsx create mode 100644 src/pages/home/datasource/DataSourcePanel.tsx delete mode 100644 src/pages/home/datasource/edit/EditDataSourceDialog.less delete mode 100644 src/pages/home/datasource/edit/EditDataSourceDialog.tsx create mode 100644 src/pages/result/Error.tsx create mode 100644 src/pages/result/NoAuth.tsx create mode 100644 src/pages/result/NotFound.tsx diff --git a/src/comps/antd-common/config/axis/AxisConfig.less b/src/comps/antd-common/config/axis/AxisConfig.less deleted file mode 100644 index e69de29b..00000000 diff --git a/src/comps/antd-common/config/axis/AxisConfig.tsx b/src/comps/antd-common/config/axis/AxisConfig.tsx index 2204e8c9..1c125fde 100644 --- a/src/comps/antd-common/config/axis/AxisConfig.tsx +++ b/src/comps/antd-common/config/axis/AxisConfig.tsx @@ -1,5 +1,4 @@ import React, {Component, useState} from 'react'; -import './AxisConfig.less'; import {Axis} from "@antv/g2plot"; import {isEqual} from "lodash"; import {Control} from "../../../../json-schema/SchemaTypes"; diff --git a/src/comps/common-component/data-config/database/DatabaseConfig.tsx b/src/comps/common-component/data-config/database/DatabaseConfig.tsx index 6d8875c8..f4b270a9 100644 --- a/src/comps/common-component/data-config/database/DatabaseConfig.tsx +++ b/src/comps/common-component/data-config/database/DatabaseConfig.tsx @@ -2,12 +2,12 @@ import AbstractDesignerController from "../../../../framework/core/AbstractDesig import {FieldChangeData, LCGUI} from "../../../../json-schema/LCGUI.tsx"; import {Control} from "../../../../json-schema/SchemaTypes.ts"; import {useEffect, useRef, useState} from "react"; -import {DataSourceConfigType} from "../../../../pages/home/datasource/edit/EditDataSourceDialog.tsx"; import {globalMessage} from "../../../../framework/message/GlobalMessage.tsx"; import {ISelectOption} from "../../../../json-schema/ui/select/Select.tsx"; import ObjectUtil from "../../../../utils/ObjectUtil.ts"; import {IDatabase} from "../../../../designer/DesignerType.ts"; import FetchUtil from "../../../../utils/FetchUtil.ts"; +import {IDataSource} from "../../../../pages/home/datasource/DataSourceStore.ts"; export interface DatabaseDataConfigProps { controller: AbstractDesignerController; @@ -24,7 +24,7 @@ export function DatabaseDataConfig(props: DatabaseDataConfigProps) { useEffect(() => { FetchUtil.get(`/api/datasource/list`).then(res => { if (res.code === 200) { - const options = (res.data as Array).map(item => { + const options = (res.data as Array).map(item => { return {label: item.name, value: item.id} }) setDataSourceList(options as ISelectOption[]); diff --git a/src/comps/lc/four-angle-glow-border/FourAngleGloeBorder.less b/src/comps/lc/four-angle-glow-border/FourAngleGloeBorder.less index 56b4e444..407ee7ae 100644 --- a/src/comps/lc/four-angle-glow-border/FourAngleGloeBorder.less +++ b/src/comps/lc/four-angle-glow-border/FourAngleGloeBorder.less @@ -3,9 +3,6 @@ --fagb-width: 2px; --fagb-length: 8px; --fagb-radius: 3px; -} - -.four-angle-glow { width: 100%; height: 100%; position: relative; diff --git a/src/comps/lc/text-scroller/TextScrollerComponent.less b/src/comps/lc/text-scroller/TextScrollerComponent.less index 6e01a6c6..6f87e808 100644 --- a/src/comps/lc/text-scroller/TextScrollerComponent.less +++ b/src/comps/lc/text-scroller/TextScrollerComponent.less @@ -11,9 +11,9 @@ .text-scroller { height: inherit; position: absolute; + animation: scrollText var(--speed) linear infinite; animation-name: none; color: white; - animation: scrollText var(--speed) linear infinite; display: flex; align-items: center; } diff --git a/src/designer/blueprint/line/LineLayer.less b/src/designer/blueprint/line/LineLayer.less deleted file mode 100644 index e69de29b..00000000 diff --git a/src/designer/blueprint/line/LineLayer.tsx b/src/designer/blueprint/line/LineLayer.tsx index c132d4be..33f8ddd0 100644 --- a/src/designer/blueprint/line/LineLayer.tsx +++ b/src/designer/blueprint/line/LineLayer.tsx @@ -1,5 +1,4 @@ import React, {CSSProperties} from 'react'; -import './LineLayer.less'; import CanvasUtil from "../util/CanvasUtil"; import bluePrintManager, {IBPLine} from "../manager/BluePrintManager.ts"; import {AnchorPointType} from "../node/core/AbstractBPNodeController"; diff --git a/src/framework/message/GlobalModal.tsx b/src/framework/message/GlobalModal.tsx new file mode 100644 index 00000000..c91870b9 --- /dev/null +++ b/src/framework/message/GlobalModal.tsx @@ -0,0 +1,33 @@ +import {Modal} from "antd"; +import {useEffect} from "react"; +import {HookAPI} from "antd/es/modal/useModal"; + +class GModal { + public modalApi: HookAPI | null = null; + + public setModalApi(modalApi: HookAPI | null) { + this.modalApi = modalApi; + } + +} + +const globalModal = new GModal(); +export {globalModal}; + + +export default function GlobalModal() { + const [modalApi, contextHolder] = Modal.useModal(); + + useEffect(() => { + globalModal.setModalApi(modalApi); + return () => { + globalModal.setModalApi(null); + } + }, []); + + return ( + <> + {contextHolder} + + ) +} \ No newline at end of file diff --git a/src/index.less b/src/index.less index f2b61d9c..19f7036e 100644 --- a/src/index.less +++ b/src/index.less @@ -23,6 +23,7 @@ html, body { width: 100%; height: 100%; + background: #232323; } input::-ms-clear, diff --git a/src/json-schema/ui/radio/Radio.less b/src/json-schema/ui/radio/Radio.less index c999368c..588286d2 100644 --- a/src/json-schema/ui/radio/Radio.less +++ b/src/json-schema/ui/radio/Radio.less @@ -40,9 +40,6 @@ input[type="radio"]:checked + .radio-circle::before { transform: translate(-50%, -50%) scale(1); - } - - input[type="radio"]:checked + .radio-circle::before { background-color: #aeaeae; } diff --git a/src/pages/home/Home.less b/src/pages/home/Home.less index ca822f89..cbd4bd9c 100644 --- a/src/pages/home/Home.less +++ b/src/pages/home/Home.less @@ -6,6 +6,7 @@ padding: 0 20px; align-items: center; background-color: #292929; + justify-content: space-between; .logo { font-size: 16px; diff --git a/src/pages/home/datasource/DataSourceList.less b/src/pages/home/datasource/DataSourceList.less index ce2de124..7646c1fa 100644 --- a/src/pages/home/datasource/DataSourceList.less +++ b/src/pages/home/datasource/DataSourceList.less @@ -1,4 +1,7 @@ .datasource-list { + position: relative; + height: 100%; + .datasource-list-header { color: #c5c5c5; display: flex; @@ -7,11 +10,8 @@ justify-content: space-between; .datasource-list-header-left { - .list-search { - .lc-input { - height: 33px; - width: 250px; - } + .project-list-search, .operate-btn { + margin-right: 13px; } } } diff --git a/src/pages/home/datasource/DataSourceList.tsx b/src/pages/home/datasource/DataSourceList.tsx index 93a7de3f..70e5bb62 100644 --- a/src/pages/home/datasource/DataSourceList.tsx +++ b/src/pages/home/datasource/DataSourceList.tsx @@ -1,12 +1,15 @@ -import {useEffect} from "react"; -import dataSourceStore from "./DataSourceStore.ts"; -import {Table} from "antd"; -import EditDataSourceDialog, {DataSourceConfigType} from "./edit/EditDataSourceDialog.tsx"; +import React, {Key, useEffect} from "react"; +import dataSourceStore, {IDataSource} from "./DataSourceStore.ts"; +import {Button, Input, Table} from "antd"; import {observer} from "mobx-react"; import {ColumnsType} from "antd/es/table"; import './DataSourceList.less'; -import Button from "../../../json-schema/ui/button/Button.tsx"; -import Input from "../../../json-schema/ui/input/Input.tsx"; +import {Add, Delete} from "@icon-park/react"; +import {globalModal} from "../../../framework/message/GlobalModal.tsx"; +import DataSourcePanel from "./DataSourcePanel.tsx"; + +const {Search} = Input; + const columns: ColumnsType = [ { @@ -33,13 +36,19 @@ const columns: ColumnsType = [ { title: '操作', key: 'operation', - render: (record: DataSourceConfigType) => { + render: (record: IDataSource) => { const {id} = record; return }, } @@ -47,37 +56,76 @@ const columns: ColumnsType = [ const DataSourceList = observer(() => { - const {createVisible, setCreateVisible} = dataSourceStore; - const onCreateClose = () => setCreateVisible(false); - const onCreateSave = (data: DataSourceConfigType) => dataSourceStore.createDataSource(data); - const {dataSourcePageData, editVisible, setEditVisible, dataSource} = dataSourceStore; - const onEditClose = () => setEditVisible(false); - const onEditSave = (data: DataSourceConfigType) => dataSourceStore.updateDataSource(data); + const { + doBatchDeleteDataSource, + setPanelVisible, + doCreateOrUpdateDataSource, + init, + destroy, + panelVisible, + dataSourcePageData, + dataSource + } = dataSourceStore; + const {current, records, size, total} = dataSourcePageData; + let selectedIds: string[] = [] + const rowSelection = { + onChange: (selectedRowKeys: Key[]) => { + selectedIds = [...selectedRowKeys as string[]]; + } + }; - const {current, records, size, total} = dataSourcePageData; + const doSearch = (value: string) => { + dataSourceStore.searchValue = value; + dataSourceStore.getDataSourceList(); + } + + const onKeyDown = (event: React.KeyboardEvent) => { + if (event.key !== 'Enter') + return; + doSearch((event.target as any).value); + } useEffect(() => { - dataSourceStore.getDataSourceList(); + init(); + return () => { + destroy(); + } }, []); return (
- { - if (e.code === 'Enter') { - dataSourceStore.searchValue = (e.currentTarget as HTMLInputElement).value; - dataSourceStore.getDataSourceList(); - } - }}/> + + +
-
dataSourceStore.changeCurrentPage(pagination.current!)} pagination={{ showTotal: () => `共${total}条`, @@ -86,11 +134,11 @@ const DataSourceList = observer(() => { total: total, }}/> - {editVisible && - } - {createVisible && - } + setPanelVisible(false)} + onSubmitted={doCreateOrUpdateDataSource}/> ); }) diff --git a/src/pages/home/datasource/DataSourcePanel.tsx b/src/pages/home/datasource/DataSourcePanel.tsx new file mode 100644 index 00000000..782dbe2b --- /dev/null +++ b/src/pages/home/datasource/DataSourcePanel.tsx @@ -0,0 +1,107 @@ +import {Button, Col, Drawer, Form, Input, Row, Select, Space} from "antd"; +import {useEffect} from "react"; +import {IDataSource} from "./DataSourceStore.ts"; + +const {TextArea} = Input; + +export interface UserPanelProps { + title?: string; + width?: number; + visible: boolean; + onClose: () => void; + onSubmitted: (data: IDataSource) => void; + data?: IDataSource; +} + +export default function DataSourcePanel(props: UserPanelProps) { + const {visible, onClose, data, onSubmitted, title, width = 700} = props; + console.log(data); + const [form] = Form.useForm(); + + const submit = () => { + form.validateFields().then((values) => { + onSubmitted(values); + }).catch((error) => { + console.error(error); + }) + } + + const _onClose = () => { + form.resetFields(); + onClose(); + } + + useEffect(() => { + if (visible) { + form.setFieldsValue(data); + } + }, [visible]); + + return ( + + + + + }> +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +