That's a known LuCI bug, see https://github.com/openwrt/luci/issues/4370. My proposed patch wasn't accepted long time ago ...
If you want to use/test my patched version, just save the code below as map.htm
and copy/overwrite it to /usr/lib/lua/luci/view/cbi/map.htm
<%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%>
<div class="alert-message warning"><%=pcdata(msg)%></div>
<%- end end -%>
<% if firstmap and readable then %>
<div class="cbi-map" id="cbi-<%=self.config%>"<%=ifattr(not writable, "style", "opacity:.6; pointer-events:none")%>>
<% if self.title and #self.title > 0 then %>
<h2 name="content"><%=self.title%></h2>
<% end %>
<% if self.description and #self.description > 0 then %>
<div class="cbi-map-descr"><%=self.description%></div>
<% end %>
<% if self.tabbed then %>
<div>
<% for i, section in ipairs(self.children) do
tab = section.section or section.sectiontype %>
<div class="cbi-tabcontainer"<%=
attr("id", "container.m-%s.%s" %{ self.config, tab }) ..
attr("data-tab", tab) ..
attr("data-tab-title", section.title or tab)
%>>
<% section:render() %>
</div>
<% end %>
</div>
<% if not self.save then -%>
<div class="cbi-section-error">
<% for _, section in ipairs(self.children) do %>
<% if section.error and section.error[section.section] then -%>
<ul><li>
<%:One or more invalid/required values on tab%>: <%=section.title or section.section or section.sectiontype%>
</li></ul>
<%- end %>
<% end %>
</div>
<%- end %>
<% else %>
<%- self:render_children() %>
<% end %>
</div>
<% elseif firstmap then %>
<div class="alert-message warning"><%:Insufficient permissions to read UCI configuration.%></div>
<% end %>