<%+cbi/valueheader%> <% -- Template Developers: -- - lwb1978 -- Copyright: copyright(c)2025–2027 -- Description: Passwall(2) UI template local json = require "luci.jsonc" local cbid = "cbid." .. self.config .. "." .. section .. "." .. self.option -- 读取 MultiValue local values = {} for i, key in pairs(self.keylist) do values[#values + 1] = { key = key, label = self.vallist[i] or key, group = self.group and self.group[i] or nil } end -- 获取选中值 local selected = {} local cval = self:cfgvalue(section) if type(cval) == "table" then for _, v in pairs(cval) do selected[v] = true end elseif type(cval) == "string" then for v in cval:gmatch("%S+") do selected[v] = true end end -- 按原顺序分组 local groups = {} local group_order = {} for _, item in ipairs(values) do local g = item.group if not g or g == "" then g = translate("default") end if not groups[g] then groups[g] = {} table.insert(group_order, g) end table.insert(groups[g], item) end local total_count = #values local selected_count = 0 for _, item in ipairs(values) do if selected[item.key] then selected_count = selected_count + 1 end end local function idSafe(id) return (id :gsub("^%s+", "") :gsub("%s+$", "") :gsub("%s+", "-") :gsub("[%z\1-\31\127]", "") ) end %>
<%:Selected:%> <%=selected_count%>/<%=total_count%>
<%+cbi/valuefooter%>