From 3c184796b085337c76620c092fb852fbeb6de5c8 Mon Sep 17 00:00:00 2001 From: donghao Date: Thu, 7 Aug 2025 17:56:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BE=93=E5=87=BA=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E5=BC=B9=E6=A1=86=E5=88=9D=E5=A7=8B=E5=8C=96=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/Button/src/button.tsx | 10 +- .../src/components/Form/colorPicker.tsx | 0 src/renderer/src/components/Form/formList.tsx | 51 +- .../src/components/Form/inputPath.tsx | 0 .../src/components/Form/inputSelect.tsx | 0 .../src/components/Form/selectFilePath.tsx | 0 src/renderer/src/config/designControl.ts | 18 +- src/renderer/src/styles/ds-from.scss | 11 +- src/renderer/src/styles/element-plus.scss | 15 +- src/renderer/src/styles/t-element-plus.scss | 2 +- .../FlowImagesCapture/cashImageNode.vue | 0 .../FlowImagesCapture/imageNodeModel.vue | 2 +- .../views/Design/FlowImagesCapture/index.ts | 7 +- .../FlowImagesCapture/outputImageNode.vue | 930 ++++++++++++++++++ .../views/Design/Workflow/logicFlowView.vue | 8 +- 15 files changed, 1026 insertions(+), 28 deletions(-) create mode 100644 src/renderer/src/components/Form/colorPicker.tsx create mode 100644 src/renderer/src/components/Form/inputPath.tsx create mode 100644 src/renderer/src/components/Form/inputSelect.tsx create mode 100644 src/renderer/src/components/Form/selectFilePath.tsx create mode 100644 src/renderer/src/views/Design/FlowImagesCapture/cashImageNode.vue create mode 100644 src/renderer/src/views/Design/FlowImagesCapture/outputImageNode.vue diff --git a/src/renderer/src/components/Button/src/button.tsx b/src/renderer/src/components/Button/src/button.tsx index 22b4325..8630cd7 100644 --- a/src/renderer/src/components/Button/src/button.tsx +++ b/src/renderer/src/components/Button/src/button.tsx @@ -1,6 +1,8 @@ // Button/index.tsx import { defineComponent, computed, CSSProperties } from 'vue' import './button.scss' // 导入样式文件 +import { config } from '@/config' +import { TButton } from '@wocwin/t-ui-plus' //定义按钮类型 type ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text' @@ -41,6 +43,8 @@ export default defineComponent({ type: String as () => ButtonNativeType, default: 'button' }, + time: Number, // 按钮点击后禁用时间 + label: String, disabled: Boolean, loading: Boolean, plain: Boolean, @@ -93,21 +97,23 @@ export default defineComponent({ return ( {renderIcon()} + {props?.label} {slots.default?.()} ) } return () => ( - + ) } }) diff --git a/src/renderer/src/components/Form/colorPicker.tsx b/src/renderer/src/components/Form/colorPicker.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/components/Form/formList.tsx b/src/renderer/src/components/Form/formList.tsx index 54a3a92..930533d 100644 --- a/src/renderer/src/components/Form/formList.tsx +++ b/src/renderer/src/components/Form/formList.tsx @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-31 10:03:44 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-08-01 17:04:27 + * @LastEditTime: 2025-08-07 17:38:15 * @FilePath: \Robot-Al-Platform-Web\src\renderer\src\components\Form\formList.tsx * @Description: 定义 formList 组件 */ @@ -18,6 +18,9 @@ import { Delete } from '@element-plus/icons-vue' // 定义组件属性类型(保留所有 ElInputNumber 属性) type DSFormListProps = { formConfig: FormTypes + isHasPrefix?: boolean + isHasSuffix?: boolean + prefixRender?: (...ags: any[]) => any // 前置内容 render渲染 suffixRender?: (...ags: any[]) => any // 后置内容 render渲染 min?: number @@ -31,6 +34,16 @@ export default defineComponent({ type: Object as FormTypes, default: {} }, + isHasPrefix: { + type: Boolean, + default: true + }, + isHasSuffix: { + type: Boolean, + default: false + }, + prefixRender: Function as DSFormListProps['prefixRender'], + suffixRender: Function as DSFormListProps['suffixRender'], modelValue: { type: Array, default: () => [] @@ -100,7 +113,9 @@ export default defineComponent({ // const canRemove = list.length > props.min // 渲染自定义前缀内容 const renderPrefix = (formItem, index) => { - // props?.suffixRender && + if (!props.isHasPrefix) { + return null + } if (props.prefixRender) { return props?.prefixRender?.() } @@ -112,7 +127,26 @@ export default defineComponent({
removeItem(formItem, index)} - class="flex items-center justify-center ds-dialog-formList-delete" + className="flex items-center justify-center ds-dialog-formList-delete" + > + +
+ + ) + } + // 渲染自定义后缀内容 + const renderSuffix = (formItem, index) => { + if (!props.isHasSuffix) { + return null + } + if (props.suffixRender) { + return props?.suffixRender?.() + } + return ( +
+
removeItem(formItem, index)} + className="flex items-center justify-center ds-dialog-formList-delete" >
@@ -120,17 +154,20 @@ export default defineComponent({ ) } return () => ( -
-
    +
    +
      {props.modelValue .map((item) => ({ ...item, formItemsUuid: item?.id || generateId() })) .map((formItem, index) => ( -
    • +
    • {renderPrefix(formItem, index)} - +
      + + {renderSuffix(formItem, index)} +
    • ))}
    diff --git a/src/renderer/src/components/Form/inputPath.tsx b/src/renderer/src/components/Form/inputPath.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/components/Form/inputSelect.tsx b/src/renderer/src/components/Form/inputSelect.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/components/Form/selectFilePath.tsx b/src/renderer/src/components/Form/selectFilePath.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/renderer/src/config/designControl.ts b/src/renderer/src/config/designControl.ts index e1c2de8..fd2c7c3 100644 --- a/src/renderer/src/config/designControl.ts +++ b/src/renderer/src/config/designControl.ts @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-14 13:45:30 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-07-23 14:31:26 + * @LastEditTime: 2025-08-07 17:49:18 * @FilePath: \Robot-Al-Platform-Web\src\renderer\src\config\designControl.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -34,11 +34,11 @@ import LogicalToolsIcon from '@/assets/images/panelBar/logical_tools.png' // 逻 import CommunicationIcon from '@/assets/images/panelBar/communication.png' // 通讯 import DeepLearningIcon from '@/assets/images/panelBar/deep_learning.png' // 深度学习 // 节点图标 -import imageNodeIcon from '@/assets/images/ImagesCapture/image-node.png' // 图像源 -import multiImageNodeIcon from '@/assets/images/ImagesCapture/multi-image-node.png' // 多图采集 -import outputImageNodeIcon from '@/assets/images/ImagesCapture/output-image-node.png' // 输出图像 +import ImageNodeIcon from '@/assets/images/ImagesCapture/image-node.png' // 图像源 +import MultiImageNodeIcon from '@/assets/images/ImagesCapture/multi-image-node.png' // 多图采集 +import OutputImageNodeIcon from '@/assets/images/ImagesCapture/output-image-node.png' // 输出图像 import CashImageNodeIcon from '@/assets/images/ImagesCapture/cash-image-node.png' // 缓存图像 -import lightImageNodeIcon from '@/assets/images/ImagesCapture/light-image-node.png' // 缓存图像 +import LightImageNodeIcon from '@/assets/images/ImagesCapture/light-image-node.png' // 光源 export interface designLFNodeType { type: string icon: string @@ -135,17 +135,17 @@ export const panelControlsConf: ControlsItemType[] = [ { type: 'image-node', label: '图像源', - icon: imageNodeIcon + icon: ImageNodeIcon }, { type: 'multi-image-node', label: '多图采集', - icon: multiImageNodeIcon + icon: MultiImageNodeIcon }, { type: 'output-image-node', label: '输出图像', - icon: outputImageNodeIcon + icon: OutputImageNodeIcon }, { type: 'cash-image-node', @@ -155,7 +155,7 @@ export const panelControlsConf: ControlsItemType[] = [ { type: 'light-image-node', label: '光源', - icon: lightImageNodeIcon + icon: LightImageNodeIcon } ] }, diff --git a/src/renderer/src/styles/ds-from.scss b/src/renderer/src/styles/ds-from.scss index a10c0c8..5de9680 100644 --- a/src/renderer/src/styles/ds-from.scss +++ b/src/renderer/src/styles/ds-from.scss @@ -32,7 +32,7 @@ } } // proFormList - .ds-form-list-comp-form{ + .ds-form-list-comp-form { width: calc(100% + 12px); } .el-form-item--large .el-form-item__content { @@ -51,7 +51,7 @@ min-width: 40px; width: 40px; } - .ds-switch-box{ + .ds-switch-box { height: var(--ds-form-item-height); } // 重置输入框样式 @@ -69,6 +69,13 @@ color: var(--ds-des-text-1); } +// 表单标题 +.ds-form-items-title { + font-weight: bold; + font-size: 14px; + margin-bottom: calc(-8px - 4px); +} + // 弹窗图标 .ds-dialog-icon-box { width: 48px; diff --git a/src/renderer/src/styles/element-plus.scss b/src/renderer/src/styles/element-plus.scss index 02e9b19..388e1f0 100644 --- a/src/renderer/src/styles/element-plus.scss +++ b/src/renderer/src/styles/element-plus.scss @@ -58,8 +58,19 @@ .el-switch { height: 20px; } - -/* tabs */ +.el-radio { + // --el-radio-font-size: var(--el-font-size-base); + --el-radio-text-color: var(--ds-color-info); + &.is-checked{ + color: var(--ds-color-info); + } +} +.el-radio__input.is-checked+.el-radio__label { + color: var(--ds-color-info); +} +.el-radio.el-radio--large { + height: var(--ds-form-item-height); +}/* tabs */ .ds-tabs { background-color: transparent; &.el-tabs { diff --git a/src/renderer/src/styles/t-element-plus.scss b/src/renderer/src/styles/t-element-plus.scss index 28ddc43..18463a8 100644 --- a/src/renderer/src/styles/t-element-plus.scss +++ b/src/renderer/src/styles/t-element-plus.scss @@ -407,7 +407,7 @@ font-size: 14px; justify-content: space-between; padding-left: 0px; - padding-bottom: 14px; + padding-bottom: 12px; } .t_module_form .scroll_wrap diff --git a/src/renderer/src/views/Design/FlowImagesCapture/cashImageNode.vue b/src/renderer/src/views/Design/FlowImagesCapture/cashImageNode.vue 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 index 997c423..e54a055 100644 --- a/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.vue +++ b/src/renderer/src/views/Design/FlowImagesCapture/imageNodeModel.vue @@ -2,7 +2,7 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-03 11:12:04 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-08-01 09:19:24 + * @LastEditTime: 2025-08-07 17:01:33 * @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\FlowImagesCapture\imageNodeModel.vue * @Description: 图像源节点 --> diff --git a/src/renderer/src/views/Design/FlowImagesCapture/index.ts b/src/renderer/src/views/Design/FlowImagesCapture/index.ts index 1836da4..1531dce 100644 --- a/src/renderer/src/views/Design/FlowImagesCapture/index.ts +++ b/src/renderer/src/views/Design/FlowImagesCapture/index.ts @@ -2,16 +2,17 @@ * @Author: donghao donghao@supervision.ltd * @Date: 2025-07-23 16:19:16 * @LastEditors: donghao donghao@supervision.ltd - * @LastEditTime: 2025-07-23 16:37:17 + * @LastEditTime: 2025-08-07 17:51:38 * @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 + * @Description: 图片节点属性设置弹窗批量注入 */ import imageNodeModel from './imageNodeModel.vue' import multiImageNodeModel from './multiImageNodeModel.vue' +import outputImageNode from './outputImageNode.vue' import lightImageNodeModel from './lightNodeModel.vue' export const FlowImageNodeModel = imageNodeModel export const FlowMultiImageNodeModel = multiImageNodeModel - +export const FlowOutputImageNodeModel = outputImageNode export const FlowLightImageNodeModel = lightImageNodeModel diff --git a/src/renderer/src/views/Design/FlowImagesCapture/outputImageNode.vue b/src/renderer/src/views/Design/FlowImagesCapture/outputImageNode.vue new file mode 100644 index 0000000..2c885af --- /dev/null +++ b/src/renderer/src/views/Design/FlowImagesCapture/outputImageNode.vue @@ -0,0 +1,930 @@ + + + diff --git a/src/renderer/src/views/Design/Workflow/logicFlowView.vue b/src/renderer/src/views/Design/Workflow/logicFlowView.vue index 8563b6d..701345e 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:40:56 + * @LastEditTime: 2025-08-07 17:52:52 * @FilePath: \electron-project\Robot-Al\Robot-Al-Platform-Web\src\renderer\src\views\Design\Workflow\logicFlowView.vue * @Description: 流程设计器面板 --> @@ -34,6 +34,7 @@
    +
    @@ -53,6 +54,7 @@ import { getNodeOutputCount, getNodeInputCount } from '@/utils/forData/arr' import { FlowImageNodeModel, FlowMultiImageNodeModel, + FlowOutputImageNodeModel, FlowLightImageNodeModel } from '../FlowImagesCapture' @@ -68,6 +70,7 @@ const flowDetail = reactive({}) const isOpenFlowImage = ref(false) // 是否打开图片源流程图节点 const isOpenFlowMultiImage = ref(false) // 是否打开多图采集流程图节点 +const isOpenFlowOutputImage = ref(false) // 是否打开输出图片流程图节点 const isOpenFlowLightImage = ref(false) // 是否打开光源采集流程图节点 // 隐藏属性面板 const changeAttrPanelStatus = (isOpen) => { @@ -78,6 +81,9 @@ const changeAttrPanelStatus = (isOpen) => { case 'multi-image-node': isOpenFlowMultiImage.value = true break + case 'output-image-node': + isOpenFlowOutputImage.value = true + break case 'light-image-node': isOpenFlowLightImage.value = true break