ru.coon 3.0.90 → 3.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +2 -1
- package/AGENTS.md +26 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +74 -0
- package/package.json +1 -1
- package/src/report/column/BigNumColumn.js +9 -0
- package/src/report/column/BigNumIndicationColumn.js +8 -0
- package/src/report/column/BooleanIconColumn.js +7 -0
- package/src/report/column/Check.js +9 -0
- package/src/report/column/CounterColumn.js +7 -0
- package/src/report/column/DynamicActionColumn.js +7 -0
- package/src/report/column/HintColumn.js +6 -0
- package/src/report/column/HintDateColumn.js +7 -0
- package/src/report/column/HintTimeIntervalColumn.js +9 -0
- package/src/report/column/IconSvgColumn.js +9 -0
- package/src/report/column/LinkColumn.js +11 -0
- package/src/report/column/MoneyColumn.js +8 -0
- package/src/report/column/MultiColumn.js +48 -0
- package/src/report/column/PercentColumn.js +8 -0
- package/src/report/column/ThreeStateCheckColumn.js +9 -0
- package/src/report/column/TimeIntervalColumn.js +8 -0
- package/src/report/component/reportpanel/ReportGrid.js +5 -1
- package/src/report/component/settings/ReportFormEditPanel.js +13 -3
- package/src/report/component/settings/column/ColumnPropertiesGrid.js +287 -0
- package/src/report/component/settings/column/ColumnPropertiesWindow.js +108 -0
- package/src/report/component/settings/column/ColumnPropertiesWindowController.js +264 -0
- package/src/report/component/settings/column/ColumnXTypeTreeCombo.js +64 -0
- package/src/report/component/settings/field/ReportFormFieldEditPanel.js +24 -7
- package/src/report/component/settings/field/ReportFormFieldEditPanelController.js +74 -0
- package/src/report/utils/ColumnUtils.js +550 -0
- package/src/version.js +1 -1
package/AGENTS.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Project Name
|
|
2
|
+
|
|
3
|
+
core of ExtJS 7 extensive expandable components
|
|
4
|
+
|
|
5
|
+
## Code Style
|
|
6
|
+
|
|
7
|
+
- Follow ESLint configuration
|
|
8
|
+
- Use 2 spaces for indentation
|
|
9
|
+
- one file for one class
|
|
10
|
+
|
|
11
|
+
## Architecture
|
|
12
|
+
|
|
13
|
+
- Follow DRY pattern
|
|
14
|
+
- Keep components under 200 lines
|
|
15
|
+
- Use dependency injection
|
|
16
|
+
|
|
17
|
+
## Testing
|
|
18
|
+
|
|
19
|
+
- Write unit tests for all business logic
|
|
20
|
+
- Maintain >80% code coverage
|
|
21
|
+
- Use Jest for testing
|
|
22
|
+
|
|
23
|
+
## Security
|
|
24
|
+
|
|
25
|
+
- Never commit API keys or secrets
|
|
26
|
+
- Validate all user inputs
|
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,47 @@
|
|
|
1
|
+
# Version 3.0.91, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/5f39a79a9aef0657afb88db535f0232e36860beb)
|
|
2
|
+
* ## Features
|
|
3
|
+
* <span style='color:green'>feat: add hardcoded column properties dictionary with ExtJS 7 descriptions
|
|
4
|
+
|
|
5
|
+
- Add centralized basePropertyDescriptions object in ColumnUtils.js with descriptions for all basic ExtJS column properties (dataIndex, text, width, align, etc.) translated to Russian
|
|
6
|
+
- Modify getColumnConfigKeysWithMeta() to use basePropertyDescriptions as fallback when property has no meta.config description
|
|
7
|
+
- Add meta.config with descriptions to 14 custom Coon columns:
|
|
8
|
+
- BigNumColumn: precision, decSeparator, groupSeparator
|
|
9
|
+
- MoneyColumn: negativeCls, markNegative
|
|
10
|
+
- HintColumn: hintProperty
|
|
11
|
+
- HintDateColumn: format
|
|
12
|
+
- LinkColumn: linkType, context, extSystemObjectId, extSystemObjectTypeId, extSystemTypeId
|
|
13
|
+
- PercentColumn: negativeCls, markNegative
|
|
14
|
+
- TimeIntervalColumn, HintTimeIntervalColumn: startTimeDataIndex, stopTimeDataIndex, currentTimeDataIndex
|
|
15
|
+
- IconSvgColumn: trueIcon, falseIcon, iconPrefix
|
|
16
|
+
- BooleanIconColumn: falsyMode, iconPrefix
|
|
17
|
+
- ThreeStateCheckColumn: countOnCheck, maskDisplayThreshold, groupingCheckboxWidth, checkboxWidth
|
|
18
|
+
- DynamicActionColumn: altText
|
|
19
|
+
- CounterColumn: pagging
|
|
20
|
+
- BigNumIndicationColumn: rgtField, lftField
|
|
21
|
+
- Check: editable, checkedValue, uncheckedValue
|
|
22
|
+
|
|
23
|
+
This enables the column properties selection UI window to display meaningful Russian descriptions for both basic ExtJS properties and custom Coon column properties, significantly improving user experience when configuring report fields.
|
|
24
|
+
|
|
25
|
+
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com></span> ([fea343], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/fea3435c52c0372a89083c73045cd766471f341f))
|
|
26
|
+
* <span style='color:green'>feat: add Column configuration editor</span> ([a4bb32], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/a4bb32928be7fa1149edebbad80f18aa0fd11aa9))
|
|
27
|
+
|
|
28
|
+
* ## Fixes
|
|
29
|
+
* <span style='color:red'> save basePropertyDescriptions reference to avoid 'this' context issue
|
|
30
|
+
|
|
31
|
+
In getColumnConfigKeysWithMeta(), save basePropertyDescriptions to a variable
|
|
32
|
+
before the forEach loop to avoid 'this' context being undefined in the callback.
|
|
33
|
+
|
|
34
|
+
This fixes the 'Cannot read properties of undefined' error when trying to access
|
|
35
|
+
this.basePropertyDescriptions inside the forEach callback.
|
|
36
|
+
|
|
37
|
+
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com></span> ([f4ba33], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/f4ba3304f48affe2ccbc19172667ad80eab291d4))
|
|
38
|
+
|
|
39
|
+
* up ([d3fd93], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/d3fd93d49a1208058525d53cf3313c998d97baaa))
|
|
40
|
+
* upd ([55b6dc], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/55b6dc31158e59bff6d693f4f4b4884b122fdf7b))
|
|
41
|
+
* update: CHANGELOG.md ([7dc9fb], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/7dc9fbdc0a0fd995deff0c07498eaefd8313374c))
|
|
42
|
+
|
|
1
43
|
# Version 3.0.90, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/1936c3aef38324ad97d978bb306d1c142d94fe10)
|
|
44
|
+
* upd ([59687c], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/59687c5aadf1f207f0d04e9a747d251937da1397))
|
|
2
45
|
* bugfix: [ControlColumnByParamPlugin] Исправлена логика функции matchFilterValue. Closes NEVA-1043. ([344f24], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/344f248767c26edd67e952fb3bba6c28d0908e9b))
|
|
3
46
|
* update: CHANGELOG.md ([6b6d14], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/6b6d149e88431a3c2fb144be1a676d76cd1b5175))
|
|
4
47
|
|
|
@@ -13,7 +56,10 @@
|
|
|
13
56
|
* <span style='color:green'>feat: Поддержка множественных текстовых значений фильтра, разделитель - запятая. Related to NEVA-1043.</span> ([20008a], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/20008a908515f953ca299764958dc24062ec9206))
|
|
14
57
|
|
|
15
58
|
* Функция stringToArray перенесена в плагин ControlColumnByParamPlugin. Related to NEVA-1043. ([118215], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/1182151d5dbd5c2100ebf11c987e13047eeec7ab))
|
|
59
|
+
* upd ([d43e10], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/d43e109c6aef87755414c02495602f7f20dba9c6))
|
|
16
60
|
* Используется Coon.format.stringToArray. Related to NEVA-1043. ([d2d101], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/d2d101adc766c1c9168ee2f6e542e1c61c5d1f3e))
|
|
61
|
+
* upd ([7423e3], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/7423e399f1a13a581e4eceb2f8d45407d214b95e))
|
|
62
|
+
* upd ([60c12b], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/60c12bf9791554b288799f72022f3c8e81f09cf4))
|
|
17
63
|
* update: CHANGELOG.md ([e84cf5], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/e84cf50be8f49f9f04e0f6455823a5d4a5cbfacb))
|
|
18
64
|
|
|
19
65
|
# Version 3.0.88, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/a72099d6e504067f855a039fa59064412650d2ed)
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
ru.coon is a library of ExtJS 7 extensive expandable components used as a Sencha package. The namespace is `Coon` (with alternate class names `Sigma.common.*` and `Leaves.common.*` for backwards compatibility).
|
|
8
|
+
|
|
9
|
+
## Build & Development Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Install dependencies
|
|
13
|
+
pnpm install
|
|
14
|
+
|
|
15
|
+
# Generate documentation
|
|
16
|
+
npm run doc
|
|
17
|
+
|
|
18
|
+
# Lint all JS files
|
|
19
|
+
npx eslint src/
|
|
20
|
+
|
|
21
|
+
# Lint specific file
|
|
22
|
+
npx eslint src/path/to/file.js
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Pre-commit hooks run lint-staged automatically on `.js` files.
|
|
26
|
+
|
|
27
|
+
## Code Style
|
|
28
|
+
|
|
29
|
+
- **Indentation**: 4 spaces (not 2)
|
|
30
|
+
- **Max line length**: 150 characters
|
|
31
|
+
- **Semicolons**: Required
|
|
32
|
+
- **Trailing commas**: Required in multiline objects, not in arrays/functions
|
|
33
|
+
- **camelCase**: Disabled (allow snake_case)
|
|
34
|
+
- **Google ESLint config** is the base
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
|
|
38
|
+
### Main Entry Point
|
|
39
|
+
`index.js` - Imports external dependencies (echarts, ace-builds, sql-formatter, etc.) and exposes them to `window` and `Ext` globals.
|
|
40
|
+
|
|
41
|
+
### Core Singletons
|
|
42
|
+
|
|
43
|
+
- **`Coon.Function`** (`src/Function.js`) - Request handling, component utilities, grid/form operations
|
|
44
|
+
- **`Coon.util`** (`src/util.js`) - Hash generation, command utilities, promisified commands
|
|
45
|
+
- **`Coon.format`** (`src/format.js`) - Date/time formatting, number formatting, intervals
|
|
46
|
+
- **`Coon.log`** (`src/log.js`) - Logging utilities
|
|
47
|
+
|
|
48
|
+
### Command Pattern
|
|
49
|
+
Commands in `src/command/` extend `Coon.command.BaseCommand`. Commands emit `complete` and `failure` events and can be promisified via `Coon.util.promisifyCmd()`. Aliases follow the pattern `command.CommandName`.
|
|
50
|
+
|
|
51
|
+
### Component Factory
|
|
52
|
+
`Coon.common.ComponentFactory` creates and caches UI components from menu/route configurations. Handles ReportPanel filter initialization.
|
|
53
|
+
|
|
54
|
+
### Key Directories
|
|
55
|
+
|
|
56
|
+
- **`src/app/`** - Application class, router, viewport, login
|
|
57
|
+
- **`src/nav/`** - Navigation panels, menus, favorites bar
|
|
58
|
+
- **`src/common/`** - Reusable components, fields, buttons, panels
|
|
59
|
+
- **`src/report/`** - Report components, models, stores, columns, plugins
|
|
60
|
+
- **`src/command/`** - Command classes for async operations
|
|
61
|
+
- **`sass/`** - SCSS files following Sencha structure (etc/var/src)
|
|
62
|
+
|
|
63
|
+
### Global Objects
|
|
64
|
+
|
|
65
|
+
Code expects these globals:
|
|
66
|
+
- `Ext` - ExtJS framework
|
|
67
|
+
- `JSON5` - JSON5 parser (set from index.js)
|
|
68
|
+
- `Coon` - Main namespace
|
|
69
|
+
- `Iconpack` - Icon utilities
|
|
70
|
+
- `Decimal` - decimal.js-light for precision math
|
|
71
|
+
|
|
72
|
+
## Dependencies
|
|
73
|
+
|
|
74
|
+
This is a Sencha package (`sencha.type: "code"`) meant to be included in ExtJS applications. External dependencies (ace-builds, echarts, etc.) are re-exported through `index.js` onto the `Ext` global.
|
package/package.json
CHANGED
|
@@ -5,6 +5,15 @@ Ext.define('Coon.report.column.BigNumColumn', {
|
|
|
5
5
|
'Sigma.common.column.BigNumColumn',
|
|
6
6
|
'Sigma.grid.column.BigNumColumn'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
precision: 'Количество знаков после запятой для отображения числа',
|
|
12
|
+
decSeparator: 'Разделитель дробной части числа. По умолчанию точка (".")',
|
|
13
|
+
groupSeparator: 'Разделитель групп разрядов (тысяч, миллионов). По умолчанию пробел (" ")',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
|
|
8
17
|
align: 'right',
|
|
9
18
|
cellSumPluginConfig: {
|
|
10
19
|
valueType: 'float',
|
|
@@ -5,6 +5,14 @@ Ext.define('Coon.report.column.BigNumIndicationColumn', {
|
|
|
5
5
|
'Sigma.common.column.BigNumIndicationColumn',
|
|
6
6
|
'Sigma.grid.column.BigNumIndicationColumn'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
rgtField: 'Имя поля в модели данных с правой границей для индикации значения',
|
|
12
|
+
lftField: 'Имя поля в модели данных с левой границей для индикации значения',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
|
|
8
16
|
uses: [],
|
|
9
17
|
requires: [],
|
|
10
18
|
align: 'right',
|
|
@@ -4,6 +4,13 @@ Ext.define('Coon.report.column.BooleanIconColumn', {
|
|
|
4
4
|
'BooleanIconColumn'
|
|
5
5
|
],
|
|
6
6
|
|
|
7
|
+
meta: {
|
|
8
|
+
config: {
|
|
9
|
+
falsyMode: 'Показывать иконку "cancel-small" для пустых/null значений. По умолчанию false',
|
|
10
|
+
iconPrefix: 'Префикс CSS класса для иконки. По умолчанию "svg-icon"',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
|
|
7
14
|
getStatusIcon(value) {
|
|
8
15
|
if (Ext.isEmpty(value)) {
|
|
9
16
|
return this.falsyMode ? 'cancel-small' : '';
|
|
@@ -5,6 +5,15 @@ Ext.define('Coon.report.column.Check', {
|
|
|
5
5
|
'Sigma.common.column.Check',
|
|
6
6
|
'Sigma.grid.column.Check'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
editable: 'Разрешить изменение состояния чекбокса пользователем. По умолчанию false',
|
|
12
|
+
checkedValue: 'Значение, записываемое в модель при отмеченном чекбоксе. По умолчанию true',
|
|
13
|
+
uncheckedValue: 'Значение, записываемое в модель при снятом чекбоксе. По умолчанию false',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
|
|
8
17
|
uses: [],
|
|
9
18
|
requires: [],
|
|
10
19
|
editable: false,
|
|
@@ -5,6 +5,13 @@ Ext.define('Coon.report.column.CounterColumn', {
|
|
|
5
5
|
'Sigma.common.column.CounterColumn',
|
|
6
6
|
'Sigma.grid.column.CounterColumn'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
pagging: 'Объект пагинации с cursor для корректного отображения номера строки',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
8
15
|
uses: [],
|
|
9
16
|
requires: [
|
|
10
17
|
'Coon.format'
|
|
@@ -5,6 +5,13 @@ Ext.define('Coon.report.column.DynamicActionColumn', {
|
|
|
5
5
|
'Sigma.common.column.DynamicActionColumn',
|
|
6
6
|
'Sigma.grid.column.DynamicActionColumn'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
altText: 'Альтернативный текст для элементов img в колонке действий',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
8
15
|
uses: [],
|
|
9
16
|
requires: [],
|
|
10
17
|
|
|
@@ -6,6 +6,12 @@ Ext.define('Coon.report.column.HintColumn', {
|
|
|
6
6
|
'Sigma.grid.column.HintColumn'
|
|
7
7
|
],
|
|
8
8
|
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
hintProperty: 'Имя поля в модели данных, значение которого будет использовано как подсказка (tooltip)',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
9
15
|
$metaConfig: {
|
|
10
16
|
type: 'column',
|
|
11
17
|
description: 'компонент выпадающего списка',
|
|
@@ -5,6 +5,13 @@ Ext.define('Coon.report.column.HintDateColumn', {
|
|
|
5
5
|
'Sigma.common.column.HintDateColumn',
|
|
6
6
|
'Sigma.grid.column.HintDateColumn'
|
|
7
7
|
],
|
|
8
|
+
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
format: 'Формат отображения даты. По умолчанию "d.m.Y". Синтаксис PHP date()',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
8
15
|
uses: [],
|
|
9
16
|
requires: [],
|
|
10
17
|
constructor: function(cfg) {
|
|
@@ -7,6 +7,15 @@ Ext.define('Coon.report.column.HintTimeIntervalColumn', {
|
|
|
7
7
|
],
|
|
8
8
|
uses: [],
|
|
9
9
|
requires: [],
|
|
10
|
+
|
|
11
|
+
meta: {
|
|
12
|
+
config: {
|
|
13
|
+
startTimeDataIndex: 'Имя поля в модели данных с датой/временем начала интервала',
|
|
14
|
+
stopTimeDataIndex: 'Имя поля в модели данных с датой/временем окончания интервала',
|
|
15
|
+
currentTimeDataIndex: 'Имя поля в модели данных с текущим временем (опционально)',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
|
|
10
19
|
align: 'right',
|
|
11
20
|
startTimeDataIndex: undefined,
|
|
12
21
|
stopTimeDataIndex: undefined,
|
|
@@ -9,6 +9,15 @@ Ext.define('Coon.report.column.IconSvgColumn', {
|
|
|
9
9
|
'Sigma.common.column.IconSvgColumn',
|
|
10
10
|
'Sigma.grid.column.IconSvgColumn'
|
|
11
11
|
],
|
|
12
|
+
|
|
13
|
+
meta: {
|
|
14
|
+
config: {
|
|
15
|
+
trueIcon: 'Имя SVG иконки для отображения при значении true',
|
|
16
|
+
falseIcon: 'Имя SVG иконки для отображения при значении false',
|
|
17
|
+
iconPrefix: 'Префикс CSS класса для иконки. По умолчанию "svg-icon"',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
|
|
12
21
|
uses: [],
|
|
13
22
|
requires: [],
|
|
14
23
|
getStatusIcon(value) {
|
|
@@ -2,6 +2,17 @@ Ext.define('Coon.report.column.LinkColumn', {
|
|
|
2
2
|
extend: 'Ext.grid.column.Widget',
|
|
3
3
|
alias: 'widget.LinkColumn',
|
|
4
4
|
alternateClassName: 'Sigma.grid.column.LinkColumn',
|
|
5
|
+
|
|
6
|
+
meta: {
|
|
7
|
+
config: {
|
|
8
|
+
linkType: 'Тип обработчика ссылки. По умолчанию "openLink"',
|
|
9
|
+
context: 'Объект контекста с параметрами для открытия ссылки',
|
|
10
|
+
extSystemObjectId: 'ID объекта внешней системы для навигации',
|
|
11
|
+
extSystemObjectTypeId: 'ID типа объекта внешней системы',
|
|
12
|
+
extSystemTypeId: 'ID типа внешней системы',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
|
|
5
16
|
uses: [],
|
|
6
17
|
requires: [],
|
|
7
18
|
groupRenderer: Coon.format.withHint,
|
|
@@ -4,6 +4,14 @@ Ext.define('Coon.report.column.MoneyColumn', {
|
|
|
4
4
|
alternateClassName: [
|
|
5
5
|
'Sigma.grid.column.MoneyColumn'
|
|
6
6
|
],
|
|
7
|
+
|
|
8
|
+
meta: {
|
|
9
|
+
config: {
|
|
10
|
+
negativeCls: 'CSS класс, применяемый к ячейкам с отрицательными суммами',
|
|
11
|
+
markNegative: 'Выделять отрицательные суммы специальным CSS классом',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
7
15
|
uses: [],
|
|
8
16
|
requires: [],
|
|
9
17
|
align: 'right',
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Мультиколонка для динамического создания колонок в отчетах
|
|
3
|
+
*
|
|
4
|
+
* Пример конфигурации в свойствах поля отчета:
|
|
5
|
+
* {
|
|
6
|
+
* fieldPrefix: 'employee',
|
|
7
|
+
* columnXType: 'hintColumn',
|
|
8
|
+
* columnConfig: {
|
|
9
|
+
* align: 'right',
|
|
10
|
+
* width: 120
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* При получении данных с бэкенда вида:
|
|
15
|
+
* {
|
|
16
|
+
* employee_name_1: 'Иванов',
|
|
17
|
+
* employee_value_1: 'Разработчик',
|
|
18
|
+
* employee_name_2: 'Петров',
|
|
19
|
+
* employee_value_2: 'Тестировщик'
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* Будут созданы динамические колонки с заголовками из *_name_* и данными из *_value_*
|
|
23
|
+
**/
|
|
24
|
+
Ext.define('Coon.report.column.MultiColumn', {
|
|
25
|
+
extend: 'Ext.grid.column.Column',
|
|
26
|
+
xtype: 'MultiColumn',
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
meta: {
|
|
30
|
+
config: {
|
|
31
|
+
fieldPrefix: `
|
|
32
|
+
префикс имени поля в БД,
|
|
33
|
+
по нему отбираются данные для отображения в MultiColumn,
|
|
34
|
+
например: employee_name_1 / employee__1,
|
|
35
|
+
в результате будут созданы динамические колонки
|
|
36
|
+
с заголовками из *_name_* и данными из *_value_*
|
|
37
|
+
`,
|
|
38
|
+
columnXType: 'xtype динамической колонки',
|
|
39
|
+
columnConfig: 'конфигурация xtype динамической колонки',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
config: {
|
|
44
|
+
fieldPrefix: undefined,
|
|
45
|
+
columnXType: 'hintColumn',
|
|
46
|
+
columnConfig: {},
|
|
47
|
+
},
|
|
48
|
+
});
|
|
@@ -4,6 +4,14 @@ Ext.define('Coon.report.column.PercentColumn', {
|
|
|
4
4
|
alternateClassName: [
|
|
5
5
|
'Sigma.grid.column.PercentColumn'
|
|
6
6
|
],
|
|
7
|
+
|
|
8
|
+
meta: {
|
|
9
|
+
config: {
|
|
10
|
+
negativeCls: 'CSS класс, применяемый к ячейкам с отрицательными процентами',
|
|
11
|
+
markNegative: 'Выделять отрицательные проценты специальным CSS классом',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
|
|
7
15
|
uses: [],
|
|
8
16
|
requires: [],
|
|
9
17
|
align: 'right',
|
|
@@ -36,6 +36,15 @@ Ext.define('Coon.report.column.ThreeStateCheckColumn', {
|
|
|
36
36
|
groupingCheckboxWidth: 50,
|
|
37
37
|
checkboxWidth: 40,
|
|
38
38
|
|
|
39
|
+
meta: {
|
|
40
|
+
config: {
|
|
41
|
+
countOnCheck: 'Отслеживать количество отмеченных строк через события checkchange',
|
|
42
|
+
maskDisplayThreshold: 'Количество записей для показа маски при массовом выборе. По умолчанию 1000',
|
|
43
|
+
groupingCheckboxWidth: 'Ширина колонки чекбокса при включенной группировке. По умолчанию 50',
|
|
44
|
+
checkboxWidth: 'Ширина колонки чекбокса без группировки. По умолчанию 40',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
|
|
39
48
|
constructor: function(cfg) {
|
|
40
49
|
this.wrapOriginalToggleAll();
|
|
41
50
|
this.callParent([cfg]);
|
|
@@ -6,6 +6,14 @@ Ext.define('Coon.report.column.TimeIntervalColumn', {
|
|
|
6
6
|
],
|
|
7
7
|
requires: ['Coon.format'],
|
|
8
8
|
|
|
9
|
+
meta: {
|
|
10
|
+
config: {
|
|
11
|
+
startTimeDataIndex: 'Имя поля в модели данных с датой/временем начала интервала',
|
|
12
|
+
stopTimeDataIndex: 'Имя поля в модели данных с датой/временем окончания интервала',
|
|
13
|
+
currentTimeDataIndex: 'Имя поля в модели данных с текущим временем (опционально)',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
|
|
9
17
|
align: 'right',
|
|
10
18
|
startTimeDataIndex: undefined,
|
|
11
19
|
stopTimeDataIndex: undefined,
|
|
@@ -11,7 +11,10 @@ Ext.define('Coon.report.component.reportpanel.ReportGrid', {
|
|
|
11
11
|
'Ext.grid.column.*',
|
|
12
12
|
'Sigma.common.column.*'
|
|
13
13
|
],
|
|
14
|
-
requires: [
|
|
14
|
+
requires: [
|
|
15
|
+
'Ext.data.Store',
|
|
16
|
+
'Coon.report.utils.ColumnUtils'
|
|
17
|
+
],
|
|
15
18
|
cls: 'ReportGrid',
|
|
16
19
|
allowDeselect: false,
|
|
17
20
|
frame: false,
|
|
@@ -166,4 +169,5 @@ Ext.define('Coon.report.component.reportpanel.ReportGrid', {
|
|
|
166
169
|
}
|
|
167
170
|
return this.features.find((feature) => feature.ftype === ftype);
|
|
168
171
|
},
|
|
172
|
+
|
|
169
173
|
});
|
|
@@ -50,13 +50,22 @@ Ext.define('Coon.report.component.settings.ReportFormEditPanel', {
|
|
|
50
50
|
],
|
|
51
51
|
}],
|
|
52
52
|
items: [
|
|
53
|
-
{
|
|
54
|
-
|
|
53
|
+
{
|
|
54
|
+
xtype: 'ReportFormCommonPanel',
|
|
55
|
+
title: 'Общие параметры',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
xtype: 'ReportFormParameterEditPanel',
|
|
59
|
+
title: 'Параметры',
|
|
60
|
+
},
|
|
55
61
|
{
|
|
56
62
|
xtype: 'ReportFormFieldEditPanel',
|
|
63
|
+
title: 'Поля',
|
|
57
64
|
reference: 'fieldsPanel',
|
|
58
65
|
},
|
|
59
|
-
{
|
|
66
|
+
{
|
|
67
|
+
xtype: 'ReportPropertiesPanel',
|
|
68
|
+
title: 'Свойства',
|
|
60
69
|
reference: 'properties',
|
|
61
70
|
bind: {
|
|
62
71
|
data: '{report.properties}',
|
|
@@ -64,6 +73,7 @@ Ext.define('Coon.report.component.settings.ReportFormEditPanel', {
|
|
|
64
73
|
},
|
|
65
74
|
{
|
|
66
75
|
xtype: 'ReportFormPluginPanel',
|
|
76
|
+
title: 'Плагины',
|
|
67
77
|
reference: 'plugins',
|
|
68
78
|
}
|
|
69
79
|
],
|