From 5ac5e328e298747571343f44b5a6c9b1cb074d56 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Tue, 15 Jul 2025 13:18:51 +0200 Subject: [PATCH] FormBuilderTS --- .../System/PSC/XmlCalc/Api/DesignTest.php | 30 ++++++ .../PSC/FormBuilder/FormBuilderTS/bun.lock | 14 +++ .../FormBuilder/FormBuilderTS/package.json | 4 +- .../PSC/FormBuilder/FormBuilderTS/src/App.vue | 3 +- .../FormBuilderTS/src/components/Gui.vue | 13 ++- .../src/components/app/FormulaVisualizer.vue | 60 +----------- .../src/components/app/XmlView.vue | 12 ++- .../src/components/app/debug/Debug.vue | 24 ----- .../src/components/app/debug/index.ts | 1 - .../elementproperties/SpecialProperties.vue | 20 ++++ .../components/app/elementproperties/index.ts | 1 + .../app/elements/InputElementForm.vue | 2 +- .../src/components/app/library/Library.vue | 28 ++++-- .../app/properties/HeadlineElement.vue | 20 ++-- .../app/properties/HiddenElement.vue | 6 +- .../app/properties/InputElement.vue | 32 ++++--- .../app/properties/MediaElement.vue | 6 +- .../app/properties/OptionElement.vue | 6 +- .../components/app/properties/RowElement.vue | 2 +- .../app/properties/SelectElement.vue | 49 +++------- .../app/properties/SelectSpecial.vue | 87 +++++++++++++++++ .../components/app/properties/TextElement.vue | 6 +- .../app/properties/TextareaElement.vue | 6 +- .../app/renderelements/RenderElements.vue | 23 +++-- .../FormBuilderTS/src/i18n/de.json | 44 +++++++++ .../FormBuilderTS/src/i18n/en.json | 44 +++++++++ .../FormBuilderTS/src/i18n/index.ts | 15 +++ .../PSC/FormBuilder/FormBuilderTS/src/main.ts | 2 + .../FormBuilderTS/src/model/BaseElement.ts | 4 + .../FormBuilderTS/src/model/InputElement.ts | 6 ++ .../FormBuilderTS/src/model/SelectElement.ts | 11 +++ .../FormBuilderTS/src/stores/Items.ts | 39 +++++++- .../FormBuilder/FormBuilderTS/vite.config.ts | 2 +- .../System/PSC/XmlCalc/Api/Product/Config.php | 2 +- .../System/PSC/XmlCalc/Api/Product/Design.php | 96 +++++++++++++++++++ .../PSC/XmlCalc/Dto/Input/DesignInput.php | 37 +++++++ 36 files changed, 562 insertions(+), 195 deletions(-) create mode 100644 src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php delete mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/debug/Debug.vue delete mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/debug/index.ts create mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/elementproperties/SpecialProperties.vue create mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/properties/SelectSpecial.vue create mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/i18n/de.json create mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/i18n/en.json create mode 100644 src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/i18n/index.ts create mode 100644 src/new/var/plugins/System/PSC/XmlCalc/Api/Product/Design.php create mode 100644 src/new/var/plugins/System/PSC/XmlCalc/Dto/Input/DesignInput.php diff --git a/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php new file mode 100644 index 000000000..e914ee1a2 --- /dev/null +++ b/src/new/tests/Plugins/System/PSC/XmlCalc/Api/DesignTest.php @@ -0,0 +1,30 @@ +jsonRequest( + 'POST', + '/api/plugin/system/psc/xmlcalc/product/design', + [ + 'product' => '01938686-0e4d-7da9-bae3-b2e1b1681f9f', + 'jsonProduct' => '[{"uuid":"df2df718-b28e-482d-bf0c-67d246f05d32","name":"Test Artikel","options":[{"id":"auflage","name":"Auflage","default":"100","dependencys":[],"placeHolder":"Placeholder","required":false,"type":2},{"id":"seiten_umschlag","name":"Seiten Umschlag","default":"2","dependencys":[],"placeHolder":"Placeholder","required":false,"type":2},{"id":"seiten_anzahl_inhalt","name":"Seiten Anzahl Inhalt","default":"10","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*0.12","price":0,"value":"1-10","dependencys":[{"relation":"seiten_umschlag","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.24","price":0,"value":"1-2","dependencys":[]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.23","price":0,"value":"3-","dependencys":[]}]}]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*0.11","price":0,"value":"11-","dependencys":[{"relation":"seiten_umschlag","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.21","price":0,"value":"1-2","dependencys":[]},{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vseiten_umschlag$V*0.20","price":0,"value":"3-","dependencys":[]}]}]}]}],"placeHolder":"Placeholder","required":true,"type":2},{"id":"farbigkeit","name":"Farbigkeit","default":"10","dependencys":[],"type":3,"options":[{"id":"10","name":"1\/0 farbig","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"","price":0,"value":"1-101","dependencys":[]}]}]},{"id":"11","name":"1\/1 farbig","dependencys":[]},{"id":"20","name":"2\/0 farbig","dependencys":[]},{"id":"21","name":"2\/1 farbig","dependencys":[]},{"id":"22","name":"2\/2 farbig","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"","price":0,"value":"11-50","dependencys":[]}]}]}],"mode":"normal"},{"id":"calc","name":"calc","dependencys":[{"relation":"auflage","formula":"","borders":[{"calcValue":"","calcValue1":"","calcValue2":"","calcValue3":"","calcValue4":"","calcValue5":"","calcValue6":"","calcValue7":"","calcValue8":"","calcValue9":"","calcValue10":"","flatRate":"","formula":"$Vauflage$V*$Vseiten_anzahl_inhalt$V","price":0,"value":"1-","dependencys":[]}]}],"type":1}]}]', + ], + [], + ); + $this->assertResponseIsSuccessful(); + + self::assertJson($client->getResponse()->getContent()); + } +} diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock index 46c76c19f..9fab97cc8 100644 --- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock +++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/bun.lock @@ -21,6 +21,8 @@ "vue": "^3.5.13", "vue-codemirror": "^6.1.1", "vue-draggable-plus": "^0.6.0", + "vue-i18n": "^11.1.9", + "xml-beautify": "^1.2.3", }, "devDependencies": { "@types/node": "^24.0.1", @@ -176,6 +178,12 @@ "@internationalized/number": ["@internationalized/number@3.6.3", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-p+Zh1sb6EfrfVaS86jlHGQ9HA66fJhV9x5LiE5vCbZtXEHAuhcmUZUdZ4WrFpUBfNalr2OkAJI5AcKEQF+Lebw=="], + "@intlify/core-base": ["@intlify/core-base@11.1.9", "", { "dependencies": { "@intlify/message-compiler": "11.1.9", "@intlify/shared": "11.1.9" } }, "sha512-Lrdi4wp3XnGhWmB/mMD/XtfGUw1Jt+PGpZI/M63X1ZqhTDjNHRVCs/i8vv8U1cwaj1A9fb0bkCQHLSL0SK+pIQ=="], + + "@intlify/message-compiler": ["@intlify/message-compiler@11.1.9", "", { "dependencies": { "@intlify/shared": "11.1.9", "source-map-js": "^1.0.2" } }, "sha512-84SNs3Ikjg0rD1bOuchzb3iK1vR2/8nxrkyccIl5DjFTeMzE/Fxv6X+A7RN5ZXjEWelc1p5D4kHA6HEOhlKL5Q=="], + + "@intlify/shared": ["@intlify/shared@11.1.9", "", {}, "sha512-H/83xgU1l8ox+qG305p6ucmoy93qyjIPnvxGWRA7YdOoHe1tIiW9IlEu4lTdsOR7cfP1ecrwyflQSqXdXBacXA=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], @@ -610,12 +618,16 @@ "vue-draggable-plus": ["vue-draggable-plus@0.6.0", "", { "dependencies": { "@types/sortablejs": "^1.15.8" } }, "sha512-G5TSfHrt9tX9EjdG49InoFJbt2NYk0h3kgjgKxkFWr3ulIUays0oFObr5KZ8qzD4+QnhtALiRwIqY6qul4egqw=="], + "vue-i18n": ["vue-i18n@11.1.9", "", { "dependencies": { "@intlify/core-base": "11.1.9", "@intlify/shared": "11.1.9", "@vue/devtools-api": "^6.5.0" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-N9ZTsXdRmX38AwS9F6Rh93RtPkvZTkSy/zNv63FTIwZCUbLwwrpqlKz9YQuzFLdlvRdZTnWAUE5jMxr8exdl7g=="], + "vue-tsc": ["vue-tsc@2.2.10", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.10" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ=="], "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "xml-beautify": ["xml-beautify@1.2.3", "", {}, "sha512-VsYpkqoVawIP84pi00XukPsgQHqOhgrpwTHlXqqRMAgYZ1u+Yw3KHIUhO1Igf19d5CQ5h6ExJT1hFCJRLmzADg=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "yoctocolors": ["yoctocolors@2.1.1", "", {}, "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ=="], @@ -642,6 +654,8 @@ "reka-ui/@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="], + "vue-i18n/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], + "reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="], } } diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json index 944130c36..bb5b91f34 100644 --- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json +++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/package.json @@ -26,7 +26,9 @@ "uuid": "^11.1.0", "vue": "^3.5.13", "vue-codemirror": "^6.1.1", - "vue-draggable-plus": "^0.6.0" + "vue-draggable-plus": "^0.6.0", + "vue-i18n": "^11.1.9", + "xml-beautify": "^1.2.3" }, "devDependencies": { "@types/node": "^24.0.1", diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue index f89fca6e8..179e277c8 100644 --- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue +++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/App.vue @@ -8,7 +8,8 @@ onMounted(() => { const params = new URLSearchParams(window.location.search); const uuid = params.get('uuid'); if (uuid) { - store.loadFromApi(uuid); + store.loadConfigFromProductApi(uuid); + store.loadFormulaAnalyserDataFromApi(uuid); } }) diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue index a8ee07409..316ec8199 100644 --- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue +++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/Gui.vue @@ -7,8 +7,7 @@ import { import { Tabs, TabsContent, TabsList, TabsTrigger } from '../components/ui/tabs' import { Library } from '../components/app/library' -import { Debug } from '../components/app/debug' -import { ElementProperties } from '../components/app/elementproperties' +import { ElementProperties, SpecialElementProperties } from '../components/app/elementproperties' import { ElementDependency } from '../components/app/elementdependency' import { Main } from '../components/app/main' import FormulaVisualizer from './app/FormulaVisualizer.vue' @@ -26,7 +25,6 @@ import XmlView from './app/XmlView.vue'
-
@@ -35,16 +33,16 @@ import XmlView from './app/XmlView.vue'
- Designer + {{ $t('designer') }} - Kalkulations Analyse + {{ $t('preview') }} - XML Ansicht + {{ $t('xml_view') }} - JSON Ansicht + {{ $t('json_view') }}
@@ -66,6 +64,7 @@ import XmlView from './app/XmlView.vue' + diff --git a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue index 1ba899e8d..30548ad70 100644 --- a/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue +++ b/src/new/var/plugins/Custom/PSC/FormBuilder/FormBuilderTS/src/components/app/FormulaVisualizer.vue @@ -1,22 +1,8 @@ - -