Appearance
apps/panel 0.81.1
Released on 15 September 2026. Previous release: 0.81.0.
What changed
List and operation screens
- The list screen of the operator terminal shows search, filters, operation cards and the command rail. The operation header and the sectioned footer appear only when the operator opens an operation, and
Back to listremoves them again. Previously the header appeared as soon as a card was selected, and the footer stayed on the list screen, showing dashes until a card was selected. Exitis shown only on the list screen, with or without a selected card, and, as before, next to configuration errors. On the operation screen the command rail showsBack to listin its place. Previously both buttons were always visible, andBack to liststayed disabled until a card was selected.- Cards take less vertical space.
- In a wide footer, the production counts take only the width they need, and the operation details get the rest of the row.
- The
Operation tasksheading above the task list has been removed. A normally running timer no longer shows theRemaining timecaption under its ring; screen readers still announce the value as remaining time. The paused, warning and overdue captions remain.
Card subtitle
- The new optional
terminalConfig.cardSubtitlesetting adds one muted line under the card title, before the field rows. It has the same structure ascardTitle: orderedpartswithtext,attributeorcontext, and an optionalcolor, withoutlabelorcolSpan. Text longer than one line is cut with an ellipsis, and the full value appears in a tooltip, as for other cut card text. Without the setting, cards have no subtitle line. - The configuration check applies the
cardTitlerules tocardSubtitlebefore the terminal reads operations. An invalid value is listed with its path, for examplepanel.terminalConfig.cardSubtitle.parts, and no operations are read. As in the title,{ "context": "materialInstance" }always shows—on cards.
Reading operations from the configured source
- With
metaTypeName, the terminal requests 20 objects withPOST /Object/findwhen the panel opens and on every page change, and takes the number of matching objects frompagination.totalRecordCountin the response. TheOperationscount, thePageindicator andNexttherefore cover all matching objects. Previously the terminal counted only the objects of the current page: it showedPage 1 / 1,Nextstayed disabled, and objects after the first 20 could not be opened. - If that response has no numeric
pagination.totalRecordCount, the terminal shows the read errorTerminal list request requires a total record countinstead of guessing the page count. A retry succeeds only after the API returns the total. - With
customRequest, the terminal builds display attributes from each original response row. It uses the row'sfAttributesarray when there is one; otherwise every field of the row becomes an attribute, including fields namedobjectGuid,type,linkedObject,fAttributesandattributesMap. Previously a row without its owntypeorobjectGuidfield showed the panel's internal valuescustomObjectandcustom-<n>for these attributes, a row with alinkedObjectfield stopped the read, and a field namedattributesMapcould make the card show wrong values or dashes. - Each row of a
customRequestresponse still needs a unique identifier in the field named bycustomRequest.idField,idby default. The terminal now checks the whole response array: if two rows share an identifier, even on different pages, it stops the read with the errorCustom terminal rows require unique identifiers. Correct the source data before retrying. Previously such rows were accepted, and opening one of them could open the other.
Failed reads, paging and forms
- The page number changes only after the new page has been read. Previously a failed read already showed the new page number while the cards of the previous page stayed on screen.
Refresh statein the error message andRefreshin the command rail repeat the read that failed. After a failed attempt to select or open an operation, they read that operation again and, if it was being opened, reopen it. Previously they read the operation list again and returned to it.Cancelcloses a command form and discards its draft without requesting the instruction again. Previously, in the demonstration, it could also start a new instruction read.- If the focused button disappears when the terminal switches between the list and an operation or opens or closes a form, keyboard focus moves to the terminal's work area. Previously it fell back to the page itself.
Planned start
- The
Planned startvalue on cards uses the panel's shared date parser. Values in theDD.MM.YYYY HH:mm:ssformat are read as day, month and year; previously such a value could appear as a dash or with the day and month swapped. Values withZor an offset are shown in the device's time zone, and values without a time zone keep their calendar date and time.
Demonstration
- Every demonstration operation shows the same sample engineering drawing (JPEG) as its document instead of the generated PNG sheet. The drawing is not production documentation.
- Card titles show only the operation name. The demonstration configuration puts the operation code into
cardSubtitle, so the first card showsОП-001underСборка корпуса; the footer still shows the code. ОП-002has a long name, order, workplace and material. Its card shows how long values are cut, and its operation screen shows how they wrap.- When
NUXT_PUBLIC_API_PREFIXends in/local-api, for example/base/local-api, the demonstration terminal runs in training mode and sends operation reads, instruction reads and commands under that prefix. A trailing slash is ignored. The deployment must serve the demonstration API at that path. Previously training mode required exactly/local-api, and with any other prefix the demonstration terminal opened read-only.
Configuration
cardSubtitle is optional, and existing configurations need no change. To show the operation code under the card title, add terminalConfig.cardSubtitle to the terminal panel. In this example, operations-read is an example panel ID, and code is the operation-code attribute path from the guide's WorkOrderOperation example; use the attribute names of the WorkOrderOperation contract in your environment. List the attribute in attributeList so that the terminal requests it:
json
{
"version": "1.0.0",
"panel": {
"id": "operations-read",
"type": "operatorTerminal",
"request": {
"metaTypeName": "WorkOrderOperation",
"attributeList": ["name", "code"]
},
"terminalConfig": {
"cardSubtitle": {
"parts": [{ "attribute": "code" }]
}
}
}
}Settings omitted from terminalConfig keep their built-in values, so the title still shows name. The built-in card rows read workOrder, selectedWorkUnit.name and materialDefinition; add them to attributeList as well, or those rows show dashes. The card subtitle section of the guide describes color and the check rules.
Known limitations
- The start-time plate on a card still reads values without a time zone with the browser's own date parser. For a
DD.MM.YYYY HH:mm:ssvalue it can show a dash or count down to a different date thanPlanned start. The demonstration returns dates with an explicit time zone and is not affected. - A configured WorkOrderOperation source remains read-only: documents, tasks, commands and the timer work only in the demonstration, and the terminal is not connected to SignalR.
Updated documentation
- The operator terminal guide describes the separate list and operation screens, where
ExitandBack to listappear, and how paging,Refresh stateandCancelbehave after a failed read. - The operation source section states the pagination-total requirement for
metaTypeNameand the attribute and identifier rules forcustomRequest. The display parts section explains that a plain nested JSON value in a custom row shows a dash and gives thefAttributesformat that the terminal can read. - The card subtitle section describes the new setting and the demonstration's title and subtitle. The footer and countdown section covers planned-start dates and the timer caption, and the minimal demo configuration lists the API prefixes that enable training mode.