PageSourceSearch

https://reg-kursk.ru/build/assets/AdminUsers-DxSi-9OM.js

js reg-kursk.ru collected 2026-10-02 06:46:04 UTC 10,722 bytes, 1 lines download raw bytes

1import{b as G,r as g,u as M,j as e,H as W,a as j,t as x}from"./app-tjZ_-OOu.js";import{B as v}from"./badge-BR76Zdcf.js";import{B as p}from"./sonner-BnWx1Tnu.js";import{c as z,d as J}from"./card-Bi7Nimbe.js";import{C as K}from"./checkbox-JPf-aVVI.js";import{d as Q,e as V,D as X,a as Y,b as Z,f as $,c as ee}from"./dialog-D9nKO9Xa.js";import{E as se,a as ae,b as re,c as le,d as te,e as ie,f as ne}from"./empty-DAEfMa_H.js";import{I as F}from"./input-group-field-B6Hy38JP.js";import{L as w}from"./label-BgScZPhL.js";import{S as T}from"./submit-button-B0clHiGQ.js";import{S as ce}from"./switch-C-7bFgdE.js";import{c as de,T as oe,a as B,b as d,d as me,e as o}from"./table-VFGaZTg2.js";import{u as xe}from"./use-synced-state-CVPAMUlD.js";import{a as pe}from"./authenticated-app-layout-BfE-_pxu.js";import{P as he}from"./app-sidebar-menu-CqpU_i_z.js";import{A as ue}from"./admin-panel-B3HNSCwe.js";import{u as N,g as ge,h as je,i as be}from"./app-header-layout-XPwmcGh-.js";import"./app-ClMwVNe-.js";import"./check-C3mYSEdk.js";import"./input-group-DdsIsYlf.js";import"./textarea-BilhGg_-.js";import"./input-error-CsCZtzFi.js";import"./icons-gelrvuNW.js";import"./page-wrapper-CqNR-NwG.js";import"./dropdown-menu-CiZ8CgA8.js";import"./index-Cg0WxTnG.js";import"./visual-viewport-lock-Do1D7T0g.js";import"./avatar-i9ir4Wwt.js";function fe(t){if(!t)return"—";try{return new Date(t).toLocaleString("ru-RU")}catch{return t}}function ve({users:t,roles:U,filters:y}){const{auth:L}=G().props,R=L.user?.id??null,[S,k]=xe(y.search??""),[a,c]=g.useState(null),[h,m]=g.useState(!1),[_,C]=g.useState(!1),l=M({roles:[]}),i=M({max_id:""});g.useEffect(()=>{if(!a){l.reset(),l.clearErrors(),i.reset(),i.clearErrors();return}l.setData("roles",a.roles.map(s=>s.name)),l.clearErrors(),i.setData("max_id",a.max_id??""),i.clearErrors()},[a]);const u=(y.search??"").trim(),D=s=>{const r={},n=S.trim();return n&&(r.search=n),s&&s>1&&(r.page=s),Object.keys(r).length>0?N({query:r}):N()},H=s=>{s?.preventDefault(),m(!0),j.visit(D(),{preserveState:!0,preserveScroll:!0,only:["users","filters"],onFinish:()=>m(!1)})},E=()=>{k(""),m(!0),j.visit(N(),{preserveState:!0,preserveScroll:!0,only:["users","filters"],onFinish:()=>m(!1)})},I=s=>{m(!0),j.visit(D(s),{preserveState:!0,preserveScroll:!0,only:["users","filters"],onFinish:()=>m(!1)})},O=s=>{const r=l.data.roles;if(r.includes(s)){l.setData("roles",r.filter(n=>n!==s));return}l.setData("roles",[...r,s])},P=()=>{a&&(l.transform(s=>({roles:[...s.roles].sort()})),l.submit(ge(a),{preserveScroll:!0,onSuccess:()=>{x.success("Роли пользователя обновлены."),c(null)},onError:s=>{const r=Object.values(s)[0];x.error(typeof r=="string"&&r.length>0?r:"Не удалось обновить роли пользователя.")}}))},A=()=>{a&&i.submit(je(a),{preserveScroll:!0,onSuccess:()=>{const s=i.data.max_id.trim()===""?null:i.data.max_id.trim();c({...a,max_id:s}),x.success("Max ID пользователя обновлён.")},onError:s=>{const r=Object.values(s)[0];x.error(typeof r=="string"&&r.length>0?r:"Не удалось обновить Max ID пользователя.")}})},q=s=>{if(!a||_)return;const r=a.marketplace_enabled;c({...a,marketplace_enabled:s}),C(!0),j.put(be.url(a),{enabled:s},{preserveScroll:!0,onSuccess:()=>{x.success(s?"Маркетплейс включён для пользователя.":"Маркетплейс отключён для пользователя.")},onError:n=>{c(f=>f&&{...f,marketplace_enabled:r});const b=Object.values(n)[0];x.error(typeof b=="string"&&b.length>0?b:"Не удалось изменить доступ к маркетплейсу.")},onFinish:()=>C(!1)})};return e.jsxs(e.Fragment,{children:[e.jsx(W,{title:"Управление ролями"}),e.jsx(he,{title:"Администрирование",sidebarChildren:e.jsx(ue,{}),hideSidebarOnMobile:!0,children:e.jsxs("div",{className:"space-y-gos-12",children:[e.jsxs("div",{className:"space-y-gos-2",children:[e.jsx("h2",{className:"text-h3",children:"Пользователи и роли"}),e.jsx("p",{className:"text-plain-text text-interlineare",children:"Назначайте роли пользователям, управляйте Max ID, административным доступом и доступом к маркетплейсу."})]}),e.jsx(z,{children:e.jsx(J,{children:e.jsxs("form",{className:"space-y-gos-8",onSubmit:H,children:[e.jsx("div",{className:"grid grid-cols-1 gap-gos-8 md:grid-cols-2",children:e.jsx(F,{id:"admin-user-search",name:"admin-user-search",label:"Поиск",placeholder:"Email или имя",value:S,onChange:s=>k(s.target.value)})}),e.jsxs("div",{className:"flex flex-wrap gap-gos-4",children:[e.jsx(p,{type:"submit",disabled:h,children:"Найти"}),u?e.jsx(p,{type:"button",variant:"outline",onClick:E,disabled:h,children:"Сбросить"}):null]})]})})}),t.data.length===0?e.jsxs(se,{className:"border",children:[e.jsxs(ae,{children:[e.jsx(re,{children:e.jsx(le,{alt:""})}),e.jsx(te,{children:u?"Ничего не найдено":"Нет пользователей"}),e.jsx(ie,{children:u?"Попробуйте изменить параметры поиска или сбросить фильтры.":"Пользователи появятся здесь после регистрации."})]}),u?e.jsx(ne,{children:e.jsx(p,{type:"button",variant:"outline",onClick:E,disabled:h,children:"Сбросить фильтры"})}):null]}):e.jsxs("div",{className:"space-y-gos-8",children:[e.jsxs(de,{children:[e.jsx(oe,{children:e.jsxs(B,{children:[e.jsx(d,{className:"w-[1%]",children:"#"}),e.jsx(d,{children:"Пользователь"}),e.jsx(d,{className:"hidden md:table-cell",children:"Email"}),e.jsx(d,{className:"hidden lg:table-cell",children:"Max ID"}),e.jsx(d,{children:"Роли"}),e.jsx(d,{className:"hidden md:table-cell",children:"Маркетплейс"}),e.jsx(d,{className:"hidden lg:table-cell",children:"Дата регистрации"})]})}),e.jsx(me,{children:t.data.map((s,r)=>e.jsxs(B,{className:"cursor-pointer","data-test":`admin-user-row-${s.id}`,onClick:()=>c(s),children:[e.jsx(o,{className:"text-interlineare tabular-nums",children:(t.from??1)+r}),e.jsx(o,{className:"font-medium",children:s.name||"Без имени"}),e.jsx(o,{className:"hidden md:table-cell",children:s.email}),e.jsx(o,{className:"hidden lg:table-cell",children:s.max_id||e.jsx("span",{className:"text-interlineare",children:"—"})}),e.jsx(o,{children:e.jsx("div",{className:"flex flex-wrap gap-gos-3",children:s.roles.length>0?s.roles.map(n=>e.jsx(v,{variant:n.name==="admin"?"default":"secondary",children:n.name},n.id)):e.jsx("span",{className:"text-interlineare",children:"Без ролей"})})}),e.jsx(o,{className:"hidden md:table-cell",children:e.jsx(v,{variant:s.marketplace_enabled?"default":"secondary",children:s.marketplace_enabled?"Включён":"Выключен"})}),e.jsx(o,{className:"hidden lg:table-cell",children:fe(s.created_at)})]},s.id))})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-gos-6",children:[e.jsx(p,{type:"button",variant:"outline",onClick:()=>I(t.current_page-1),disabled:!t.prev_page_url||h,children:"Назад"}),e.jsxs("p",{className:"text-plain-small text-interlineare",children:["Страница ",t.current_page," из"," ",t.last_page]}),e.jsx(p,{type:"button",variant:"outline",onClick:()=>I(t.current_page+1),disabled:!t.next_page_url||h,children:"Далее"})]})]})]})}),e.jsx(Q,{open:a!==null,onOpenChange:s=>c(s?a:null),children:e.jsx(V,{className:"max-w-[720px]",children:a?e.jsxs(e.Fragment,{children:[e.jsxs(X,{children:[e.jsx(Y,{children:"Управление пользователем"}),e.jsxs(Z,{children:[a.name||"Без имени"," •"," ",a.email]})]}),e.jsxs($,{className:"space-y-gos-8",children:[e.jsxs("div",{className:"space-y-gos-4 rounded-gos-6 border border-ciottoli p-gos-8",children:[e.jsxs("div",{className:"space-y-gos-2",children:[e.jsx("p",{className:"text-plain-small-bold",children:"Max ID"}),e.jsx("p",{className:"text-plain-small text-interlineare",children:"Идентификатор пользователя в партнёрском API тикетов."})]}),e.jsx(F,{id:`max-id-${a.id}`,name:"max_id",label:"Max ID",placeholder:"Например, max-123",value:i.data.max_id,onChange:s=>i.setData("max_id",s.target.value),error:i.errors.max_id}),e.jsx("div",{className:"flex justify-end",children:e.jsx(T,{isLoading:i.processing,onClick:A,disabled:l.processing,children:"Сохранить Max ID"})})]}),e.jsxs("div",{className:"flex items-center justify-between gap-gos-8 rounded-gos-6 border border-ciottoli p-gos-8",children:[e.jsxs("div",{className:"space-y-gos-2",children:[e.jsx(w,{htmlFor:`marketplace-${a.id}`,className:"text-plain-small-bold",children:"Маркетплейс"}),e.jsx("p",{className:"text-plain-small text-interlineare",children:"Доступ к функциям маркетплейса для этого пользователя."})]}),e.jsx(ce,{id:`marketplace-${a.id}`,"data-test":"user-marketplace-toggle",checked:a.marketplace_enabled,disabled:_,onCheckedChange:q})]}),e.jsxs("div",{className:"rounded-gos-6 border border-ciottoli p-gos-8",children:[e.jsx("p",{className:"text-plain-small text-interlineare",children:"Текущие роли"}),e.jsx("div",{className:"mt-gos-4 flex flex-wrap gap-gos-3",children:a.roles.length>0?a.roles.map(s=>e.jsx(v,{variant:s.name==="admin"?"default":"secondary",children:s.name},s.id)):e.jsx("span",{className:"text-interlineare",children:"У пользователя пока нет ролей"})})]}),e.jsxs("div",{className:"space-y-gos-4 rounded-gos-6 border border-ciottoli p-gos-8",children:[e.jsx("p",{className:"text-plain-small-bold",children:"Управление ролями"}),e.jsx("div",{className:"space-y-gos-4",children:U.map(s=>{const r=l.data.roles.includes(s.name),n=a.id===R&&s.name==="admin"&&r;return e.jsxs("div",{className:"flex items-center gap-gos-8",children:[e.jsx(K,{id:`role-${a.id}-${s.id}`,checked:r,disabled:n,onCheckedChange:()=>O(s.name)}),e.jsx(w,{htmlFor:`role-${a.id}-${s.id}`,className:"flex-1 cursor-pointer",children:s.name}),n?e.jsx("span",{className:"text-plain-small text-interlineare",children:"Нельзя снять с себя admin"}):null]},s.id)})}),l.errors.roles?e.jsx("p",{className:"text-plain-small text-destructive",children:l.errors.roles}):null]})]}),e.jsxs(ee,{children:[e.jsx(p,{type:"button",variant:"outline",onClick:()=>c(null),disabled:l.processing||i.processing,children:"Закрыть"}),e.jsx(T,{isLoading:l.processing,onClick:P,disabled:i.processing,children:"Сохранить роли"})]})]}):null})})]})}ve.layout=pe;export{ve as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.