aq-fe-framework 0.1.155 → 0.1.156

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 (242) hide show
  1. package/dist/api/apiFactory.ts +46 -0
  2. package/dist/api/baseAxios.ts +22 -0
  3. package/dist/app/admin/(core)/core12196/page.tsx +13 -0
  4. package/dist/app/admin/(core)/core16209/page.tsx +13 -0
  5. package/dist/app/admin/(core)/core18256/page.tsx +12 -0
  6. package/dist/app/admin/(core)/core26965/page.tsx +13 -0
  7. package/dist/app/admin/(core)/core27311/page.tsx +13 -0
  8. package/dist/app/admin/(core)/core38677/page.tsx +13 -0
  9. package/dist/app/admin/(core)/core40207/page.tsx +13 -0
  10. package/dist/app/admin/(core)/core60524/page.tsx +11 -0
  11. package/dist/app/admin/(core)/core64229/page.tsx +12 -0
  12. package/dist/app/admin/(core)/core71678/page.tsx +11 -0
  13. package/dist/app/admin/(core)/core76318/page.tsx +13 -0
  14. package/dist/app/admin/(core)/core83092/page.tsx +13 -0
  15. package/dist/app/admin/[...slug]/page.tsx +7 -0
  16. package/dist/app/admin/error.tsx +42 -0
  17. package/dist/app/admin/layout.tsx +21 -0
  18. package/dist/app/admin/test/page.tsx +44 -0
  19. package/dist/app/auth/login/page.tsx +14 -0
  20. package/dist/app/globals.css +59 -0
  21. package/dist/app/layout.tsx +39 -0
  22. package/dist/app/page.tsx +18 -0
  23. package/dist/{chunk-PAHZ57DT.mjs → chunk-JLT4BL7I.mjs} +1 -1
  24. package/dist/components/Aceternity/BoxesBackground/MyBoxes.tsx +66 -0
  25. package/dist/components/Aceternity/BoxesBackground/MyBoxesBackground.tsx +31 -0
  26. package/dist/components/ActionIcons/ActionIcon/MyActionIcon.tsx +47 -0
  27. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconDelete.tsx +81 -0
  28. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconUpdate.tsx +68 -0
  29. package/dist/components/ActionIcons/ActionIconCheck/MyActionIconCheck.tsx +50 -0
  30. package/dist/components/ActionIcons/ActionIconDownloadPDF/MyActionIconDownloadPDF.tsx +13 -0
  31. package/dist/components/ActionIcons/ActionIconModal/MyActionIconModal.tsx +113 -0
  32. package/dist/components/ActionIcons/ActionIconUpload/MyActionIconUpload.tsx +19 -0
  33. package/dist/components/ActionIcons/ActionIconViewPdf/MyActionIconViewPDF.tsx +63 -0
  34. package/dist/components/ActionIcons/SwitchTheme/MySwitchTheme.tsx +36 -0
  35. package/dist/components/AppSpotlight/MyAppSpotlight.tsx +112 -0
  36. package/dist/components/Buttons/Anchor/MyAnchorViewPDF.tsx +46 -0
  37. package/dist/components/Buttons/Button/MyButton.tsx +90 -0
  38. package/dist/components/Buttons/ButtonCRUD/AQButtonCreateByImportFile.tsx +81 -0
  39. package/dist/components/Buttons/ButtonCRUD/AQButtonExportData.tsx +75 -0
  40. package/dist/components/Buttons/ButtonCRUD/MyButtonCreate.tsx +68 -0
  41. package/dist/components/Buttons/ButtonImport/MyButtonImport.tsx +29 -0
  42. package/dist/components/Buttons/ButtonImport/SelectFieldModal.tsx +100 -0
  43. package/dist/components/Buttons/ButtonImport/SelectFileModal.tsx +81 -0
  44. package/dist/components/Buttons/ButtonImport/useS_ButtonImport.ts +196 -0
  45. package/dist/components/Buttons/ButtonModal/AQSelectTableByOpenModal.tsx +71 -0
  46. package/dist/components/Buttons/ButtonModal/MyButtonModal.tsx +117 -0
  47. package/dist/components/Buttons/ButtonPrintPDF/MyButtonPrintPDF.tsx +37 -0
  48. package/dist/components/Buttons/ButtonPrintPDFTable/MyButtonPrintTablePDF.tsx +174 -0
  49. package/dist/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx +29 -0
  50. package/dist/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx +121 -0
  51. package/dist/components/Calendar/MyCalendar.tsx +118 -0
  52. package/dist/components/CenterFull/MyCenterFull.tsx +10 -0
  53. package/dist/components/Checkbox/MyCheckbox.tsx +9 -0
  54. package/dist/components/Combobox/Select/MySelect.tsx +12 -0
  55. package/dist/components/DataDisplay/Card/AQCard.tsx +49 -0
  56. package/dist/components/DataDisplay/CardInformation/MyCardInformation.tsx +77 -0
  57. package/dist/components/DataDisplay/DataTable/MyDataTable.tsx +184 -0
  58. package/dist/components/DataDisplay/IconText/MyIconText.tsx +17 -0
  59. package/dist/components/DataDisplay/KeyLabel/MyKeyLabel.tsx +15 -0
  60. package/dist/components/DataDisplay/NumberFormatter/MyNumberFormatter.tsx +9 -0
  61. package/dist/components/DataDisplay/StatCard/AQStatCard1.tsx +68 -0
  62. package/dist/components/FaviconSetter/FaviconSetter.tsx +33 -0
  63. package/dist/components/Inputs/DateInput/MyDateInput.tsx +11 -0
  64. package/dist/components/Inputs/Fieldset/MyFieldset.tsx +32 -0
  65. package/dist/components/Inputs/FileInput/MyFileInput.tsx +12 -0
  66. package/dist/components/Inputs/NumberInput/MyNumberInput.tsx +12 -0
  67. package/dist/components/Inputs/TextArea/MyTextArea.tsx +11 -0
  68. package/dist/components/Inputs/TextEditor/MyTextEditor.tsx +191 -0
  69. package/dist/components/Inputs/TextInput/MyTextInput.tsx +30 -0
  70. package/dist/components/Layouts/BasicAppShell/BasicAppShell.tsx +357 -0
  71. package/dist/components/Layouts/BasicAppShell/css.module.css +62 -0
  72. package/dist/components/Layouts/BasicAppShell/useS_BasicAppShell.ts +64 -0
  73. package/dist/components/Layouts/Container/MyContainer.tsx +16 -0
  74. package/dist/components/Layouts/FlexColumn/MyFlexColumn.tsx +14 -0
  75. package/dist/components/Layouts/FlexEnd/MyFlexEnd.tsx +14 -0
  76. package/dist/components/Layouts/FlexRow/MyFlexRow.tsx +14 -0
  77. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenu.tsx +147 -0
  78. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenuStore.ts +19 -0
  79. package/dist/components/Layouts/HeaderMegaMenu/css.module.css +50 -0
  80. package/dist/components/Layouts/HtmlWrapper/MyHtmlWrapper.tsx +29 -0
  81. package/dist/components/Layouts/PageContent/MyPageContent.tsx +67 -0
  82. package/dist/components/Layouts/Tab/MyTab.tsx +33 -0
  83. package/dist/components/Loaders/MyCardioLoader.tsx +12 -0
  84. package/dist/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx +61 -0
  85. package/dist/components/RESTAPIComponents/SelectAPIGet/MySelectAPIGet.tsx +37 -0
  86. package/dist/components/ScheduleX/MyScheduleX.tsx +58 -0
  87. package/dist/components/Skeletons/SkeletonTable/MySkeletonTable.tsx +9 -0
  88. package/dist/components/index.mjs +1 -1
  89. package/dist/components/index.ts +62 -0
  90. package/dist/constants/array/daysOfWeek.ts +9 -0
  91. package/dist/constants/enum/ENUM_EMAILCONFIG.ts +6 -0
  92. package/dist/constants/enum/global.ts +26 -0
  93. package/dist/constants/object/color.ts +5 -0
  94. package/dist/constants/object/documentTypes.ts +8 -0
  95. package/dist/{components/index.css → css.module-4ICLUKPO.module.css} +29 -16
  96. package/dist/css.module-P45UW6UZ.module.css +4 -0
  97. package/dist/data/menuData.ts +31 -0
  98. package/dist/hooks/custom-hooks/useC_MutationAction.tsx +36 -0
  99. package/dist/hooks/index.ts +2 -0
  100. package/dist/hooks/query/AQ/useQ_AQ_GetAQModule.ts +14 -0
  101. package/dist/interfaces/EmailConfig.ts +10 -0
  102. package/dist/interfaces/IAQModule.ts +21 -0
  103. package/dist/interfaces/base.ts +9 -0
  104. package/dist/interfaces/global-interface/IAQSSO.ts +15 -0
  105. package/dist/interfaces/global-interface/IAQSyncData.ts +9 -0
  106. package/dist/interfaces/global-interface/IAcademicYear.ts +12 -0
  107. package/dist/interfaces/global-interface/IChangePassWord.ts +8 -0
  108. package/dist/interfaces/global-interface/IComplaintProccess.ts +9 -0
  109. package/dist/interfaces/global-interface/ICreateAccount.ts +24 -0
  110. package/dist/interfaces/global-interface/IDocument.ts +25 -0
  111. package/dist/interfaces/global-interface/IDocumentAttribute.ts +12 -0
  112. package/dist/interfaces/global-interface/IEvent.ts +30 -0
  113. package/dist/interfaces/global-interface/IEventComplaint.ts +20 -0
  114. package/dist/interfaces/global-interface/IEventFillter.ts +14 -0
  115. package/dist/interfaces/global-interface/IFile.ts +8 -0
  116. package/dist/interfaces/global-interface/IImportStudentPaticipation.ts +8 -0
  117. package/dist/interfaces/global-interface/IPagePermission.ts +12 -0
  118. package/dist/interfaces/global-interface/IRolePermission.ts +7 -0
  119. package/dist/interfaces/global-interface/ISRMUserinfo.ts +35 -0
  120. package/dist/interfaces/global-interface/IScientificProfileProjectUser.ts +15 -0
  121. package/dist/interfaces/global-interface/IScientificProfileResearchGroup.ts +15 -0
  122. package/dist/interfaces/global-interface/IScientificProfileResearchGroupUser.ts +14 -0
  123. package/dist/interfaces/global-interface/IScientificProfileResearchProject.ts +21 -0
  124. package/dist/interfaces/global-interface/ISignIn.ts +7 -0
  125. package/dist/interfaces/global-interface/ISystemCatalogAcademicYear.ts +15 -0
  126. package/dist/interfaces/global-interface/ISystemCatalogDomainCategory.ts +11 -0
  127. package/dist/interfaces/global-interface/ISystemCatalogProjectLevelCategory.ts +11 -0
  128. package/dist/interfaces/global-interface/ISystemCatalogProjectTypeCategory.ts +11 -0
  129. package/dist/interfaces/global-interface/ISystemCatalogRoleActivity.ts +11 -0
  130. package/dist/interfaces/global-interface/ISystemCatalogTaskCategory.ts +11 -0
  131. package/dist/interfaces/global-interface/ISystemManagementAcademicHistory.ts +31 -0
  132. package/dist/interfaces/global-interface/ISystemManagementProfessionalWorkHistory.ts +14 -0
  133. package/dist/interfaces/global-interface/ISystemManagementPublishedScientificWork.ts +14 -0
  134. package/dist/interfaces/global-interface/ISystemManagementRoleGroup.ts +12 -0
  135. package/dist/interfaces/global-interface/ISystemManagementRoleGroupMenuPermission.ts +18 -0
  136. package/dist/interfaces/global-interface/ISystemManagementScientificResearchProject.ts +16 -0
  137. package/dist/interfaces/global-interface/ISystemManagementUserMenuPermission.ts +18 -0
  138. package/dist/interfaces/global-interface/IUpdateAccount.ts +15 -0
  139. package/dist/interfaces/global-interface/IUser.ts +21 -0
  140. package/dist/interfaces/global-interface/IUserPermission.ts +7 -0
  141. package/dist/lib/utils.ts +6 -0
  142. package/dist/modules-features/admin/core/MainDashboard/BarChart_CourseStatus.tsx +87 -0
  143. package/dist/modules-features/admin/core/MainDashboard/BarChart_ExamStatus.tsx +65 -0
  144. package/dist/modules-features/admin/core/MainDashboard/BarChart_RevenueByAcademicYear.tsx +82 -0
  145. package/dist/modules-features/admin/core/MainDashboard/BarChart_StudentStatusIn30Days.tsx +67 -0
  146. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseDropOutPercentage.tsx +77 -0
  147. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseProgressPercentage.tsx +77 -0
  148. package/dist/modules-features/admin/core/MainDashboard/LineChart_RevenueIn12Months.tsx +78 -0
  149. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByDiscountIn3Months.tsx +69 -0
  150. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByVoucherIn3Months.tsx +69 -0
  151. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalStudentIn12Months.tsx +64 -0
  152. package/dist/modules-features/admin/core/MainDashboard/ViewDiscountStat.tsx +311 -0
  153. package/dist/modules-features/admin/core/MainDashboard/ViewVoucherStat.tsx +311 -0
  154. package/dist/modules-features/admin/core/core12196/F_core12196.tsx +20 -0
  155. package/dist/modules-features/admin/core/core12196/F_core12196_Create.tsx +101 -0
  156. package/dist/modules-features/admin/core/core12196/F_core12196_Delete.tsx +19 -0
  157. package/dist/modules-features/admin/core/core12196/F_core12196_Read.tsx +165 -0
  158. package/dist/modules-features/admin/core/core12196/F_core12196_Update.tsx +112 -0
  159. package/dist/modules-features/admin/core/core16209/F_core16209.tsx +108 -0
  160. package/dist/modules-features/admin/core/core16209/F_core16209_Create.tsx +112 -0
  161. package/dist/modules-features/admin/core/core16209/F_core16209_Delete.tsx +17 -0
  162. package/dist/modules-features/admin/core/core16209/F_core16209_Update.tsx +114 -0
  163. package/dist/modules-features/admin/core/core18256/F_core18256.tsx +29 -0
  164. package/dist/modules-features/admin/core/core18256/F_core18256_Create.tsx +34 -0
  165. package/dist/modules-features/admin/core/core18256/F_core18256_Delete.tsx +14 -0
  166. package/dist/modules-features/admin/core/core18256/F_core18256_Read.tsx +59 -0
  167. package/dist/modules-features/admin/core/core18256/F_core18256_Select.tsx +40 -0
  168. package/dist/modules-features/admin/core/core18256/F_core18256_Update.tsx +22 -0
  169. package/dist/modules-features/admin/core/core26965/F_core26965.tsx +17 -0
  170. package/dist/modules-features/admin/core/core26965/F_core26965_Create.tsx +106 -0
  171. package/dist/modules-features/admin/core/core26965/F_core26965_Delete.tsx +19 -0
  172. package/dist/modules-features/admin/core/core26965/F_core26965_Read.tsx +165 -0
  173. package/dist/modules-features/admin/core/core26965/F_core26965_Update.tsx +112 -0
  174. package/dist/modules-features/admin/core/core27311/F_core27311.tsx +21 -0
  175. package/dist/modules-features/admin/core/core27311/F_core27311_Create.tsx +109 -0
  176. package/dist/modules-features/admin/core/core27311/F_core27311_Delete.tsx +19 -0
  177. package/dist/modules-features/admin/core/core27311/F_core27311_Read.tsx +165 -0
  178. package/dist/modules-features/admin/core/core27311/F_core27311_Update.tsx +113 -0
  179. package/dist/modules-features/admin/core/core35923/F_core35923.tsx +46 -0
  180. package/dist/modules-features/admin/core/core38677/F_core38677.tsx +28 -0
  181. package/dist/modules-features/admin/core/core38677/F_core38677_ReadUser.tsx +79 -0
  182. package/dist/modules-features/admin/core/core38677/F_core38677_Save.tsx +52 -0
  183. package/dist/modules-features/admin/core/core38677/F_core38677_ViewMenuPermissions.tsx +264 -0
  184. package/dist/modules-features/admin/core/core40207/F_core40207.tsx +9 -0
  185. package/dist/modules-features/admin/core/core40207/F_core40207_Create.tsx +81 -0
  186. package/dist/modules-features/admin/core/core40207/F_core40207_Delete.tsx +17 -0
  187. package/dist/modules-features/admin/core/core40207/F_core40207_Read.tsx +98 -0
  188. package/dist/modules-features/admin/core/core40207/F_core40207_Update.tsx +83 -0
  189. package/dist/modules-features/admin/core/core47643/F_core47643.tsx +10 -0
  190. package/dist/modules-features/admin/core/core47643/F_core47643_Delete.tsx +13 -0
  191. package/dist/modules-features/admin/core/core47643/F_core47643_Form.tsx +34 -0
  192. package/dist/modules-features/admin/core/core47643/F_core47643_Read.tsx +57 -0
  193. package/dist/modules-features/admin/core/core60524/F_core60524.tsx +13 -0
  194. package/dist/modules-features/admin/core/core60524/F_core60524_Form.tsx +111 -0
  195. package/dist/modules-features/admin/core/core60524/F_core60524_Save.tsx +56 -0
  196. package/dist/modules-features/admin/core/core60524/useS_core60524.ts +16 -0
  197. package/dist/modules-features/admin/core/core64229/F_core64229.tsx +7 -0
  198. package/dist/modules-features/admin/core/core64229/F_core64229_Delete.tsx +21 -0
  199. package/dist/modules-features/admin/core/core64229/F_core64229_Form.tsx +95 -0
  200. package/dist/modules-features/admin/core/core64229/F_core64229_Read.tsx +67 -0
  201. package/dist/modules-features/admin/core/core71678/F_core71678.tsx +8 -0
  202. package/dist/modules-features/admin/core/core71678/F_core71678_ChangePermission.tsx +117 -0
  203. package/dist/modules-features/admin/core/core71678/F_core71678_Create.tsx +61 -0
  204. package/dist/modules-features/admin/core/core71678/F_core71678_Delete.tsx +16 -0
  205. package/dist/modules-features/admin/core/core71678/F_core71678_Read.tsx +92 -0
  206. package/dist/modules-features/admin/core/core71678/F_core71678_Update.tsx +49 -0
  207. package/dist/modules-features/admin/core/core76318/F_core76318.tsx +9 -0
  208. package/dist/modules-features/admin/core/core76318/F_core76318_Create.tsx +89 -0
  209. package/dist/modules-features/admin/core/core76318/F_core76318_Delete.tsx +17 -0
  210. package/dist/modules-features/admin/core/core76318/F_core76318_Read.tsx +104 -0
  211. package/dist/modules-features/admin/core/core76318/F_core76318_Update.tsx +89 -0
  212. package/dist/modules-features/admin/core/core83092/F_core83092.tsx +27 -0
  213. package/dist/modules-features/admin/core/core83092/F_core83092_ReadUser.tsx +85 -0
  214. package/dist/modules-features/admin/core/core83092/F_core83092_Save.tsx +52 -0
  215. package/dist/modules-features/admin/core/core83092/F_core83092_ViewMenuPermissions.tsx +263 -0
  216. package/dist/modules-features/admin/core/core83092/useS_core83092.tsx +70 -0
  217. package/dist/modules-features/authenticate/F_authenticate_Login/F_authenticate_Login.tsx +154 -0
  218. package/dist/modules-features/authenticate/F_authenticate_Login/css.module.css +4 -0
  219. package/dist/modules-features/authenticate/F_authenticate_Logout.tsx +22 -0
  220. package/dist/modules-features/authenticate/F_authenticate_SplashPage.tsx +21 -0
  221. package/dist/modules-features/authenticate/useS_authenticate.ts +23 -0
  222. package/dist/modules-features/index.mjs +2 -2
  223. package/dist/modules-features/index.ts +79 -0
  224. package/dist/providers/MyMantineProvider.tsx +140 -0
  225. package/dist/providers/MyReactQueryProvider.tsx +24 -0
  226. package/dist/providers/Provider.tsx +13 -0
  227. package/dist/providers/mantine.module.css +21 -0
  228. package/dist/stores/CreateGenericStore.ts +23 -0
  229. package/dist/stores/index.ts +1 -0
  230. package/dist/types/types.ts +16 -0
  231. package/dist/utils/index.ts +9 -0
  232. package/dist/utils/utils_converter.ts +39 -0
  233. package/dist/utils/utils_currency.ts +5 -0
  234. package/dist/utils/utils_date.ts +34 -0
  235. package/dist/utils/utils_excel.ts +128 -0
  236. package/dist/utils/utils_file.ts +61 -0
  237. package/dist/utils/utils_notification.ts +46 -0
  238. package/dist/utils/utils_pdf.ts +21 -0
  239. package/dist/utils/utils_time.ts +15 -0
  240. package/dist/utils/utils_validateForm.ts +9 -0
  241. package/package.json +1 -1
  242. package/dist/modules-features/index.css +0 -100
