react-toolkits 2.22.13 → 2.22.16

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/{chunk-ES6EDPL4.js → chunk-267EULS6.js} +2 -2
  3. package/lib/{chunk-ES6EDPL4.js.map → chunk-267EULS6.js.map} +1 -1
  4. package/lib/chunk-7KC4QGFG.js +2 -0
  5. package/lib/chunk-7KC4QGFG.js.map +1 -0
  6. package/lib/{chunk-MS25PZ5J.js → chunk-BKF7C4LV.js} +2 -2
  7. package/lib/{chunk-MS25PZ5J.js.map → chunk-BKF7C4LV.js.map} +1 -1
  8. package/lib/chunk-EKBAANKX.js +3 -0
  9. package/lib/chunk-EKBAANKX.js.map +1 -0
  10. package/lib/{chunk-XBISTSFI.js → chunk-EQKZ3442.js} +2 -2
  11. package/lib/{chunk-XBISTSFI.js.map → chunk-EQKZ3442.js.map} +1 -1
  12. package/lib/{chunk-LKQSOMD5.js → chunk-K227EWOS.js} +2 -2
  13. package/lib/{chunk-LKQSOMD5.js.map → chunk-K227EWOS.js.map} +1 -1
  14. package/lib/{chunk-7W2ZX3CB.js → chunk-MFVQ4PJU.js} +2 -2
  15. package/lib/{chunk-7W2ZX3CB.js.map → chunk-MFVQ4PJU.js.map} +1 -1
  16. package/lib/{chunk-JUD7AMBZ.js → chunk-T2ZOW3WL.js} +2 -2
  17. package/lib/{chunk-JUD7AMBZ.js.map → chunk-T2ZOW3WL.js.map} +1 -1
  18. package/lib/chunk-TLXOBLJT.js +2 -0
  19. package/lib/{chunk-JAGE2XCG.js.map → chunk-TLXOBLJT.js.map} +1 -1
  20. package/lib/{createMenuItem-PS7ABPSF.js → createMenuItem-Z5SGFFW4.js} +2 -2
  21. package/lib/{createMenuItem-PS7ABPSF.js.map → createMenuItem-Z5SGFFW4.js.map} +1 -1
  22. package/lib/index.js +1 -1
  23. package/lib/{menuItemList-LXN2NUCP.js → menuItemList-BOXALHYO.js} +2 -2
  24. package/lib/{menuItemList-LXN2NUCP.js.map → menuItemList-BOXALHYO.js.map} +1 -1
  25. package/lib/{roleDetail-VH4X743G.js → roleDetail-NQS6CEVO.js} +2 -2
  26. package/lib/{roleDetail-VH4X743G.js.map → roleDetail-NQS6CEVO.js.map} +1 -1
  27. package/lib/{roleList-RHX3D2HP.js → roleList-CZJYZNRP.js} +2 -2
  28. package/lib/{roleList-RHX3D2HP.js.map → roleList-CZJYZNRP.js.map} +1 -1
  29. package/lib/{updateMenuItem-M5U4T3L7.js → updateMenuItem-YNY4BC67.js} +2 -2
  30. package/lib/{updateMenuItem-M5U4T3L7.js.map → updateMenuItem-YNY4BC67.js.map} +1 -1
  31. package/lib/{userDetail-ODAEQUYS.js → userDetail-53CJQES3.js} +2 -2
  32. package/lib/{userDetail-ODAEQUYS.js.map → userDetail-53CJQES3.js.map} +1 -1
  33. package/lib/{userList-TSYEABRN.js → userList-NQKY4SV2.js} +2 -2
  34. package/lib/{userList-TSYEABRN.js.map → userList-NQKY4SV2.js.map} +1 -1
  35. package/package.json +1 -1
  36. package/lib/chunk-AGGPFMZE.js +0 -3
  37. package/lib/chunk-AGGPFMZE.js.map +0 -1
  38. package/lib/chunk-JAGE2XCG.js +0 -2
  39. package/lib/chunk-Q4PXPBQR.js +0 -2
  40. package/lib/chunk-Q4PXPBQR.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"ybAiBA,IAAMA,EAAkDC,CAAAA,CAAAA,EAAS,CAC/D,GAAM,CAAE,WAAAC,CAAAA,CAAAA,CAAa,QAAAC,CAAAA,CAAAA,CAAU,MAAAC,CAAAA,CAAAA,CAAQ,MAAAC,CAAO,CAAA,QAAA,CAAAC,CAAS,CAAA,CAAIL,CACrD,CAAA,CAACM,CAAWC,CAAAA,CAAY,EAAIC,QAAmB,CAAA,EAAE,CAAA,CACjD,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIF,SAAkC,EAAE,CAClE,CAAA,CAACG,GAAeC,CAAAA,CAAgB,CAAIJ,CAAAA,QAAAA,CAAmBJ,GAAS,EAAE,CAClE,CAAA,CAAE,CAAAS,CAAAA,CAAE,CAAIC,CAAAA,CAAAA,GACR,EAAGC,CAAe,CAAA,CAAIC,aAAc,EAAA,CAEpCC,CAAmBC,CAAAA,WAAAA,CAAaC,GAA2B,CAC/DZ,CAAAA,CAAaY,CAAe,EAC9B,CAAG,CAAA,EAAE,CAAA,CAECC,EAAkB,CAACC,CAAAA,CAAuBC,CAAoB,GAAA,CAClE,IAAIC,CAAAA,CAAsB,EAAC,CAE3B,OAAIF,CACFE,CAAAA,CAAAA,CAAY,CAAC,GAAG,IAAI,GAAA,CAAIZ,GAAc,CAAA,MAAA,CAAOW,CAAK,CAAC,CAAC,CAEpDC,EAAAA,CAAAA,CAAYZ,GAAc,CAAA,KAAA,EAE1BW,CAAAA,CAAAA,CAAM,QAAQE,CAAQ,EAAA,CACpB,IAAMC,CAAAA,CAAQF,CAAU,CAAA,SAAA,CAAUG,CAAQA,EAAAA,CAAAA,GAASF,CAAI,CACnDC,CAAAA,CAAAA,CAAQ,CACVF,CAAAA,EAAAA,CAAAA,CAAU,MAAOE,CAAAA,CAAAA,CAAO,CAAC,EAE7B,CAAC,CAGIF,CAAAA,CAAAA,CACT,CAEMI,CAAAA,CAAAA,CAAgB,CAAC,CAAA,CAAwBL,CAAoB,GAAA,CACjE,IAAMD,CAAeD,CAAAA,CAAAA,CAAgB,CAAE,CAAA,MAAA,CAAO,OAASE,CAAAA,CAAK,CAC5DV,CAAAA,CAAAA,CAAiBS,CAAY,CAC7BhB,CAAAA,CAAAA,GAAWgB,CAAY,EACzB,CAEAO,CAAAA,SAAAA,CAAU,IAAM,CACdhB,EAAiBR,CAAS,EAAA,EAAE,EAC9B,CAAG,CAAA,CAACA,CAAK,CAAC,EAEVwB,SAAU,CAAA,IAAM,CACVzB,CAAAA,EACFY,CAAgB,CAAA,IAAM,CAEpBR,CAAAA,CAAAA,CAAcN,GAAe,EAAC,EAAG,GAAI,CAAA,CAAC,CAAE,QAAA,CAAA4B,CAAS,CAAA,GAAMA,CAAQ,CAAC,EAClE,CAAC,EAEL,CAAG,CAAA,CAAC1B,CAAQF,CAAAA,CAAW,CAAC,CAExB2B,CAAAA,SAAAA,CAAU,IAAM,CACd,IAAMP,CAAAA,CAAAA,CAAgBpB,CAAe,EAAA,IAAI,MACvC,CAAA,CAAC6B,CAAKC,CAAAA,CAAAA,IACJD,CAAIC,CAAAA,CAAAA,CAAK,QAAQ,CAAA,CAAIA,EAAK,WAAY,CAAA,KAAA,CAAML,CAAQf,EAAAA,GAAAA,EAAe,QAASe,CAAAA,CAAAA,CAAK,KAAK,CAAC,EAChFI,CAET,CAAA,CAAA,EACF,CAAA,CAEApB,CAAcW,CAAAA,CAAY,EAC5B,CAAA,CAAG,CAACV,GAAeV,CAAAA,CAAW,CAAC,CAAA,CAE/B,IAAM+B,CAAAA,CAAAA,CAAS/B,CAAe,EAAA,IAAI,GAAIyB,CAAAA,CAAAA,GAAS,CAC7C,GAAA,CAAKA,CAAK,CAAA,QAAA,CACV,KAAOA,CAAAA,CAAAA,CAAK,SACZ,KAAO,CAAA,CAACxB,CACN+B,EAAAA,GAAAA,CAACC,SAAA,CACC,OAAA,CAASzB,CAAWiB,CAAAA,CAAAA,CAAK,QAAQ,CACjC,CAAA,QAAA,CAAUS,CAAK,EAAA,CACbR,CACEQ,CAAAA,CAAAA,CACAT,CAAK,CAAA,WAAA,EAAa,IAAIU,CAAcA,EAAAA,CAAAA,CAAW,KAAK,CACtD,EACF,CAAA,CAEC,QAAAvB,CAAAA,CAAAA,CAAE,kBAAkB,CACvB,CAAA,CAAA,CAEF,QACEoB,CAAAA,GAAAA,CAACC,QAAS,CAAA,KAAA,CAAT,CAAe,KAAA,CAAO,CAAE,KAAO,CAAA,MAAO,CAAG,CAAA,KAAA,CAAOvB,GAAe,CAAA,QAAA,CAAUT,CACxE,CAAA,QAAA,CAAA+B,IAACI,GAAA,CAAA,CAAI,MAAQ,CAAA,CAAC,EAAI,CAAA,EAAE,CAAG,CAAA,KAAA,CAAO,CAAE,KAAO,CAAA,MAAO,CAC3C,CAAA,QAAA,CAAAX,CAAK,CAAA,WAAA,EAAa,GAAIU,CAAAA,CAAAA,EACrBH,IAACK,GAAA,CAAA,CAA2B,IAAM,CAAA,CAAA,CAChC,QAAAL,CAAAA,GAAAA,CAACC,QAAA,CAAA,CACC,MAAOE,CAAW,CAAA,KAAA,CAClB,QAAUD,CAAAA,CAAAA,EAAK,CACbR,CAAAA,CAAcQ,CAAG,CAAA,CAACC,EAAW,KAAK,CAAC,EACrC,CAAA,CAEC,QAAAA,CAAAA,CAAAA,CAAW,KACd,CAAA,CAAA,CAAA,CARQA,EAAW,KASrB,CACD,CACH,CAAA,CAAA,CACF,CAEJ,CAAA,CAAE,CAEF,CAAA,OACEH,IAACM,QAAA,CAAA,CACC,KAAO,CAAA,CAAE,KAAO,CAAA,MAAO,CACvB,CAAA,WAAA,CAAY,SACZ,SAAWjC,CAAAA,CAAAA,CACX,KAAO0B,CAAAA,CAAAA,CACP,QAAUf,CAAAA,CAAAA,CACZ,CAEJ,CAAA,CAEOuB,EAAQzC,ECjFP,CAjCR,GAAM,CAAE,KAAA0C,CAAK,CAAA,CAAIC,UACX,CAAA,CAAE,MAAAC,CAAAA,EAAO,CAAIC,CAAAA,MAAAA,CAObC,GAAkD7C,CAAS,EAAA,CAC/D,GAAM,CAAE,MAAAG,CAAAA,CAAAA,CAAS,CAAM,CAAA,CAAA,KAAA,CAAAC,EAAO,QAAAF,CAAAA,CAAAA,CAAU,QAAAG,CAAAA,CAAS,CAAIL,CAAAA,CAAAA,CAC/C,CAAE,IAAA,CAAMoC,EAAY,SAAWU,CAAAA,CAAAA,CAAqB,KAAAC,CAAAA,CAAM,CAAIC,CAAAA,CAAAA,EAC9D,CAAA,CAAE,KAAMC,CAAO,CAAA,SAAA,CAAWC,CAAe,CAAA,CAAIC,GAAS,EAAA,CACtD,CAACC,GAAAA,CAAUC,CAAW,CAAI7C,CAAAA,QAAAA,CAAsD,EAAE,CAClF8C,CAAAA,CAAAA,CAAoBlB,CAAY,EAAA,MAAA,CAAOV,GAAQA,CAAK,CAAA,SAAS,CAC7D6B,CAAAA,CAAAA,CAAkBnB,CAAY,EAAA,MAAA,CAAOV,CAAQ,EAAA,CAACA,EAAK,SAAS,CAAA,CAC5D8B,CAAYV,CAAAA,CAAAA,EAAuBI,CACnC,CAAA,CAAE,CAAArC,CAAAA,CAAE,EAAIC,CAAe,EAAA,CAc7B,GAZAc,SAAAA,CAAU,IAAM,CACd,IAAM6B,CAAAA,CAAoD,EAE1D,CAAA,MAAA,CAAO,IAAKrD,CAAAA,CAAAA,EAAS,EAAE,CAAE,CAAA,OAAA,CAAQe,GAAO,CAClCA,CAAAA,GAAQ,QACVsC,EAAAA,CAAAA,CAAK,IAAK,CAAA,CAAE,MAAQtC,CAAAA,CAAAA,CAAK,YAAaf,CAAQe,GAAAA,CAAG,CAAK,EAAA,EAAG,CAAC,EAE9D,CAAC,EAEDkC,CAAYI,CAAAA,CAAI,EAClB,CAAA,CAAG,CAACrD,CAAK,CAAC,CAAA,CAEN2C,EACF,OACEd,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,qBACb,CAAA,QAAA,CAAAA,GAACQ,CAAAA,CAAAA,CAAA,CAAK,IAAK,CAAA,QAAA,CAAU,QAAA5B,CAAAA,CAAAA,CAAE,kCAAkC,CAAA,CAAE,CAC7D,CAAA,CAAA,CAIJ,IAAM6C,CAAU,CAAA,IAAM,CACpBL,CAAAA,CAAYM,CAAQ,EAAA,CAAC,GAAGA,CAAAA,CAAM,CAAE,MAAQ,CAAA,EAAA,CAAI,WAAa,CAAA,EAAG,CAAC,CAAC,EAChE,EAEMC,CAAcnC,CAAAA,CAAAA,EAAkB,CACpC4B,CAAAA,CAAYM,CAAQA,EAAAA,CAAAA,CAAK,MAAO,CAAA,CAACE,EAAGC,CAAMA,GAAAA,CAAAA,GAAMrC,CAAK,CAAC,EACxD,CAEA,CAAA,OACEsC,IAAC,CAAA,KAAA,CAAA,CAAI,UAAU,sBACb,CAAA,QAAA,CAAA,CAAA9B,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,OAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC+B,QAAA,CAAQ,MAAA,CAAM,CAAE,CAAA,CAAA,QAAA,CAAAnD,CAAE,CAAA,iCAAiC,CAAE,CAAA,CAAA,CACxD,EACAoB,GAACgC,CAAAA,QAAAA,CAAA,CAAS,MAAA,CAAM,CAAC,CAAA,CAAA,OAAA,CAAST,CACxB,CAAA,QAAA,CAAAvB,IAACO,CAAA,CAAA,CACC,KAAOpC,CAAAA,CAAAA,EAAO,MACd,CAAA,QAAA,CAAUF,CACV,CAAA,WAAA,CAAaoD,EACb,MAAQnD,CAAAA,CAAAA,CACR,QAAU+D,CAAAA,CAAAA,EAAY,CACpB7D,CAAAA,GAAW,CACT,GAAGD,EACH,MAAQ8D,CAAAA,CACV,CAAC,EACH,CACF,CAAA,CAAA,CACF,CACAjC,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,OAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC+B,OAAA,CAAA,CAAQ,MAAM,CAAA,CAAA,CAAA,CAAE,SAAAnD,CAAE,CAAA,iCAAiC,CAAE,CAAA,CAAA,CACxD,CACCuC,CAAAA,GAAAA,CAAS,GAAI,CAAA,CAAC1B,EAAMD,CACnBQ,GAAAA,GAAAA,CAACkC,IAAA,CAAA,CACC,KACEJ,CAAAA,IAAAA,CAACK,KAAA,CAAA,CACC,UAAAnC,GAACQ,CAAAA,CAAAA,CAAA,CAAM,QAAA,CAAA5B,CAAE,CAAA,aAAa,CAAE,CAAA,CAAA,CACvBX,EACC+B,GAACQ,CAAAA,CAAAA,CAAA,CAAM,QAAA,CAAAQ,CAAO,EAAA,IAAA,CAAKoB,CAAQ,EAAA,MAAA,CAAOA,EAAK,EAAE,CAAA,GAAM3C,CAAK,CAAA,MAAM,CAAG,EAAA,IAAA,CAAK,CAElEO,CAAAA,GAAAA,CAACW,OAAA,CACC,QAAA,CAAU1C,CACV,CAAA,KAAA,CAAOkD,GAAS3B,CAAAA,CAAK,CAAE,CAAA,MAAA,EAAU,OACjC,KAAO,CAAA,CAAE,KAAO,CAAA,OAAQ,CACxB,CAAA,WAAA,CAAaZ,CAAE,CAAA,sCAAsC,EACrD,QAAUyD,CAAAA,CAAAA,EAAiB,CACzBjB,CAAAA,CAAYkB,CAAO,EAAA,CACjB,IAAMC,CAAAA,CAAOD,EAAI,KAAM,EAAA,CACvB,OAAAC,CAAAA,CAAK/C,CAAK,CAAA,CAAE,MAAS6C,CAAAA,CAAAA,CACdE,CACT,CAAC,EACH,CAEC,CAAA,QAAA,CAAAvB,CAAO,EAAA,GAAA,CAAIoB,CACVpC,EAAAA,GAAAA,CAACU,GAAA,CAEC,KAAA,CAAO0B,CAAK,CAAA,EAAA,CACZ,QAAUjB,CAAAA,GAAAA,CAAS,IAAK,CAAA,CAAC,CAAE,MAAAqB,CAAAA,CAAO,CAAMA,GAAAA,CAAAA,GAAW,MAAOJ,CAAAA,CAAAA,CAAK,EAAE,CAAC,EAEjE,QAAAA,CAAAA,CAAAA,CAAK,IAJDA,CAAAA,CAAAA,CAAAA,CAAK,EAKZ,CACD,CACH,CAAA,CAAA,CAAA,CAEJ,EAGF,SAAU,CAAA,MAAA,CACV,KACE,CAAA,CAACnE,CACC+B,EAAAA,GAAAA,CAACyC,MAAA,CAAA,CACC,KAAK,MACL,CAAA,OAAA,CAAS,IAAM,CACbd,CAAWnC,CAAAA,CAAK,EAClB,CAAA,CAEC,SAAAZ,CAAE,CAAA,2BAA2B,CAChC,CAAA,CAAA,CAIH,QAAAuC,CAAAA,GAAAA,CAAS3B,CAAK,CAAA,CAAE,OACfQ,GAACgC,CAAAA,QAAAA,CAAA,CAAS,MAAA,CAAM,CAAC,CAAA,CAAA,OAAA,CAAST,CACxB,CAAA,QAAA,CAAAvB,IAACO,CAAA,CAAA,CACC,KAAOpC,CAAAA,CAAAA,GAAQgD,GAAS3B,CAAAA,CAAK,CAAE,CAAA,MAAM,EACrC,QAAUvB,CAAAA,CAAAA,CACV,MAAQC,CAAAA,CAAAA,CACR,WAAaoD,CAAAA,CAAAA,CACb,QAAUW,CAAAA,CAAAA,EAAY,CACpB7D,CAAW,GAAA,CACT,GAAGD,CAAAA,CACH,CAACgD,GAAAA,CAAS3B,CAAK,CAAA,CAAE,MAAM,EAAGyC,CAC5B,CAAC,EACH,CACF,CAAA,CAAA,CACF,CAEAjC,CAAAA,GAAAA,CAAC0C,MAAA,CAAM,WAAA,CAAa9D,CAAE,CAAA,uCAAuC,CAAG,CAAA,CAAA,CAAA,CA/B7DY,CAiCP,CACD,EACA,CAACvB,CAAAA,EACA+B,GAACyC,CAAAA,MAAAA,CAAA,CAAO,KAAA,CAAK,CAAC,CAAA,CAAA,IAAA,CAAK,SAAS,OAAShB,CAAAA,CAAAA,CAClC,QAAA7C,CAAAA,CAAAA,CAAE,wBAAwB,CAAA,CAC7B,CAEJ,CAAA,CAAA,CAEJ,EAEO+D,CAAQ/B,CAAAA,EAAAA,CCpJf,GAAM,CAAE,IAAA,CAAAJ,EAAK,CAAA,CAAIC,UAOXmC,CAAAA,EAAAA,CAAwD7E,GAAS,CACrE,GAAM,CAAE,MAAA,CAAAG,CAAS,CAAA,CAAA,CAAA,CAAM,KAAAC,CAAAA,CAAAA,CAAO,SAAAF,CAAU,CAAA,QAAA,CAAAG,CAAS,CAAA,CAAIL,CAC/C,CAAA,CAAE,IAAMC,CAAAA,CAAAA,CAAa,UAAAuD,CAAW,CAAA,KAAA,CAAAT,CAAM,CAAA,CAAI+B,GAAkB,EAAA,CAC5D,CAAE,CAAA,CAAAjE,CAAE,CAAIC,CAAAA,CAAAA,EAEd,CAAA,OAAIiC,CAEAd,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,sBACb,QAAAA,CAAAA,GAAAA,CAACQ,EAAA,CAAA,CAAK,IAAK,CAAA,QAAA,CAAU,QAAA5B,CAAAA,CAAAA,CAAE,kCAAkC,CAAE,CAAA,CAAA,CAC7D,CAKFoB,CAAAA,GAAAA,CAACgC,QAAA,CAAA,CAAS,MAAM,CAAA,CAAA,CAAA,CAAC,QAAST,CACxB,CAAA,QAAA,CAAAvB,GAACO,CAAAA,CAAAA,CAAA,CACC,KAAA,CAAOpC,CACP,CAAA,WAAA,CAAaH,EACb,QAAUC,CAAAA,CAAAA,CACV,MAAQC,CAAAA,CAAAA,CACR,QAAUE,CAAAA,CAAAA,CACZ,CACF,CAAA,CAEJ,EAEO0E,CAAQF,CAAAA,EAAAA,CC5Bf,IAAMG,EAA2ChF,CAAAA,CAAAA,EAA+B,CAC9E,GAAM,CAAE,KAAAI,CAAAA,CAAM,CAAIJ,CAAAA,CAAAA,CAEZ,CAAE,iBAAA,CAAAiF,CAAkB,CAAIC,CAAAA,CAAAA,EAE9B,CAAA,OAAID,CAAsB,GAAA,IAAA,CACjBhD,GAAC2C,CAAAA,CAAAA,CAAA,CAAoB,GAAG5E,CAAAA,CAAO,KAAOI,CAAAA,CAAAA,CAAgC,CAGxE6B,CAAAA,GAAAA,CAAC8C,CAAA,CAAA,CAAuB,GAAG/E,CAAO,CAAA,KAAA,CAAOI,CAAgC,CAAA,CAClF,CAEO+E,CAAAA,CAAAA,CAAQH,OClBFI,EAAe,CAAA,CAAC,CAAE,IAAA,CAAAC,EAAM,SAAAC,CAAAA,CAAU,CAA6D,GAAA,CAC1G,GAAM,CAAE,OAAAC,CAAAA,CAAQ,EAAIC,GAAI,CAAA,MAAA,EAClB,CAAA,CAAE,CAAA3E,CAAAA,CAAE,CAAIC,CAAAA,CAAAA,GACR2E,CAASC,CAAAA,CAAAA,EACTC,CAAAA,CAAAA,CAASC,CAAc,EAAA,CAEvBC,GAAeR,CAAAA,CAAAA,GAAS,SAExBS,CAAuBjF,CAAAA,CAAAA,CAAfgF,GAAiB,CAAA,kBAAA,CAAwB,kBAAN,CAAA,CAE3CE,CACJhC,CAAAA,IAAAA,CAAAiC,SAAA,CACE,QAAA,CAAA,CAAA/D,GAACgE,CAAAA,IAAAA,CAAK,IAAL,CAAA,CAAU,KAAOpF,CAAAA,CAAAA,CAAE,aAAa,CAAG,CAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAO,CAAC,CAAE,QAAU,CAAA,CAAA,CAAK,CAAC,CACxE,CAAA,QAAA,CAAAoB,GAACiE,CAAAA,KAAAA,CAAA,CAAM,QAAA,CAAU,CAACL,GAAAA,CAAc,EAClC,CACA5D,CAAAA,GAAAA,CAACgE,IAAK,CAAA,IAAA,CAAL,CAAU,IAAA,CAAK,aACd,CAAA,QAAA,CAAAhE,IAACkD,CAAA,CAAA,EAAe,CAClB,CAAA,CAAA,CAAA,CACF,CAoBF,CAAA,OAAOgB,GAML,CAAA,CACA,MAAAL,CACA,CAAA,KAAA,CAAO,QACP,CAAA,SAAA,CAAW,CACT,MAAA,CAAQ,UACV,CAAA,CACA,QAAAC,CACA,CAAA,SAAA,CA9BgB,MAChBK,CAAAA,CACAC,CACG,GAAA,CACH,IAAMC,CAAAA,CAAO,QAAQF,CAAO,CAAA,IAAI,CAC1BnG,CAAAA,CAAAA,CAAAA,CAAcmG,CAAO,CAAA,WAAA,CAEvBP,GACF,EAAA,MAAMJ,EAAO,WAAY,CAAA,CAAE,IAAAa,CAAAA,CAAAA,CAAM,WAAArG,CAAAA,CAAY,CAAC,CAAA,CAC9CsF,EAAQ,OAAQ1E,CAAAA,CAAAA,CAAE,yBAAyB,CAAC,CAE5C,GAAA,MAAM8E,CAAO,CAAA,WAAA,CAAY,CAAE,EAAIU,CAAAA,CAAAA,EAAa,EAAI,CAAA,IAAA,CAAAC,CAAM,CAAA,WAAA,CAAArG,CAAY,CAAC,EACnEsF,CAAQ,CAAA,OAAA,CAAQ1E,CAAE,CAAA,yBAAyB,CAAC,CAE9CyE,CAAAA,CAAAA,CAAAA,KACF,CAgBA,CAAC,CACH","file":"chunk-LKQSOMD5.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={items}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n console.log('value', typeof value, value === null, JSON.stringify(value))\n const { permissionVersion } = useToolkitsStore()\n\n if (permissionVersion === PermissionVersion.V2) {\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n }\n\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/permission/components/permissionCollapse/index.tsx","../src/modules/permission/components/permissionList/PermissionWithGame.tsx","../src/modules/permission/components/permissionList/PermissionWithoutGame.tsx","../src/modules/permission/components/permissionList/index.tsx","../src/modules/permission/hooks/role-hooks.tsx"],"names":["PermissionCollapse","props","permissions","readonly","expand","value","onChange","activeKey","setActiveKey","useState","checkedMap","setCheckedMap","internalValue","setInternalValue","t","useTranslation","startTransition","useTransition","onCollapseChange","useCallback","key","getCheckedValue","checkedValue","codes","tempValue","code","index","item","onCheckChange","useEffect","category","acc","curr","items","jsx","Checkbox","e","permission","Row","Col","Collapse","permissionCollapse_default","Text","Typography","Option","Select","PermissionWithGame","isPermissionLoading","error","useAllPermissionsV2","games","isGamesLoading","useGames","gameList","setGameList","globalPermissions","gamePermissions","isLoading","list","addGame","prev","removeGame","_","i","jsxs","Divider","Skeleton","newValue","Card","Space","game","selectedValue","pev","temp","gameId","Button","Empty","PermissionWithGame_default","PermissionWithoutGame","useAllPermissions","PermissionWithoutGame_default","PermissionList","permissionVersion","useToolkitsStore","permissionList_default","useRoleModal","mode","onSuccess","message","App","create","useCreateRole","update","useUpdateRole","isCreateMode","title","content","Fragment","Form","Input","useFormModal","values","extraValues","name"],"mappings":"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","file":"chunk-K227EWOS.js","sourcesContent":["import { Checkbox, Col, Collapse, Row } from 'antd'\nimport type { CheckboxChangeEvent } from 'antd/es/checkbox'\nimport type { FC } from 'react'\nimport { useCallback, useEffect, useState, useTransition } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport type { PermissionEnumItem } from '../../types'\n\ninterface PermissionCollapseProps {\n expand?: boolean\n permissions?: PermissionEnumItem[]\n readonly?: boolean\n value?: string[]\n onChange?: (value: string[]) => void\n}\n\nconst PermissionCollapse: FC<PermissionCollapseProps> = props => {\n const { permissions, readonly, expand, value, onChange } = props\n const [activeKey, setActiveKey] = useState<string[]>([])\n const [checkedMap, setCheckedMap] = useState<Record<string, boolean>>({})\n const [internalValue, setInternalValue] = useState<string[]>(value ?? [])\n const { t } = useTranslation()\n const [, startTransition] = useTransition()\n\n const onCollapseChange = useCallback((key: string | string[]) => {\n setActiveKey(key as string[])\n }, [])\n\n const getCheckedValue = (checkedValue: boolean, codes: string[]) => {\n let tempValue: string[] = []\n\n if (checkedValue) {\n tempValue = [...new Set(internalValue.concat(codes))]\n } else {\n tempValue = internalValue.slice()\n\n codes.forEach(code => {\n const index = tempValue.findIndex(item => item === code)\n if (index > -1) {\n tempValue.splice(index, 1)\n }\n })\n }\n\n return tempValue\n }\n\n const onCheckChange = (e: CheckboxChangeEvent, codes: string[]) => {\n const checkedValue = getCheckedValue(e.target.checked, codes)\n setInternalValue(checkedValue)\n onChange?.(checkedValue)\n }\n\n useEffect(() => {\n setInternalValue(value ?? [])\n }, [value])\n\n useEffect(() => {\n if (expand) {\n startTransition(() => {\n // 改变展开状态\n setActiveKey((permissions ?? []).map(({ category }) => category))\n })\n }\n }, [expand, permissions])\n\n useEffect(() => {\n const checkedValue = (permissions ?? []).reduce(\n (acc, curr) => {\n acc[curr.category] = curr.permissions.every(item => internalValue?.includes(item.value))\n return acc\n },\n {} as Record<string, boolean>,\n )\n\n setCheckedMap(checkedValue)\n }, [internalValue, permissions])\n\n const items = (permissions ?? []).map(item => ({\n key: item.category,\n label: item.category,\n extra: !readonly && (\n <Checkbox\n checked={checkedMap[item.category]}\n onChange={e => {\n onCheckChange(\n e,\n item.permissions?.map(permission => permission.value),\n )\n }}\n >\n {t('global.selectAll')}\n </Checkbox>\n ),\n children: (\n <Checkbox.Group style={{ width: '100%' }} value={internalValue} disabled={readonly}>\n <Row gutter={[10, 10]} style={{ width: '100%' }}>\n {item.permissions?.map(permission => (\n <Col key={permission.value} span={6}>\n <Checkbox\n value={permission.value}\n onChange={e => {\n onCheckChange(e, [permission.value])\n }}\n >\n {permission.label}\n </Checkbox>\n </Col>\n ))}\n </Row>\n </Checkbox.Group>\n ),\n }))\n\n return (\n <Collapse\n style={{ width: '100%' }}\n collapsible=\"header\"\n activeKey={activeKey}\n items={items}\n onChange={onCollapseChange}\n />\n )\n}\n\nexport default PermissionCollapse\n","import { Button, Card, Divider, Empty, Select, Skeleton, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport { useAllPermissionsV2 } from '../../services'\nimport type { RoleV2 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\nconst { Option } = Select\n\ninterface PermissionWithGameProps extends PermissionListPropsBase {\n value?: RoleV2['permissions']\n onChange?: (checkedValue: RoleV2['permissions']) => void\n}\n\nconst PermissionWithGame: FC<PermissionWithGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permission, isLoading: isPermissionLoading, error } = useAllPermissionsV2()\n const { data: games, isLoading: isGamesLoading } = useGames()\n const [gameList, setGameList] = useState<{ gameId: string; permissions: string[] }[]>([])\n const globalPermissions = permission?.filter(item => item.is_common)\n const gamePermissions = permission?.filter(item => !item.is_common)\n const isLoading = isPermissionLoading || isGamesLoading\n const { t } = useTranslation()\n\n useEffect(() => {\n const list: { gameId: string; permissions: string[] }[] = []\n\n Object.keys(value ?? {}).forEach(key => {\n if (key !== 'global') {\n list.push({ gameId: key, permissions: value?.[key] ?? [] })\n }\n })\n\n setGameList(list)\n }, [value])\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n const addGame = () => {\n setGameList(prev => [...prev, { gameId: '', permissions: [] }])\n }\n\n const removeGame = (index: number) => {\n setGameList(prev => prev.filter((_, i) => i !== index))\n }\n\n return (\n <div className=\"flex flex-col w-full\">\n <div className=\"mb-12\">\n <Divider dashed>{t('PermissionList.baseSectionTitle')}</Divider>\n </div>\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.global}\n readonly={readonly}\n permissions={globalPermissions}\n expand={expand}\n onChange={newValue => {\n onChange?.({\n ...value,\n global: newValue,\n })\n }}\n />\n </Skeleton>\n <div className=\"my-12\">\n <Divider dashed>{t('PermissionList.gameSectionTitle')}</Divider>\n </div>\n {gameList.map((item, index) => (\n <Card\n title={\n <Space>\n <Text>{t('global.game')}</Text>\n {readonly ? (\n <Text>{games?.find(game => String(game.id) === item.gameId)?.name}</Text>\n ) : (\n <Select\n disabled={readonly}\n value={gameList[index].gameId || undefined}\n style={{ width: '160px' }}\n placeholder={t('PermissionList.gameSelectPlaceholder')}\n onChange={selectedValue => {\n setGameList(pev => {\n const temp = pev.slice()\n temp[index].gameId = selectedValue\n return temp\n })\n }}\n >\n {games?.map(game => (\n <Option\n key={game.id}\n value={game.id}\n disabled={gameList.some(({ gameId }) => gameId === String(game.id))}\n >\n {game.name}\n </Option>\n ))}\n </Select>\n )}\n </Space>\n }\n key={index}\n className=\"mb-6\"\n extra={\n !readonly && (\n <Button\n type=\"link\"\n onClick={() => {\n removeGame(index)\n }}\n >\n {t('PermissionList.removeText')}\n </Button>\n )\n }\n >\n {gameList[index].gameId ? (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value?.[gameList[index].gameId]}\n readonly={readonly}\n expand={expand}\n permissions={gamePermissions}\n onChange={newValue => {\n onChange?.({\n ...value,\n [gameList[index].gameId]: newValue,\n })\n }}\n />\n </Skeleton>\n ) : (\n <Empty description={t('PermissionList.gameSectionDescription')} />\n )}\n </Card>\n ))}\n {!readonly && (\n <Button block type=\"dashed\" onClick={addGame}>\n {t('PermissionList.addText')}\n </Button>\n )}\n </div>\n )\n}\n\nexport default PermissionWithGame\n","import { Skeleton, Typography } from 'antd'\nimport type { FC } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nimport { useAllPermissions } from '../../services'\nimport type { RoleV1 } from '../../types'\nimport PermissionCollapse from '../permissionCollapse'\nimport type { PermissionListPropsBase } from './types'\n\nconst { Text } = Typography\n\ninterface PermissionWithoutGameProps extends PermissionListPropsBase {\n value?: RoleV1['permissions']\n onChange?: (checkedValue: RoleV1['permissions']) => void\n}\n\nconst PermissionWithoutGame: FC<PermissionWithoutGameProps> = props => {\n const { expand = true, value, readonly, onChange } = props\n const { data: permissions, isLoading, error } = useAllPermissions()\n const { t } = useTranslation()\n\n if (error) {\n return (\n <div className=\"flex justify-center\">\n <Text type=\"danger\">{t('PermissionList.failedDescription')}</Text>\n </div>\n )\n }\n\n return (\n <Skeleton active loading={isLoading}>\n <PermissionCollapse\n value={value}\n permissions={permissions}\n readonly={readonly}\n expand={expand}\n onChange={onChange}\n />\n </Skeleton>\n )\n}\n\nexport default PermissionWithoutGame\n","import type { FC } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\n\nimport type { RoleV1, RoleV2 } from '../../types'\nimport PermissionWithGame from './PermissionWithGame'\nimport PermissionWithoutGame from './PermissionWithoutGame'\nimport type { PermissionListPropsBase } from './types'\n\ninterface PermissionListProps extends PermissionListPropsBase {\n value?: RoleV1['permissions'] | RoleV2['permissions']\n onChange?: (checkedValue: RoleV1['permissions'] | RoleV2['permissions']) => void\n}\n\nconst PermissionList: FC<PermissionListProps> = (props: PermissionListProps) => {\n const { value } = props\n console.log('value', typeof value, value === null, JSON.stringify(value))\n const { permissionVersion } = useToolkitsStore()\n\n if (permissionVersion === PermissionVersion.V2) {\n return <PermissionWithGame {...props} value={value as RoleV2['permissions']} />\n }\n\n return <PermissionWithoutGame {...props} value={value as RoleV1['permissions']} />\n}\n\nexport default PermissionList\n","import { App, Form, Input } from 'antd'\n\nimport { useFormModal } from '@/hooks/modal'\nimport { useTranslation } from '@/locale'\n\nimport PermissionList from '../components/permissionList'\nimport { useCreateRole, useUpdateRole } from '../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../types'\n\nexport const useRoleModal = ({ mode, onSuccess }: { mode: 'create' | 'update'; onSuccess?: () => void }) => {\n const { message } = App.useApp()\n const { t } = useTranslation()\n const create = useCreateRole()\n const update = useUpdateRole()\n\n const isCreateMode = mode === 'create'\n\n const title = isCreateMode ? t('Role.createTitle') : t('Role.updateTitle')\n\n const content = (\n <>\n <Form.Item label={t('global.name')} name=\"name\" rules={[{ required: true }]}>\n <Input disabled={!isCreateMode} />\n </Form.Item>\n <Form.Item name=\"permissions\">\n <PermissionList />\n </Form.Item>\n </>\n )\n\n const onConfirm = async (\n values: { name: string; permissions: RoleListItem['permissions'] },\n extraValues: { id: number },\n ) => {\n const name = `role_${values.name}`\n const permissions = values.permissions\n\n if (isCreateMode) {\n await create.mutateAsync({ name, permissions })\n message.success(t('Role.createSuccessfully'))\n } else {\n await update.mutateAsync({ id: extraValues?.id, name, permissions })\n message.success(t('Role.updateSuccessfully'))\n }\n onSuccess?.()\n }\n\n return useFormModal<\n {\n name: string\n permissions: RoleV1['permissions'] | RoleV2['permissions']\n },\n { id: number }\n >({\n title,\n width: '1000px',\n formProps: {\n layout: 'vertical',\n },\n content,\n onConfirm,\n })\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {l as l$1,m}from'./chunk-AGGPFMZE.js';import {useQueryClient,useMutation}from'@tanstack/react-query';function y(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.create,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,id:0,is_model:!0}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}function l(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.update,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,is_model:!0}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}function c(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.delete,mutationFn:n=>u.post("/api/usystem/menu/delete",null,{searchParams:{id:n}}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}export{y as a,l as b,c};//# sourceMappingURL=chunk-7W2ZX3CB.js.map
2
- //# sourceMappingURL=chunk-7W2ZX3CB.js.map
1
+ import {l as l$1,m}from'./chunk-EKBAANKX.js';import {useQueryClient,useMutation}from'@tanstack/react-query';function y(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.create,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,id:0,is_model:!0}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}function l(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.update,mutationFn:n=>u.post("/api/usystem/menu/set",{...n,is_model:!0}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}function c(){let u=l$1(),t=useQueryClient();return useMutation({mutationKey:m.menus.delete,mutationFn:n=>u.post("/api/usystem/menu/delete",null,{searchParams:{id:n}}),onSuccess:()=>{t.invalidateQueries({queryKey:m.menus.all}),t.invalidateQueries({queryKey:m.menus.navbar()});}})}export{y as a,l as b,c};//# sourceMappingURL=chunk-MFVQ4PJU.js.map
2
+ //# sourceMappingURL=chunk-MFVQ4PJU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/menu/services/index.ts"],"names":["useCreateMenu","ky","useKy","queryClient","useQueryClient","useMutation","queryKeys","arg","useUpdateMenu","useRemoveMenu","id"],"mappings":"4GAMO,SAASA,GAAgB,CAC9B,IAAMC,CAAKC,CAAAA,GAAAA,GACLC,CAAcC,CAAAA,cAAAA,GAEpB,OAAOC,WAAAA,CAAY,CACjB,WAAaC,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,CAC7B,WAAaC,CAAkCN,EAAAA,CAAAA,CAAG,KAAK,uBAAyB,CAAA,CAAE,GAAGM,CAAK,CAAA,EAAA,CAAI,CAAG,CAAA,QAAA,CAAU,EAAK,CAAC,CAAA,CACjH,UAAW,IAAM,CACfJ,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAY,CAAA,iBAAA,CAAkB,CAAE,QAAUG,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASE,CAAAA,EAAgB,CAC9B,IAAMP,EAAKC,GAAM,EAAA,CACXC,EAAcC,cAAe,EAAA,CAEnC,OAAOC,WAAY,CAAA,CACjB,WAAaC,CAAAA,CAAAA,CAAU,MAAM,MAC7B,CAAA,UAAA,CAAaC,GAAsBN,CAAG,CAAA,IAAA,CAAK,wBAAyB,CAAE,GAAGM,CAAK,CAAA,QAAA,CAAU,EAAK,CAAC,CAAA,CAC9F,UAAW,IAAM,CACfJ,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAY,CAAA,iBAAA,CAAkB,CAAE,QAAUG,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASG,CAAAA,EAAgB,CAC9B,IAAMR,EAAKC,GAAM,EAAA,CACXC,EAAcC,cAAe,EAAA,CAEnC,OAAOC,WAAY,CAAA,CACjB,WAAaC,CAAAA,CAAAA,CAAU,MAAM,MAC7B,CAAA,UAAA,CAAaI,GAAeT,CAAG,CAAA,IAAA,CAAK,2BAA4B,IAAM,CAAA,CAAE,YAAc,CAAA,CAAE,GAAAS,CAAG,CAAE,CAAC,CAC9F,CAAA,SAAA,CAAW,IAAM,CACfP,CAAAA,CAAY,iBAAkB,CAAA,CAAE,SAAUG,CAAU,CAAA,KAAA,CAAM,GAAI,CAAC,CAAA,CAC/DH,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,MAAO,EAAE,CAAC,EACtE,CACF,CAAC,CACH","file":"chunk-7W2ZX3CB.js","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\n\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useCreateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.create,\n mutationFn: (arg: Omit<MenuListItem, 'id'>) => ky.post('/api/usystem/menu/set', { ...arg, id: 0, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useUpdateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.update,\n mutationFn: (arg: MenuListItem) => ky.post('/api/usystem/menu/set', { ...arg, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useRemoveMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.delete,\n mutationFn: (id: number) => ky.post('/api/usystem/menu/delete', null, { searchParams: { id } }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/modules/menu/services/index.ts"],"names":["useCreateMenu","ky","useKy","queryClient","useQueryClient","useMutation","queryKeys","arg","useUpdateMenu","useRemoveMenu","id"],"mappings":"4GAMO,SAASA,GAAgB,CAC9B,IAAMC,CAAKC,CAAAA,GAAAA,GACLC,CAAcC,CAAAA,cAAAA,GAEpB,OAAOC,WAAAA,CAAY,CACjB,WAAaC,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,CAC7B,WAAaC,CAAkCN,EAAAA,CAAAA,CAAG,KAAK,uBAAyB,CAAA,CAAE,GAAGM,CAAK,CAAA,EAAA,CAAI,CAAG,CAAA,QAAA,CAAU,EAAK,CAAC,CAAA,CACjH,UAAW,IAAM,CACfJ,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAY,CAAA,iBAAA,CAAkB,CAAE,QAAUG,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASE,CAAAA,EAAgB,CAC9B,IAAMP,EAAKC,GAAM,EAAA,CACXC,EAAcC,cAAe,EAAA,CAEnC,OAAOC,WAAY,CAAA,CACjB,WAAaC,CAAAA,CAAAA,CAAU,MAAM,MAC7B,CAAA,UAAA,CAAaC,GAAsBN,CAAG,CAAA,IAAA,CAAK,wBAAyB,CAAE,GAAGM,CAAK,CAAA,QAAA,CAAU,EAAK,CAAC,CAAA,CAC9F,UAAW,IAAM,CACfJ,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,GAAI,CAAC,EAC/DH,CAAY,CAAA,iBAAA,CAAkB,CAAE,QAAUG,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,EAAS,CAAC,EACtE,CACF,CAAC,CACH,CAEO,SAASG,CAAAA,EAAgB,CAC9B,IAAMR,EAAKC,GAAM,EAAA,CACXC,EAAcC,cAAe,EAAA,CAEnC,OAAOC,WAAY,CAAA,CACjB,WAAaC,CAAAA,CAAAA,CAAU,MAAM,MAC7B,CAAA,UAAA,CAAaI,GAAeT,CAAG,CAAA,IAAA,CAAK,2BAA4B,IAAM,CAAA,CAAE,YAAc,CAAA,CAAE,GAAAS,CAAG,CAAE,CAAC,CAC9F,CAAA,SAAA,CAAW,IAAM,CACfP,CAAAA,CAAY,iBAAkB,CAAA,CAAE,SAAUG,CAAU,CAAA,KAAA,CAAM,GAAI,CAAC,CAAA,CAC/DH,EAAY,iBAAkB,CAAA,CAAE,QAAUG,CAAAA,CAAAA,CAAU,MAAM,MAAO,EAAE,CAAC,EACtE,CACF,CAAC,CACH","file":"chunk-MFVQ4PJU.js","sourcesContent":["import { useMutation, useQueryClient } from '@tanstack/react-query'\n\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport type { MenuListItem } from '@/types'\n\nexport function useCreateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.create,\n mutationFn: (arg: Omit<MenuListItem, 'id'>) => ky.post('/api/usystem/menu/set', { ...arg, id: 0, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useUpdateMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.update,\n mutationFn: (arg: MenuListItem) => ky.post('/api/usystem/menu/set', { ...arg, is_model: true }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n\nexport function useRemoveMenu() {\n const ky = useKy()\n const queryClient = useQueryClient()\n\n return useMutation({\n mutationKey: queryKeys.menus.delete,\n mutationFn: (id: number) => ky.post('/api/usystem/menu/delete', null, { searchParams: { id } }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.all })\n queryClient.invalidateQueries({ queryKey: queryKeys.menus.navbar() })\n },\n })\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {a}from'./chunk-JAGE2XCG.js';import {a as a$1}from'./chunk-Q4PXPBQR.js';import {l}from'./chunk-AGGPFMZE.js';import {Form,Spin,Table,Result,theme,Space,Button}from'antd';import {forwardRef,useMemo,useRef,useState,useEffect,useCallback,cloneElement,useImperativeHandle,Fragment}from'react';import {jsx,jsxs}from'react/jsx-runtime';import {flushSync}from'react-dom';import {createRoot}from'react-dom/client';import {isEqual}from'lodash-es';import {create}from'zustand';import {devtools,subscribeWithSelector}from'zustand/middleware';import {useQuery}from'@tanstack/react-query';var Oe=d=>{let{extras:i,isConfirming:t,onConfirm:s,onReset:e,children:a$1,buttonsAlign:n="left",showReset:l}=d,{t:u}=a(),{token:{colorFillAlter:h,lineWidth:P,lineType:m,colorBorder:T,borderRadiusLG:w}}=theme.useToken();return jsx("div",{style:{maxWidth:"none",background:h,borderWidth:P,borderStyle:m,borderColor:T,borderRadius:w,padding:24,marginBottom:24},children:jsxs("div",{className:`flex ${n==="bottom"?"flex-col":"flex-row"}`,children:[jsx("div",{className:`${n==="left"?"flex-grow-0":"flex-1"}`,children:a$1}),jsx("div",{className:`${n==="bottom"?"text-end":"text-start"} ml-4`,children:jsxs(Space,{children:[jsx(Button,{type:"primary",disabled:t,onClick:s,children:u("FilterFormWrapper.confirmText")}),i?.map(F=>jsx(Fragment,{children:F.children},F.key)),l&&jsx(Button,{onClick:e,children:u("FilterFormWrapper.resetText")})]})})]})})},W=Oe;var We=d=>{let i=/(<[^>]*>)/;return d.split(i).filter(t=>t!=="")};function je(d){let i=document.createElement("div"),t=createRoot(i);return new Promise(s=>{setTimeout(()=>{flushSync(()=>{t.render(d);}),s(i.innerHTML);});})}var ke=d=>{let{texts:i,children:t}=d,[s,e]=useState("");return useEffect(()=>{je(t).then(a=>{let n=We(a);for(let l of i)for(let u=0;u<n.length;u++)n[u]=n[u].replace(String(l),`<span style='color: #DC143C;'>${l}</span>`);e(n.join(""));});},[t,i]),jsx("div",{dangerouslySetInnerHTML:{__html:s}})},ze=ke;var oe=Object.freeze({page:1,size:10,filters:Object.freeze({})}),Ue=()=>create()(devtools(subscribeWithSelector((d,i)=>({instances:new Map,registerInstance(t,s,e,a){d(n=>{let l=n.instances.get(t);if(l){if(l.refetch!==a){let P={...l,refetch:a},m=new Map(n.instances);return m.set(t,P),{instances:m}}return n}let u={id:t,url:s,queryKey:e,payload:oe,refetch:a},h=new Map(n.instances);return h.set(t,u),{instances:h}});},unregisterInstance(t){d(s=>{let e=new Map(s.instances);return e.delete(t)?{instances:e}:s});},updatePayload(t,s){d(e=>{let a=e.instances.get(t);if(!a)return e;let n={...a.payload,...s};if(!isEqual(a.payload,n)){let l={...a,payload:n},u=new Map(e.instances);return u.set(t,l),{instances:u}}return e});},getPayload(t){return i().instances.get(t)?.payload??oe},async refetch(t,s){let e=i().instances.get(t);if(!e)return;let a=!1;if(s){let n=e.payload,l={...n,...s};isEqual(n,l)||(i().updatePayload(t,s),a=!0);}if(!a)try{await e.refetch();}catch(n){throw n}},getInstance(t){return i().instances.get(t)},getAllInstances(){return Array.from(i().instances.values())}})),{name:"query-list-store"})),$e=Ue(),f=$e;var le=(e=>(e[e.Confirm=0]="Confirm",e[e.Reset=1]="Reset",e[e.Jump=2]="Jump",e[e.Init=3]="Init",e))(le||{}),ot=5*60*1e3,st=30*1e3,ie=["GET","HEAD"],ce=["POST","PUT","PATCH","DELETE"],at={display:"flex",justifyContent:"center",alignItems:"center",height:300},it=0,ct=()=>`queryList_${Date.now()}_${++it}`,lt=(d,i)=>{let{t}=a(),{form:s,identifier:e,code:a$2,onePage:n,buttonsAlign:l$1,showReset:u,defaultSize:h=10,refreshInterval:P=0,tableExtra:m,renderForm:T,afterSuccess:w,afterError:z,footer:F,pageSizeOptions:_,request:O,dataAdapter:N,...ue}=d,[o]=Form.useForm(s),p=useMemo(()=>e||ct(),[e]),x=useRef(3),{data:A,isLoading:de}=a$1(a$2),[pe,b]=useState(!1),V=useRef(!1),H=useRef(!1),fe=f(r=>r.getPayload(p)),me=l(),{page:Q,size:R=h,filters:g}=fe,ye=typeof O=="function"?O({page:Q,size:R,filters:g}):O,{url:D,method:ge="GET",body:he,searchParams:be,headers:Le,cacheTime:Ie=ot,staleTime:Pe=st}=ye,E=ge.toUpperCase();let Fe=ie.includes(E),xe=ce.includes(E),B={...g,...!n&&{page:Q,size:R}},L=he||(xe?B:void 0),Qe=be||B,Re=Le,K=useRef(!1),U=["queryList",D,p,Q,R,g],{data:y,isLoading:$,refetch:q}=useQuery({queryKey:U,queryFn:async()=>{try{let r={method:E,searchParams:Qe,headers:Re};L&&!Fe&&(L instanceof FormData||typeof L=="string"?r.body=L:r.json=L);let c=await me.request({url:D,...r});return K.current=!0,w?.(x.current,o,c),c}catch(r){let c=r instanceof Error?r:new Error(String(r));throw z?.(c,x.current,o),c}},retry:(r,c)=>!(r>=3||c?.message?.includes("401")),retryDelay:r=>Math.min(1e3*2**r,3e4),refetchOnWindowFocus:!1,refetchInterval:K.current?P:0,gcTime:Ie,staleTime:Pe,enabled:A&&pe}),G=useMemo(()=>{let r=N,c={total:y?.total,items:y?.list};return typeof r=="function"?{...c,...r(y)}:{...c,...r}},[N,y]);useEffect(()=>(f.getState().registerInstance(p,D,U,q),()=>{f.getState().unregisterInstance(p);}),[p,D]);let M=G.items,Y=G.total,Se=useMemo(()=>n?!1:{pageSizeOptions:_,showSizeChanger:!0,showQuickJumper:!0,current:Q,pageSize:R,total:Y,onChange:async(r,c)=>{x.current=2,f.getState().refetch(p,{page:r,size:c});}},[n,_,Q,R,Y,p]),J=useCallback(async()=>{x.current=0;try{await o.validateFields(),b(!0),f.getState().refetch(p,{page:1,filters:o.getFieldsValue()});}catch{b(!1);}},[o,p]),Te=useCallback(async()=>{x.current=1,o.resetFields();try{await o.validateFields({validateOnly:!0}),b(!0),f.getState().refetch(p,{page:1,filters:o.getFieldsValue()});}catch{b(!1);}},[o,p]),Ae=typeof T=="function"?jsx(W,{showReset:u,buttonsAlign:l$1,isConfirming:$,onReset:Te,onConfirm:J,children:cloneElement(T(o),{onKeyUp:r=>{r.key==="Enter"&&J();}})}):jsx(Form,{form:o}),De=typeof m=="function"?m(o,y):m,Ee=F?()=>F(y):void 0;return useEffect(()=>{if(!V.current||H.current)return;let r=o.getFieldsValue();g&&!isEqual(r,g)&&(H.current=!0,o.setFieldsValue(g),setTimeout(()=>{H.current=!1;},0));},[g,o]),useEffect(()=>{if(!A||V.current)return;let r=async()=>{try{o.resetFields();let X=await o.validateFields({validateOnly:!0});f.getState().updatePayload(p,{page:1,filters:X}),b(!0);}catch{b(!1);}finally{V.current=!0;}},c=requestAnimationFrame(()=>{Promise.resolve().then(r);});return ()=>{c&&cancelAnimationFrame(c);}},[A,p,o]),useImperativeHandle(i,()=>({data:y,dataSource:M,form:o,refetch:q}),[y,M,o,q]),de?jsx(Spin,{style:at}):A?jsxs("div",{children:[Ae,De,jsx(Table,{...ue,dataSource:M,loading:$,pagination:Se,footer:Ee})]}):jsx(Result,{status:403,subTitle:t("global.noEntitlement")})},ut=forwardRef(lt),dt=ut;export{W as a,ze as b,f as c,le as d,dt as e};//# sourceMappingURL=chunk-JUD7AMBZ.js.map
2
- //# sourceMappingURL=chunk-JUD7AMBZ.js.map
1
+ import {a}from'./chunk-TLXOBLJT.js';import {a as a$1}from'./chunk-7KC4QGFG.js';import {l}from'./chunk-EKBAANKX.js';import {Form,Spin,Table,Result,theme,Space,Button}from'antd';import {forwardRef,useMemo,useRef,useState,useEffect,useCallback,cloneElement,useImperativeHandle,Fragment}from'react';import {jsx,jsxs}from'react/jsx-runtime';import {flushSync}from'react-dom';import {createRoot}from'react-dom/client';import {isEqual}from'lodash-es';import {create}from'zustand';import {devtools,subscribeWithSelector}from'zustand/middleware';import {useQuery}from'@tanstack/react-query';var Oe=d=>{let{extras:i,isConfirming:t,onConfirm:s,onReset:e,children:a$1,buttonsAlign:n="left",showReset:l}=d,{t:u}=a(),{token:{colorFillAlter:h,lineWidth:P,lineType:m,colorBorder:T,borderRadiusLG:w}}=theme.useToken();return jsx("div",{style:{maxWidth:"none",background:h,borderWidth:P,borderStyle:m,borderColor:T,borderRadius:w,padding:24,marginBottom:24},children:jsxs("div",{className:`flex ${n==="bottom"?"flex-col":"flex-row"}`,children:[jsx("div",{className:`${n==="left"?"flex-grow-0":"flex-1"}`,children:a$1}),jsx("div",{className:`${n==="bottom"?"text-end":"text-start"} ml-4`,children:jsxs(Space,{children:[jsx(Button,{type:"primary",disabled:t,onClick:s,children:u("FilterFormWrapper.confirmText")}),i?.map(F=>jsx(Fragment,{children:F.children},F.key)),l&&jsx(Button,{onClick:e,children:u("FilterFormWrapper.resetText")})]})})]})})},W=Oe;var We=d=>{let i=/(<[^>]*>)/;return d.split(i).filter(t=>t!=="")};function je(d){let i=document.createElement("div"),t=createRoot(i);return new Promise(s=>{setTimeout(()=>{flushSync(()=>{t.render(d);}),s(i.innerHTML);});})}var ke=d=>{let{texts:i,children:t}=d,[s,e]=useState("");return useEffect(()=>{je(t).then(a=>{let n=We(a);for(let l of i)for(let u=0;u<n.length;u++)n[u]=n[u].replace(String(l),`<span style='color: #DC143C;'>${l}</span>`);e(n.join(""));});},[t,i]),jsx("div",{dangerouslySetInnerHTML:{__html:s}})},ze=ke;var oe=Object.freeze({page:1,size:10,filters:Object.freeze({})}),Ue=()=>create()(devtools(subscribeWithSelector((d,i)=>({instances:new Map,registerInstance(t,s,e,a){d(n=>{let l=n.instances.get(t);if(l){if(l.refetch!==a){let P={...l,refetch:a},m=new Map(n.instances);return m.set(t,P),{instances:m}}return n}let u={id:t,url:s,queryKey:e,payload:oe,refetch:a},h=new Map(n.instances);return h.set(t,u),{instances:h}});},unregisterInstance(t){d(s=>{let e=new Map(s.instances);return e.delete(t)?{instances:e}:s});},updatePayload(t,s){d(e=>{let a=e.instances.get(t);if(!a)return e;let n={...a.payload,...s};if(!isEqual(a.payload,n)){let l={...a,payload:n},u=new Map(e.instances);return u.set(t,l),{instances:u}}return e});},getPayload(t){return i().instances.get(t)?.payload??oe},async refetch(t,s){let e=i().instances.get(t);if(!e)return;let a=!1;if(s){let n=e.payload,l={...n,...s};isEqual(n,l)||(i().updatePayload(t,s),a=!0);}if(!a)try{await e.refetch();}catch(n){throw n}},getInstance(t){return i().instances.get(t)},getAllInstances(){return Array.from(i().instances.values())}})),{name:"query-list-store"})),$e=Ue(),f=$e;var le=(e=>(e[e.Confirm=0]="Confirm",e[e.Reset=1]="Reset",e[e.Jump=2]="Jump",e[e.Init=3]="Init",e))(le||{}),ot=5*60*1e3,st=30*1e3,ie=["GET","HEAD"],ce=["POST","PUT","PATCH","DELETE"],at={display:"flex",justifyContent:"center",alignItems:"center",height:300},it=0,ct=()=>`queryList_${Date.now()}_${++it}`,lt=(d,i)=>{let{t}=a(),{form:s,identifier:e,code:a$2,onePage:n,buttonsAlign:l$1,showReset:u,defaultSize:h=10,refreshInterval:P=0,tableExtra:m,renderForm:T,afterSuccess:w,afterError:z,footer:F,pageSizeOptions:_,request:O,dataAdapter:N,...ue}=d,[o]=Form.useForm(s),p=useMemo(()=>e||ct(),[e]),x=useRef(3),{data:A,isLoading:de}=a$1(a$2),[pe,b]=useState(!1),V=useRef(!1),H=useRef(!1),fe=f(r=>r.getPayload(p)),me=l(),{page:Q,size:R=h,filters:g}=fe,ye=typeof O=="function"?O({page:Q,size:R,filters:g}):O,{url:D,method:ge="GET",body:he,searchParams:be,headers:Le,cacheTime:Ie=ot,staleTime:Pe=st}=ye,E=ge.toUpperCase();let Fe=ie.includes(E),xe=ce.includes(E),B={...g,...!n&&{page:Q,size:R}},L=he||(xe?B:void 0),Qe=be||B,Re=Le,K=useRef(!1),U=["queryList",D,p,Q,R,g],{data:y,isLoading:$,refetch:q}=useQuery({queryKey:U,queryFn:async()=>{try{let r={method:E,searchParams:Qe,headers:Re};L&&!Fe&&(L instanceof FormData||typeof L=="string"?r.body=L:r.json=L);let c=await me.request({url:D,...r});return K.current=!0,w?.(x.current,o,c),c}catch(r){let c=r instanceof Error?r:new Error(String(r));throw z?.(c,x.current,o),c}},retry:(r,c)=>!(r>=3||c?.message?.includes("401")),retryDelay:r=>Math.min(1e3*2**r,3e4),refetchOnWindowFocus:!1,refetchInterval:K.current?P:0,gcTime:Ie,staleTime:Pe,enabled:A&&pe}),G=useMemo(()=>{let r=N,c={total:y?.total,items:y?.list};return typeof r=="function"?{...c,...r(y)}:{...c,...r}},[N,y]);useEffect(()=>(f.getState().registerInstance(p,D,U,q),()=>{f.getState().unregisterInstance(p);}),[p,D]);let M=G.items,Y=G.total,Se=useMemo(()=>n?!1:{pageSizeOptions:_,showSizeChanger:!0,showQuickJumper:!0,current:Q,pageSize:R,total:Y,onChange:async(r,c)=>{x.current=2,f.getState().refetch(p,{page:r,size:c});}},[n,_,Q,R,Y,p]),J=useCallback(async()=>{x.current=0;try{await o.validateFields(),b(!0),f.getState().refetch(p,{page:1,filters:o.getFieldsValue()});}catch{b(!1);}},[o,p]),Te=useCallback(async()=>{x.current=1,o.resetFields();try{await o.validateFields({validateOnly:!0}),b(!0),f.getState().refetch(p,{page:1,filters:o.getFieldsValue()});}catch{b(!1);}},[o,p]),Ae=typeof T=="function"?jsx(W,{showReset:u,buttonsAlign:l$1,isConfirming:$,onReset:Te,onConfirm:J,children:cloneElement(T(o),{onKeyUp:r=>{r.key==="Enter"&&J();}})}):jsx(Form,{form:o}),De=typeof m=="function"?m(o,y):m,Ee=F?()=>F(y):void 0;return useEffect(()=>{if(!V.current||H.current)return;let r=o.getFieldsValue();g&&!isEqual(r,g)&&(H.current=!0,o.setFieldsValue(g),setTimeout(()=>{H.current=!1;},0));},[g,o]),useEffect(()=>{if(!A||V.current)return;let r=async()=>{try{o.resetFields();let X=await o.validateFields({validateOnly:!0});f.getState().updatePayload(p,{page:1,filters:X}),b(!0);}catch{b(!1);}finally{V.current=!0;}},c=requestAnimationFrame(()=>{Promise.resolve().then(r);});return ()=>{c&&cancelAnimationFrame(c);}},[A,p,o]),useImperativeHandle(i,()=>({data:y,dataSource:M,form:o,refetch:q}),[y,M,o,q]),de?jsx(Spin,{style:at}):A?jsxs("div",{children:[Ae,De,jsx(Table,{...ue,dataSource:M,loading:$,pagination:Se,footer:Ee})]}):jsx(Result,{status:403,subTitle:t("global.noEntitlement")})},ut=forwardRef(lt),dt=ut;export{W as a,ze as b,f as c,le as d,dt as e};//# sourceMappingURL=chunk-T2ZOW3WL.js.map
2
+ //# sourceMappingURL=chunk-T2ZOW3WL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx"],"names":["FilterFormWrapper","props","extras","isConfirming","onConfirm","onReset","children","buttonsAlign","showReset","t","useTranslation","colorFillAlter","lineWidth","lineType","colorBorder","borderRadiusLG","theme","jsx","jsxs","Space","Button","item","Fragment","FilterFormWrapper_default","splitByTags","str","regex","part","renderToString","node","container","root","createRoot","resolve","flushSync","Highlight","texts","htmlString","setHtmlString","useState","useEffect","result","text","index","Highlight_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useQueryListStore","QueryListAction","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","BODYLESS_METHODS","BODY_SUPPORTED_METHODS","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalQueryList","ref","form","identifier","code","onePage","defaultSize","refreshInterval","tableExtra","renderForm","afterSuccess","afterError","footer","pageSizeOptions","request","dataAdapter","tableProps","formInstance","Form","finalIdentifier","useMemo","action","useRef","accessible","isChecking","usePermission","isValid","setIsValid","isInitialized","isUpdatingFromPayload","subscribedPayload","s","ky","useKy","page","size","filters","resolvedRequest","method","body","searchParams","headers","cacheTime","staleTime","normalizedMethod","isBodylessMethod","supportsBody","defaultRequestData","requestBody","requestSearchParams","requestHeaders","shouldPoll","data","isLoading","useQuery","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","resolvedDataAdapter","adapter","defaultAdapter","dataSource","total","pagination","currentPage","currentSize","useCallback","formRenderer","cloneElement","e","tableExtraRenderer","renderFooter","currentFormValues","init","value","rafId","useImperativeHandle","Spin","Table","Result","QueryList","forwardRef","QueryList_default"],"mappings":"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","file":"chunk-JUD7AMBZ.js","sourcesContent":["import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n const style = {\n maxWidth: 'none',\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={style}>\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'flex-grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => <Fragment key={item.key}>{item.children}</Fragment>)}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch QueryList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选的标识符,用于标识和外部控制,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n const supportsBody = BODY_SUPPORTED_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 使用用户提供的参数,否则使用默认请求数据\n const requestBody = body || (supportsBody ? defaultRequestData : undefined)\n const requestSearchParams = searchParams || defaultRequestData\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n const queryKey = ['queryList', url, finalIdentifier, page, size, filters]\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, response)\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n retry: (failureCount, retryError) => {\n // 自定义重试逻辑\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false // 认证错误不重试\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), // 指数退避\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter = footer ? () => footer(data) : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n"]}
1
+ {"version":3,"sources":["../src/components/filterFormWrapper/FilterFormWrapper.tsx","../src/components/highlight/Highlight.tsx","../src/components/queryList/stores.ts","../src/components/queryList/QueryList.tsx"],"names":["FilterFormWrapper","props","extras","isConfirming","onConfirm","onReset","children","buttonsAlign","showReset","t","useTranslation","colorFillAlter","lineWidth","lineType","colorBorder","borderRadiusLG","theme","jsx","jsxs","Space","Button","item","Fragment","FilterFormWrapper_default","splitByTags","str","regex","part","renderToString","node","container","root","createRoot","resolve","flushSync","Highlight","texts","htmlString","setHtmlString","useState","useEffect","result","text","index","Highlight_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useQueryListStore","QueryListAction","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","BODYLESS_METHODS","BODY_SUPPORTED_METHODS","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalQueryList","ref","form","identifier","code","onePage","defaultSize","refreshInterval","tableExtra","renderForm","afterSuccess","afterError","footer","pageSizeOptions","request","dataAdapter","tableProps","formInstance","Form","finalIdentifier","useMemo","action","useRef","accessible","isChecking","usePermission","isValid","setIsValid","isInitialized","isUpdatingFromPayload","subscribedPayload","s","ky","useKy","page","size","filters","resolvedRequest","method","body","searchParams","headers","cacheTime","staleTime","normalizedMethod","isBodylessMethod","supportsBody","defaultRequestData","requestBody","requestSearchParams","requestHeaders","shouldPoll","data","isLoading","useQuery","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","resolvedDataAdapter","adapter","defaultAdapter","dataSource","total","pagination","currentPage","currentSize","useCallback","formRenderer","cloneElement","e","tableExtraRenderer","renderFooter","currentFormValues","init","value","rafId","useImperativeHandle","Spin","Table","Result","QueryList","forwardRef","QueryList_default"],"mappings":"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","file":"chunk-T2ZOW3WL.js","sourcesContent":["import { Button, Space, theme } from 'antd'\nimport type { Key, PropsWithChildren, ReactNode } from 'react'\nimport { Fragment } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface FilterFormWrapperProps extends PropsWithChildren {\n onConfirm?: () => void | Promise<void>\n onReset?: () => void\n extras?: { key: Key; children: ReactNode }[]\n isConfirming?: boolean\n buttonsAlign?: 'left' | 'right' | 'bottom'\n showReset?: boolean\n}\n\nconst FilterFormWrapper = (props: FilterFormWrapperProps) => {\n const { extras, isConfirming, onConfirm, onReset, children, buttonsAlign = 'left', showReset } = props\n const { t } = useTranslation()\n const {\n token: { colorFillAlter, lineWidth, lineType, colorBorder, borderRadiusLG },\n } = theme.useToken()\n\n const style = {\n maxWidth: 'none',\n background: colorFillAlter,\n borderWidth: lineWidth,\n borderStyle: lineType,\n borderColor: colorBorder,\n borderRadius: borderRadiusLG,\n padding: 24,\n marginBottom: 24,\n }\n\n return (\n <div style={style}>\n <div className={`flex ${buttonsAlign === 'bottom' ? 'flex-col' : 'flex-row'}`}>\n <div className={`${buttonsAlign === 'left' ? 'flex-grow-0' : 'flex-1'}`}>{children}</div>\n <div className={`${buttonsAlign === 'bottom' ? 'text-end' : 'text-start'} ml-4`}>\n <Space>\n <Button type=\"primary\" disabled={isConfirming} onClick={onConfirm}>\n {t('FilterFormWrapper.confirmText')}\n </Button>\n {extras?.map(item => <Fragment key={item.key}>{item.children}</Fragment>)}\n {showReset && <Button onClick={onReset}>{t('FilterFormWrapper.resetText')}</Button>}\n </Space>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FilterFormWrapper\n","import type { PropsWithChildren, ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { flushSync } from 'react-dom'\nimport { createRoot } from 'react-dom/client'\n\nconst splitByTags = (str: string) => {\n const regex = /(<[^>]*>)/\n return str.split(regex).filter(part => part !== '')\n}\n\nfunction renderToString(node: ReactNode): Promise<string> {\n const container = document.createElement('div')\n const root = createRoot(container)\n\n return new Promise(resolve => {\n setTimeout(() => {\n flushSync(() => {\n root.render(node)\n })\n resolve(container.innerHTML)\n })\n })\n}\n\nexport interface HighlightProps extends PropsWithChildren {\n texts: Array<string | number>\n}\n\nconst Highlight = (props: HighlightProps) => {\n const { texts, children } = props\n const [htmlString, setHtmlString] = useState<string>('')\n\n useEffect(() => {\n renderToString(children).then(str => {\n const result = splitByTags(str)\n\n for (const text of texts) {\n for (let index = 0; index < result.length; index++) {\n // TODO: 忽略 HTML tag\n result[index] = result[index].replace(String(text), `<span style='color: #DC143C;'>${text}</span>`)\n }\n }\n\n setHtmlString(result.join(''))\n })\n }, [children, texts])\n\n return <div dangerouslySetInnerHTML={{ __html: htmlString }}></div>\n}\n\nexport default Highlight\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { QueryListPayload } from './QueryList'\n\n// Query 更新函数类型\ntype QueryRefetchFunction = () => void | Promise<unknown>\n\n// QueryList 实例信息\ninterface QueryListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: QueryListPayload\n refetch: QueryRefetchFunction\n}\n\n// 简化的状态接口\ninterface QueryListState {\n // 实例管理\n instances: Map<string, QueryListInstance>\n\n // 核心方法\n registerInstance(id: string, url: string, queryKey: readonly unknown[], refetch: QueryRefetchFunction): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: QueryListPayload): void\n getPayload(id: string): QueryListPayload\n refetch(id: string, payload?: QueryListPayload): Promise<void>\n\n // 工具方法\n getInstance(id: string): QueryListInstance | undefined\n getAllInstances(): QueryListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: QueryListPayload = Object.freeze({\n page: 1,\n size: 10,\n filters: Object.freeze({}),\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<QueryListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新refetch函数\n if (existingInstance) {\n // 仅当 refetch 变更时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: QueryListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`QueryList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch QueryList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'query-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useQueryListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport { isEqual } from 'lodash-es'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useQueryListStore } from './stores'\n\nexport interface ListResponse<T = any> {\n list: T[]\n total: number\n}\n\nexport interface QueryListPayload<Values = any> {\n page?: number\n size?: number\n filters?: Values\n}\n\n// 缓存配置\nexport interface CacheConfig {\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\n// 支持的 HTTP 请求方法类型\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD'\n\n// 简化的请求配置\nexport interface QueryListRequestConfig extends CacheConfig {\n url: string\n method?: HttpMethod\n body?: FormData | Record<string | number, any>\n searchParams?: Record<string | number, any>\n headers?: Record<string, string>\n}\n\nexport type QueryListRequestConfigType<Values = any> =\n | QueryListRequestConfig\n | ((payload: QueryListPayload<Values>) => QueryListRequestConfig)\n\nexport enum QueryListAction {\n Confirm,\n Reset,\n Jump,\n Init,\n}\n\nexport interface QueryListDataType<Item> {\n dataSource: Item[]\n total: number\n}\n\nexport interface QueryListRef<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any> {\n data: Data | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n}\n\nexport interface QueryListDataAdapter<Item extends AnyObject = AnyObject> {\n total?: number\n items?: Item[]\n}\n\nexport type QueryListDataAdapterConfig<Item extends AnyObject = AnyObject, Data = any> =\n | QueryListDataAdapter<Item>\n | ((data: Data) => QueryListDataAdapter<Item>)\n\nexport interface QueryListProps<Item extends AnyObject = AnyObject, Values = AnyObject, Data = any>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选的标识符,用于标识和外部控制,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n onePage?: boolean // 无分页\n defaultSize?: number\n pageSizeOptions?: number[]\n request: QueryListRequestConfigType<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: QueryListAction, form: FormInstance<Values>, data?: Data) => void\n afterError?: (error: Error, action: QueryListAction, form: FormInstance<Values>) => void\n dataAdapter?: QueryListDataAdapterConfig<Item, Data>\n footer?: (data: Data | undefined) => ReactNode\n}\n\n// 常量定义\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000 // 默认缓存5分钟\nconst DEFAULT_STALE_TIME = 30 * 1000 // 默认30秒内数据新鲜\n\n// 无请求体的 HTTP 方法\nconst BODYLESS_METHODS: HttpMethod[] = ['GET', 'HEAD']\n\n// 支持请求体的 HTTP 方法\nconst BODY_SUPPORTED_METHODS: HttpMethod[] = ['POST', 'PUT', 'PATCH', 'DELETE']\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\n\n// 生成唯一 identifier 的函数\nconst generateUniqueIdentifier = (): string => {\n return `queryList_${Date.now()}_${++identifierCounter}`\n}\n\nconst InternalQueryList = <Item extends AnyObject = AnyObject, Values extends AnyObject = any, Data = any>(\n props: QueryListProps<Item, Values, Data>,\n ref: Ref<QueryListRef<Item, Values, Data>>,\n) => {\n const { t } = useTranslation()\n\n const {\n form,\n identifier,\n code,\n onePage,\n buttonsAlign,\n showReset,\n defaultSize = 10,\n refreshInterval = 0,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n footer,\n pageSizeOptions,\n request,\n dataAdapter,\n ...tableProps\n } = props\n\n const [formInstance] = Form.useForm<Values>(form)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => {\n return identifier || generateUniqueIdentifier()\n }, [identifier])\n const action = useRef<QueryListAction>(QueryListAction.Init)\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n const [isValid, setIsValid] = useState(false)\n const isInitialized = useRef(false)\n const isUpdatingFromPayload = useRef(false) // 防止循环更新的标志\n\n // 仅订阅当前 identifier 的 payload,避免因其它实例变化导致不必要重渲染\n const subscribedPayload = useQueryListStore(s => s.getPayload(finalIdentifier))\n const ky = useKy()\n\n const { page, size = defaultSize, filters } = subscribedPayload\n\n const payload = { page, size, filters }\n\n // 处理 request 配置(对象或函数)\n const resolvedRequest = typeof request === 'function' ? request(payload) : request\n\n const {\n url,\n method = 'GET',\n body,\n searchParams,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = resolvedRequest\n\n // 验证请求方法\n const normalizedMethod = method.toUpperCase() as HttpMethod\n const allSupportedMethods: HttpMethod[] = [...BODYLESS_METHODS, ...BODY_SUPPORTED_METHODS]\n\n if (!allSupportedMethods.includes(normalizedMethod)) {\n console.warn(`QueryList: 不支持的 HTTP 请求方法 \"${method}\",将使用 GET 方法`)\n }\n\n // 根据请求方法决定参数传递方式\n const isBodylessMethod = BODYLESS_METHODS.includes(normalizedMethod)\n const supportsBody = BODY_SUPPORTED_METHODS.includes(normalizedMethod)\n\n const defaultRequestData = { ...filters, ...(!onePage && { page, size }) }\n\n // 使用用户提供的参数,否则使用默认请求数据\n const requestBody = body || (supportsBody ? defaultRequestData : undefined)\n const requestSearchParams = searchParams || defaultRequestData\n\n const requestHeaders = headers\n\n const shouldPoll = useRef(false)\n\n const queryKey = ['queryList', url, finalIdentifier, page, size, filters]\n\n const { data, isLoading, refetch } = useQuery({\n queryKey,\n queryFn: async () => {\n try {\n const kyOptions: KyOptions = {\n method: normalizedMethod,\n searchParams: requestSearchParams,\n headers: requestHeaders,\n }\n\n // 只有非无请求体方法才允许有 body\n if (requestBody && !isBodylessMethod) {\n if (requestBody instanceof FormData) {\n // FormData 使用 body 方式传递\n kyOptions.body = requestBody\n } else if (typeof requestBody === 'string') {\n // 字符串直接作为 body\n kyOptions.body = requestBody\n } else {\n // 对象类型使用 .json 方式传递\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, response)\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n retry: (failureCount, retryError) => {\n // 自定义重试逻辑\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false // 认证错误不重试\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000), // 指数退避\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n // 缓存配置\n gcTime: cacheTime,\n staleTime,\n enabled: accessible && isValid,\n })\n\n // 处理 dataAdapter 配置\n const resolvedDataAdapter = useMemo(() => {\n const adapter = dataAdapter\n const defaultAdapter: QueryListDataAdapter<Item> = {\n total: (data as ListResponse<Item>)?.total,\n items: (data as ListResponse<Item>)?.list,\n }\n\n if (typeof adapter === 'function') {\n return {\n ...defaultAdapter,\n ...adapter(data as Data),\n }\n }\n return {\n ...defaultAdapter,\n ...adapter,\n }\n }, [dataAdapter, data])\n\n // 在组件挂载时注册实例,避免因 queryKey/refetch 身份变化反复注册\n useEffect(() => {\n useQueryListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch)\n return () => {\n useQueryListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url])\n\n const dataSource = resolvedDataAdapter.items\n const total = resolvedDataAdapter.total\n\n const pagination = useMemo(() => {\n if (onePage) return false\n\n return {\n pageSizeOptions,\n showSizeChanger: true,\n showQuickJumper: true,\n current: page,\n pageSize: size,\n total,\n onChange: async (currentPage: number, currentSize: number) => {\n action.current = QueryListAction.Jump\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: currentPage,\n size: currentSize,\n })\n },\n }\n }, [onePage, pageSizeOptions, page, size, total, finalIdentifier])\n\n const onConfirm = useCallback(async () => {\n action.current = QueryListAction.Confirm\n try {\n await formInstance.validateFields()\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const onReset = useCallback(async () => {\n action.current = QueryListAction.Reset\n formInstance.resetFields()\n\n try {\n await formInstance.validateFields({ validateOnly: true })\n setIsValid(true)\n useQueryListStore.getState().refetch(finalIdentifier, {\n page: 1,\n filters: formInstance.getFieldsValue(),\n })\n } catch {\n setIsValid(false)\n }\n }, [formInstance, finalIdentifier])\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isLoading}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(formInstance), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={formInstance} />\n )\n\n const tableExtraRenderer = typeof tableExtra === 'function' ? tableExtra(formInstance, data) : tableExtra\n\n const renderFooter = footer ? () => footer(data) : undefined\n\n // 监听 payload.filters 变化并同步更新表单实例\n useEffect(() => {\n if (!isInitialized.current || isUpdatingFromPayload.current) {\n return\n }\n\n // 获取当前表单的值\n const currentFormValues = formInstance.getFieldsValue()\n\n // 如果 payload 中的 filters 与当前表单值不同,则更新表单\n if (filters && !isEqual(currentFormValues, filters)) {\n isUpdatingFromPayload.current = true\n formInstance.setFieldsValue(filters)\n // 使用 setTimeout 确保在下一个事件循环中重置标志\n setTimeout(() => {\n isUpdatingFromPayload.current = false\n }, 0)\n }\n }, [filters, formInstance])\n\n // 首次挂载时自动校验表单,校验通过则更新 payload 并允许请求\n useEffect(() => {\n if (!accessible || isInitialized.current) {\n return\n }\n\n const init = async () => {\n console.log('QueryList init starting')\n try {\n formInstance.resetFields()\n const value = await formInstance.validateFields({ validateOnly: true })\n console.log('QueryList init validation success:', value)\n useQueryListStore.getState().updatePayload(finalIdentifier, {\n page: 1,\n filters: value,\n })\n setIsValid(true)\n console.log('QueryList init completed, isValid set to true')\n } catch (error) {\n console.log('QueryList init validation failed:', error)\n setIsValid(false)\n } finally {\n isInitialized.current = true\n }\n }\n\n const rafId = requestAnimationFrame(() => {\n Promise.resolve().then(init)\n })\n\n return () => {\n if (rafId) {\n cancelAnimationFrame(rafId)\n }\n }\n }, [accessible, finalIdentifier, formInstance])\n\n useImperativeHandle(\n ref,\n () => ({\n data,\n dataSource,\n form: formInstance,\n refetch,\n }),\n [data, dataSource, formInstance, refetch],\n )\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n return (\n <div>\n {formRenderer}\n {tableExtraRenderer}\n <Table\n {...tableProps}\n dataSource={dataSource}\n loading={isLoading}\n pagination={pagination}\n footer={renderFooter}\n />\n </div>\n )\n}\n\nconst QueryList = forwardRef(InternalQueryList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: QueryListProps<Item, Values, Data> & { ref?: Ref<QueryListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default QueryList\n"]}
@@ -0,0 +1,2 @@
1
+ import {i}from'./chunk-EKBAANKX.js';import {has,template,get}from'lodash-es';import {useMemo}from'react';function l(){let t=i(e=>e.locale);return {t:useMemo(()=>(e,r)=>has(t,e)?template(get(t,e))(r):e,[t])}}export{l as a};//# sourceMappingURL=chunk-TLXOBLJT.js.map
2
+ //# sourceMappingURL=chunk-TLXOBLJT.js.map
@@ -1 +1 @@
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,CAASA,EAAAA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OACR,CAAA,IAAM,CAACC,CAAoBC,CAAAA,CAAAA,GACzBC,IAAIN,CAAQI,CAAAA,CAAG,EAAIG,QAASC,CAAAA,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-JAGE2XCG.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"]}
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,CAASA,EAAAA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,EANCC,OACR,CAAA,IAAM,CAACC,CAAoBC,CAAAA,CAAAA,GACzBC,IAAIN,CAAQI,CAAAA,CAAG,EAAIG,QAASC,CAAAA,GAAAA,CAAIR,EAAQI,CAAa,CAAC,EAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"chunk-TLXOBLJT.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"]}
@@ -1,2 +1,2 @@
1
- import {a}from'./chunk-7W2ZX3CB.js';import {j,f}from'./chunk-AGGPFMZE.js';import {Editor}from'@monaco-editor/react';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useNavigate}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var y=j(()=>{let{message:p}=App.useApp(),[c]=Form.useForm(),o=useNavigate(),{mutate:I}=a();return jsx(Card,{title:"\u521B\u5EFA\u83DC\u5355\u9879",children:jsxs(Form,{scrollToFirstError:!0,form:c,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:async d=>{let{permissions:s,front_route:f$1,...F}=d;await I({...F,front_route:f+f$1,permissions:s?JSON.parse(s):void 0}),p.success("\u521B\u5EFA\u6210\u529F",.8,()=>o("..",{relative:"route"}));},children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:f})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{o("..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),M=y;export{M as default};//# sourceMappingURL=createMenuItem-PS7ABPSF.js.map
2
- //# sourceMappingURL=createMenuItem-PS7ABPSF.js.map
1
+ import {a}from'./chunk-MFVQ4PJU.js';import {j,f}from'./chunk-EKBAANKX.js';import {Editor}from'@monaco-editor/react';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useNavigate}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var y=j(()=>{let{message:p}=App.useApp(),[c]=Form.useForm(),o=useNavigate(),{mutate:I}=a();return jsx(Card,{title:"\u521B\u5EFA\u83DC\u5355\u9879",children:jsxs(Form,{scrollToFirstError:!0,form:c,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:async d=>{let{permissions:s,front_route:f$1,...F}=d;await I({...F,front_route:f+f$1,permissions:s?JSON.parse(s):void 0}),p.success("\u521B\u5EFA\u6210\u529F",.8,()=>o("..",{relative:"route"}));},children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:f})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{o("..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),M=y;export{M as default};//# sourceMappingURL=createMenuItem-Z5SGFFW4.js.map
2
+ //# sourceMappingURL=createMenuItem-Z5SGFFW4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"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","file":"createMenuItem-PS7ABPSF.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useNavigate } from 'react-router-dom'\n\nimport { withContext } from '@/components/toolkitsProvider'\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport type { MenuListItem } from '@/types'\n\nimport { useCreateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst CreateMenuItem = withContext(\n () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutate: createMenu } = useCreateMenu()\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n await createMenu({\n ...rest,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n })\n message.success('创建成功', 0.8, () => navigate('..', { relative: 'route' }))\n }\n\n return (\n <Card title=\"创建菜单项\">\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n },\n { isGlobal: true },\n)\n\nexport default CreateMenuItem\n"]}
1
+ {"version":3,"sources":["../src/modules/menu/pages/createMenuItem/index.tsx"],"names":["CreateMenuItem","withContext","message","App","form","Form","navigate","useNavigate","createMenu","useCreateMenu","jsx","Card","jsxs","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","Input","Switch","InputNumber","Editor","Button","createMenuItem_default"],"mappings":"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","file":"createMenuItem-Z5SGFFW4.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useNavigate } from 'react-router-dom'\n\nimport { withContext } from '@/components/toolkitsProvider'\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport type { MenuListItem } from '@/types'\n\nimport { useCreateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst CreateMenuItem = withContext(\n () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutate: createMenu } = useCreateMenu()\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n await createMenu({\n ...rest,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n })\n message.success('创建成功', 0.8, () => navigate('..', { relative: 'route' }))\n }\n\n return (\n <Card title=\"创建菜单项\">\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n },\n { isGlobal: true },\n)\n\nexport default CreateMenuItem\n"]}