mirror of
https://github.com/bpmbpm/doc.git
synced 2026-04-28 19:42:06 +00:00
148 lines
9.9 KiB
Markdown
148 lines
9.9 KiB
Markdown
## Calculator
|
||
Покажи примеры разработки для них простого калькулятора: два поля ввода чисел, поле - справочник выбора четырех операций (+,-,/,*) и поле результата.
|
||
|
||
Из предыдущего ответа open-source системами были: Appsmith, Budibase, ToolJet (и также упоминались NocoDB и др., но основные — эти три).
|
||
В результатах поиска есть много информации по Budibase и ToolJet, включая документацию по JavaScript и примерам калькуляторов. Appsmith также упоминается как open-source.
|
||
|
||
Из поисковых результатов:
|
||
- Официальная документация Budibase по JavaScript — описывает использование JS в bindings, синхронный код, доступ к переменным через $().
|
||
- Документация ToolJet по FX функциональности — про использование JS-выражений в свойствах компонентов.
|
||
- Обзорная статья про Appsmith, Budibase, ToolJet — подтверждает open-source статус и возможности.
|
||
|
||
GitHub репозитории — ссылки на GitHub.
|
||
- Пример калькулятора в ToolJet (ипотечный) и Budibase (инвентарный) — хотя это не простые калькуляторы, но подтверждают наличие таких возможностей.
|
||
- Для Appsmith нужно описать, как сделать калькулятор — в результатах поиска прямого руководства нет, но можно описать на основе общей логики: свойства компонентов через JS, написание функций.
|
||
- Для Budibase используем информацию о bindings и JS — калькулятор можно реализовать через форму с полями, Options Picker для операций, и JS-выражение в поле результата.
|
||
- Для ToolJet используем информацию о FX — калькулятор через компоненты, установка значения результата через JS-формулу.
|
||
|
||
## Open Source no-code/low-code платформы с поддержкой JavaScript
|
||
|
||
Ниже представлены три ведущие open-source платформы, которые позволяют создавать приложения с минимальным кодом, но дают возможность расширять функциональность через JavaScript. Для каждой показана реализация простого калькулятора: два поля ввода чисел, выпадающий список операций (+, -, *, /) и поле результата.
|
||
|
||
---
|
||
|
||
### 1. Appsmith
|
||
|
||
**Сайт:** [appsmith.com](https://www.appsmith.com)
|
||
**GitHub:** [github.com/appsmithorg/appsmith](https://github.com/appsmithorg/appsmith)
|
||
|
||
Appsmith — платформа с богатым набором компонентов и возможностью писать JavaScript практически в любом месте: свойства компонентов, обработчики событий, запросы к данным .
|
||
|
||
#### Реализация калькулятора
|
||
|
||
1. **Создайте новое приложение** и добавьте на холст:
|
||
- Два поля ввода (`Input`) — назовём их `Input1` и `Input2`
|
||
- Выпадающий список (`Select`) с опциями: `+`, `-`, `*`, `/` — назовём `Select1`
|
||
- Текстовое поле (`Text`) для результата — назовём `Result`
|
||
|
||
2. **Настройте JavaScript-выражение для результата**. В свойстве `Text` компонента `Result` напишите:
|
||
|
||
```javascript
|
||
{{ (() => {
|
||
const num1 = Number(Input1.text);
|
||
const num2 = Number(Input2.text);
|
||
const operator = Select1.selectedOptionValue;
|
||
|
||
if (isNaN(num1) || isNaN(num2)) return "Введите числа";
|
||
|
||
switch(operator) {
|
||
case "+": return num1 + num2;
|
||
case "-": return num1 - num2;
|
||
case "*": return num1 * num2;
|
||
case "/": return num2 !== 0 ? num1 / num2 : "Ошибка: деление на 0";
|
||
default: return "Выберите операцию";
|
||
}
|
||
})() }}
|
||
```
|
||
|
||
3. **Опубликуйте приложение**. При изменении любого поля или выборе операции результат будет пересчитываться автоматически.
|
||
|
||
---
|
||
|
||
### 2. Budibase
|
||
|
||
**Сайт:** [budibase.com](https://budibase.com)
|
||
**GitHub:** [github.com/Budibase/budibase](https://github.com/Budibase/budibase)
|
||
|
||
Budibase позволяет использовать JavaScript в **bindings** — специальных полях, доступных через значок молнии (`fx`). Код выполняется синхронно на серверной стороне, поддерживается автодополнение через `$` .
|
||
|
||
#### Реализация калькулятора
|
||
|
||
1. **Создайте новое приложение** и добавьте компоненты:
|
||
- Два поля ввода (`Number Input`) — они автоматически создадутся, если добавить форму
|
||
- Выпадающий список (`Options Picker`) с операциями
|
||
- Текстовое поле (`Text`) для результата
|
||
|
||
2. **Настройте bindings для результата**. Кликните на значок молнии рядом со свойством `Text` компонента результата, перейдите на вкладку **JavaScript** и введите:
|
||
|
||
```javascript
|
||
const num1 = $("Number Input 1.Value") || 0;
|
||
const num2 = $("Number Input 2.Value") || 0;
|
||
const operator = $("Options Picker.Value");
|
||
|
||
let result;
|
||
switch(operator) {
|
||
case "+": result = num1 + num2; break;
|
||
case "-": result = num1 - num2; break;
|
||
case "*": result = num1 * num2; break;
|
||
case "/": result = num2 !== 0 ? num1 / num2 : "Error"; break;
|
||
default: result = "Select operation";
|
||
}
|
||
|
||
return result.toString();
|
||
```
|
||
|
||
3. **Сохраните** и откройте предварительный просмотр. Значение будет обновляться при любом изменении .
|
||
|
||
> 💡 В Budibase важно помнить: JS в bindings выполняется синхронно, `async/await` не поддерживаются .
|
||
|
||
---
|
||
|
||
### 3. ToolJet
|
||
|
||
**Сайт:** [tooljet.com](https://www.tooljet.com)
|
||
**GitHub:** [github.com/ToolJet/ToolJet](https://github.com/ToolJet/ToolJet)
|
||
|
||
ToolJet использует **FX-функциональность** — при нажатии на значок `fx` открывается редактор JavaScript-кода. Вы можете обращаться к любым компонентам, переменным и запросам через объект `components` .
|
||
|
||
#### Реализация калькулятора
|
||
|
||
1. **Создайте новое приложение** и перетащите на холст:
|
||
- Два компонента `Number Input`
|
||
- Компонент `Dropdown` с опциями `+`, `-`, `*`, `/`
|
||
- Компонент `Text` для вывода результата
|
||
|
||
2. **В компоненте результата** кликните на `fx` рядом с полем `Text`. Введите код:
|
||
|
||
```javascript
|
||
{{ (() => {
|
||
const num1 = components.numberinput1.value;
|
||
const num2 = components.numberinput2.value;
|
||
const operator = components.dropdown1.value;
|
||
|
||
if (num1 === undefined || num2 === undefined) return "Enter numbers";
|
||
if (operator === "/" && num2 === 0) return "Cannot divide by zero";
|
||
|
||
switch(operator) {
|
||
case "+": return num1 + num2;
|
||
case "-": return num1 - num2;
|
||
case "*": return num1 * num2;
|
||
case "/": return num1 / num2;
|
||
default: return "Select operator";
|
||
}
|
||
})() }}
|
||
```
|
||
|
||
3. **При необходимости** можно добавить кнопку с вычислением, но ToolJet позволяет обновлять результат автоматически при изменении любых входных данных .
|
||
|
||
---
|
||
|
||
## Сравнение подходов
|
||
|
||
| Платформа | Место написания JS | Синтаксис доступа | Особенности |
|
||
|-----------|-------------------|-------------------|-------------|
|
||
| **Appsmith** | В любом поле через `{{ }}` | `Input1.text`, `Select1.selectedOptionValue` | Поддержка async/await, богатые возможности |
|
||
| **Budibase** | Bindings (иконка молнии) | `$("ComponentName.Value")` | Синхронный код, автодополнение через `$` |
|
||
| **ToolJet** | FX (иконка `fx`) | `components.componentname.value` | Интеграция с запросами, мощный редактор |
|
||
|
||
Все три платформы являются полностью open-source, что позволяет развернуть их на собственном сервере, изучать исходный код и адаптировать под свои нужды. Приведённый калькулятор — лишь простейший пример; на этих платформах можно создавать сложные бизнес-приложения, панели аналитики и административные интерфейсы с минимальным объёмом написанного кода.
|