react-toolkits 2.25.0 → 2.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +5 -5
- package/lib/chunk-24U2EF5M.js +2 -0
- package/lib/chunk-24U2EF5M.js.map +1 -0
- package/lib/{chunk-GI5OS4VD.js → chunk-5QAEUAZE.js} +2 -2
- package/lib/{chunk-GI5OS4VD.js.map → chunk-5QAEUAZE.js.map} +1 -1
- package/lib/chunk-D5YXBSTI.js +2 -0
- package/lib/chunk-D5YXBSTI.js.map +1 -0
- package/lib/chunk-F2GDEOP4.js +3 -0
- package/lib/chunk-F2GDEOP4.js.map +1 -0
- package/lib/{chunk-742NAY4S.js → chunk-FIT6S4UM.js} +2 -2
- package/lib/{chunk-742NAY4S.js.map → chunk-FIT6S4UM.js.map} +1 -1
- package/lib/chunk-JDCSIJL7.js +2 -0
- package/lib/chunk-JDCSIJL7.js.map +1 -0
- package/lib/chunk-KZHYK554.js +2 -0
- package/lib/chunk-KZHYK554.js.map +1 -0
- package/lib/chunk-MVG7YFPB.js +2 -0
- package/lib/chunk-MVG7YFPB.js.map +1 -0
- package/lib/chunk-P5T74EXP.js +2 -0
- package/lib/{chunk-PLJPZJ7T.js.map → chunk-P5T74EXP.js.map} +1 -1
- package/lib/{createMenuItem-C7HUFDD4.js → createMenuItem-Q5TJGFKZ.js} +2 -2
- package/lib/{createMenuItem-C7HUFDD4.js.map → createMenuItem-Q5TJGFKZ.js.map} +1 -1
- package/lib/index.d.ts +83 -40
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/{menuItemList-2OFNRCPR.js → menuItemList-5QGQYB3N.js} +2 -2
- package/lib/{menuItemList-2OFNRCPR.js.map → menuItemList-5QGQYB3N.js.map} +1 -1
- package/lib/{roleDetail-YBO7TOL5.js → roleDetail-ODJVDVB4.js} +2 -2
- package/lib/{roleDetail-YBO7TOL5.js.map → roleDetail-ODJVDVB4.js.map} +1 -1
- package/lib/roleList-ATJYWJ6Q.js +2 -0
- package/lib/roleList-ATJYWJ6Q.js.map +1 -0
- package/lib/{updateMenuItem-23ZR4X2P.js → updateMenuItem-4HDRJAY7.js} +2 -2
- package/lib/{updateMenuItem-23ZR4X2P.js.map → updateMenuItem-4HDRJAY7.js.map} +1 -1
- package/lib/userDetail-B5H4A4X2.js +2 -0
- package/lib/userDetail-B5H4A4X2.js.map +1 -0
- package/lib/userList-7CQLR3HK.js +2 -0
- package/lib/userList-7CQLR3HK.js.map +1 -0
- package/locale/hooks.js +1 -1
- package/locale/hooks.js.map +1 -1
- package/package.json +12 -12
- package/lib/chunk-EESZYCYA.js +0 -2
- package/lib/chunk-EESZYCYA.js.map +0 -1
- package/lib/chunk-K43HSNXS.js +0 -2
- package/lib/chunk-K43HSNXS.js.map +0 -1
- package/lib/chunk-LEVOCZUQ.js +0 -2
- package/lib/chunk-LEVOCZUQ.js.map +0 -1
- package/lib/chunk-PLJPZJ7T.js +0 -2
- package/lib/chunk-V3YBDED3.js +0 -2
- package/lib/chunk-V3YBDED3.js.map +0 -1
- package/lib/chunk-VFRB44XY.js +0 -2
- package/lib/chunk-VFRB44XY.js.map +0 -1
- package/lib/chunk-W3E3WPLB.js +0 -3
- package/lib/chunk-W3E3WPLB.js.map +0 -1
- package/lib/roleList-UEZPNJ2L.js +0 -2
- package/lib/roleList-UEZPNJ2L.js.map +0 -1
- package/lib/userDetail-QZDRSIYE.js +0 -2
- package/lib/userDetail-QZDRSIYE.js.map +0 -1
- package/lib/userList-IBXB6M6R.js +0 -2
- package/lib/userList-IBXB6M6R.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"yGAmBO,SAASA,CAAAA,EAAiB,CAC/B,IAAMC,CAAAA,CAASC,EAAiBC,CAAAA,EAASA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OAAAA,CACR,IAAM,CAACC,CAAAA,CAAoBC,CAAAA,GACzBC,IAAIN,CAAAA,CAAQI,CAAG,EAAIG,QAAAA,CAASC,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-VFRB44XY.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
|
package/lib/chunk-W3E3WPLB.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import {create,useStore,createStore}from'zustand';import {App}from'antd';import {createContext,useContext,useRef,useMemo}from'react';import {persist,createJSONStorage}from'zustand/middleware';import {jwtDecode}from'jwt-decode';import {jsx,Fragment}from'react/jsx-runtime';import {useQueryClient}from'@tanstack/react-query';import le from'ky';import {useNavigate}from'react-router-dom';function j(){return create()((e,t)=>({open:new Map,usedIds:new Set,isOpen(s){return t().open.get(s)??false},show(s){e({open:new Map(t().open).set(s,true)});},hide(s){e({open:new Map(t().open).set(s,false)});},hideAll(){e({open:new Map});},checkUniqueness(s){return !t().usedIds.has(s)},registerIds(s){let{usedIds:i}=t();return i.has(s)?false:(e({usedIds:new Set(i).add(s)}),true)},cleanup(s){let{open:i,usedIds:n}=t(),a=new Map(i),d=new Set(n);a.delete(s),d.delete(s),e({open:a,usedIds:d});}}))}var H=0,z=()=>{let e=Date.now(),t=Math.floor(Math.random()*1e3),s=++H%1e3;return e*1e6+t*1e3+s};var b={getItem(e){return sessionStorage.getItem(e)??localStorage.getItem(e)},setItem(e,t){sessionStorage.setItem(e,t),localStorage.setItem(e,t);},removeItem(e){sessionStorage.removeItem(e),localStorage.removeItem(e);}};var Ae="https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1",y="App-ID",qe="/console/",w=(n=>(n.V1="v1",n.V2="v2",n.V3="v3",n.V4="v4",n))(w||{}),De="*";var W={global:{noEntitlement:"\u65E0\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",name:"\u540D\u79F0",creationTime:"\u521B\u5EFA\u65F6\u95F4",operation:"\u64CD\u4F5C",update:"\u66F4\u65B0",edit:"\u7F16\u8F91",delete:"\u5220\u9664",selectAll:"\u5168\u9009",game:"\u6E38\u620F",user:"\u7528\u6237",role:"\u89D2\u8272",username:"\u7528\u6237\u540D",password:"\u5BC6\u7801",label:"\u6807\u7B7E",method:"\u65B9\u6CD5",route:"\u8DEF\u7531",request:"\u8BF7\u6C42",response:"\u54CD\u5E94",add:"\u6DFB\u52A0",signIn:"\u767B\u5F55",projectGroup:"\u9879\u76EE\u7EC4",view:"\u67E5\u770B",back:"\u8FD4\u56DE"},SignIn:{title:"\u767B\u5F55\u65B9\u5F0F",signInWithIDass:"IDass \u767B\u5F55",unregistered:"\u60A8\u8FD8\u672A\u5728\u5E73\u53F0\u6CE8\u518C\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458",welcome:"\u6B22\u8FCE"},NotFound:{subTitle:"\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728",buttonText:"\u8FD4\u56DE\u9996\u9875"},FilterFormWrapper:{confirmText:"\u67E5\u8BE2",resetText:"\u91CD\u7F6E"},FormModal:{confirmText:"\u786E\u8BA4",cancelText:"\u53D6\u6D88"},GameSelect:{label:"\u5F53\u524D\u6E38\u620F",placeholder:"\u8BF7\u9009\u62E9\u6E38\u620F"},RequireGame:{description:"\u8BF7\u9009\u62E9\u6E38\u620F"},UserDropdown:{signOutText:"\u767B\u51FA"},User:{createTitle:"\u521B\u5EFA\u7528\u6237",createSuccessfully:"\u7528\u6237\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u7528\u6237",updateSuccessfully:"\u7528\u6237\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u7528\u6237",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u7528\u6237 <%= user %> \u5417\uFF1F",deleteSuccessfully:"\u7528\u6237\u5220\u9664\u6210\u529F"},Role:{createTitle:"\u521B\u5EFA\u89D2\u8272",createSuccessfully:"\u89D2\u8272\u521B\u5EFA\u6210\u529F",updateTitle:"\u66F4\u65B0\u89D2\u8272",updateSuccessfully:"\u89D2\u8272\u66F4\u65B0\u6210\u529F",deleteTitle:"\u5220\u9664\u89D2\u8272",deleteContent:"\u786E\u5B9A\u8981\u5220\u9664\u89D2\u8272 <%= role %> \u5417\uFF1F",deleteSuccessfully:"\u89D2\u8272\u5220\u9664\u6210\u529F"},PermissionList:{failedDescription:"\u83B7\u53D6\u6743\u9650\u5217\u8868\u5931\u8D25",baseSectionTitle:"\u5E73\u53F0\u57FA\u7840\u6743\u9650",gameSectionTitle:"\u6E38\u620F\u6743\u9650",gameSectionDescription:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",gameSelectPlaceholder:"\u8BF7\u5148\u9009\u62E9\u6E38\u620F",removeText:"\u79FB\u9664",addText:"\u6DFB\u52A0\u6E38\u620F\u6743\u9650"},RoleDetail:{title:"\u89D2\u8272\u8BE6\u60C5"},InfiniteList:{loadingText:"\u52A0\u8F7D\u4E2D",reachEndText:"\u5DF2\u7ECF\u5230\u5E95\u4E86",loadMoreText:"\u52A0\u8F7D\u66F4\u591A"}},E=W;var U=()=>({locale:E,useGameApiV2:false,isGlobalMode:false,requireGameSelection:false,loginPath:"/sign_in",homePath:"/",permissionVersion:"v1"});var A=e=>({setAppId:t=>e({appId:t})});var q=e=>({collapsed:false,toggleCollapsed:()=>e(t=>({collapsed:!t.collapsed}))});var X=e=>{if(!e)return null;try{return jwtDecode(e)}catch{return null}},D=e=>({token:void 0,user:null,setToken:t=>e({token:t,user:X(t)}),clearToken:()=>e({token:void 0,user:null})});var G=e=>createStore()(persist((...t)=>{let[,s,i]=t;return {...D(...t),...A(...t),...U(...t),...q(...t),...e,clear:()=>{s().clearToken(),i.persist.clearStorage();}}},{name:"toolkits",storage:createJSONStorage(()=>b),partialize:({token:t,appId:s,user:i,collapsed:n})=>({token:t,appId:s,user:i,collapsed:n})}));var P=createContext(null);function C(e){let t=useContext(P);if(!t){let i=new Error().stack?.split(`
|
|
2
|
-
`)[2]?.trim()||"Unknown";throw new Error(`Missing ToolkitsProvider in the tree. Component "${i}" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`)}return useStore(t,e??(s=>s))}var se=e=>{let{children:t,...s}=e,i=useRef(void 0),a=useContext(P)?.getState();if(!i.current){let d=a?{locale:a.locale,permissionVersion:a.permissionVersion,useGameApiV2:a.useGameApiV2,loginPath:a.loginPath,isGlobalMode:a.isGlobalMode,requireGameSelection:a.requireGameSelection,sidebarWidth:a.sidebarWidth,sidebarCollapsible:a.sidebarCollapsible,homePath:a.homePath,apiBaseUrl:a.apiBaseUrl}:{};i.current=G({...d,...s});}if(!i.current.getState().loginPath)throw new Error('ToolkitsProvider: \u8BF7\u914D\u7F6E "loginPath"');return jsx(P.Provider,{value:i.current,children:jsx(App,{children:jsx(Fragment,{children:t})})})},re=se;var v=[0,1,200],g={OK:200,UNAUTHORIZED:401,FORBIDDEN:403,UNREGISTERED:412},pe=3e4;var F=e=>!e||typeof e!="object"?"Unknown error":e.msg||e.message||e.error||"Unknown error",de=e=>{let{value:t,allowedCodes:s}=e;return t==null||typeof t!="number"?false:s.includes(t)},me=(e,t)=>{if(t<g.OK||t>=300)return false;if(!e||typeof e!="object")return true;let s=[{field:"code",value:e.code,allowedCodes:v},{field:"status",value:e.status,allowedCodes:v},{field:"errno",value:e.errno,allowedCodes:v}];return s.some(n=>n.value!==void 0&&n.value!==null)?s.every(n=>n.value===void 0||n.value===null||de(n)):true},Te=async(e,t)=>{switch(t){case "blob":return e.blob();case "text":return e.text();case "arrayBuffer":return e.arrayBuffer();case "formData":return e.formData();case "json":default:return e.json()}},fe=e=>{let{baseURL:t}=e||{},{notification:s}=App.useApp(),i=useNavigate(),n=useQueryClient(),{token:a,isGlobalMode:d,appId:h,permissionVersion:O,loginPath:S,clear:k,apiBaseUrl:I}=C(),L=()=>{k(),n.clear(),i(S);},N=()=>{if(k(),n.clear(),S){let o=new URL(S,window.location.origin);o.searchParams.set("unregistered","true"),i(o.toString());}},V=()=>{s.error({message:"\u8BBF\u95EE\u88AB\u7981\u6B62",description:"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u8D44\u6E90\u3002"});},_=o=>async(r,l,c)=>{if(o==="blob"||o==="arrayBuffer"||o==="text"||o==="formData")return c;let u;try{u=await c.clone().json();}catch{return c}if(me(u,c.status)){let f=u.data!==void 0?u.data:u;return new Response(JSON.stringify(f),{status:c.status,statusText:c.statusText,headers:c.headers})}let m=F(u);s.error({message:"Request failed",description:m});let T=new Error(m);throw T.response=c,T.data=u,T},B=(o,r)=>{switch(o){case g.UNAUTHORIZED:L();break;case g.UNREGISTERED:N();break;case g.FORBIDDEN:V();break;default:{let l=F(r)||`HTTP ${o} Error`;s.error({message:"Request failed",description:l});break}}},R=useMemo(()=>le.create({prefixUrl:t??I,retry:0,timeout:pe,headers:{Accept:"application/json","Content-Type":"application/json"},hooks:{beforeRequest:[o=>{a&&o.headers.set("Authorization",`Bearer ${a}`),!o.headers.has(y)&&O!=="v1"&&(d||!h?o.headers.set(y,"global"):o.headers.set(y,encodeURIComponent(String(h))));}],beforeError:[async o=>{let{response:r}=o;if(r){let l=r.status,c;try{let u=r.headers.get("content-type")||"";(u.includes("application/json")||u.startsWith("text/"))&&(c=await r.clone().json());}catch{}B(l,c);}else s.error({message:"Network Error",description:o.message||"Network request failed"});return o}]}}),[t,a,d,h,O,s,S,k,n,I]),p=async(o,r,l,c)=>{let{responseType:u,...m}=c||{},T={...m,hooks:{...m.hooks,afterResponse:[...m.hooks?.afterResponse||[],_(u)]}},f;return l?f=await R(r,{method:o,json:l,...T}):f=await R(r,{method:o,...T}),Te(f,u)};return {get:(o,r)=>p("GET",o,void 0,r),post:(o,r,l)=>p("POST",o,r,l),put:(o,r,l)=>p("PUT",o,r,l),delete:(o,r)=>p("DELETE",o,void 0,r),patch:(o,r,l)=>p("PATCH",o,r,l),options:(o,r)=>p("OPTIONS",o,void 0,r),head:(o,r)=>p("HEAD",o,void 0,r),request:o=>{let{url:r,...l}=o;return p(l.method||"GET",r,void 0,l)},instance:R}};var ft={permissions:{check:(e,t)=>["permissions","check",e,t],allPermissions:["permissions","all"],allPermissionsV2:["permissions","allV2"]},users:{all:["users"],detail:e=>["users","detail",e],create:["users","create"],update:["users","update"],delete:["users","delete"]},roles:{all:["roles"],detail:(e,t)=>["roles","detail",e,t],create:e=>["roles","create",e],update:e=>["roles","update",e],delete:["roles","delete"]},menus:{all:["menus"],navbar:e=>["menus","navbar",e],detail:e=>["menus","detail",e],create:["menus","create"],update:["menus","update"],delete:["menus","delete"]},enums:{gameGroups:["enums","gameGroups"],gameIds:e=>["enums","gameIds",e]},games:{all:["games","all"]},auth:{ticketLogin:e=>["auth","ticket-login",e]}};export{j as a,z as b,b as c,Ae as d,y as e,qe as f,w as g,De as h,C as i,re as j,fe as k,ft as l};//# sourceMappingURL=chunk-W3E3WPLB.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-W3E3WPLB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/createVisibilityStore.ts","../src/utils/generateId.ts","../src/utils/mixedStorage.ts","../src/constants/index.ts","../src/locale/zh_CN.ts","../src/stores/context.ts","../src/stores/game.ts","../src/stores/layout.ts","../src/stores/token.ts","../src/stores/index.ts","../src/components/toolkitsProvider/ToolkitsProvider.tsx","../src/libs/ky.ts","../src/queryKeys.ts"],"names":["createVisibilityStore","create","set","get","uuid","usedIds","open","newOpen","newUsedIds","globalCounter","generateId","timestamp","random","counter","mixedStorage","name","value","SSO_URL","APP_ID_HEADER","FRONTEND_ROUTE_PREFIX","PermissionVersion","WILDCARD","locale","zh_CN_default","createContextSlice","createGameSlice","id","createLayoutSlice","state","decodeToken","token","jwtDecode","createTokenSlice","createToolkitsStore","initProps","createStore","persist","args","store","createJSONStorage","appId","user","collapsed","ToolkitsContext","createContext","useToolkitsStore","selector","useContext","componentName","useStore","ToolkitsProvider","props","children","restProps","storeRef","useRef","parentState","parentContext","jsx","App","Fragment","ToolkitsProvider_default","SUCCESS_RESPONSE_CODES","HTTP_STATUS","REQUEST_TIMEOUT","extractErrorMessage","data","isStatusCodeSuccess","config","allowedCodes","isSuccessResponse","status","statusChecks","processResponseByType","response","responseType","useKy","baseURL","notification","navigate","useNavigate","queryClient","useQueryClient","isGlobalMode","permissionVersion","loginPath","clear","apiBaseUrl","handleUnauthorized","handleUnregistered","url","handleForbidden","createResponseHandler","_request","_options","responseData","errorMessage","error","handleHttpStatusError","instance","useMemo","ky","request","contentType","makeRequest","method","requestOptions","kyOptions","finalOptions","options","requestOpts","queryKeys","permissions","version","gameGroups","ticket"],"mappings":"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","file":"chunk-W3E3WPLB.js","sourcesContent":["import { create } from 'zustand'\n\nexport interface VisibilityState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\n/**\n * 创建一个可见性管理的 Zustand store\n * 用于管理 Modal、Drawer 等组件的显示/隐藏状态\n * 每次调用都会创建一个独立的 store 实例,确保不同组件间的状态隔离\n */\nexport function createVisibilityStore() {\n return create<VisibilityState>()((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen(uuid) {\n return get().open.get(uuid) ?? false\n },\n show(uuid) {\n set({ open: new Map(get().open).set(uuid, true) })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n return !get().usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) return false\n\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n }))\n}\n","/**\n * 生成唯一 ID 的函数\n * 使用时间戳 + 随机数 + 计数器的组合来确保唯一性\n */\nlet globalCounter = 0\n\nexport const generateId = (): number => {\n const timestamp = Date.now()\n const random = Math.floor(Math.random() * 1000)\n const counter = ++globalCounter % 1000\n\n // 组合:时间戳(毫秒) * 1000000 + 随机数 * 1000 + 计数器\n // 这样可以确保即使在同一毫秒内生成多个ID也不会重复\n return timestamp * 1000000 + random * 1000 + counter\n}\n","import type { StateStorage } from 'zustand/middleware'\n\n/**\n * 混合存储策略\n * - 优先从 SessionStorage 读取数据,防止多开页面时的数据冲突\n * - 写入时同时更新 SessionStorage 和 LocalStorage\n * - SessionStorage 不存在时,fallback 到 LocalStorage\n */\nexport const mixedStorage: StateStorage = {\n getItem(name) {\n return sessionStorage.getItem(name) ?? localStorage.getItem(name)\n },\n setItem(name, value) {\n sessionStorage.setItem(name, value)\n localStorage.setItem(name, value)\n },\n removeItem(name) {\n sessionStorage.removeItem(name)\n localStorage.removeItem(name)\n },\n}\n","export const SSO_URL = 'https://idaas.ifunplus.cn/enduser/api/application/plugin_FunPlus/sso/v1'\n\nexport const APP_ID_HEADER = 'App-ID'\n\nexport const FRONTEND_ROUTE_PREFIX = '/console/'\n\nexport enum PermissionVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n V4 = 'v4',\n}\n\nexport const WILDCARD = '*'\n","import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: '无权限,请联系管理员',\n name: '名称',\n creationTime: '创建时间',\n operation: '操作',\n update: '更新',\n edit: '编辑',\n delete: '删除',\n selectAll: '全选',\n game: '游戏',\n user: '用户',\n role: '角色',\n username: '用户名',\n password: '密码',\n label: '标签',\n method: '方法',\n route: '路由',\n request: '请求',\n response: '响应',\n add: '添加',\n signIn: '登录',\n projectGroup: '项目组',\n view: '查看',\n back: '返回',\n },\n SignIn: {\n title: '登录方式',\n signInWithIDass: 'IDass 登录',\n unregistered: '您还未在平台注册,请联系管理员',\n welcome: '欢迎',\n },\n NotFound: {\n subTitle: '访问的页面不存在',\n buttonText: '返回首页',\n },\n FilterFormWrapper: {\n confirmText: '查询',\n resetText: '重置',\n },\n FormModal: {\n confirmText: '确认',\n cancelText: '取消',\n },\n GameSelect: {\n label: '当前游戏',\n placeholder: '请选择游戏',\n },\n RequireGame: {\n description: '请选择游戏',\n },\n UserDropdown: {\n signOutText: '登出',\n },\n User: {\n createTitle: '创建用户',\n createSuccessfully: '用户创建成功',\n updateTitle: '更新用户',\n updateSuccessfully: '用户更新成功',\n deleteTitle: '删除用户',\n deleteContent: '确定要删除用户 <%= user %> 吗?',\n deleteSuccessfully: '用户删除成功',\n },\n Role: {\n createTitle: '创建角色',\n createSuccessfully: '角色创建成功',\n updateTitle: '更新角色',\n updateSuccessfully: '角色更新成功',\n deleteTitle: '删除角色',\n deleteContent: '确定要删除角色 <%= role %> 吗?',\n deleteSuccessfully: '角色删除成功',\n },\n PermissionList: {\n failedDescription: '获取权限列表失败',\n baseSectionTitle: '平台基础权限',\n gameSectionTitle: '游戏权限',\n gameSectionDescription: '请先选择游戏',\n gameSelectPlaceholder: '请先选择游戏',\n removeText: '移除',\n addText: '添加游戏权限',\n },\n RoleDetail: {\n title: '角色详情',\n },\n InfiniteList: {\n loadingText: '加载中',\n reachEndText: '已经到底了',\n loadMoreText: '加载更多',\n },\n}\n\nexport default locale\n","import type { StateCreator } from 'zustand'\n\nimport { PermissionVersion } from '@/constants'\nimport type { Locale } from '@/locale'\nimport zhCN from '@/locale/zh_CN'\n\nexport interface ContextSlice {\n locale: Locale\n permissionVersion: PermissionVersion // 权限版本\n useGameApiV2: boolean // 是否使用游戏 API V2 版本\n loginPath: string // 登录页路径\n isGlobalMode: boolean // 为 true 时,APP-ID header 始终使用 'global',否则为当前游戏 id\n requireGameSelection?: boolean // 是否需要游戏选择,默认为 false\n sidebarWidth?: number // 侧边栏宽度\n sidebarCollapsible?: boolean // 侧边栏是否可折叠\n homePath: string // 首页地址\n apiBaseUrl?: string // 接口基础路径\n}\n\nexport const createContextSlice: StateCreator<ContextSlice, [], [], ContextSlice> = () => ({\n locale: zhCN,\n useGameApiV2: false,\n isGlobalMode: false,\n requireGameSelection: false,\n loginPath: '/sign_in',\n homePath: '/',\n permissionVersion: PermissionVersion.V1,\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface GameSlice {\n appId?: string | number\n setAppId: (id?: string | number) => void\n}\n\nexport const createGameSlice: StateCreator<GameSlice, [], [], GameSlice> = set => ({\n setAppId: id => set({ appId: id }),\n})\n","import type { StateCreator } from 'zustand'\n\nexport interface LayoutSlice {\n collapsed: boolean // 侧边栏是否折叠\n toggleCollapsed: () => void\n}\n\nexport const createLayoutSlice: StateCreator<LayoutSlice, [], [], LayoutSlice> = set => ({\n collapsed: false,\n toggleCollapsed: () => set(state => ({ collapsed: !state.collapsed })),\n})\n","import { jwtDecode } from 'jwt-decode'\nimport type { StateCreator } from 'zustand'\n\n/**\n * JWT Token 解码后的用户信息\n */\nexport interface UserInfo {\n authorityId: string\n exp: number\n}\n\nexport interface TokenSlice {\n /** JWT Token */\n token?: string\n user: UserInfo | null\n setToken: (token: string) => void\n clearToken: () => void\n}\n\nconst decodeToken = (token?: string): UserInfo | null => {\n if (!token) return null\n\n try {\n return jwtDecode<UserInfo>(token)\n } catch {\n return null\n }\n}\n\nexport const createTokenSlice: StateCreator<TokenSlice, [], [], TokenSlice> = set => ({\n token: undefined,\n user: null,\n setToken: token => set({ token, user: decodeToken(token) }),\n clearToken: () => set({ token: undefined, user: null }),\n})\n","import { createStore } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nimport { mixedStorage } from '@/utils'\n\nimport { type ContextSlice, createContextSlice } from './context'\nimport { createGameSlice, type GameSlice } from './game'\nimport { createLayoutSlice, type LayoutSlice } from './layout'\nimport { createTokenSlice, type TokenSlice } from './token'\n\nexport type ToolkitsState = TokenSlice &\n GameSlice &\n ContextSlice &\n LayoutSlice & {\n clear: () => void\n }\n\nexport const createToolkitsStore = (initProps?: Partial<ContextSlice>) => {\n return createStore<ToolkitsState>()(\n persist(\n (...args) => {\n const [, get, store] = args\n return {\n ...createTokenSlice(...args),\n ...createGameSlice(...args),\n ...createContextSlice(...args),\n ...createLayoutSlice(...args),\n ...initProps,\n clear: () => {\n get().clearToken()\n store.persist.clearStorage()\n },\n }\n },\n {\n name: 'toolkits',\n storage: createJSONStorage(() => mixedStorage),\n partialize: ({ token, appId, user, collapsed }) => ({\n token,\n appId,\n user,\n collapsed,\n }),\n },\n ),\n )\n}\n","import { App } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { createContext, useContext, useRef } from 'react'\nimport { useStore } from 'zustand'\n\nimport type { ToolkitsState } from '@/stores'\nimport { createToolkitsStore } from '@/stores'\nimport type { ContextSlice } from '@/stores/context'\n\ntype ToolkitsStore = ReturnType<typeof createToolkitsStore>\n\nconst ToolkitsContext = createContext<ToolkitsStore | null>(null)\n\n// 重载函数签名:支持有 selector 和无 selector 两种调用方式\nexport function useToolkitsStore(): ToolkitsState\nexport function useToolkitsStore<T>(selector: (state: ToolkitsState) => T): T\nexport function useToolkitsStore<T>(selector?: (state: ToolkitsState) => T) {\n const store = useContext(ToolkitsContext)\n if (!store) {\n const componentStack = new Error().stack\n const componentName = componentStack?.split('\\n')[2]?.trim() || 'Unknown'\n throw new Error(\n `Missing ToolkitsProvider in the tree. Component \"${componentName}\" must be wrapped with <ToolkitsProvider>. Please ensure ToolkitsProvider is rendered above this component in the component tree.`,\n )\n }\n\n return useStore(store, selector ?? (state => state as T))\n}\n\nexport type ToolkitsProviderProps = PropsWithChildren<Partial<ContextSlice>>\n\nconst ToolkitsProvider: FC<ToolkitsProviderProps> = props => {\n const { children, ...restProps } = props\n const storeRef = useRef<ToolkitsStore | undefined>(undefined)\n const parentStore = useContext(ToolkitsContext)\n const parentState = parentStore?.getState()\n\n if (!storeRef.current) {\n // 从父级状态中提取 ContextSlice 相关的属性\n const parentContext: Partial<ContextSlice> = parentState\n ? {\n locale: parentState.locale,\n permissionVersion: parentState.permissionVersion,\n useGameApiV2: parentState.useGameApiV2,\n loginPath: parentState.loginPath,\n isGlobalMode: parentState.isGlobalMode,\n requireGameSelection: parentState.requireGameSelection,\n sidebarWidth: parentState.sidebarWidth,\n sidebarCollapsible: parentState.sidebarCollapsible,\n homePath: parentState.homePath,\n apiBaseUrl: parentState.apiBaseUrl,\n }\n : {}\n\n // restProps 会覆盖父级的对应属性\n storeRef.current = createToolkitsStore({ ...parentContext, ...restProps })\n }\n\n if (!storeRef.current.getState().loginPath) {\n throw new Error('ToolkitsProvider: 请配置 \"loginPath\"')\n }\n\n return (\n <ToolkitsContext.Provider value={storeRef.current}>\n <App>\n <>{children}</>\n </App>\n </ToolkitsContext.Provider>\n )\n}\n\nif (process.env.NODE_ENV !== 'production') {\n ToolkitsProvider.displayName = 'ToolkitsProvider'\n}\n\nexport default ToolkitsProvider\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQueryClient } from '@tanstack/react-query'\nimport { App } from 'antd'\nimport ky, { type KyInstance, type Options as KyOptions } from 'ky'\nimport { useMemo } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { APP_ID_HEADER, PermissionVersion } from '@/constants'\n\n// 响应成功状态码常量\nconst SUCCESS_RESPONSE_CODES = [0, 1, 200] as const\n\n// HTTP 状态码常量\nconst HTTP_STATUS = {\n OK: 200,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n UNREGISTERED: 412,\n} as const\n\n// 请求超时时间(毫秒)\nconst REQUEST_TIMEOUT = 30000\n\n// 成功响应状态码字段类型\ntype StatusField = 'code' | 'status' | 'errno'\n\n// 状态码检查配置\ninterface StatusCheckConfig {\n field: StatusField\n value: unknown\n allowedCodes: readonly number[]\n}\n\n// 响应类型枚举\nexport enum ResponseType {\n JSON = 'json',\n BLOB = 'blob',\n TEXT = 'text',\n ARRAY_BUFFER = 'arrayBuffer',\n FORM_DATA = 'formData',\n}\n\n// 通用请求选项接口\ninterface RequestOptions extends KyOptions {\n responseType?: ResponseType\n}\n\n// useKy Hook 配置选项\nexport interface UseKyOptions {\n baseURL?: string\n}\n\n// HTTP客户端方法接口 - 支持泛型响应类型\ninterface KyMethods {\n get: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n post: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n put: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n delete: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n patch: <T = any>(url: string, data?: any, options?: RequestOptions) => Promise<T>\n options: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n head: <T = any>(url: string, options?: RequestOptions) => Promise<T>\n request: <T = any>(options: RequestOptions & { url: string }) => Promise<T>\n instance: KyInstance\n}\n\n// 错误消息提取工具函数\nconst extractErrorMessage = (data: any): string => {\n if (!data || typeof data !== 'object') {\n return 'Unknown error'\n }\n\n return data.msg || data.message || data.error || 'Unknown error'\n}\n\n/**\n * 检查单个状态码字段是否成功\n * @param config 状态码检查配置\n * @returns 是否成功\n */\nconst isStatusCodeSuccess = (config: StatusCheckConfig): boolean => {\n const { value, allowedCodes } = config\n\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value !== 'number') {\n return false\n }\n\n return allowedCodes.includes(value)\n}\n\n/**\n * 判断响应是否成功\n * @param data 响应数据\n * @param status HTTP状态码\n * @returns 是否成功\n */\nconst isSuccessResponse = (data: any, status: number): boolean => {\n // 如果HTTP状态码不在2xx范围,直接返回失败\n if (status < HTTP_STATUS.OK || status >= 300) {\n return false\n }\n\n // 如果没有响应数据或不是对象,认为成功(可能是空响应)\n if (!data || typeof data !== 'object') {\n return true\n }\n\n // 定义状态码检查配置\n const statusChecks: StatusCheckConfig[] = [\n { field: 'code', value: data.code, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'status', value: data.status, allowedCodes: SUCCESS_RESPONSE_CODES },\n { field: 'errno', value: data.errno, allowedCodes: SUCCESS_RESPONSE_CODES },\n ]\n\n // 检查是否有任何业务状态码字段存在且表示成功\n const hasBusinessStatusCode = statusChecks.some(config => config.value !== undefined && config.value !== null)\n\n // 如果存在业务状态码字段,则必须检查它们是否都表示成功\n if (hasBusinessStatusCode) {\n return statusChecks.every(\n config => config.value === undefined || config.value === null || isStatusCodeSuccess(config),\n )\n }\n\n // 如果没有业务状态码字段,HTTP 2xx 就认为成功\n return true\n}\n\n/**\n * 根据响应类型处理响应数据\n * @param response 响应对象\n * @param responseType 响应类型\n * @returns 处理后的响应数据\n */\nconst processResponseByType = async (response: Response, responseType?: ResponseType): Promise<any> => {\n switch (responseType) {\n case ResponseType.BLOB:\n return response.blob()\n case ResponseType.TEXT:\n return response.text()\n case ResponseType.ARRAY_BUFFER:\n return response.arrayBuffer()\n case ResponseType.FORM_DATA:\n return response.formData()\n case ResponseType.JSON:\n default:\n return response.json()\n }\n}\n\n/**\n * HTTP客户端Hook (基于 Ky) - 内部使用版本\n * @param config 配置选项\n * @returns HTTP客户端方法集合\n */\nexport const useKy = (config?: UseKyOptions): KyMethods => {\n const { baseURL } = config || {}\n const { notification } = App.useApp()\n\n // 使用 useNavigate 获取导航函数\n // 注意:调用 useKy 的组件必须在 Router 上下文中\n const navigate = useNavigate()\n\n const queryClient = useQueryClient()\n\n // 获取工具包状态\n const { token, isGlobalMode, appId, permissionVersion, loginPath, clear, apiBaseUrl } = useToolkitsStore()\n\n // 处理未授权错误\n const handleUnauthorized = () => {\n clear()\n // 清除 React Query 缓存\n queryClient.clear()\n navigate(loginPath)\n }\n\n // 处理未注册错误\n const handleUnregistered = () => {\n clear()\n // 清除 React Query 缓存\n queryClient.clear()\n if (loginPath) {\n // 添加未注册参数到登录页 URL\n const url = new URL(loginPath, window.location.origin)\n url.searchParams.set('unregistered', 'true')\n navigate(url.toString())\n }\n }\n\n // 处理禁止访问错误\n const handleForbidden = () => {\n notification.error({\n message: '访问被禁止',\n description: '您没有权限访问此资源。',\n })\n }\n\n // 创建响应处理函数\n const createResponseHandler = (responseType?: ResponseType) => {\n return async (_request: any, _options: any, response: Response): Promise<Response> => {\n // 非 JSON 类型直接交由调用方按响应类型读取\n if (\n responseType === ResponseType.BLOB ||\n responseType === ResponseType.ARRAY_BUFFER ||\n responseType === ResponseType.TEXT ||\n responseType === ResponseType.FORM_DATA\n ) {\n return response\n }\n\n // 默认 JSON\n let data: any\n try {\n data = await response.clone().json()\n } catch {\n // 非 JSON 或空响应体,直接返回原响应\n return response\n }\n\n if (isSuccessResponse(data, response.status)) {\n const responseData = data.data !== undefined ? data.data : data\n return new Response(JSON.stringify(responseData), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n })\n }\n\n const errorMessage = extractErrorMessage(data)\n\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n\n const error = new Error(errorMessage)\n ;(error as any).response = response\n ;(error as any).data = data\n throw error\n }\n }\n\n // 处理HTTP状态码错误\n const handleHttpStatusError = (status: number, data: any) => {\n switch (status) {\n case HTTP_STATUS.UNAUTHORIZED:\n handleUnauthorized()\n break\n\n case HTTP_STATUS.UNREGISTERED:\n handleUnregistered()\n break\n\n case HTTP_STATUS.FORBIDDEN:\n handleForbidden()\n break\n\n default: {\n // 安全地提取错误消息\n const errorMessage = extractErrorMessage(data) || `HTTP ${status} Error`\n notification.error({\n message: 'Request failed',\n description: errorMessage,\n })\n break\n }\n }\n }\n\n // 创建ky实例\n const instance = useMemo(() => {\n return ky.create({\n prefixUrl: baseURL ?? apiBaseUrl,\n retry: 0,\n timeout: REQUEST_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n hooks: {\n beforeRequest: [\n request => {\n // 设置认证 headers\n if (token) {\n request.headers.set('Authorization', `Bearer ${token}`)\n }\n\n // 设置应用 ID headers\n if (!request.headers.has(APP_ID_HEADER) && permissionVersion !== PermissionVersion.V1) {\n if (isGlobalMode || !appId) {\n request.headers.set(APP_ID_HEADER, 'global')\n } else {\n // 对 appId 进行 URL 编码以避免非 ASCII 字符导致的 XMLHttpRequest 错误\n request.headers.set(APP_ID_HEADER, encodeURIComponent(String(appId)))\n }\n }\n },\n ],\n beforeError: [\n async error => {\n const { response } = error\n\n if (response) {\n const status = response.status\n let data: any\n\n try {\n const contentType = response.headers.get('content-type') || ''\n if (contentType.includes('application/json') || contentType.startsWith('text/')) {\n data = await response.clone().json()\n }\n } catch {\n // 忽略 JSON 解析错误\n }\n\n handleHttpStatusError(status, data)\n } else {\n // 网络错误或请求超时等情况\n notification.error({\n message: 'Network Error',\n description: error.message || 'Network request failed',\n })\n }\n\n return error\n },\n ],\n },\n })\n }, [baseURL, token, isGlobalMode, appId, permissionVersion, notification, loginPath, clear, queryClient, apiBaseUrl])\n\n // 通用请求处理函数\n const makeRequest = async <T = any>(\n method: string,\n url: string,\n data?: any,\n requestOptions?: RequestOptions,\n ): Promise<T> => {\n const { responseType, ...kyOptions } = requestOptions || {}\n\n // 创建带有响应类型处理器的请求选项\n const finalOptions: KyOptions = {\n ...kyOptions,\n hooks: {\n ...kyOptions.hooks,\n afterResponse: [...(kyOptions.hooks?.afterResponse || []), createResponseHandler(responseType)],\n },\n }\n\n let response: Response\n\n if (data) {\n response = await instance(url, { method, json: data, ...finalOptions })\n } else {\n response = await instance(url, { method, ...finalOptions })\n }\n\n // 根据响应类型返回相应数据\n return processResponseByType(response, responseType)\n }\n\n // HTTP方法\n const get = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('GET', url, undefined, options)\n }\n\n const post = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('POST', url, data, options)\n }\n\n const put = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PUT', url, data, options)\n }\n\n const del = <T = any>(url: string, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('DELETE', url, undefined, options)\n }\n\n const patch = <T = any>(url: string, data?: any, options?: RequestOptions): Promise<T> => {\n return makeRequest<T>('PATCH', url, data, options)\n }\n\n const options = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('OPTIONS', url, undefined, requestOptions)\n }\n\n const head = <T = any>(url: string, requestOptions?: RequestOptions): Promise<T> => {\n return makeRequest<T>('HEAD', url, undefined, requestOptions)\n }\n\n const request = <T = any>(requestOptions: RequestOptions & { url: string }): Promise<T> => {\n const { url, ...requestOpts } = requestOptions\n return makeRequest<T>(requestOpts.method || 'GET', url, undefined, requestOpts)\n }\n\n return {\n get,\n post,\n put,\n delete: del,\n patch,\n options,\n head,\n request,\n instance,\n }\n}\n","// 查询键工厂 - 使用简单的对象和函数来生成查询键\nexport const queryKeys = {\n // 权限相关\n permissions: {\n check: (permissions: string[], version: 'v1' | 'v2') => ['permissions', 'check', permissions, version] as const,\n allPermissions: ['permissions', 'all'] as const,\n allPermissionsV2: ['permissions', 'allV2'] as const,\n },\n // 用户相关\n users: {\n all: ['users'] as const,\n detail: (id: string) => ['users', 'detail', id] as const,\n create: ['users', 'create'] as const,\n update: ['users', 'update'] as const,\n delete: ['users', 'delete'] as const,\n },\n // 角色相关\n roles: {\n all: ['roles'] as const,\n detail: (name: string, version: 'v1' | 'v2') => ['roles', 'detail', name, version] as const,\n create: (version: 'v1' | 'v2') => ['roles', 'create', version] as const,\n update: (version: 'v1' | 'v2') => ['roles', 'update', version] as const,\n delete: ['roles', 'delete'] as const,\n },\n // 菜单相关\n menus: {\n all: ['menus'] as const,\n navbar: (appId?: string) => ['menus', 'navbar', appId] as const,\n detail: (id: number) => ['menus', 'detail', id] as const,\n create: ['menus', 'create'] as const,\n update: ['menus', 'update'] as const,\n delete: ['menus', 'delete'] as const,\n },\n // 枚举相关\n enums: {\n gameGroups: ['enums', 'gameGroups'] as const,\n gameIds: (gameGroups: string[]) => ['enums', 'gameIds', gameGroups] as const,\n },\n // 游戏相关\n games: {\n all: ['games', 'all'] as const,\n },\n // 认证相关\n auth: {\n ticketLogin: (ticket: string | null) => ['auth', 'ticket-login', ticket] as const,\n },\n}\n\nexport type QueryKeys = typeof queryKeys\n"]}
|
package/lib/roleList-UEZPNJ2L.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {c,b as b$1,e as e$1}from'./chunk-PLJPZJ7T.js';import {b}from'./chunk-K43HSNXS.js';import {e}from'./chunk-LEVOCZUQ.js';import {a as a$2}from'./chunk-GI5OS4VD.js';import {a as a$1}from'./chunk-VFRB44XY.js';import {a}from'./chunk-EESZYCYA.js';import {i,k}from'./chunk-W3E3WPLB.js';import {UsergroupAddOutlined}from'@ant-design/icons';import {App,Space,Card}from'antd';import {Link}from'react-router-dom';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var $=()=>{let{modal:R,message:g}=App.useApp(),{data:k$1}=a("200005"),{t}=a$1(),{permissionVersion:L}=i(e=>e),{refetch:s}=c(),T=k(),{show:b$2,modal:A}=b({mode:"create",onSuccess(){s("role-list",{page:1});}}),{show:C,modal:V}=b({mode:"update",onSuccess(){s("role-list");}}),w=e(),I=async e=>{let o=await T.get(`/api/usystem/role/info${L==="v2"?"V2":""}?name=${e.name}`);C({initialValues:{permissions:o.permissions,name:o.name.replace(/^role_/,"")},extraValues:{id:o?.id}});},S=[{title:t("global.name"),key:"name",render(e){return k$1?jsx(Link,{to:`${e.name}`,relative:"path",children:e.name}):jsx(Fragment,{children:e.name})}},{title:"ID",dataIndex:"id",key:"id"},{title:t("global.creationTime"),dataIndex:"ctime",key:"ctime"},{title:t("global.operation"),width:150,align:"center",render:(e,o)=>jsxs(Space,{size:"small",children:[jsx(a$2,{code:"200003",size:"small",type:"link",onClick:async()=>{I(o);},children:t("global.update")}),jsx(a$2,{danger:true,code:"200004",size:"small",type:"link",onClick:()=>{R.confirm({title:t("Role.deleteTitle"),content:jsx(b$1,{texts:[o.name],children:t("Role.deleteContent",{role:o.name})}),async onOk(){await w.mutateAsync({id:o.id,name:o.name}),s("role-list"),g.success(t("Role.deleteSuccessfully"));}});},children:t("global.delete")})]})}];return jsxs(Fragment,{children:[jsx(Card,{title:t("global.role"),extra:jsx(a$2,{type:"primary",code:"200002",icon:jsx(UsergroupAddOutlined,{}),onClick:()=>{b$2();},children:t("Role.createTitle")}),children:jsx(e$1,{identifier:"role-list",rowKey:"name",columns:S,code:"200001",request:{url:"/api/usystem/role/list",method:"GET"},dataAdapter:e=>({total:e?.Total,items:e?.List})})}),A,V]})},G=$;export{G as default};//# sourceMappingURL=roleList-UEZPNJ2L.js.map
|
|
2
|
-
//# sourceMappingURL=roleList-UEZPNJ2L.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/pages/roleList/index.tsx"],"names":["RoleList","modal","message","App","viewable","useAuth","useTranslation","permissionVersion","useToolkitsStore","s","refetch","useQueryListStore","ky","useKy","showCreateModal","createModal","useRoleModal","showUpdateModal","updateModal","remove","useRemoveRole","handleUpdateBtnClick","record","data","columns","value","jsx","Link","Fragment","_","jsxs","Space","AuthButton_default","Highlight_default","Card","UsergroupAddOutlined","QueryList_default","roleList_default"],"mappings":"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","file":"roleList-UEZPNJ2L.js","sourcesContent":["import { UsergroupAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Space } from 'antd'\nimport { Link } from 'react-router-dom'\n\nimport { AuthButton, Highlight, QueryList, useQueryListStore, useToolkitsStore } from '@/components'\nimport { PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { useAuth } from '@/services'\n\nimport { useRoleModal } from '../../hooks'\nimport { useRemoveRole } from '../../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../../types'\n\nconst RoleList = () => {\n const { modal, message } = App.useApp()\n const { data: viewable } = useAuth('200005')\n const { t } = useTranslation()\n const { permissionVersion } = useToolkitsStore(s => s)\n const { refetch } = useQueryListStore()\n const ky = useKy()\n\n const { show: showCreateModal, modal: createModal } = useRoleModal({\n mode: 'create',\n onSuccess() {\n refetch('role-list', { page: 1 })\n },\n })\n const { show: showUpdateModal, modal: updateModal } = useRoleModal({\n mode: 'update',\n onSuccess() {\n refetch('role-list')\n },\n })\n\n const remove = useRemoveRole()\n\n const handleUpdateBtnClick = async (record: RoleListItem) => {\n const data = await ky.get<RoleV1 | RoleV2>(\n `/api/usystem/role/info${permissionVersion === PermissionVersion.V2 ? 'V2' : ''}?name=${record.name}`,\n )\n\n showUpdateModal({\n initialValues: {\n permissions: data.permissions,\n name: data.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: data?.id,\n },\n })\n }\n\n const columns: TableColumnsType<RoleListItem> = [\n {\n title: t('global.name'),\n key: 'name',\n render(value: RoleListItem) {\n if (viewable) {\n return (\n <Link to={`${value.name}`} relative=\"path\">\n {value.name}\n </Link>\n )\n } else {\n return <>{value.name}</>\n }\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n key: 'ctime',\n },\n {\n title: t('global.operation'),\n width: 150,\n align: 'center',\n render: (_, record) => {\n return (\n <Space size=\"small\">\n <AuthButton\n code=\"200003\"\n size=\"small\"\n type=\"link\"\n onClick={async () => {\n handleUpdateBtnClick(record)\n }}\n >\n {t('global.update')}\n </AuthButton>\n <AuthButton\n danger\n code=\"200004\"\n size=\"small\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('Role.deleteTitle'),\n content: (\n <Highlight texts={[record.name]}>{t('Role.deleteContent', { role: record.name })}</Highlight>\n ),\n async onOk() {\n await remove.mutateAsync({\n id: record.id,\n name: record.name,\n })\n\n refetch('role-list')\n\n message.success(t('Role.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('global.delete')}\n </AuthButton>\n </Space>\n )\n },\n },\n ]\n\n return (\n <>\n <Card\n title={t('global.role')}\n extra={\n <AuthButton\n type=\"primary\"\n code=\"200002\"\n icon={<UsergroupAddOutlined />}\n onClick={() => {\n showCreateModal()\n }}\n >\n {t('Role.createTitle')}\n </AuthButton>\n }\n >\n <QueryList<RoleListItem, undefined, { List: RoleListItem[]; Total: number }>\n identifier=\"role-list\"\n rowKey=\"name\"\n columns={columns}\n code=\"200001\"\n request={{\n url: '/api/usystem/role/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n />\n </Card>\n {createModal}\n {updateModal}\n </>\n )\n}\n\nexport default RoleList\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {b}from'./chunk-V3YBDED3.js';import'./chunk-LEVOCZUQ.js';import {a as a$2}from'./chunk-GI5OS4VD.js';import {a}from'./chunk-VFRB44XY.js';import {c,a as a$1}from'./chunk-EESZYCYA.js';import {i,k,l}from'./chunk-W3E3WPLB.js';import {useQuery}from'@tanstack/react-query';import {Tag,Breadcrumb,Card,Descriptions,Table}from'antd';import {useParams,Link}from'react-router-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var $=()=>{let i$1=useParams(),{t:r}=a(),{useGameApiV2:T,permissionVersion:D}=i(),V=D==="v3",h=k(),{data:s,isLoading:L,refetch:C}=useQuery({queryKey:l.users.detail(i$1.id||""),queryFn:()=>h.get(`/api/usystem/user/info?id=${i$1.id}`),enabled:!!i$1.id}),{data:x}=c(),{data:A}=a$1("200005"),{show:B,modal:G}=b({mode:"update",onSuccess(){C();}}),K=[V&&{key:"group",title:r("global.projectGroup"),dataIndex:"game_group",render(o){return o.map(t=>jsx(Tag,{children:t==="*"?"\u901A\u7528":t},t))}},{key:"game",title:r("global.game"),dataIndex:"game_ids",render(o){return o.map(t=>{let S=x?.find(n=>String(T?n.game_id:n.id)===t);return jsx(Tag,{children:S?.name??(t==="*"?"\u901A\u7528":t)},t)})}},{key:"role",title:r("global.role"),dataIndex:"role",render(o){return A?jsx(Link,{to:`../../role/${o}`,relative:"path",children:o}):o}}].filter(Boolean);return jsxs(Fragment,{children:[jsx(Breadcrumb,{className:"mb-6",items:[{key:"1",title:jsx(Link,{to:"..",relative:"path",children:r("global.user")})},{key:"2",title:"\u7528\u6237\u8BE6\u60C5"}]}),jsx(Card,{title:"\u7528\u6237\u8BE6\u60C5",loading:L,extra:jsx(a$2,{code:"100003",onClick:()=>{B({initialValues:{name:s?.name,permissions:s?.permissions},extraValues:{id:s.id}});},children:r("global.update")}),children:jsxs(Descriptions,{bordered:true,column:1,children:[jsx(Descriptions.Item,{label:r("global.name"),children:s?.name}),jsx(Descriptions.Item,{label:"ID",children:s?.id}),jsx(Descriptions.Item,{label:r("global.role"),children:jsx(Table,{rowKey:"role",columns:K,dataSource:s?.permissions,pagination:false})})]})}),G]})},H=$;export{H as default};//# sourceMappingURL=userDetail-QZDRSIYE.js.map
|
|
2
|
-
//# sourceMappingURL=userDetail-QZDRSIYE.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/pages/userDetail/index.tsx"],"names":["UserDetail","params","useParams","t","useTranslation","useGameApiV2","permissionVersion","useToolkitsStore","isV3","ky","useKy","data","isLoading","refetch","useQuery","queryKeys","games","useGames","roleViewable","useAuth","show","modal","useUserModalV2","columns","value","item","jsx","Tag","matchedGame","game","Link","jsxs","Fragment","Breadcrumb","Card","AuthButton_default","Descriptions","Table","userDetail_default"],"mappings":"+aAeMA,CAAAA,CAAa,IAAM,CACvB,IAAMC,GAAAA,CAASC,WAAgB,CACzB,CAAE,EAAAC,CAAE,CAAA,CAAIC,GAAe,CACvB,CAAE,YAAA,CAAAC,CAAAA,CAAc,kBAAAC,CAAkB,CAAA,CAAIC,GAAiB,CACvDC,CAAAA,CAAOF,IAAsB,IAAA,CAC7BG,CAAAA,CAAKC,GAAM,CAEX,CAAE,KAAAC,CAAAA,CAAM,SAAA,CAAAC,EAAW,OAAA,CAAAC,CAAQ,EAAIC,QAAAA,CAAS,CAC5C,SAAUC,CAAAA,CAAU,KAAA,CAAM,OAAOd,GAAAA,CAAO,EAAA,EAAM,EAAE,CAAA,CAChD,OAAA,CAAS,IAAMQ,CAAAA,CAAG,GAAA,CAAkB,6BAA6BR,GAAAA,CAAO,EAAE,EAAE,CAAA,CAC5E,OAAA,CAAS,CAAC,CAACA,GAAAA,CAAO,EACpB,CAAC,CAAA,CACK,CAAE,IAAA,CAAMe,CAAM,CAAA,CAAIC,CAAAA,GAClB,CAAE,IAAA,CAAMC,CAAa,CAAA,CAAIC,GAAAA,CAAQ,QAAQ,CAAA,CAEzC,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAM,CAAA,CAAIC,CAAAA,CAAe,CACrC,IAAA,CAAM,QAAA,CACN,WAAY,CACVT,CAAAA,GACF,CACF,CAAC,EAEKU,CAAAA,CAAU,CACdf,GAAQ,CACN,GAAA,CAAK,QACL,KAAA,CAAOL,CAAAA,CAAE,qBAAqB,CAAA,CAC9B,SAAA,CAAW,aACX,MAAA,CAAOqB,CAAAA,CAAiB,CACtB,OAAOA,CAAAA,CAAM,GAAA,CAAIC,CAAAA,EACRC,IAACC,GAAAA,CAAA,CAAgB,SAAAF,CAAAA,GAAS,GAAA,CAAW,eAAOA,CAAAA,CAAAA,CAAlCA,CAAuC,CACzD,CACH,CACF,EACA,CACE,GAAA,CAAK,OACL,KAAA,CAAOtB,CAAAA,CAAE,aAAa,CAAA,CACtB,SAAA,CAAW,WACX,MAAA,CAAOqB,CAAAA,CAAiB,CACtB,OAAOA,CAAAA,CAAM,IAAIC,CAAAA,EAAQ,CACvB,IAAMG,CAAAA,CAAcZ,CAAAA,EAAO,KAAKa,CAAAA,EAAQ,MAAA,CAAOxB,EAAewB,CAAAA,CAAK,OAAA,CAAUA,EAAK,EAAE,CAAA,GAAMJ,CAAI,CAAA,CAC9F,OAAOC,GAAAA,CAACC,GAAAA,CAAA,CAAgB,QAAA,CAAAC,CAAAA,EAAa,OAASH,CAAAA,GAAS,GAAA,CAAW,eAAOA,CAAAA,CAAAA,CAAAA,CAAxDA,CAA8D,CACjF,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAK,MAAA,CACL,KAAA,CAAOtB,EAAE,aAAa,CAAA,CACtB,UAAW,MAAA,CACX,MAAA,CAAOqB,EAAe,CACpB,OAAON,EACLQ,GAAAA,CAACI,IAAAA,CAAA,CAAK,EAAA,CAAI,CAAA,WAAA,EAAcN,CAAK,CAAA,CAAA,CAAI,QAAA,CAAS,OACvC,QAAA,CAAAA,CAAAA,CACH,EAEAA,CAEJ,CACF,CACF,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAEhB,OACEO,IAAAA,CAAAC,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAN,GAAAA,CAACO,WAAA,CACC,SAAA,CAAU,OACV,KAAA,CAAO,CACL,CACE,GAAA,CAAK,GAAA,CACL,MACEP,GAAAA,CAACI,IAAAA,CAAA,CAAK,EAAA,CAAG,IAAA,CAAK,SAAS,MAAA,CACpB,QAAA,CAAA3B,EAAE,aAAa,CAAA,CAClB,CAEJ,CAAA,CACA,CACE,IAAK,GAAA,CACL,KAAA,CAAO,0BACT,CACF,CAAA,CACF,EACAuB,GAAAA,CAACQ,IAAAA,CAAA,CACC,KAAA,CAAM,0BAAA,CACN,QAAStB,CAAAA,CACT,KAAA,CACEc,GAAAA,CAACS,GAAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAS,IAAM,CACbf,EAAK,CACH,aAAA,CAAe,CACb,IAAA,CAAMT,CAAAA,EAAM,KACZ,WAAA,CAAaA,CAAAA,EAAM,WACrB,CAAA,CACA,WAAA,CAAa,CACX,EAAA,CAAIA,CAAAA,CAAM,EACZ,CACF,CAAC,EACH,CAAA,CAEC,QAAA,CAAAR,EAAE,eAAe,CAAA,CACpB,EAGF,QAAA,CAAA4B,IAAAA,CAACK,aAAA,CAAa,QAAA,CAAQ,KAAC,MAAA,CAAQ,CAAA,CAC7B,UAAAV,GAAAA,CAACU,YAAAA,CAAa,KAAb,CAAkB,KAAA,CAAOjC,CAAAA,CAAE,aAAa,EAAI,QAAA,CAAAQ,CAAAA,EAAM,KAAK,CAAA,CACxDe,GAAAA,CAACU,aAAa,IAAA,CAAb,CAAkB,MAAM,IAAA,CAAM,QAAA,CAAAzB,GAAM,EAAA,CAAG,CAAA,CACxCe,IAACU,YAAAA,CAAa,IAAA,CAAb,CAAkB,KAAA,CAAOjC,CAAAA,CAAE,aAAa,CAAA,CACvC,QAAA,CAAAuB,IAACW,KAAAA,CAAA,CAAM,OAAO,MAAA,CAAO,OAAA,CAASd,EAAS,UAAA,CAAYZ,CAAAA,EAAM,YAAa,UAAA,CAAY,KAAA,CAAO,EAC3F,CAAA,CAAA,CACF,CAAA,CACF,EACCU,CAAAA,CAAAA,CACH,CAEJ,EAEOiB,CAAAA,CAAQtC","file":"userDetail-QZDRSIYE.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport type { TableColumnsType } from 'antd'\nimport { Breadcrumb, Card, Descriptions, Table, Tag } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\n\nimport { AuthButton, useToolkitsStore } from '@/components'\nimport { PermissionVersion, WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\nimport { useAuth, useGames } from '@/services'\n\nimport { useUserModalV2 } from '../../hooks'\nimport type { UserListItem } from '../../types'\n\nconst UserDetail = () => {\n const params = useParams<'id'>()\n const { t } = useTranslation()\n const { useGameApiV2, permissionVersion } = useToolkitsStore()\n const isV3 = permissionVersion === PermissionVersion.V3\n const ky = useKy()\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: queryKeys.users.detail(params.id || ''),\n queryFn: () => ky.get<UserListItem>(`/api/usystem/user/info?id=${params.id}`),\n enabled: !!params.id,\n })\n const { data: games } = useGames()\n const { data: roleViewable } = useAuth('200005')\n\n const { show, modal } = useUserModalV2({\n mode: 'update',\n onSuccess() {\n refetch()\n },\n })\n\n const columns = [\n isV3 && {\n key: 'group',\n title: t('global.projectGroup'),\n dataIndex: 'game_group',\n render(value: string[]) {\n return value.map(item => {\n return <Tag key={item}>{item === WILDCARD ? '通用' : item}</Tag>\n })\n },\n },\n {\n key: 'game',\n title: t('global.game'),\n dataIndex: 'game_ids',\n render(value: string[]) {\n return value.map(item => {\n const matchedGame = games?.find(game => String(useGameApiV2 ? game.game_id : game.id) === item)\n return <Tag key={item}>{matchedGame?.name ?? (item === WILDCARD ? '通用' : item)}</Tag>\n })\n },\n },\n {\n key: 'role',\n title: t('global.role'),\n dataIndex: 'role',\n render(value: string) {\n return roleViewable ? (\n <Link to={`../../role/${value}`} relative=\"path\">\n {value}\n </Link>\n ) : (\n value\n )\n },\n },\n ].filter(Boolean) as TableColumnsType\n\n return (\n <>\n <Breadcrumb\n className=\"mb-6\"\n items={[\n {\n key: '1',\n title: (\n <Link to=\"..\" relative=\"path\">\n {t('global.user')}\n </Link>\n ),\n },\n {\n key: '2',\n title: '用户详情',\n },\n ]}\n />\n <Card\n title=\"用户详情\"\n loading={isLoading}\n extra={\n <AuthButton\n code=\"100003\"\n onClick={() => {\n show({\n initialValues: {\n name: data?.name,\n permissions: data?.permissions,\n },\n extraValues: {\n id: data!.id,\n },\n })\n }}\n >\n {t('global.update')}\n </AuthButton>\n }\n >\n <Descriptions bordered column={1}>\n <Descriptions.Item label={t('global.name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('global.role')}>\n <Table rowKey=\"role\" columns={columns} dataSource={data?.permissions} pagination={false} />\n </Descriptions.Item>\n </Descriptions>\n </Card>\n {modal}\n </>\n )\n}\n\nexport default UserDetail\n"]}
|
package/lib/userList-IBXB6M6R.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {a as a$1,b}from'./chunk-V3YBDED3.js';import {c,b as b$1,e}from'./chunk-PLJPZJ7T.js';import {h}from'./chunk-LEVOCZUQ.js';import {a as a$2}from'./chunk-GI5OS4VD.js';import {a}from'./chunk-VFRB44XY.js';import'./chunk-EESZYCYA.js';import {i}from'./chunk-W3E3WPLB.js';import {UserAddOutlined}from'@ant-design/icons';import {App,Row,Col,Tag,Space,Card,Form,Input}from'antd';import {Link}from'react-router-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var P=()=>{let{modal:w,message:I}=App.useApp(),{t:o}=a(),L=h(),{refetch:r}=c(),{permissionVersion:n}=i(t=>t),b$2=n==="v1",a$3=n==="v3",m=n==="v4",{show:M,modal:A}=a$1({mode:"create",onSuccess(){r("user-list",{page:1});}}),{show:S,modal:x}=a$1({mode:"update",onSuccess(){r("user-list");}}),{show:F,modal:B}=b({mode:"create",onSuccess(){r("user-list",{page:1});}}),{show:R,modal:z}=b({mode:"update",onSuccess(){r("user-list");}}),H=[{title:o("global.name"),dataIndex:"name",key:"name",render(t,s){return a$3||m?jsx(Link,{to:`./${s.id}`,children:t}):t}},{title:"ID",dataIndex:"id",key:"id"},(b$2||a$3)&&{title:o("global.role"),dataIndex:"roles",key:"roles",width:"40%",render(t){return jsx(Row,{gutter:[4,4],children:(t||[]).map(s=>jsx(Col,{children:s==="root"?jsx(Tag,{color:"#f50",children:s}):jsx(Tag,{color:"#ff5a00",children:jsx(Link,{to:`../role/${s}`,children:s})})},s))})}},{title:o("global.creationTime"),dataIndex:"Ctime",key:"ctime"},{title:o("global.operation"),width:150,align:"center",render:(t,s)=>{let{name:l,permissions:O,roles:Q,id:d}=s;return jsxs(Space,{children:[jsx(a$2,{size:"small",type:"link",code:"100003",onClick:()=>{a$3||m?R({initialValues:{name:l,permissions:O},extraValues:{id:d}}):S({initialValues:{name:l,roles:Q},extraValues:{id:d}});},children:o("global.update")}),jsx(a$2,{danger:true,size:"small",code:"100004",type:"link",onClick:()=>{w.confirm({title:o("User.deleteTitle"),content:jsx(b$1,{texts:[l],children:o("User.deleteContent",{user:l})}),async onOk(){await L.mutateAsync({id:d,name:l}),r("user-list"),I.success(o("User.deleteSuccessfully"));}});},children:o("global.delete")})]})}}].filter(Boolean);return jsxs(Fragment,{children:[jsx(Card,{title:o("global.user"),extra:jsx(a$2,{type:"primary",icon:jsx(UserAddOutlined,{}),code:"100002",onClick:()=>{a$3||m?F():M();},children:o("User.createTitle")}),children:jsx(e,{identifier:"user-list",code:"100001",request:{url:"/api/usystem/user/list",method:"GET"},rowKey:"id",columns:H,dataAdapter:t=>({total:t?.Total,items:t?.List}),renderForm:t=>jsx(Form,{form:t,children:jsx(Form.Item,{label:"\u540D\u79F0",name:"name",children:jsx(Input,{})})})})}),A,x,B,z]})},ee=P;export{ee as default};//# sourceMappingURL=userList-IBXB6M6R.js.map
|
|
2
|
-
//# sourceMappingURL=userList-IBXB6M6R.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/modules/permission/pages/userList/index.tsx"],"names":["UserList","modal","message","App","t","useTranslation","remove","useRemoveUser","refetch","useQueryListStore","permissionVersion","useToolkitsStore","s","isV1","isV3","isV4","showCreateModal","createModal","useUserModal","showUpdateModal","updateModal","showCreateModalV2","createModalV2","useUserModalV2","showUpdateModalV2","updateModalV2","columns","value","record","jsx","Link","Row","item","Col","Tag","_","name","permissions","roles","id","jsxs","Space","AuthButton_default","Highlight_default","Fragment","Card","UserAddOutlined","QueryList_default","data","form","Form","Input","userList_default"],"mappings":"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","file":"userList-IBXB6M6R.js","sourcesContent":["import { UserAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Col, Form, Input, Row, Space, Tag } from 'antd'\nimport { type FC } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { AuthButton, Highlight, QueryList, useQueryListStore, useToolkitsStore } from '@/components'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\n\nimport { useUserModal, useUserModalV2 } from '../../hooks'\nimport { useRemoveUser } from '../../services'\nimport type { UserListItem } from '../../types'\n\nconst UserList: FC = () => {\n const { modal, message } = App.useApp()\n const { t } = useTranslation()\n const remove = useRemoveUser()\n const { refetch } = useQueryListStore()\n const { permissionVersion } = useToolkitsStore(s => s)\n const isV1 = permissionVersion === PermissionVersion.V1\n const isV3 = permissionVersion === PermissionVersion.V3\n const isV4 = permissionVersion === PermissionVersion.V4\n\n const { show: showCreateModal, modal: createModal } = useUserModal({\n mode: 'create',\n onSuccess() {\n refetch('user-list', { page: 1 })\n },\n })\n\n const { show: showUpdateModal, modal: updateModal } = useUserModal({\n mode: 'update',\n onSuccess() {\n refetch('user-list')\n },\n })\n\n const { show: showCreateModalV2, modal: createModalV2 } = useUserModalV2({\n mode: 'create',\n onSuccess() {\n refetch('user-list', { page: 1 })\n },\n })\n\n const { show: showUpdateModalV2, modal: updateModalV2 } = useUserModalV2({\n mode: 'update',\n onSuccess() {\n refetch('user-list')\n },\n })\n\n const columns = (\n [\n {\n title: t('global.name'),\n dataIndex: 'name',\n key: 'name',\n render(value: string, record) {\n if (isV3 || isV4) {\n return <Link to={`./${record.id}`}>{value}</Link>\n }\n return value\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n (isV1 || isV3) && {\n title: t('global.role'),\n dataIndex: 'roles',\n key: 'roles',\n width: '40%',\n render(value: string[]) {\n return (\n <Row gutter={[4, 4]}>\n {(value || []).map((item: string) => (\n <Col key={item}>\n {item === 'root' ? (\n <Tag color=\"#f50\">{item}</Tag>\n ) : (\n <Tag color=\"#ff5a00\">\n <Link to={`../role/${item}`}>{item}</Link>\n </Tag>\n )}\n </Col>\n ))}\n </Row>\n )\n },\n },\n {\n title: t('global.creationTime'),\n dataIndex: 'Ctime',\n key: 'ctime',\n },\n {\n title: t('global.operation'),\n width: 150,\n align: 'center',\n render: (_, record) => {\n const { name, permissions, roles, id } = record\n return (\n <Space>\n <AuthButton\n size=\"small\"\n type=\"link\"\n code=\"100003\"\n onClick={() => {\n if (isV3 || isV4) {\n showUpdateModalV2({\n initialValues: {\n name,\n permissions,\n },\n extraValues: {\n id,\n },\n })\n } else {\n showUpdateModal({\n initialValues: {\n name,\n roles,\n },\n extraValues: {\n id,\n },\n })\n }\n }}\n >\n {t('global.update')}\n </AuthButton>\n <AuthButton\n danger\n size=\"small\"\n code=\"100004\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('User.deleteTitle'),\n content: <Highlight texts={[name]}>{t('User.deleteContent', { user: name })}</Highlight>,\n async onOk() {\n await remove.mutateAsync({\n id,\n name,\n })\n refetch('user-list')\n message.success(t('User.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('global.delete')}\n </AuthButton>\n </Space>\n )\n },\n },\n ] as TableColumnsType<UserListItem>\n ).filter(Boolean)\n\n return (\n <>\n <Card\n title={t('global.user')}\n extra={\n <AuthButton\n type=\"primary\"\n icon={<UserAddOutlined />}\n code=\"100002\"\n onClick={() => {\n if (isV3 || isV4) {\n showCreateModalV2()\n } else {\n showCreateModal()\n }\n }}\n >\n {t('User.createTitle')}\n </AuthButton>\n }\n >\n <QueryList<UserListItem, { name?: string }, { List: UserListItem[]; Total: number }>\n identifier=\"user-list\"\n code=\"100001\"\n request={{\n url: '/api/usystem/user/list',\n method: 'GET',\n }}\n rowKey=\"id\"\n columns={columns}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n renderForm={form => (\n <Form form={form}>\n <Form.Item label=\"名称\" name=\"name\">\n <Input />\n </Form.Item>\n </Form>\n )}\n />\n </Card>\n {createModal}\n {updateModal}\n {createModalV2}\n {updateModalV2}\n </>\n )\n}\n\nexport default UserList\n"]}
|