Кабинет: поиск клиентов с подсказками, чистая страница документов, ширина настроек
Поиск клиентов (режим сотрудника): - поле поиска вынесено наверх страницы, рядом «Найти» и «Сбросить»; - браузер сам подсказывает выпадающим списком по мере ввода — договоры депозитария отдаются страницей в <datalist> (скриптов в кабинете нет, CSP остаётся строгой), список кэшируется в ядре на 10 минут; - по запросу фильтруются и учётки кабинета, и договоры депозитария, под формой показывается, сколько найдено; - шаблон LIKE экранируется, чтобы % и _ в номере договора означали себя. Документы: убраны пустое табло, «Мои заявки» и форма заказа документа — остался список готовых документов депозитария и пояснение, куда обращаться. Настройка: колонка сетки больше не растягивается широкой таблицей (min-width:0), у страницы пропал горизонтальный ползунок. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
+17
-3
@@ -72,6 +72,18 @@ func New(cfg Config) (*Server, error) {
|
||||
return strconv.FormatFloat(f, 'f', -1, 64)
|
||||
},
|
||||
"fmtmoney": fmtMoney,
|
||||
// Русское число: 1 договор, 2 договора, 5 договоров.
|
||||
"plural": func(n int, one, few, many string) string {
|
||||
w := many
|
||||
switch m100 := n % 100; {
|
||||
case m100 >= 11 && m100 <= 14:
|
||||
case n%10 == 1:
|
||||
w = one
|
||||
case n%10 >= 2 && n%10 <= 4:
|
||||
w = few
|
||||
}
|
||||
return strconv.Itoa(n) + " " + w
|
||||
},
|
||||
"fmtpct": func(f float64) string {
|
||||
s := strconv.FormatFloat(f, 'f', 2, 64)
|
||||
if f > 0 {
|
||||
@@ -911,7 +923,7 @@ func (s *Server) buildHandler() http.Handler {
|
||||
return
|
||||
}
|
||||
s.render(w, r, "documents", map[string]any{"Nav": "d", "Ready": out.Ready, "Requests": out.Requests,
|
||||
"Kinds": out.Kinds,
|
||||
"Kinds": out.Kinds, // форма заказа в клиентском виде скрыта; данные оставлены для API
|
||||
"From": time.Now().AddDate(0, -1, 0).Format("2006-01-02"), "To": time.Now().Format("2006-01-02")})
|
||||
})
|
||||
|
||||
@@ -1043,7 +1055,8 @@ func (s *Server) buildHandler() http.Handler {
|
||||
Name string `json:"name"`
|
||||
Securities int `json:"securities"`
|
||||
} `json:"depo"`
|
||||
DepoError string `json:"depo_error"`
|
||||
DepoError string `json:"depo_error"`
|
||||
Suggest []string `json:"suggest"`
|
||||
}
|
||||
search := strings.TrimSpace(r.URL.Query().Get("search"))
|
||||
path := "/api/lk/admin/clients"
|
||||
@@ -1055,7 +1068,8 @@ func (s *Server) buildHandler() http.Handler {
|
||||
return
|
||||
}
|
||||
s.render(w, r, "clients", map[string]any{"Nav": "a", "IsAdmin": true, "Clients": out.Clients,
|
||||
"Depo": out.Depo, "DepoError": out.DepoError, "Search": search})
|
||||
"Depo": out.Depo, "DepoError": out.DepoError, "Search": search,
|
||||
"Suggest": out.Suggest, "Found": len(out.Clients) + len(out.Depo)})
|
||||
})
|
||||
|
||||
// Администратор: войти в кабинет клиента
|
||||
|
||||
Reference in New Issue
Block a user