Skip to content

CSAT UI

Frontend screens, components, and user flows for the CSAT module.

Route Structure

/csat     → CSAT ratings table with filters and detail views

The CSAT module is accessed from the main navigation menu and requires the menu-csat permission.

Screens

CSAT Ratings Table (/csat)

The main screen of the module. Displays all customer satisfaction ratings in a paginated, server-side DataTable.

Layout:

SectionComponentDescription
FiltersDataTable built-in filtersFilter bar with multiple criteria
TableDataTablePaginated list of ratings with sortable columns
ActionsDropdownActionPer-row actions: Details, Add/Update Comment

Filters:

FilterComponentOptionsGrid
Company IDInputFree text (comma-separated IDs)col-lg-4
CarrierSelect2 (tags)Dynamic list from injected carrierscol-lg-3
AgentSelect2 (tags)Dynamic list from agentsListcol-lg-3
SourceSelect2 (tags)Ticket, Carrier, Shopcol-lg-3
ScoreSelect2 (tags)1, 2, 3, 4, 5col-lg-3
Source PlatformSelect2 (tags)Platform, WhatsAppcol-lg-3
Date RangeDatePickerStart/end date selectioncol-lg-3

Table Columns:

ColumnSortableVisibleDescription
CompanyYesYesCompany name with logo (via Company component)
CarrierYesYesCarrier name with logo (via Carrier component)
SourceYesYesSource type label (TICKET / CARRIER / SHOP)
ReferenceYesYesReference ID as clickable link (opens ticket offcanvas for tickets)
RatingYesYesStar rating display + source platform icon below
DateYesYesFormatted rating date
CommentNoYesCustomer comment (via TextBreaker)
StatusNoYesTicket status badge (color-coded)
ActionsNoYesDetails button + comment dropdown
Admin NameNoHiddenFollow-up admin name (export only)
Admin Comment DateNoHiddenFollow-up timestamp (export only)
Admin CommentNoHiddenFollow-up text (export only)
Source PlatformNoHiddenPlatform label (export only)
Executive AssignedNoHiddenAssigned executive (export only)
Executive CountryNoHiddenExecutive country (export only)

Source Platform Display:

Below the star rating in each row, the source platform is shown with an icon:

  • Platform: Cart icon (fa-cart-shopping) in primary color + "Platform" label
  • WhatsApp: WhatsApp icon (fa-whatsapp) in green + "WhatsApp" label

Actions per row:

ActionBehavior
Details (ticket source)Opens the InformationOffcanvas with the ticket detail
Details (carrier/shop source)Emits showDetails to open the CSAT detail offcanvas
Add/Update CommentEmits openModalComm to open the comment modal

CSAT Survey Card (Inline in Ticket Chat)

The CsatSurveyCard component is rendered at the bottom of the ticket chat in Information.offcanvas.vue when the ticket status is ACCEPTED or DECLINED.

Layout:

┌──────────────────────────────────────────┐
│  [User Name]          [Date]    [Badge]  │
│  ────────────── click to collapse ──────  │
│                                          │
│  "How would you rate this service?"      │
│  ★★★★☆                                  │
│                                          │
│  "Any additional comments?"              │
│  ┌────────────────────────────────────┐  │
│  │ Customer comment text              │  │
│  └────────────────────────────────────┘  │
│                                          │
│  Resolution Agent    Resolution Time     │
│  Agent Name          12h                 │
│                                          │
│  ── Admin Follow-up ──────────────────── │
│  Admin Name  ·  2026-04-11 10:00        │
│  ┌────────────────────────────────────┐  │
│  │ Admin follow-up comment text       │  │
│  └────────────────────────────────────┘  │
└──────────────────────────────────────────┘

Features:

  • Collapsible card (expanded by default)
  • Star rating display using vue-star-rating
  • Customer comment with fallback text when empty
  • Resolution agent name and hours to resolution
  • Admin follow-up section (only shown if a follow-up exists)

Props:

PropTypeRequiredDescription
detailsObjectYesRating details object from GET /csat/ticket/{ticketId}

Data Loading:

  • CSAT data is lazy-loaded only when the ticket has a terminal status (ACCEPTED or DECLINED)
  • The Information.offcanvas.vue component calls csat.getByTicketId(ticketId) and renders CsatSurveyCard only if data is returned

Service Layer

client/src/services/csat.service.js
MethodHTTPPathDescription
getTableInfo(filters)GET/csatFetches paginated ratings for the DataTable
getDetailsInfo(id)GET/csat/{id}Fetches single rating details
getByTicketId(ticketId)GET/csat/ticket/{ticketId}Fetches rating by ticket ID (for inline card)
saveComment(comments, ratingId)POST/csat/commentsCreates admin follow-up comment
updateComment(comments, ratingId)PUT/csat/commentsUpdates admin follow-up comment
getAgentsList()GET/csat/agents/listFetches agent list for filters

Module-Specific Components

ComponentLocationDescription
CsatSurveyCardviews/ticketsV2/components/CsatSurveyCard.vueInline survey card displayed in ticket chat for terminal-status tickets

The module otherwise reuses shared components: DataTable, DropdownAction, Company, Carrier, TextBreaker, Status, StarRating.

User Flow: Reviewing a CSAT Rating

User Flow: Adding a Follow-up Comment

Envia Admin