@@ -0,0 +1,13 @@
1
+ import { useEffect } from 'react'
2
+ import F_core60524_Form from './F_core60524_Form'
3
+ import { useS_core60524 } from './useS_core60524'
4
+
5
+ export function F_core60524({ AQModuleId }: { AQModuleId: number }) {
6
+ const store = useS_core60524()
7
+ useEffect(() => {
8
+ store.setProperty("AQModuleId", AQModuleId)
9
+ }, [])
10
+ return (
11
+ <F_core60524_Form />
12
+ )
13
+ }
@@ -0,0 +1,111 @@
1
+ import { MyDateInput, MyFlexEnd } from "@/components";
2
+ import { MyFileInput } from "@/components/Inputs/FileInput/MyFileInput";
3
+ import { MyTextInput } from "@/components/Inputs/TextInput/MyTextInput";
4
+ import { useQ_AQ_GetAQModule } from "@/hooks/query/AQ/useQ_AQ_GetAQModule";
5
+ import { IAQModule } from "@/interfaces/IAQModule";
6
+ import { utils_file_fileToAQDocumentType } from "@/utils";
7
+ import { Grid, Paper } from "@mantine/core";
8
+ import { useForm } from "@mantine/form";
9
+ import { useEffect } from "react";
10
+ import F_core60524_Save from "./F_core60524_Save";
11
+
12
+
13
+ export interface I_core60524_AQModule extends IAQModule {
14
+ faviconFile?: File,
15
+ logoFile?: File
16
+ }
17
+
18
+ export default function F_core60524_Form() {
19
+ const query = useQ_AQ_GetAQModule()
20
+ const form = useForm<I_core60524_AQModule>({
21
+ mode: "uncontrolled",
22
+ validate: {
23
+ faviconFileDetail: (value) => value ? null : "Không được để trống",
24
+ logoFileDetail: (value) => value ? null : "Không được để trống",
25
+ }
26
+ })
27
+
28
+ useEffect(() => {
29
+ // Set giá trị mặc định
30
+ if (!query.data) return
31
+ const values = {
32
+ code: query.data.code || "",
33
+ name: query.data.name || "",
34
+ officelName: query.data.officelName || "",
35
+ email: query.data.email || "",
36
+ phoneNumber: query.data.phoneNumber || "",
37
+ registrationDate: new Date(query.data.registrationDate!) || new Date(),
38
+ limiteDate: new Date(query.data.limiteDate!) || new Date(),
39
+ faviconPath: query.data.faviconPath || "",
40
+ logoPath: query.data.logoPath || "",
41
+ faviconFile: new File([], query.data.faviconFileDetail?.fileName!),
42
+ logoFile: new File([], query.data.logoFileDetail?.fileName!),
43
+
44
+ faviconFileDetail: query.data.faviconFileDetail,
45
+ logoFileDetail: query.data.logoFileDetail
46
+ }
47
+ form.setInitialValues(values)
48
+ form.setValues(values)
49
+ }, [query.data]);
50
+
51
+ return (
52
+ <Paper p={'md'}>
53
+ <Grid>
54
+ <Grid.Col span={5}>
55
+ <MyTextInput {...form.getInputProps("code")} label="Mã module" disabled />
56
+ </Grid.Col>
57
+ <Grid.Col span={{ base: 12, md: 7 }}>
58
+ <MyTextInput {...form.getInputProps("name")} label="Tên module" />
59
+ </Grid.Col>
60
+ <Grid.Col span={12}>
61
+ <MyTextInput {...form.getInputProps("officelName")} label="Tên đơn vị chủ quản" />
62
+ </Grid.Col>
63
+ <Grid.Col span={{ base: 12, md: 6 }}>
64
+ <MyTextInput {...form.getInputProps("email")} label="Email" />
65
+ </Grid.Col>
66
+ <Grid.Col span={{ base: 12, md: 6 }}>
67
+ <MyTextInput isPhoneNumber {...form.getInputProps("phoneNumber")} label="Số điện thoại" />
68
+ </Grid.Col>
69
+ <Grid.Col span={{ base: 12, md: 6 }}>
70
+ <MyDateInput
71
+ value={form.getValues().registrationDate}
72
+ onChange={(date) => form.setFieldValue("registrationDate", new Date(date)!)}
73
+ label="Ngày đăng ký"
74
+ />
75
+ </Grid.Col>
76
+ <Grid.Col span={{ base: 12, md: 6 }}>
77
+ <MyDateInput
78
+ value={form.getValues().limiteDate}
79
+ onChange={(date) => form.setFieldValue("limiteDate", new Date(date)!)}
80
+ label="Ngày hết hạn"
81
+ />
82
+ </Grid.Col>
83
+ <Grid.Col span={{ base: 12, md: 6 }}>
84
+ <MyFileInput
85
+ accept="image/png,image/jpeg"
86
+ label="Favicon (16px x 16px)"
87
+ value={form.getValues().faviconFile}
88
+ onChange={async (e) => {
89
+ form.setFieldValue("faviconFile", e!)
90
+ form.setFieldValue("faviconFileDetail", await utils_file_fileToAQDocumentType(e!))
91
+ }}
92
+ />
93
+ </Grid.Col>
94
+ <Grid.Col span={{ base: 12, md: 6 }}>
95
+ <MyFileInput
96
+ accept="image/png,image/jpeg"
97
+ label="Logo (330px x 115px)"
98
+ value={form.getValues().logoFile}
99
+ onChange={async (e) => {
100
+ form.setFieldValue("logoFile", e!)
101
+ form.setFieldValue("logoFileDetail", await utils_file_fileToAQDocumentType(e!))
102
+ }}
103
+ />
104
+ </Grid.Col>
105
+ </Grid>
106
+ <MyFlexEnd>
107
+ <F_core60524_Save form={form} />
108
+ </MyFlexEnd>
109
+ </Paper>
110
+ )
111
+ }
@@ -0,0 +1,56 @@
1
+ import baseAxios from '@/api/baseAxios';
2
+ import { MyButton } from '@/components';
3
+ import { utils_notification_show } from '@/utils';
4
+ import { useForm } from '@mantine/form';
5
+ import { useMutation } from '@tanstack/react-query';
6
+ import { I_core60524_AQModule } from './F_core60524_Form';
7
+ import { useS_core60524 } from './useS_core60524';
8
+
9
+
10
+
11
+ export default function F_core60524_Save({
12
+ form
13
+ }: {
14
+ form: ReturnType<typeof useForm<I_core60524_AQModule>>
15
+ }) {
16
+ const store = useS_core60524()
17
+ const mutation = useMutation({
18
+ mutationFn: async (body: I_core60524_AQModule) => {
19
+ const res = await baseAxios.post("/AQ/UpdateAQSetting", body)
20
+ return res
21
+ }
22
+ })
23
+
24
+ async function handleSave() {
25
+ const { faviconFile, logoFile, ...formValues } = form.getValues()
26
+ mutation.mutate({
27
+ ...formValues,
28
+ logoFileDetail: form.isDirty("logoFileDetail") == false ? {
29
+ fileName: formValues.logoFileDetail?.fileName,
30
+ fileExtension: formValues.logoFileDetail?.fileExtension,
31
+ fileBase64String: "",
32
+ } : formValues.logoFileDetail,
33
+
34
+ faviconFileDetail: form.isDirty("faviconFileDetail") == false ? {
35
+ fileName: formValues.faviconFileDetail?.fileName,
36
+ fileExtension: formValues.faviconFileDetail?.fileExtension,
37
+ fileBase64String: "",
38
+ } : formValues.faviconFileDetail,
39
+ id: store.state.AQModuleId,
40
+ }, {
41
+ onSuccess: () => {
42
+ utils_notification_show({
43
+ crudType: "update"
44
+ })
45
+ }
46
+ })
47
+ }
48
+
49
+ return (
50
+ <MyButton
51
+ disabled={!form.isDirty()}
52
+ crudType='save'
53
+ onClick={handleSave}
54
+ />
55
+ )
56
+ }
@@ -0,0 +1,16 @@
1
+ import { createGenericStore } from "@/stores";
2
+
3
+ interface I {
4
+ AQModuleId?: number
5
+ }
6
+
7
+ const useStore = createGenericStore<I>({
8
+ initialState: {}
9
+ })
10
+
11
+ export function useS_core60524() {
12
+ const store = useStore()
13
+ return {
14
+ ...store,
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ import { F_core64229_Read } from './F_core64229_Read'
2
+
3
+ export function F_core64229() {
4
+ return (
5
+ <F_core64229_Read />
6
+ )
7
+ }
@@ -0,0 +1,21 @@
1
+ import baseAxios from '@/api/baseAxios'
2
+ import { MyActionIconDelete, MyActionIconUpdate, MyButtonCreate, MyButtonImport, MyFlexColumn, MyNumberInput, MySelect, MyTextInput } from '@/components'
3
+ import { ENUM_EMAILCONFIG_MODULE } from '@/constants/enum/ENUM_EMAILCONFIG'
4
+ import { IBaseEntity } from '@/interfaces/base'
5
+ import { utils_converter_enumToSelectOptions } from '@/utils'
6
+ import { NumberInput, PasswordInput } from '@mantine/core'
7
+ import { useForm } from '@mantine/form'
8
+ import React from 'react'
9
+
10
+ export function F_core64229_Delete({ values }: { values: IBaseEntity }) {
11
+ return (
12
+ <MyActionIconDelete
13
+ contextData={values?.code}
14
+ onSubmit={() => {
15
+ return baseAxios.post("/EmailConfig/Delete", {
16
+ id: values?.id
17
+ })
18
+ }}
19
+ />
20
+ )
21
+ }
@@ -0,0 +1,95 @@
1
+ import baseAxios from '@/api/baseAxios'
2
+ import { MyActionIconUpdate, MyButtonCreate, MyButtonImport, MyFlexColumn, MyNumberInput, MySelect, MyTextInput } from '@/components'
3
+ import { ENUM_EMAILCONFIG_MODULE } from '@/constants/enum/ENUM_EMAILCONFIG'
4
+ import { IEmailConfig } from '@/interfaces/EmailConfig'
5
+ import { utils_converter_enumToSelectOptions } from '@/utils'
6
+ import { NumberInput, PasswordInput } from '@mantine/core'
7
+ import { useForm } from '@mantine/form'
8
+ import React from 'react'
9
+
10
+ interface I extends IEmailConfig {
11
+ password?: string
12
+ }
13
+ export function F_core64229_Form({ values }: { values?: I }) {
14
+ const form = useForm<I>({
15
+ mode: "uncontrolled",
16
+ initialValues: values ? values : {
17
+ emailModule: ENUM_EMAILCONFIG_MODULE["Đào tạo"],
18
+ }
19
+ })
20
+
21
+ function handleSubmit() {
22
+ const formValues = form.getValues()
23
+ return baseAxios.post(`/EmailConfig/${values ? "update" : "create"}`, {
24
+ "id": values ? formValues.id : 0,
25
+ "code": "string",
26
+ "name": "string",
27
+ "concurrencyStamp": "string",
28
+ "isEnabled": true,
29
+ "order": 0,
30
+ "emailModule": formValues.emailModule,
31
+ "hostMailServer": formValues.hostMailServer,
32
+ "outgoingPort": formValues.outgoingPort,
33
+ "incomingPort": formValues.incomingPort,
34
+ "sll": formValues.sll,
35
+ "userName": formValues.userName,
36
+ "password": formValues.password,
37
+ })
38
+ }
39
+
40
+ if (values) return (
41
+ <MyActionIconUpdate
42
+ form={form}
43
+ onSubmit={handleSubmit}
44
+ >
45
+ <FormInput form={form} />
46
+ </MyActionIconUpdate>
47
+ )
48
+ return (
49
+ <MyButtonCreate
50
+ form={form}
51
+ onSubmit={handleSubmit}>
52
+ <FormInput form={form} />
53
+ </MyButtonCreate>
54
+ )
55
+ }
56
+
57
+ function FormInput({ form }: { form: ReturnType<typeof useForm<I>> }) {
58
+ return (
59
+ <MyFlexColumn>
60
+ <MySelect
61
+ label='Phân hệ'
62
+ data={utils_converter_enumToSelectOptions(ENUM_EMAILCONFIG_MODULE)}
63
+ {...form.getInputProps("emailModule")}
64
+ value={form.getValues().emailModule?.toString()}
65
+ />
66
+ <MyTextInput
67
+ label='Host mail server'
68
+ {...form.getInputProps("hostMailServer")}
69
+ />
70
+ <MyNumberInput
71
+ label='Outgoing port'
72
+ {...form.getInputProps("outgoingPort")}
73
+ />
74
+ <MyNumberInput
75
+ label='Incoming port'
76
+ {...form.getInputProps("incomingPort")}
77
+ />
78
+ <MySelect
79
+ label='SSL'
80
+ data={["true", "false"]}
81
+ value={form.getValues().sll?.toString()}
82
+ onChange={(e) => form.setFieldValue("sll", e == "true" ? true : false)}
83
+ />
84
+ <MyTextInput
85
+ label='Username'
86
+ {...form.getInputProps("userName")}
87
+ />
88
+ <PasswordInput
89
+ label='Password'
90
+ placeholder='Nhập password'
91
+ {...form.getInputProps("password")}
92
+ />
93
+ </MyFlexColumn>
94
+ );
95
+ }
@@ -0,0 +1,67 @@
1
+ import baseAxios from '@/api/baseAxios'
2
+ import { MyCenterFull, MyDataTable } from '@/components'
3
+ import { ENUM_EMAILCONFIG_MODULE } from '@/constants/enum/ENUM_EMAILCONFIG'
4
+ import { useQuery } from '@tanstack/react-query'
5
+ import { MRT_ColumnDef } from 'mantine-react-table'
6
+ import React, { useMemo } from 'react'
7
+ import { F_core64229_Form } from './F_core64229_Form'
8
+ import { F_core64229_Delete } from './F_core64229_Delete'
9
+ import { IEmailConfig } from '@/interfaces/EmailConfig'
10
+
11
+ export function F_core64229_Read() {
12
+ const query = useQuery<IEmailConfig[]>({
13
+ queryKey: ["F_core64229_Read"],
14
+ queryFn: async () => {
15
+ const res = await baseAxios.get("/EmailConfig/GetAll")
16
+ return res.data.data
17
+ }
18
+ })
19
+ const columns = useMemo<MRT_ColumnDef<IEmailConfig>[]>(() => [
20
+ {
21
+ header: "Phân hệ",
22
+ accessorFn: (row) => {
23
+ return ENUM_EMAILCONFIG_MODULE[row.emailModule!]
24
+ }
25
+ },
26
+ {
27
+ header: "Host mail server",
28
+ accessorKey: "hostMailServer"
29
+ },
30
+ {
31
+ header: "Outgoing port",
32
+ accessorKey: "outgoingPort"
33
+ },
34
+ {
35
+ header: "Incoming port",
36
+ accessorKey: "incomingPort"
37
+ },
38
+ {
39
+ header: "SSL",
40
+ accessorFn: (row) => row.sll?.toString()
41
+ },
42
+ {
43
+ header: "Username",
44
+ accessorKey: "userName"
45
+ },
46
+ {
47
+ header: "Password",
48
+ accessorFn: () => "*******"
49
+ }
50
+ ], [])
51
+ if (query.isLoading) return "Đang tải"
52
+ return (
53
+ <MyDataTable
54
+ columns={columns}
55
+ data={query.data!}
56
+ renderTopToolbarCustomActions={() => (
57
+ <F_core64229_Form />
58
+ )}
59
+ renderRowActions={({ row }) => (
60
+ <MyCenterFull>
61
+ <F_core64229_Form values={row.original} />
62
+ <F_core64229_Delete values={row.original} />
63
+ </MyCenterFull>
64
+ )}
65
+ />
66
+ )
67
+ }
@@ -0,0 +1,8 @@
1
+ import { MyPageContent } from "@/components";
2
+ import { F_core71678_Read } from "./F_core71678_Read";
3
+
4
+ export function F_core71678() {
5
+ return (
6
+ <F_core71678_Read />
7
+ )
8
+ }
@@ -0,0 +1,117 @@
1
+ import baseAxios from "@/api/baseAxios";
2
+ import { MyButtonModal } from "@/components/Buttons/ButtonModal/MyButtonModal";
3
+ import { MyDataTable } from "@/components/DataDisplay/DataTable/MyDataTable";
4
+ ;
5
+ import { utils_notification_show } from "@/utils/utils_notification";
6
+ import { Button, Fieldset, Group, Table } from "@mantine/core";
7
+ import { useDisclosure } from "@mantine/hooks";
8
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
9
+ import { MRT_ColumnDef, MRT_RowSelectionState } from "mantine-react-table";
10
+ import { useEffect, useMemo, useState } from "react";
11
+ import { I_core71678_Read } from "./F_core71678_Read";
12
+ import { IBaseEntity } from "@/interfaces/base";
13
+
14
+ interface IRole extends IBaseEntity {
15
+
16
+ }
17
+
18
+ export function F_core71678_ChangePermission({ user }: { user: I_core71678_Read }) {
19
+ const disc = useDisclosure();
20
+ const queryClient = useQueryClient()
21
+ const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});
22
+ const rowSelect = useState<IRole[]>()
23
+ const query = useQuery<IRole[]>({
24
+ queryKey: [`F1_1ChangePermission`],
25
+ queryFn: async () => {
26
+ const response = await baseAxios.get("/Role/GetAdminRole");
27
+ return response.data.data
28
+ },
29
+ })
30
+ const mutation = useMutation({
31
+ mutationFn: async (roleIds: number[]) => {
32
+ const res = await baseAxios.post("/Role/AddUser?userId=" + user.id, roleIds)
33
+ return res
34
+ }
35
+ })
36
+ const permissionColumns = useMemo<MRT_ColumnDef<IRole>[]>(
37
+ () => [
38
+ {
39
+ header: "Quyền",
40
+ accessorKey: "name",
41
+ },
42
+ ],
43
+ []
44
+ );
45
+ function handleSave() {
46
+ mutation.mutate(Object.keys(rowSelection).map(Number), {
47
+ onSuccess: () => {
48
+ utils_notification_show({ crudType: "update" })
49
+ disc[1].close()
50
+ queryClient.invalidateQueries()
51
+ }
52
+ })
53
+ }
54
+ useEffect(() => {
55
+ const result = user.roles?.reduce((acc, item) => {
56
+ if (item.id !== undefined) { // Chỉ gán khi id có giá trị
57
+ acc[item.id] = true;
58
+ }
59
+ return acc;
60
+ }, {} as Record<string, boolean>);
61
+ setRowSelection(result!)
62
+ }, [])
63
+ return (
64
+ <MyButtonModal modalSize={"xl"} disclosure={disc} title="Chọn quyền cho người dùng" label="Sửa quyền">
65
+ <Table
66
+ // mt={{ base: 0, lg: 16 }}
67
+ w={'100%'}
68
+ variant="vertical" layout="fixed">
69
+ <Table.Tbody>
70
+ <Table.Tr>
71
+ <Table.Th w={160}>Họ và tên:</Table.Th>
72
+ <Table.Td>{user.fullName}</Table.Td>
73
+ </Table.Tr>
74
+
75
+ <Table.Tr>
76
+ <Table.Th>Tên đăng nhập:</Table.Th>
77
+ <Table.Td>
78
+ {user.userName}
79
+ </Table.Td>
80
+ </Table.Tr>
81
+
82
+ <Table.Tr>
83
+ <Table.Th>Email:</Table.Th>
84
+ <Table.Td>{user.email}</Table.Td>
85
+ </Table.Tr>
86
+
87
+
88
+ </Table.Tbody>
89
+ </Table>
90
+ {query.isLoading && "Đang tải dữ liệu..."}
91
+ {query.isError && "Lỗi khi tải dữ liệu..."}
92
+ <Fieldset legend="Chọn quyền">
93
+ <MyDataTable
94
+ enableRowSelection={true}
95
+ onRowSelectionChange={setRowSelection}
96
+ state={{ rowSelection }}
97
+ setSelectedRow={rowSelect[1]}
98
+ getRowId={(originalRow) => originalRow.id?.toString()}
99
+ initialState={{
100
+ density: "xs",
101
+ pagination: { pageIndex: 0, pageSize: 10 },
102
+ columnPinning: { right: ["mrt-row-actions"] },
103
+ columnVisibility: {
104
+ nguoiCapNhat: false,
105
+ ngayCapNhat: false
106
+ }
107
+ }}
108
+ columns={permissionColumns}
109
+ data={query.data!}
110
+ />
111
+ </Fieldset>
112
+ <Group justify='flex-end' mt={24}>
113
+ <Button onClick={handleSave}>Lưu</Button>
114
+ </Group>
115
+ </MyButtonModal>
116
+ )
117
+ }
@@ -0,0 +1,61 @@
1
+ "use client"
2
+ import baseAxios from '@/api/baseAxios'
3
+ import { MyButtonCreate } from '@/components/Buttons/ButtonCRUD/MyButtonCreate'
4
+ import { MyTextInput } from '@/components/Inputs/TextInput/MyTextInput'
5
+ import { IBaseEntity } from '@/interfaces/base'
6
+ import { U0MyValidateEmail } from '@/utils/utils_validateForm'
7
+ import { useForm } from '@mantine/form'
8
+
9
+ interface I extends IBaseEntity {
10
+ userName?: string,
11
+ passwordHash?: string
12
+ address?: string
13
+ fullName?: string,
14
+ isBlocked?: boolean
15
+ email?: string,
16
+ password?: string,
17
+ workingUnitId?: number
18
+ phoneNumber?: string
19
+ AQModuleId?: number
20
+ }
21
+ const ENDPOINT = "/Account/create"
22
+ export function F_core71678_Create() {
23
+ const form = useForm<I>({
24
+ initialValues: {
25
+ fullName: "",
26
+ code: "",
27
+ userName: "",
28
+ password: "",
29
+ email: "",
30
+ phoneNumber: "",
31
+ },
32
+ validate: {
33
+ email: (value) => U0MyValidateEmail(value),
34
+ }
35
+ })
36
+ async function handleSubmit() {
37
+ return await baseAxios.post(ENDPOINT, {
38
+ ...form.getValues(),
39
+ passwordHash: "",
40
+ id: 0,
41
+ address: "",
42
+ concurrencyStamp: "",
43
+ isBlocked: false,
44
+ isEnabled: true,
45
+ workingUnitId: undefined,
46
+ AQModuleId: 1002
47
+ })
48
+ }
49
+ return (
50
+ <MyButtonCreate form={form} onSubmit={handleSubmit} objectName='người dùng'>
51
+ <MyTextInput label='Mã tài khoản' {...form.getInputProps("code")} />
52
+ <MyTextInput label='Tên tài khoản' {...form.getInputProps("userName")} />
53
+ <MyTextInput label='Mật khẩu' {...form.getInputProps("password")} />
54
+ <MyTextInput label='Họ và tên' {...form.getInputProps("fullName")} />
55
+ <MyTextInput label='Email' {...form.getInputProps("email")} />
56
+ <MyTextInput label='Số điện thoại' {...form.getInputProps("phoneNumber")} />
57
+ </MyButtonCreate>
58
+ )
59
+ }
60
+
61
+
@@ -0,0 +1,16 @@
1
+ 'use client'
2
+ import baseAxios from "@/api/baseAxios";
3
+ import { MyActionIconDelete } from "@/components/ActionIcons/ActionIconCRUD/MyActionIconDelete";
4
+
5
+ const ENDPOINT = "/Account/delete"
6
+ export function F_core71678_Delete({ id, code }: { id: number, code: string }) {
7
+ return (
8
+ <MyActionIconDelete
9
+ contextData={code}
10
+ onSubmit={async () =>
11
+ await baseAxios.post(ENDPOINT, { id: id })
12
+ }
13
+ />
14
+ )
15
+ }
16
+