diff --git a/src/renderer/auto-imports.d.ts b/src/renderer/auto-imports.d.ts index 61767cd..e0f45c0 100644 --- a/src/renderer/auto-imports.d.ts +++ b/src/renderer/auto-imports.d.ts @@ -9,6 +9,8 @@ declare global { const EffectScope: typeof import('vue')['EffectScope'] const ElButton: typeof import('element-plus/es')['ElButton'] const ElDialog: typeof import('element-plus/es')['ElDialog'] + const ElIcon: typeof import('element-plus/es')['ElIcon'] + const ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] const ElMessage: typeof import('element-plus/es')['ElMessage'] const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 5dcaccf..5a033ca 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -2,11 +2,13 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-02 13:17:44 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-07-02 16:29:18 + * @LastEditTime: 2025-07-25 16:44:43 * @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\App.vue * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE --> - + diff --git a/src/renderer/src/components/Button/src/button.tsx b/src/renderer/src/components/Button/src/button.tsx index d560c4b..22b4325 100644 --- a/src/renderer/src/components/Button/src/button.tsx +++ b/src/renderer/src/components/Button/src/button.tsx @@ -103,7 +103,7 @@ export default defineComponent({ class={buttonClasses.value} style={props.style} disabled={props.disabled || props.loading} - type={props.nativeType} + type={props.type} onClick={handleClick} > {renderContent()} diff --git a/src/renderer/src/views/Design/FlowImagesCapture/imageModel.vue b/src/renderer/src/components/ProForm/index.ts similarity index 100% rename from src/renderer/src/views/Design/FlowImagesCapture/imageModel.vue rename to src/renderer/src/components/ProForm/index.ts diff --git a/src/renderer/src/styles/ds-dialog.scss b/src/renderer/src/styles/ds-dialog.scss new file mode 100644 index 0000000..6058669 --- /dev/null +++ b/src/renderer/src/styles/ds-dialog.scss @@ -0,0 +1,55 @@ +/* 弹框 */ +.ds-dialog { + --el-dialog-padding-primary: 0; // 弹窗内边距 + --el-dialog-bg-color: var(--ds-dialog-background-color) !important; // 弹窗背景颜色 + padding: 0 !important; + overflow: hidden; + .el-dialog__header { + background-color: var(--ds-color-primary); + .el-dialog__title { + color: var(--ds-color-info); + line-height: var(--ds-dialog-header-height); + padding-left: var(--ds-dialog-header-padding); + } + } + .el-dialog__body { + color: var(--ds-color-info); + } + + .el-dialog__footer { + --el-dialog-padding-primary: 0; // 弹窗内边距 + } + .el-dialog__headerbtn, + .el-dialog__headerbtn:hover { + width: 68px; + height: var(--ds-dialog-header-height); + .ds-dialog-header { + height: var(--ds-dialog-header-height); + } + .el-dialog__close { + font-size: 20px; + color: var(--ds-color-info); + } + } + .el-dialog__header { + height: var(--ds-dialog-header-height); + } +} +// 表单弹框 +.ds-dialog-form-container { + .el-select__wrapper { + background: var(--ds-dialog-form-background-color) !important; + .el-select__selected-item { + color: var(--ds-color-info) !important; + } + } + .el-input-number { + width: 100% !important; + .el-input-number__increase, + .el-input-number__decrease { + background: transparent !important; + color: var(--ds-color-info) !important; + border: none !important; + } + } +} diff --git a/src/renderer/src/styles/element-plus.scss b/src/renderer/src/styles/element-plus.scss index 438643e..0298dd1 100644 --- a/src/renderer/src/styles/element-plus.scss +++ b/src/renderer/src/styles/element-plus.scss @@ -46,43 +46,7 @@ height: 20px; } -/* 弹框 */ -.ds-dialog { - --el-dialog-padding-primary: 0; // 弹窗内边距 - --el-dialog-bg-color: var(--ds-dialog-background-color) !important; // 弹窗背景颜色 - padding: 0 !important; - overflow: hidden; - .el-dialog__header { - background-color: var(--ds-color-primary); - .el-dialog__title { - color: var(--ds-color-info); - line-height: var(--ds-dialog-header-height); - padding-left: var(--ds-dialog-header-padding); - } - } - .el-dialog__body { - color: var(--ds-color-info); - } - .el-dialog__footer { - --el-dialog-padding-primary: 0; // 弹窗内边距 - } - .el-dialog__headerbtn, - .el-dialog__headerbtn:hover { - width: 68px; - height: var(--ds-dialog-header-height); - .ds-dialog-header { - height: var(--ds-dialog-header-height); - } - .el-dialog__close { - font-size: 20px; - color: var(--ds-color-info); - } - } - .el-dialog__header { - height: var(--ds-dialog-header-height); - } -} /* tabs */ .ds-tabs { diff --git a/src/renderer/src/styles/global.scss b/src/renderer/src/styles/global.scss index d640acf..b05cdf3 100644 --- a/src/renderer/src/styles/global.scss +++ b/src/renderer/src/styles/global.scss @@ -16,7 +16,8 @@ --ds-button-border-color: #c9cdd4; --ds-button-info-border-color: #dcdcdc; --ds-background-color: #363940; // 背景色 - --ds-dialog-background-color: #363940; // 背景色 + --ds-dialog-background-color: #363940; // 弹框背景色 + --ds-dialog-form-background-color: #303136; // 弹框背景色 --ds-dialog-header-padding: 24px; // 背景色 --ds-dialog-header-height: 54px; // 背景色 --ds-bg-color-light-1: #151515; // 背景色 @@ -24,9 +25,7 @@ --ds-bg-color-light-3: #373737; // 背景色 --ds-bg-color-light-4: #474747; // 背景色 --ds-bg-color-light-5: #565656; // 背景色 - // #4E5969 - --ds-light-0: #00b429; // 浅色1 // --ds-light-2: #eaeaea; // 浅色2 // --ds-light-3: #dcdcdc; // 浅色3 diff --git a/src/renderer/src/styles/main.scss b/src/renderer/src/styles/main.scss index 446ff86..b820df9 100644 --- a/src/renderer/src/styles/main.scss +++ b/src/renderer/src/styles/main.scss @@ -1,4 +1,5 @@ @import url("./base.scss"); @import url("./global.scss"); @import url("./element-plus.scss"); +@import url("./ds-dialog.scss"); @import url("./design.scss"); \ No newline at end of file diff --git a/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.scss b/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.vue b/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.vue new file mode 100644 index 0000000..37525fa --- /dev/null +++ b/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.vue @@ -0,0 +1,130 @@ + + + + + + + + {{ v.label }} + + + + + + + + Software Settings Content + + + Plan Settings Content + + + Strategy Settings Content + + + + + + 确定 + + + + + + + + diff --git a/src/renderer/src/views/Design/FlowImagesCapture/index.ts b/src/renderer/src/views/Design/FlowImagesCapture/index.ts new file mode 100644 index 0000000..cbdf3a3 --- /dev/null +++ b/src/renderer/src/views/Design/FlowImagesCapture/index.ts @@ -0,0 +1,14 @@ +/* + * @Author: donghao donghao@supervision.ltd + * @Date: 2025-07-23 16:19:16 + * @LastEditors: donghao donghao@supervision.ltd + * @LastEditTime: 2025-07-23 16:37:17 + * @FilePath: \Robot-Al-Platform-Web\src\renderer\src\views\Design\FlowImagesCapture\index.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import imageNodeModel from './imageNodeModel.vue' +import multiImageNodeModel from './multiImageNodeModel.vue' + +export const FlowImageNodeModel = imageNodeModel + +export const FlowMultiImageNodeModel = multiImageNodeModel diff --git a/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.scss b/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.scss new file mode 100644 index 0000000..95aafd7 --- /dev/null +++ b/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.scss @@ -0,0 +1,40 @@ +/* 弹框整体样式 */ +.controllerManagement-container { + position: relative; + width: 100%; + height: 766px; + box-sizing: border-box; + display: flex; + + .controllerManagement-content { + flex: 1; + height: 100%; + overflow: auto; + box-sizing: border-box; + padding: 16px 24px 24px; + + .form-device-btn { + width: 80px; + padding: 0 12px; + } + } + + .custom-table { + .customList-table { + width: 100%; + height: 190px; + background: #363940; + } + } + + .table-add-btn { + /* 按钮样式 */ + box-sizing: border-box; + width: 128px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } +} diff --git a/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.vue b/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.vue new file mode 100644 index 0000000..c1ca8df --- /dev/null +++ b/src/renderer/src/views/Design/FlowImagesCapture/multiImageNodeModel.vue @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ '图像配置' + (index + 1) }} + + + + + + + + + + + + + + + + + + + + + + + + + 添加数据 + + + + + + + + diff --git a/src/renderer/src/views/Design/Workflow/logicFlowView.vue b/src/renderer/src/views/Design/Workflow/logicFlowView.vue index f9901e0..523eef3 100644 --- a/src/renderer/src/views/Design/Workflow/logicFlowView.vue +++ b/src/renderer/src/views/Design/Workflow/logicFlowView.vue @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-03 10:27:47 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-07-23 16:09:34 + * @LastEditTime: 2025-07-23 16:40:56 * @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\Workflow\logicFlowView.vue * @Description: 流程设计器面板 --> @@ -31,7 +31,10 @@ - + + + + @@ -46,20 +49,33 @@ import { OperationNode, ImageNode } from '@/components/LogicFlowNodes' import { useLogicFlow } from '@/hooks/useLogicFlow' import { logicFlowConf, logicFlowThemeConf } from '@/config/designCanvas' import { getNodeOutputCount, getNodeInputCount } from '@/utils/forData/arr' +import { FlowImageNodeModel, FlowMultiImageNodeModel } from '../FlowImagesCapture' const showLf = ref(false) // 是否显示画布 const showTop = ref(false) // 是否显示顶部工具栏 const showAttribute = ref(false) // 属性面板 -const nodeData = ref(null) +const currNodeData = ref({}) // 节点数据 const { graphData } = useLogicFlow() // 1. 初始化画布 const lf = ref(null) const flowDetail = reactive({}) +const isOpenFlowImage = ref(false) // 是否打开图片源流程图节点 +const isOpenFlowMultiImage = ref(false) // 是否打开多图采集流程图节点 // 隐藏属性面板 -const hideAttrPanel = () => { - showAttribute.value = false +const changeAttrPanelStatus = (isOpen) => { + switch (currNodeData.value?.type) { + case 'image-node': + isOpenFlowImage.value = true + break + case 'multi-image-node': + isOpenFlowMultiImage.value = true + break + } + nextTick(() => { + showAttribute.value = isOpen || !showAttribute.value + }) } // 控制器基础操作 @@ -110,27 +126,25 @@ const setEdgeType = (data) => { // 注册自定义事件 const initEvents = () => { lf.value.on('node:click', ({ data }) => { - nodeData.value = data - console.log('node:click-nodeData', nodeData.value) - if (['imageNode'].includes(data.type)) { - showAttribute.value = true - } + // currNodeData.value = data + console.log('node:click-currNodeData', currNodeData.value) + // changeAttrPanelStatus(true) }) lf.value.on('node:dbclick', ({ data }) => { - nodeData.value = data - console.log('node:dbclick-nodeData', nodeData.value) - }) - lf.value.on('edge:dbclick', ({ data }) => { - nodeData.value = data - showAttribute.value = true + currNodeData.value = data + console.log('node:dbclick-currNodeData', currNodeData.value) + changeAttrPanelStatus(true) }) + // lf.value.on('edge:dbclick', ({ data }) => { + // currNodeData.value = data + // }) //来自边的事件中心发出的事件 lf.value.on('edge:app-config', (res) => { - nodeData.value = res + currNodeData.value = res showAttribute.value = true }) lf.value.on('element:click', () => { - hideAttrPanel() // 隐藏属性面板 + // hideAttrPanel() // 隐藏属性面板 // console.log(lf.value.getGraphData(), 'getGraphData_click', JSON.stringify(lf.value.getGraphData())) }) lf.value.on('blank:contextmenu', (e, position) => {
Software Settings Content
Plan Settings Content
Strategy Settings Content
{{ '图像配置' + (index + 1) }}