From 9d499cce67fcc77366116e5eaed43effa710d590 Mon Sep 17 00:00:00 2001 From: lxf <2974586501@qq.com> Date: Wed, 30 Apr 2025 14:55:27 +0800 Subject: [PATCH] 11 --- .idea/workspace.xml | 19 +- client/package-lock.json | 81 +++- client/src/apis/bedPanorama.ts | 25 +- client/src/apis/bookManage.ts | 78 +++- client/src/apis/build.ts | 158 ++++++- client/src/apis/cateringSet.ts | 77 +++- client/src/apis/checkContract.ts | 127 +++++- client/src/apis/consume.ts | 14 +- client/src/apis/dishes.ts | 98 ++++- client/src/apis/home.ts | 43 +- client/src/apis/index.ts | 13 + client/src/apis/order.ts | 94 ++++- client/src/apis/retreatAudit.ts | 37 +- client/src/apis/roomType.ts | 56 ++- client/src/apis/soldManage.ts | 322 ++++++++++---- client/src/apis/source.ts | 55 ++- client/src/apis/user.ts | 94 +++-- .../ProTable/Grid/components/GridItem.vue | 109 ----- client/src/components/ProTable/Grid/index.vue | 207 --------- .../ProTable/Grid/interface/index.ts | 12 - .../components/ProTable/IconPark/index.vue | 45 -- .../ProTable/components/ColSetting.vue | 88 ---- .../ProTable/components/Pagination.vue | 47 --- .../ProTable/components/TableColumn.vue | 103 ----- .../src/components/ProTable/ProTable/index.md | 87 ---- .../components/ProTable/ProTable/index.vue | 397 ------------------ .../ProTable/ProTable/interface/index.ts | 84 ---- .../ProTable/ReImageVerify/index.ts | 12 - .../ProTable/ReImageVerify/src/hooks.ts | 133 ------ .../ProTable/ReImageVerify/src/index.vue | 55 --- .../SearchForm/components/SearchFormItem.vue | 117 ------ .../components/ProTable/SearchForm/index.vue | 142 ------- .../src/components/ProTable/SvgIcon/index.vue | 49 --- .../ProTable/elderListDialog/index.vue | 118 ------ .../components/ProTable/my-card/my-card.vue | 30 -- .../components/ProTable/treeDialog/index.vue | 90 ---- .../ProTable/upload/image/index.vue | 189 --------- .../wen-test/DynamicAdditionComponent.vue | 47 --- client/src/hooks/interface/index.ts | 17 +- client/src/hooks/useHandleData.ts | 34 +- client/src/hooks/useIcons.ts | 11 + client/src/hooks/useSelection.ts | 27 +- client/src/hooks/useTable.ts | 198 +++++---- client/src/icons/index.ts | 8 +- .../components/NavBar/components/Avatar.vue | 79 +++- .../NavBar/components/Breadcrumb.vue | 33 +- client/src/layout/components/NavBar/index.vue | 18 + .../SideBar/components/MenuFold.vue | 27 +- .../SideBar/components/MenuItem.vue | 53 ++- .../src/layout/components/SideBar/index.vue | 59 ++- client/src/layout/components/Tags/index.vue | 13 + client/src/layout/index.vue | 35 +- client/src/plugins/element-plus/index.ts | 8 +- client/src/plugins/index.ts | 3 + client/src/router/index.ts | 39 +- client/src/router/types.ts | 11 + client/src/router/utils.ts | 56 ++- client/src/store/index.ts | 19 +- client/src/store/modules/app/index.ts | 52 ++- client/src/store/modules/app/types.ts | 9 + client/src/store/modules/soldManage/index.ts | 7 + client/src/store/types.ts | 6 + client/src/store/utils.ts | 18 +- client/src/styles/element.scss | 70 ++- client/src/styles/index.scss | 25 +- client/src/styles/login.scss | 48 ++- client/src/styles/mixin.scss | 8 + client/src/styles/navbar.scss | 30 +- client/src/styles/reset.scss | 40 +- client/src/styles/sidebar.scss | 168 +++++++- client/src/styles/theme.scss | 10 +- client/src/styles/transition.scss | 16 +- client/src/styles/variables.module.scss | 21 +- client/src/styles/variables.module.scss.d.ts | 13 + client/src/types/global.d.ts | 12 + client/src/types/vuex.d.ts | 11 +- client/src/utils/commonUtil.ts | 35 +- client/src/utils/formRules.ts | 50 ++- client/src/utils/http/index.ts | 29 +- client/src/utils/index.ts | 4 + client/src/utils/is/index.ts | 193 +++++++-- client/src/utils/util.ts | 48 ++- client/src/views/base/activity/index.vue | 13 +- client/src/views/base/index.vue | 19 +- .../src/views/base/live/flat/dialog/bed.vue | 143 ++++--- .../src/views/base/live/flat/dialog/build.vue | 153 ++++--- .../src/views/base/live/flat/dialog/floor.vue | 158 ++++--- .../src/views/base/live/flat/dialog/room.vue | 222 ++++++---- client/src/views/base/live/flat/index.vue | 325 +++++++------- client/src/views/base/live/index.vue | 14 +- client/src/views/base/live/room/index.vue | 159 ++++--- .../views/base/live/room/roomDialog/index.vue | 154 ++++--- client/src/views/base/sale/index.vue | 16 +- client/src/views/base/sale/origin/index.vue | 84 ++-- .../base/sale/origin/originDialog/index.vue | 138 +++--- client/src/views/base/sale/tag/index.vue | 14 +- .../views/charge/audit/auditDialog/index.vue | 314 ++++++++------ client/src/views/charge/audit/index.vue | 103 +++-- client/src/views/charge/index.vue | 24 +- client/src/views/charge/prestore/index.vue | 100 +++-- .../charge/prestore/prestoreDialog/index.vue | 135 +++--- client/src/views/charge/record/index.vue | 74 ++-- .../exception/BusinessRuntimeException.java | 16 +- .../BusinessRuntimeExceptionAdvice.java | 89 +++- .../common/config/file/FileTempPath.java | 74 +++- .../file/FileUploadConfigPropertity.java | 15 +- .../mybatisplus/MetaObjectHandlerImpl.java | 59 ++- .../common/config/quartz/QuartzConfig.java | 64 ++- .../common/config/quartz/QuartzJob.java | 23 +- .../config/redis/FastJsonRedisSerializer.java | 44 +- .../common/config/redis/RedisConfig.java | 27 +- .../security/config/SecurityConfig.java | 57 ++- .../security/entity/LoginUserDetails.java | 35 +- .../filter/JwtAuthenticationTokenFilter.java | 72 +++- .../handler/AccessDeniedHandlerImpl.java | 17 +- .../handler/AuthenticationEntryPointImpl.java | 17 +- .../security/handler/AuthorityAssert.java | 24 +- .../security/handler/PasswordEncoderImpl.java | 14 +- .../service/UserDetailsServiceImpl.java | 39 +- .../common/config/swagger/SwaggerConfig.java | 44 +- .../common/config/web/IgnoreConfig.java | 11 + .../common/config/web/WebMvcConfig.java | 42 +- .../gerocomium/common/constant/AuditEnum.java | 32 +- .../gerocomium/common/constant/BedEnum.java | 29 +- .../common/constant/ChargeEnum.java | 26 +- .../gerocomium/common/constant/CheckEnum.java | 38 +- .../gerocomium/common/constant/CodeEnum.java | 27 +- .../common/constant/ConsumeEnum.java | 25 +- .../common/constant/ExceptionEnum.java | 9 + .../gerocomium/common/constant/MarkEnum.java | 29 +- .../common/constant/RecipientEnum.java | 25 +- .../gerocomium/common/constant/VisitEnum.java | 25 +- .../gerocomium/common/constant/YesNoEnum.java | 17 +- .../ew/gerocomium/common/util/AesUtil.java | 45 +- .../ew/gerocomium/common/util/AssertUtil.java | 76 +++- .../common/util/ClassJavaToTSUtil.java | 72 +++- .../gerocomium/common/util/DateUtilWen.java | 167 ++++++-- .../common/util/EntityCodeGeneratorUtil.java | 101 +++-- .../ew/gerocomium/common/util/ExcelUtil.java | 109 +++-- .../common/util/JavaToTsConverter.java | 101 ++++- .../ew/gerocomium/common/util/JwtUtil.java | 42 +- .../ew/gerocomium/common/util/PageUtil.java | 52 ++- .../gerocomium/common/util/ResponseUtil.java | 42 +- .../gerocomium/common/util/SendEmailUtil.java | 35 +- .../controller/AccountController.java | 98 ++++- .../controller/BedPanoramaController.java | 75 +++- .../controller/BuildController.java | 373 ++++++++++++++-- .../controller/CheckContractController.java | 288 +++++++++++-- .../controller/ConsultController.java | 178 +++++++- .../gerocomium/controller/FileController.java | 55 ++- .../gerocomium/controller/HomeController.java | 105 ++++- .../controller/IntentionController.java | 368 ++++++++++++++-- .../controller/InventoryController.java | 60 ++- .../controller/LabelController.java | 182 +++++++- .../controller/MaterialController.java | 86 +++- .../controller/OutboundRecordController.java | 200 ++++++++- .../controller/RoomTypeController.java | 111 ++++- .../controller/SourceController.java | 110 ++++- .../controller/WarehouseController.java | 123 +++++- .../controller/WarehouseRecordController.java | 157 ++++++- .../ew/gerocomium/dao/base/BaseEntity.java | 21 +- .../ew/gerocomium/dao/base/BuildingVo.java | 55 ++- .../GerocomiumApplicationTests.java | 12 +- server/target/classes/application-dev.yml | 6 +- .../exception/BusinessRuntimeException.class | Bin 1241 -> 1241 bytes .../BusinessRuntimeExceptionAdvice.class | Bin 4183 -> 4183 bytes .../common/config/file/FileTempPath.class | Bin 4980 -> 4984 bytes .../file/FileUploadConfigPropertity.class | Bin 3505 -> 3505 bytes .../mybatisplus/MetaObjectHandlerImpl.class | Bin 2928 -> 2928 bytes .../common/config/quartz/QuartzConfig.class | Bin 3048 -> 3056 bytes .../quartz/QuartzJob$ContractExpireJob.class | Bin 1365 -> 1365 bytes .../quartz/QuartzJob$ReserveExpireJob.class | Bin 1359 -> 1359 bytes .../common/config/quartz/QuartzJob.class | Bin 1198 -> 1198 bytes .../redis/FastJsonRedisSerializer.class | Bin 2903 -> 2903 bytes .../common/config/redis/RedisConfig.class | Bin 1949 -> 1949 bytes .../security/config/SecurityConfig.class | Bin 5974 -> 5974 bytes .../security/entity/LoginUserDetails.class | Bin 2641 -> 2641 bytes .../filter/JwtAuthenticationTokenFilter.class | Bin 5926 -> 5926 bytes .../handler/AccessDeniedHandlerImpl.class | Bin 1391 -> 1391 bytes .../AuthenticationEntryPointImpl.class | Bin 1427 -> 1427 bytes .../security/handler/AuthorityAssert.class | Bin 2069 -> 2073 bytes .../handler/PasswordEncoderImpl.class | Bin 1229 -> 1229 bytes .../service/UserDetailsServiceImpl.class | Bin 2984 -> 2984 bytes .../common/config/swagger/SwaggerConfig.class | Bin 2950 -> 2958 bytes .../common/config/web/IgnoreConfig.class | Bin 2474 -> 2474 bytes .../common/config/web/WebMvcConfig.class | Bin 3299 -> 3299 bytes .../common/constant/AuditEnum.class | Bin 1614 -> 1614 bytes .../gerocomium/common/constant/BedEnum.class | Bin 1521 -> 1521 bytes .../common/constant/ChargeEnum.class | Bin 1461 -> 1461 bytes .../common/constant/CheckEnum.class | Bin 1759 -> 1759 bytes .../gerocomium/common/constant/CodeEnum.class | Bin 1662 -> 1662 bytes .../common/constant/ConsumeEnum.class | Bin 1402 -> 1402 bytes .../common/constant/ExceptionEnum.class | Bin 9340 -> 9340 bytes .../gerocomium/common/constant/MarkEnum.class | Bin 1448 -> 1448 bytes .../common/constant/RecipientEnum.class | Bin 1415 -> 1415 bytes .../common/constant/VisitEnum.class | Bin 1410 -> 1410 bytes .../common/constant/YesNoEnum.class | Bin 1539 -> 1539 bytes .../ew/gerocomium/common/util/AesUtil.class | Bin 2283 -> 2283 bytes .../gerocomium/common/util/AssertUtil.class | Bin 2363 -> 2363 bytes .../common/util/ClassJavaToTSUtil.class | Bin 3184 -> 3188 bytes .../gerocomium/common/util/DateUtilWen.class | Bin 4871 -> 4883 bytes .../common/util/EntityCodeGeneratorUtil.class | Bin 6323 -> 6323 bytes .../common/util/ExcelUtil$Test.class | Bin 2738 -> 2738 bytes .../ew/gerocomium/common/util/ExcelUtil.class | Bin 8667 -> 8667 bytes .../common/util/JavaToTsConverter.class | Bin 3173 -> 3173 bytes .../ew/gerocomium/common/util/JwtUtil.class | Bin 2404 -> 2412 bytes .../ew/gerocomium/common/util/PageUtil.class | Bin 5074 -> 5082 bytes .../gerocomium/common/util/ResponseUtil.class | Bin 2260 -> 2260 bytes .../common/util/SendEmailUtil.class | Bin 1966 -> 1966 bytes .../controller/AccidentController.class | Bin 5880 -> 5880 bytes .../controller/AccountController.class | Bin 3129 -> 3129 bytes .../controller/ActiveController.class | Bin 4446 -> 4446 bytes .../controller/ActiveTypeController.class | Bin 3865 -> 3865 bytes .../controller/BedPanoramaController.class | Bin 2551 -> 2551 bytes .../controller/BuildController.class | Bin 7819 -> 7819 bytes .../controller/CateringSetController.class | Bin 4851 -> 4851 bytes .../controller/CheckContractController.class | Bin 6751 -> 6751 bytes .../controller/ConsultController.class | Bin 4809 -> 4809 bytes .../controller/ConsumeController.class | Bin 1784 -> 1784 bytes .../DepositRechargeController.class | Bin 3108 -> 3108 bytes .../controller/DishesController.class | Bin 5437 -> 5437 bytes .../controller/ElderRecordController.class | Bin 4278 -> 4278 bytes .../controller/FileController.class | Bin 1897 -> 1897 bytes .../controller/HomeController.class | Bin 2727 -> 2760 bytes .../controller/IntentionController.class | Bin 9604 -> 9604 bytes .../controller/InventoryController.class | Bin 2275 -> 2275 bytes .../controller/LabelController.class | Bin 4752 -> 4752 bytes .../controller/MaterialController.class | Bin 5523 -> 5523 bytes .../controller/NurseGradeController.class | Bin 4708 -> 4708 bytes .../controller/NurseReserveController.class | Bin 5062 -> 5062 bytes .../controller/OrderController.class | Bin 5685 -> 5685 bytes .../controller/OutboundRecordController.class | Bin 6892 -> 6892 bytes .../controller/OutwardController.class | Bin 6799 -> 6799 bytes .../controller/ReserveController.class | Bin 4855 -> 4855 bytes .../controller/RetreatApplyController.class | Bin 3222 -> 3222 bytes .../controller/RetreatAuditController.class | Bin 3033 -> 3033 bytes .../controller/RoomTypeController.class | Bin 3667 -> 3667 bytes .../controller/ServiceProjectController.class | Bin 5543 -> 5543 bytes .../controller/SourceController.class | Bin 3774 -> 3774 bytes .../controller/StaffController.class | Bin 3813 -> 3813 bytes .../controller/VisitController.class | Bin 5100 -> 5100 bytes .../controller/WarehouseController.class | Bin 3944 -> 3944 bytes .../WarehouseRecordController.class | Bin 5505 -> 5505 bytes .../ew/gerocomium/dao/base/BaseEntity.class | Bin 3739 -> 3739 bytes ...ngVo$BuildingItem$FloorItem$RoomItem.class | Bin 4559 -> 4559 bytes .../BuildingVo$BuildingItem$FloorItem.class | Bin 4013 -> 4013 bytes .../dao/base/BuildingVo$BuildingItem.class | Bin 3881 -> 3881 bytes .../ew/gerocomium/dao/base/BuildingVo.class | Bin 3748 -> 3748 bytes .../gerocomium/service/common/BedFunc.class | Bin 12773 -> 12781 bytes .../service/common/ConsultFunc.class | Bin 6823 -> 6827 bytes .../service/common/ContractFunc.class | Bin 6823 -> 6827 bytes .../gerocomium/service/common/RoomFunc.class | Bin 13820 -> 13824 bytes .../service/common/VisitPlanFunc.class | Bin 8345 -> 8361 bytes 253 files changed, 7975 insertions(+), 4180 deletions(-) delete mode 100644 client/src/components/ProTable/Grid/components/GridItem.vue delete mode 100644 client/src/components/ProTable/Grid/index.vue delete mode 100644 client/src/components/ProTable/Grid/interface/index.ts delete mode 100644 client/src/components/ProTable/IconPark/index.vue delete mode 100644 client/src/components/ProTable/ProTable/components/ColSetting.vue delete mode 100644 client/src/components/ProTable/ProTable/components/Pagination.vue delete mode 100644 client/src/components/ProTable/ProTable/components/TableColumn.vue delete mode 100644 client/src/components/ProTable/ProTable/index.md delete mode 100644 client/src/components/ProTable/ProTable/index.vue delete mode 100644 client/src/components/ProTable/ProTable/interface/index.ts delete mode 100644 client/src/components/ProTable/ReImageVerify/index.ts delete mode 100644 client/src/components/ProTable/ReImageVerify/src/hooks.ts delete mode 100644 client/src/components/ProTable/ReImageVerify/src/index.vue delete mode 100644 client/src/components/ProTable/SearchForm/components/SearchFormItem.vue delete mode 100644 client/src/components/ProTable/SearchForm/index.vue delete mode 100644 client/src/components/ProTable/SvgIcon/index.vue delete mode 100644 client/src/components/ProTable/elderListDialog/index.vue delete mode 100644 client/src/components/ProTable/my-card/my-card.vue delete mode 100644 client/src/components/ProTable/treeDialog/index.vue delete mode 100644 client/src/components/ProTable/upload/image/index.vue delete mode 100644 client/src/components/ProTable/wen-test/DynamicAdditionComponent.vue diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c3a830d..481517b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,12 @@ + + - + + + - + { + "customColor": "", + "associatedIndex": 1 +} @@ -57,6 +63,7 @@ diff --git a/client/package-lock.json b/client/package-lock.json index ef537ad..cf67628 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -18,6 +18,7 @@ "cz-customizable": "^7.0.0", "echarts": "^5.4.1", "element-plus": "^2.2.28", + "file-saver": "^2.0.5", "global": "^4.4.0", "husky": "^8.0.2", "screenfull": "^6.0.2", @@ -26,11 +27,13 @@ "unplugin-vue-components": "^0.22.12", "vue": "^3.2.13", "vue-i18n": "^9.2.2", + "vue-property-decorator": "^9.1.2", "vue-router": "^4.0.3", "vuex": "^4.0.0", "vuex-persistedstate": "^4.1.0" }, "devDependencies": { + "@types/file-saver": "^2.0.5", "@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/parser": "^5.4.0", "@vue/cli-plugin-babel": "~5.0.0", @@ -2982,6 +2985,13 @@ "@types/range-parser": "*" } }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -4940,18 +4950,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-jsx/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -8299,6 +8297,12 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", @@ -15708,6 +15712,16 @@ "@vue/shared": "3.2.45" } }, + "node_modules/vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmmirror.com/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "vue": "^2.0.0" + } + }, "node_modules/vue-demi": { "version": "0.13.11", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", @@ -15861,6 +15875,16 @@ "node": ">=8.9.0" } }, + "node_modules/vue-property-decorator": { + "version": "9.1.2", + "resolved": "https://registry.npmmirror.com/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz", + "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==", + "license": "MIT", + "peerDependencies": { + "vue": "*", + "vue-class-component": "*" + } + }, "node_modules/vue-router": { "version": "4.1.6", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz", @@ -18548,6 +18572,12 @@ "@types/range-parser": "*" } }, + "@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true + }, "@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -19967,14 +19997,7 @@ "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": {}, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true, - "peer": true - } - } + "requires": {} }, "acorn-node": { "version": "1.8.2", @@ -22289,6 +22312,11 @@ "flat-cache": "^3.0.4" } }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", @@ -27373,6 +27401,13 @@ } } }, + "vue-class-component": { + "version": "7.2.6", + "resolved": "https://registry.npmmirror.com/vue-class-component/-/vue-class-component-7.2.6.tgz", + "integrity": "sha512-+eaQXVrAm/LldalI272PpDe3+i4mPis0ORiMYxF6Ae4hyuCh15W8Idet7wPUEs4N4YptgFHGys4UrgNQOMyO6w==", + "peer": true, + "requires": {} + }, "vue-demi": { "version": "0.13.11", "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz", @@ -27464,6 +27499,12 @@ } } }, + "vue-property-decorator": { + "version": "9.1.2", + "resolved": "https://registry.npmmirror.com/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz", + "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==", + "requires": {} + }, "vue-router": { "version": "4.1.6", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz", diff --git a/client/src/apis/bedPanorama.ts b/client/src/apis/bedPanorama.ts index 80e8fab..1474293 100644 --- a/client/src/apis/bedPanorama.ts +++ b/client/src/apis/bedPanorama.ts @@ -1,18 +1,32 @@ +// 从 "@/utils" 模块导入 http 对象,该对象可能封装了 HTTP 请求方法 import { http } from "@/utils"; +// 定义一个名为 IListRoomByKey 的接口,用于描述获取房间列表时请求参数的数据结构 interface IListRoomByKey { + // 楼栋 ID,类型为字符串 buildingId: string; + // 楼层 ID,类型为字符串 floorId: string; + // 老人姓名,类型为字符串 elderName: string; } -// 获取楼栋列表 +/** + * 获取楼栋列表 + * @returns 一个 Promise,解析为包含楼栋列表的响应 + */ export async function listBuilding() { + // 发起一个 GET 请求到指定的 API 端点,用于获取楼栋列表 return http.get("/api/bedPanorama/listBuilding"); } -// 获取楼层列表 +/** + * 根据楼栋 ID 获取楼层列表 + * @param buildingId - 用于筛选楼层列表的楼栋 ID + * @returns 一个 Promise,解析为包含楼层列表的响应 + */ export function listFloorByBuildingId(buildingId: string) { + // 发起一个 GET 请求到指定的 API 端点,携带楼栋 ID 作为参数,用于获取对应楼栋的楼层列表 return http.get("/api/bedPanorama/listFloorByBuildingId", { params: { buildingId @@ -20,8 +34,13 @@ export function listFloorByBuildingId(buildingId: string) { }); } -// 获取房间列表 +/** + * 根据条件获取房间列表 + * @param data - 包含筛选条件的对象,符合 IListRoomByKey 接口的结构 + * @returns 一个 Promise,解析为包含房间列表的响应 + */ export function listRoomByKey(data: IListRoomByKey) { + // 发起一个 GET 请求到指定的 API 端点,将 data 对象中的属性展开作为请求参数,用于获取符合条件的房间列表 return http.get("/api/bedPanorama/listRoomByKey", { params: { ...data diff --git a/client/src/apis/bookManage.ts b/client/src/apis/bookManage.ts index 171a1d8..46c4db0 100644 --- a/client/src/apis/bookManage.ts +++ b/client/src/apis/bookManage.ts @@ -1,45 +1,79 @@ +// 从 '@/utils' 模块导入 http 对象,该对象可能封装了 HTTP 请求的方法,用于后续发起网络请求 import { http } from '@/utils' +// 定义一个接口 ISearchFormReserveByKey,用于描述分页查询预定时请求参数的数据结构 interface ISearchFormReserveByKey { + // 当前页码,类型为数字 pageNum: number + // 每页显示的数量,类型为数字 pageSize: number + // 老人姓名,可选参数,类型为字符串 elderName?: string + // 付款人电话,可选参数,类型为字符串 payerPhone?: string } +// 定义一个导出的接口 IPageSearchElderByKey,用于描述分页搜索老人时请求参数的数据结构 export interface IPageSearchElderByKey { + // 当前页码,类型为数字 pageNum: number + // 每页显示的数量,类型为数字 pageSize: number + // 老人姓名,可选参数,类型为字符串 elderName?: string + // 老人电话,可选参数,类型为字符串 elderPhone?: string } +// 定义一个接口 IAddReserve,用于描述新增预定时请求体的数据结构 interface IAddReserve { + // 床位 ID,类型为字符串 bedId: string + // 定金,类型为字符串 deposit: string + // 截止日期,类型为字符串 dueDate: string + // 老人地址,类型为字符串 elderAddress: string + // 老人年龄,类型为字符串 elderAge: string + // 老人姓名,类型为字符串 elderName: string + // 老人电话,类型为字符串 elderPhone: string + // 老人性别,类型为字符串 elderSex: string + // 身份证号码,类型为字符串 idNum: string + // 付款人姓名,类型为字符串 payerName: string + // 付款人电话,类型为字符串 payerPhone: string + // 工作人员 ID,类型为字符串 staffId: string } +// 定义一个接口 IGetReserveById,用于描述根据预定编号和老人编号获取预定信息时请求参数的数据结构 interface IGetReserveById { + // 老人 ID,类型为字符串 elderId: string + // 预定 ID,类型为字符串 reserveId: string } +// 定义一个接口 IRefund,用于描述退款时请求体的数据结构 interface IRefund { + // 预定 ID,类型为字符串 reserveId: string } -// 分页查询预定 +/** + * 分页查询预定信息 + * @param data - 包含分页和查询条件的对象,符合 ISearchFormReserveByKey 接口 + * @returns 一个 Promise,解析为包含分页查询预定结果的响应 + */ export async function pageReserveByKey(data: ISearchFormReserveByKey) { + // 发起一个 GET 请求到指定的 API 端点,将 data 对象中的属性展开作为请求参数 return http.get('/api/reserve/pageReserveByKey', { params: { ...data @@ -47,8 +81,13 @@ export async function pageReserveByKey(data: ISearchFormReserveByKey) { }) } -// 分页搜索老人 +/** + * 分页搜索老人信息 + * @param data - 包含分页和查询条件的对象,符合 IPageSearchElderByKey 接口 + * @returns 一个 Promise,解析为包含分页搜索老人结果的响应 + */ export function pageSearchElderByKey(data: IPageSearchElderByKey) { + // 发起一个 GET 请求到指定的 API 端点,将 data 对象中的属性展开作为请求参数 return http.get('/api/reserve/pageSearchElderByKey', { params: { ...data @@ -56,23 +95,41 @@ export function pageSearchElderByKey(data: IPageSearchElderByKey) { }) } -// 获取营销人员 +/** + * 获取营销人员列表 + * @returns 一个 Promise,解析为包含营销人员列表的响应 + */ export function listReserveStaff() { + // 发起一个 GET 请求到指定的 API 端点,用于获取营销人员列表 return http.get('/api/reserve/listReserveStaff') } -// 获取楼栋树 +/** + * 获取楼栋树信息 + * @returns 一个 Promise,解析为包含楼栋树信息的响应 + */ export function getBuildTree() { + // 发起一个 GET 请求到指定的 API 端点,用于获取楼栋树信息 return http.get('/api/reserve/getBuildTree') } -// 新增预定 +/** + * 新增预定信息 + * @param data - 包含新增预定所需信息的对象,符合 IAddReserve 接口 + * @returns 一个 Promise,解析为新增预定操作的响应 + */ export function addReserve(data: IAddReserve) { + // 发起一个 POST 请求到指定的 API 端点,将 data 对象作为请求体 return http.post('/api/reserve/addReserve', data) } -// 根据预定编号和老人编号获取预定信息 +/** + * 根据预定编号和老人编号获取预定信息 + * @param data - 包含预定编号和老人编号的对象,符合 IGetReserveById 接口 + * @returns 一个 Promise,解析为包含指定预定信息的响应 + */ export function getReserveById(data: IGetReserveById) { + // 发起一个 GET 请求到指定的 API 端点,将 data 对象中的属性展开作为请求参数 return http.get('/api/reserve/getReserveByReserveIdAndElderId', { params: { ...data @@ -80,7 +137,12 @@ export function getReserveById(data: IGetReserveById) { }) } -// 退款 +/** + * 进行退款操作 + * @param data - 包含退款所需预定 ID 的对象,符合 IRefund 接口 + * @returns 一个 Promise,解析为退款操作的响应 + */ export function refund(data: IRefund) { - return http.put('/api/reserve/refund',data) + // 发起一个 PUT 请求到指定的 API 端点,将 data 对象作为请求体 + return http.put('/api/reserve/refund', data) } diff --git a/client/src/apis/build.ts b/client/src/apis/build.ts index 925cfac..eb5871f 100644 --- a/client/src/apis/build.ts +++ b/client/src/apis/build.ts @@ -1,64 +1,103 @@ +// 从 "@/utils" 模块导入 http 对象,用于发起 HTTP 请求 import { http } from "@/utils"; +// 定义 IPageBedByKey 接口,用于分页查询床位时的参数结构 interface IPageBedByKey { + // 楼栋 ID buildId: string; + // 楼层 ID floorId: string; + // 房间 ID roomId: string; + // 床位状态标识 bedFlag: string; } +// 定义 IAddBuilding 接口,用于新增楼栋时的请求数据结构 interface IAddBuilding { + // 楼栋 ID id: string; + // 楼栋名称 name: string; + // 楼层数量 floorNum: string; } +// 定义 IGetBuildingById 接口,用于根据编号获取楼栋时的参数结构 interface IGetBuildingById { + // 楼栋 ID buildingId: string; } +// 定义 IAddFloor 接口,用于新增楼层时的请求数据结构 interface IAddFloor { + // 楼层 ID id: string; + // 楼层名称 name: string; + // 房间数量 roomNum: string; + // 所属楼栋 ID buildingId: string; + // 楼层限制相关信息 floorLimit: string; } +// 定义 IGetFloorById 接口,用于根据编号获取楼层时的参数结构 interface IGetFloorById { + // 楼层 ID floorId: string; } +// 定义 IAddRoom 接口,用于新增房间时的请求数据结构 interface IAddRoom { + // 房间 ID id: string; + // 房间名称 name: string; + // 房间类型 ID typeId: string; + // 床位数量 bedNum: string; + // 所属楼层 ID floorId: string; + // 房间限制相关信息 roomLimit: string; } +// 定义 IGetRoomById 接口,用于根据编号获取房间时的参数结构 interface IGetRoomById { + // 房间 ID roomId: string; } +// 定义 IDeleteNode 接口,用于删除节点时的参数结构 interface IDeleteNode { + // 节点 ID id: string; + // 节点标识 mark: string; } +// 定义 IAddBed 接口,用于新增床位时的请求数据结构 interface IAddBed { + // 床位 ID id: string; + // 床位名称 name: string; + // 所属房间 ID roomId: string; + // 床位限制相关信息 bedLimit: string; } +// 定义 IGetBedById 接口,用于根据编号获取床位时的参数结构 interface IGetBedById { + // 床位 ID bedId: string; } -// 床位状态 +// 定义床位状态列表,包含每个状态的标签和对应的值 export const IBedFlagList = [ { label: "空闲", value: "空闲" }, { label: "预定", value: "预定" }, @@ -66,13 +105,22 @@ export const IBedFlagList = [ { label: "退住审核", value: "退住审核" } ]; -// 获取楼栋-楼层-房间树 +/** + * 获取楼栋 - 楼层 - 房间树 + * @returns 一个 Promise,解析为包含楼栋 - 楼层 - 房间树数据的响应 + */ export async function getNoBedTree() { + // 发起 GET 请求到 /api/build/getNoBedTree 接口获取数据 return http.get("/api/build/getNoBedTree"); } -// 分页查询床位 +/** + * 分页查询床位 + * @param data - 包含分页查询床位所需参数的对象,符合 IPageBedByKey 接口 + * @returns 一个 Promise,解析为包含分页查询床位结果的响应 + */ export async function pageBedByKey(data: IPageBedByKey) { + // 发起 GET 请求到 /api/build/pageBedByKey 接口,将 data 对象展开作为请求参数 return http.get("/api/build/pageBedByKey", { params: { ...data @@ -80,13 +128,23 @@ export async function pageBedByKey(data: IPageBedByKey) { }); } -// 新增楼栋 +/** + * 新增楼栋 + * @param data - 包含新增楼栋所需信息的对象,符合 IAddBuilding 接口 + * @returns 一个 Promise,解析为新增楼栋操作的响应 + */ export function addBuilding(data: IAddBuilding) { + // 发起 POST 请求到 /api/build/addBuilding 接口,将 data 作为请求体 return http.post("/api/build/addBuilding", data); } -// 根据编号获取楼栋 +/** + * 根据编号获取楼栋 + * @param data - 包含要获取的楼栋编号的对象,符合 IGetBuildingById 接口 + * @returns 一个 Promise,解析为包含指定楼栋信息的响应 + */ export async function getBuildingById(data: IGetBuildingById) { + // 发起 GET 请求到 /api/build/getBuildingById 接口,将 data 对象展开作为请求参数 return http.get("/api/build/getBuildingById", { params: { ...data @@ -94,18 +152,33 @@ export async function getBuildingById(data: IGetBuildingById) { }); } -// 编辑楼栋 +/** + * 编辑楼栋 + * @param data - 包含要编辑的楼栋信息的对象,符合 IAddBuilding 接口 + * @returns 一个 Promise,解析为编辑楼栋操作的响应 + */ export function editBuilding(data: IAddBuilding) { + // 发起 PUT 请求到 /api/build/editBuilding 接口,将 data 作为请求体 return http.put("/api/build/editBuilding", data); } -// 新增楼层 +/** + * 新增楼层 + * @param data - 包含新增楼层所需信息的对象,符合 IAddFloor 接口 + * @returns 一个 Promise,解析为新增楼层操作的响应 + */ export function addFloor(data: IAddFloor) { + // 发起 POST 请求到 /api/build/addFloor 接口,将 data 作为请求体 return http.post("/api/build/addFloor", data); } -// 根据编号获取楼层 +/** + * 根据编号获取楼层 + * @param data - 包含要获取的楼层编号的对象,符合 IGetFloorById 接口 + * @returns 一个 Promise,解析为包含指定楼层信息的响应 + */ export async function getFloorById(data: IGetFloorById) { + // 发起 GET 请求到 /api/build/getFloorById 接口,将 data 对象展开作为请求参数 return http.get("/api/build/getFloorById", { params: { ...data @@ -113,23 +186,42 @@ export async function getFloorById(data: IGetFloorById) { }); } -// 编辑楼层 +/** + * 编辑楼层 + * @param data - 包含要编辑的楼层信息的对象,符合 IAddFloor 接口 + * @returns 一个 Promise,解析为编辑楼层操作的响应 + */ export function editFloor(data: IAddFloor) { + // 发起 PUT 请求到 /api/build/editFloor 接口,将 data 作为请求体 return http.put("/api/build/editFloor", data); } -// 获取房间类型列表 +/** + * 获取房间类型列表 + * @returns 一个 Promise,解析为包含房间类型列表数据的响应 + */ export async function listRoomType() { + // 发起 GET 请求到 /api/build/listRoomType 接口获取数据 return http.get("/api/build/listRoomType"); } -// 新增房间 +/** + * 新增房间 + * @param data - 包含新增房间所需信息的对象,符合 IAddRoom 接口 + * @returns 一个 Promise,解析为新增房间操作的响应 + */ export function addRoom(data: IAddRoom) { + // 发起 POST 请求到 /api/build/addRoom 接口,将 data 作为请求体 return http.post("/api/build/addRoom", data); } -// 根据编号获取房间 +/** + * 根据编号获取房间 + * @param data - 包含要获取的房间编号的对象,符合 IGetRoomById 接口 + * @returns 一个 Promise,解析为包含指定房间信息的响应 + */ export async function getRoomById(data: IGetRoomById) { + // 发起 GET 请求到 /api/build/getRoomById 接口,将 data 对象展开作为请求参数 return http.get("/api/build/getRoomById", { params: { ...data @@ -137,13 +229,23 @@ export async function getRoomById(data: IGetRoomById) { }); } -// 编辑房间 +/** + * 编辑房间 + * @param data - 包含要编辑的房间信息的对象,符合 IAddRoom 接口 + * @returns 一个 Promise,解析为编辑房间操作的响应 + */ export function editRoom(data: IAddRoom) { + // 发起 PUT 请求到 /api/build/editRoom 接口,将 data 作为请求体 return http.put("/api/build/editRoom", data); } -// 删除节点 +/** + * 删除节点 + * @param data - 包含要删除的节点信息的对象,符合 IDeleteNode 接口 + * @returns 一个 Promise,解析为删除节点操作的响应 + */ export async function deleteNode(data: IDeleteNode) { + // 发起 DELETE 请求到 /api/build/deleteNode 接口,将 data 对象展开作为请求参数 return http.delete("/api/build/deleteNode", { params: { ...data @@ -151,13 +253,23 @@ export async function deleteNode(data: IDeleteNode) { }); } -// 新增床位 +/** + * 新增床位 + * @param data - 包含新增床位所需信息的对象,符合 IAddBed 接口 + * @returns 一个 Promise,解析为新增床位操作的响应 + */ export function addBed(data: IAddBed) { + // 发起 POST 请求到 /api/build/addBed 接口,将 data 作为请求体 return http.post("/api/build/addBed", data); } -// 根据编号获取床位 +/** + * 根据编号获取床位 + * @param data - 包含要获取的床位编号的对象,符合 IGetBedById 接口 + * @returns 一个 Promise,解析为包含指定床位信息的响应 + */ export async function getBedById(data: IGetBedById) { + // 发起 GET 请求到 /api/build/getBedById 接口,将 data 对象展开作为请求参数 return http.get("/api/build/getBedById", { params: { ...data @@ -165,13 +277,23 @@ export async function getBedById(data: IGetBedById) { }); } -// 编辑床位 +/** + * 编辑床位 + * @param data - 包含要编辑的床位信息的对象,符合 IAddBed 接口 + * @returns 一个 Promise,解析为编辑床位操作的响应 + */ export function editBed(data: IAddBed) { + // 发起 PUT 请求到 /api/build/editBed 接口,将 data 作为请求体 return http.put("/api/build/editBed", data); } -// 删除床位 +/** + * 删除床位 + * @param data - 包含要删除的床位编号的对象,符合 IGetBedById 接口 + * @returns 一个 Promise,解析为删除床位操作的响应 + */ export async function deleteBed(data: IGetBedById) { + // 发起 DELETE 请求到 /api/build/deleteBed 接口,将 data 对象展开作为请求参数 return http.delete("/api/build/deleteBed", { params: { ...data diff --git a/client/src/apis/cateringSet.ts b/client/src/apis/cateringSet.ts index 9135182..1d4ae24 100644 --- a/client/src/apis/cateringSet.ts +++ b/client/src/apis/cateringSet.ts @@ -1,26 +1,50 @@ +// 从 "@/utils" 模块导入 http 对象,用于发起 HTTP 请求 import { http } from "@/utils"; +// 从 "@/apis/dishes" 模块导入 IPageDishesByKey 接口,用于分页查询菜品时的参数类型定义 import { IPageDishesByKey } from "@/apis/dishes"; +/** + * 定义 IPageCateringSetByKey 接口,用于分页查询餐饮套餐时的参数结构 + */ interface IPageCateringSetByKey { - name:string; + // 名称,用于筛选餐饮套餐 + name: string; + // 套餐名称,由于后台与前端组件封装要求,该字段与 name 可能存在关联 setName: string; } +/** + * 定义 IAddCateringSet 接口,用于新增餐饮套餐时的请求数据结构 + */ interface IAddCateringSet { + // 餐饮套餐的 ID id: number; + // 餐饮套餐的名称 name: string; + // 餐饮套餐的月价格 monthPrice: number; - dishesIdList: any ; + // 菜品 ID 列表,类型为 any,需根据实际情况调整 + dishesIdList: any; } +/** + * 定义 IGetCateringSetById 接口,用于根据编号查询餐饮套餐时的参数结构 + */ interface IGetCateringSetById { - setId: string + // 餐饮套餐的 ID + setId: string; } -// 分页查询餐饮套餐 +/** + * 分页查询餐饮套餐 + * @param data - 包含分页查询餐饮套餐所需参数的对象,符合 IPageCateringSetByKey 接口 + * @returns 一个 Promise,解析为包含分页查询餐饮套餐结果的响应 + */ export async function pageCateringSetByKey(data: IPageCateringSetByKey) { - // 因为后台返回的字段与前端表单数据的prop不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 - Reflect.has(data, 'name') ? (data.setName = data.name) : '' + // 由于后台返回的字段与前端表单数据的 prop 不一样,而组件封装要求字段一致 + // 所以如果 data 对象中有 'name' 字段,则将其值赋给 'setName' 字段 + Reflect.has(data, 'name') ? (data.setName = data.name) : ''; + // 发起 GET 请求到 /api/cateringSet/pageCateringSetByKey 接口,将 data 对象展开作为请求参数 return http.get("/api/cateringSet/pageCateringSetByKey", { params: { ...data @@ -28,13 +52,22 @@ export async function pageCateringSetByKey(data: IPageCateringSetByKey) { }); } -// 获取菜品分类 +/** + * 获取菜品分类 + * @returns 一个 Promise,解析为包含菜品分类列表的响应 + */ export function listDishesType() { + // 发起 POST 请求到 /api/cateringSet/listDishesType 接口获取菜品分类数据 return http.post("/api/cateringSet/listDishesType"); } -// 分页查询菜品 +/** + * 分页查询菜品 + * @param data - 包含分页查询菜品所需参数的对象,符合 IPageDishesByKey 接口 + * @returns 一个 Promise,解析为包含分页查询菜品结果的响应 + */ export async function pageDishesByKey(data: IPageDishesByKey) { + // 发起 GET 请求到 /api/cateringSet/pageDishesByKey 接口,将 data 对象展开作为请求参数 return http.get("/api/cateringSet/pageDishesByKey", { params: { ...data @@ -42,13 +75,23 @@ export async function pageDishesByKey(data: IPageDishesByKey) { }); } -// 新增餐饮套餐 +/** + * 新增餐饮套餐 + * @param data - 包含新增餐饮套餐所需信息的对象,符合 IAddCateringSet 接口 + * @returns 一个 Promise,解析为新增餐饮套餐操作的响应 + */ export function addCateringSet(data: IAddCateringSet) { + // 发起 POST 请求到 /api/cateringSet/addCateringSet 接口,将 data 作为请求体 return http.post("/api/cateringSet/addCateringSet", data); } -// 根据编号查询餐饮套餐 +/** + * 根据编号查询餐饮套餐 + * @param data - 包含要查询的餐饮套餐编号的对象,符合 IGetCateringSetById 接口 + * @returns 一个 Promise,解析为包含指定餐饮套餐信息的响应 + */ export async function getCateringSetById(data: IGetCateringSetById) { + // 发起 GET 请求到 /api/cateringSet/getCateringSetById 接口,将 data 对象展开作为请求参数 return http.get("/api/cateringSet/getCateringSetById", { params: { ...data @@ -56,13 +99,23 @@ export async function getCateringSetById(data: IGetCateringSetById) { }); } -// 编辑餐饮套餐 +/** + * 编辑餐饮套餐 + * @param data - 包含要编辑的餐饮套餐信息的对象,符合 IAddCateringSet 接口 + * @returns 一个 Promise,解析为编辑餐饮套餐操作的响应 + */ export function editCateringSet(data: IAddCateringSet) { + // 发起 PUT 请求到 /api/cateringSet/editCateringSet 接口,将 data 作为请求体 return http.put("/api/cateringSet/editCateringSet", data); } -// 删除餐饮套餐 +/** + * 删除餐饮套餐 + * @param data - 包含要删除的餐饮套餐编号的对象,符合 IGetCateringSetById 接口 + * @returns 一个 Promise,解析为删除餐饮套餐操作的响应 + */ export async function deleteCateringSet(data: IGetCateringSetById) { + // 发起 DELETE 请求到 /api/cateringSet/deleteCateringSet 接口,将 data 对象展开作为请求参数 return http.delete("/api/cateringSet/deleteCateringSet", { params: { ...data diff --git a/client/src/apis/checkContract.ts b/client/src/apis/checkContract.ts index c658840..c5a2b1e 100644 --- a/client/src/apis/checkContract.ts +++ b/client/src/apis/checkContract.ts @@ -1,44 +1,87 @@ +// 从 "@/utils" 模块导入 http 对象,用于发起 HTTP 请求 import { http } from "@/utils"; +// 从 "@/apis/bookManage" 模块导入 IPageSearchElderByKey 接口,用于分页搜索老人时的参数类型定义 import { IPageSearchElderByKey } from "@/apis/bookManage"; +/** + * 定义 IPageCheckContractByKey 接口,用于分页查询入住签约时的参数结构 + */ interface IPageCheckContractByKey { + // 姓名,用于筛选入住签约记录 name: string; + // 性别,用于筛选入住签约记录 sex: string; + // 身份证号码,用于筛选入住签约记录 idNum: string; } +/** + * 定义 IAddCheckContract 接口,用于新增入住签约时的请求数据结构 + */ interface IAddCheckContract { + // 入住签约的 ID id: string; + // 护理等级 ID nursingGradeId: string; + // 餐饮套餐 ID cateringSetId: string; + // 床位 ID bedId: string; + // 姓名 name: string; + // 身份证号码 idNum: string; + // 年龄 age: string; + // 性别 sex: string; + // 电话 phone: string; + // 地址 address: string; + // 工作人员 ID staffId: string; + // 签约日期 signDate: string; + // 开始日期 startDate: string; + // 结束日期 endDate: string; + // 紧急联系人查询列表,包含多个紧急联系人信息 operateEmergencyContactQueryList: IEmergencyContact[]; } +/** + * 定义 IEmergencyContact 接口,用于表示紧急联系人的信息结构 + */ interface IEmergencyContact { + // 姓名 name: string; + // 电话 phone: string; + // 邮箱 email: string; + // 关系 relation: string; + // 接收标志 receiveFlag: string; } +/** + * 定义 IGetCheckContractById 接口,用于根据老人编号查询入住签约时的参数结构 + */ interface IGetCheckContractById { - elderId: string + // 老人 ID + elderId: string; } -// 分页查询入住签约 +/** + * 分页查询入住签约 + * @param data - 包含分页查询入住签约所需参数的对象,符合 IPageCheckContractByKey 接口 + * @returns 一个 Promise,解析为包含分页查询入住签约结果的响应 + */ export async function pageCheckContractByKey(data: IPageCheckContractByKey) { + // 发起 GET 请求到 /api/checkContract/pageCheckContractByKey 接口,将 data 对象展开作为请求参数 return http.get("/api/checkContract/pageCheckContractByKey", { params: { ...data @@ -46,8 +89,13 @@ export async function pageCheckContractByKey(data: IPageCheckContractByKey) { }); } -// 分页搜索老人 +/** + * 分页搜索老人 + * @param data - 包含分页搜索老人所需参数的对象,符合 IPageSearchElderByKey 接口 + * @returns 一个 Promise,解析为包含分页搜索老人结果的响应 + */ export async function pageSearchElderByKey(data: IPageSearchElderByKey) { + // 发起 GET 请求到 /api/checkContract/pageSearchElderByKey 接口,将 data 对象展开作为请求参数 return http.get("/api/checkContract/pageSearchElderByKey", { params: { ...data @@ -55,13 +103,22 @@ export async function pageSearchElderByKey(data: IPageSearchElderByKey) { }); } -// 获取护理等级列表 +/** + * 获取护理等级列表 + * @returns 一个 Promise,解析为包含护理等级列表的响应 + */ export async function listNurseGrade() { + // 发起 GET 请求到 /api/checkContract/listNurseGrade 接口获取护理等级数据 return http.get("/api/checkContract/listNurseGrade"); } -// 根据编号查询护理等级 +/** + * 根据编号查询护理等级 + * @param nurseGradeId - 要查询的护理等级 ID + * @returns 一个 Promise,解析为包含指定护理等级信息的响应 + */ export async function getNurseGradeById(nurseGradeId: string) { + // 发起 GET 请求到 /api/checkContract/getNurseGradeById 接口,将 nurseGradeId 作为请求参数 return http.get("/api/checkContract/getNurseGradeById", { params: { nurseGradeId @@ -69,13 +126,22 @@ export async function getNurseGradeById(nurseGradeId: string) { }); } -// 获取餐饮套餐列表 +/** + * 获取餐饮套餐列表 + * @returns 一个 Promise,解析为包含餐饮套餐列表的响应 + */ export async function listCateringSet() { + // 发起 GET 请求到 /api/checkContract/listCateringSet 接口获取餐饮套餐数据 return http.get("/api/checkContract/listCateringSet"); } -// 根据编号查询餐饮套餐 +/** + * 根据编号查询餐饮套餐 + * @param cateringSetId - 要查询的餐饮套餐 ID + * @returns 一个 Promise,解析为包含指定餐饮套餐信息的响应 + */ export async function getCateringSetById(cateringSetId: string) { + // 发起 GET 请求到 /api/checkContract/getCateringSetById 接口,将 cateringSetId 作为请求参数 return http.get("/api/checkContract/getCateringSetById", { params: { cateringSetId @@ -83,13 +149,22 @@ export async function getCateringSetById(cateringSetId: string) { }); } -// 获取楼栋树 +/** + * 获取楼栋树 + * @returns 一个 Promise,解析为包含楼栋树信息的响应 + */ export async function getBuildTree() { + // 发起 GET 请求到 /api/checkContract/getBuildTree 接口获取楼栋树数据 return http.get("/api/checkContract/getBuildTree"); } -// 根据编号查询床位 +/** + * 根据编号查询床位 + * @param bedId - 要查询的床位 ID + * @returns 一个 Promise,解析为包含指定床位信息的响应 + */ export async function getBedById(bedId: string) { + // 发起 GET 请求到 /api/checkContract/getBedById 接口,将 bedId 作为请求参数 return http.get("/api/checkContract/getBedById", { params: { bedId @@ -97,18 +172,32 @@ export async function getBedById(bedId: string) { }); } -// 获取营销人员 +/** + * 获取营销人员 + * @returns 一个 Promise,解析为包含营销人员列表的响应 + */ export async function listReserveStaff() { + // 发起 GET 请求到 /api/checkContract/listReserveStaff 接口获取营销人员数据 return http.get("/api/checkContract/listReserveStaff"); } -// 新增入住签约 +/** + * 新增入住签约 + * @param data - 包含新增入住签约所需信息的对象,符合 IAddCheckContract 接口 + * @returns 一个 Promise,解析为新增入住签约操作的响应 + */ export function addCheckContract(data: IAddCheckContract) { + // 发起 POST 请求到 /api/checkContract/addCheckContract 接口,将 data 作为请求体 return http.post("/api/checkContract/addCheckContract", data); } -// 根据老人编号查询入住签约 +/** + * 根据老人编号查询入住签约 + * @param data - 包含要查询的老人编号的对象,符合 IGetCheckContractById 接口 + * @returns 一个 Promise,解析为包含指定入住签约信息的响应 + */ export async function getCheckContractById(data: IGetCheckContractById) { + // 发起 GET 请求到 /api/checkContract/getCheckContractById 接口,将 data 对象展开作为请求参数 return http.get("/api/checkContract/getCheckContractById", { params: { ...data @@ -116,13 +205,23 @@ export async function getCheckContractById(data: IGetCheckContractById) { }); } -// 编辑入住签约 +/** + * 编辑入住签约 + * @param data - 包含要编辑的入住签约信息的对象,符合 IAddCheckContract 接口 + * @returns 一个 Promise,解析为编辑入住签约操作的响应 + */ export function editCheckContract(data: IAddCheckContract) { + // 发起 PUT 请求到 /api/checkContract/editCheckContract 接口,将 data 作为请求体 return http.put("/api/checkContract/editCheckContract", data); } -// 删除入住签约 +/** + * 删除入住签约 + * @param data - 包含要删除的入住签约编号的对象,符合 IGetCheckContractById 接口 + * @returns 一个 Promise,解析为删除入住签约操作的响应 + */ export async function deleteCheckContract(data: IGetCheckContractById) { + // 发起 DELETE 请求到 /api/checkContract/deleteCheckContract 接口,将 data 对象展开作为请求参数 return http.delete("/api/checkContract/deleteCheckContract", { params: { ...data diff --git a/client/src/apis/consume.ts b/client/src/apis/consume.ts index 2f2a005..69bb33b 100644 --- a/client/src/apis/consume.ts +++ b/client/src/apis/consume.ts @@ -1,13 +1,25 @@ +// 从 "@/utils" 模块导入名为 http 的对象, +// 推测该对象是用于发起 HTTP 请求的工具,可能是对 axios 等请求库的封装 import { http } from "@/utils"; +// 定义一个接口 IPageConsumeByKey,用于描述分页查询消费记录时的请求参数结构 interface IPageConsumeByKey { + // 老人姓名,用于筛选消费记录,类型为字符串 elderName: string; + // 开始时间,用于筛选消费记录的时间范围,类型为字符串 startTime: string; + // 结束时间,用于筛选消费记录的时间范围,类型为字符串 endTime: string; } -// 分页查询消费记录 +/** + * 定义一个异步函数 pageConsumeByKey,用于分页查询消费记录 + * @param data - 一个符合 IPageConsumeByKey 接口的对象,包含查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询消费记录的响应结果 + */ export async function pageConsumeByKey(data: IPageConsumeByKey) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/consume/pageConsumeByKey" + // 将传入的 data 对象展开作为请求的参数 return http.get("/api/consume/pageConsumeByKey", { params: { ...data diff --git a/client/src/apis/dishes.ts b/client/src/apis/dishes.ts index accd0c3..f647a4a 100644 --- a/client/src/apis/dishes.ts +++ b/client/src/apis/dishes.ts @@ -1,36 +1,60 @@ +// 从 "@/utils" 模块导入名为 http 的对象,该对象可能是用于发起 HTTP 请求的工具,比如对 axios 等请求库的封装 import { http } from "@/utils"; +// 定义一个接口 IListDishesType,用于描述获取菜品分类列表时的请求参数结构 interface IListDishesType { + // 菜品分类名称,用于筛选菜品分类列表,类型为字符串 dishesTypeName: string; } +// 导出一个接口 IPageDishesByKey,用于描述分页查询菜品时的请求参数结构 export interface IPageDishesByKey { + // 菜品名称,用于筛选菜品,类型为字符串 dishesName: string; + // 菜品类型 ID,用于筛选属于特定类型的菜品,类型为数字 typeId: number; } +// 定义一个接口 IAddDishesType,用于描述新增菜品分类时的数据结构 interface IAddDishesType { + // 菜品分类的 ID,类型为数字 id: number; + // 菜品分类的名称,类型为字符串 name: string; } +// 定义一个接口 IGetDishesTypeById,用于描述根据编号获取菜品分类时的请求参数结构 interface IGetDishesTypeById { + // 菜品分类 ID,类型为字符串 dishesTypeId: string; } +// 定义一个接口 IAddDishes,用于描述新增菜品时的数据结构 interface IAddDishes { + // 菜品的 ID,类型为数字 id: number; + // 菜品的名称,类型为字符串 name: string; + // 菜品的价格,类型为字符串 price: string; + // 菜品所属类型的 ID,类型为数字 typeId: number; } +// 导出一个接口 IGetDishesById,用于描述根据编号获取菜品时的请求参数结构 export interface IGetDishesById { + // 菜品 ID,类型为字符串 dishesId: string; } -// 获取菜品分类列表 +/** + * 定义一个异步函数 listDishesType,用于获取菜品分类列表 + * @param data - 一个符合 IListDishesType 接口的对象,包含获取菜品分类列表所需的参数 + * @returns 一个 Promise 对象,解析后得到的是获取菜品分类列表的响应结果 + */ export async function listDishesType(data: IListDishesType) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/dishes/listDishesType" + // 将 data 对象展开作为请求的参数 return http.get("/api/dishes/listDishesType", { params: { ...data @@ -38,8 +62,14 @@ export async function listDishesType(data: IListDishesType) { }); } -// 分页查询菜品 +/** + * 定义一个异步函数 pageDishesByKey,用于分页查询菜品 + * @param data - 一个符合 IPageDishesByKey 接口的对象,包含分页查询菜品所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询菜品的响应结果 + */ export async function pageDishesByKey(data: IPageDishesByKey) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/dishes/pageDishesByKey" + // 将 data 对象展开作为请求的参数 return http.get("/api/dishes/pageDishesByKey", { params: { ...data @@ -47,13 +77,25 @@ export async function pageDishesByKey(data: IPageDishesByKey) { }); } -// 新增菜品分类 +/** + * 定义一个函数 addDishesType,用于新增菜品分类 + * @param data - 一个符合 IAddDishesType 接口的对象,包含新增菜品分类所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增菜品分类操作的响应结果 + */ export function addDishesType(data: IAddDishesType) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 "/api/dishes/addDishesType" + // 将 data 对象作为请求的主体 return http.post("/api/dishes/addDishesType", data); } -// 根据编号获取菜品分类 +/** + * 定义一个异步函数 getDishesTypeById,用于根据编号获取菜品分类 + * @param data - 一个符合 IGetDishesTypeById 接口的对象,包含根据编号获取菜品分类所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号获取菜品分类的响应结果 + */ export async function getDishesTypeById(data: IGetDishesTypeById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/dishes/getDishesTypeById" + // 将 data 对象展开作为请求的参数 return http.get("/api/dishes/getDishesTypeById", { params: { ...data @@ -61,13 +103,25 @@ export async function getDishesTypeById(data: IGetDishesTypeById) { }); } -// 编辑菜品分类 +/** + * 定义一个函数 editDishesType,用于编辑菜品分类 + * @param data - 一个符合 IAddDishesType 接口的对象,包含编辑菜品分类所需的数据 + * @returns 一个 Promise 对象,解析后得到的是编辑菜品分类操作的响应结果 + */ export function editDishesType(data: IAddDishesType) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/dishes/editDishesType" + // 将 data 对象作为请求的主体 return http.put("/api/dishes/editDishesType", data); } -// 删除菜品分类 +/** + * 定义一个异步函数 deleteDishesType,用于删除菜品分类 + * @param data - 一个符合 IGetDishesTypeById 接口的对象,包含删除菜品分类所需的参数 + * @returns 一个 Promise 对象,解析后得到的是删除菜品分类操作的响应结果 + */ export async function deleteDishesType(data: IGetDishesTypeById) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 "/api/dishes/deleteDishesType" + // 将 data 对象展开作为请求的参数 return http.delete("/api/dishes/deleteDishesType", { params: { ...data @@ -75,13 +129,25 @@ export async function deleteDishesType(data: IGetDishesTypeById) { }); } -// 新增菜品 +/** + * 定义一个函数 addDishes,用于新增菜品 + * @param data - 一个符合 IAddDishes 接口的对象,包含新增菜品所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增菜品操作的响应结果 + */ export function addDishes(data: IAddDishes) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 "/api/dishes/addDishes" + // 将 data 对象作为请求的主体 return http.post("/api/dishes/addDishes", data); } -// 根据编号获取菜品 +/** + * 定义一个异步函数 getDishesById,用于根据编号获取菜品 + * @param data - 一个符合 IGetDishesById 接口的对象,包含根据编号获取菜品所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号获取菜品的响应结果 + */ export async function getDishesById(data: IGetDishesById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/dishes/getDishesById" + // 将 data 对象展开作为请求的参数 return http.get("/api/dishes/getDishesById", { params: { ...data @@ -89,13 +155,25 @@ export async function getDishesById(data: IGetDishesById) { }); } -// 编辑菜品 +/** + * 定义一个函数 editDishes,用于编辑菜品 + * @param data - 一个符合 IAddDishes 接口的对象,包含编辑菜品所需的数据 + * @returns 一个 Promise 对象,解析后得到的是编辑菜品操作的响应结果 + */ export function editDishes(data: IAddDishes) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/dishes/editDishes" + // 将 data 对象作为请求的主体 return http.put("/api/dishes/editDishes", data); } -// 删除菜品 +/** + * 定义一个异步函数 deleteDishes,用于删除菜品 + * @param data - 一个符合 IGetDishesById 接口的对象,包含删除菜品所需的参数 + * @returns 一个 Promise 对象,解析后得到的是删除菜品操作的响应结果 + */ export async function deleteDishes(data: IGetDishesById) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 "/api/dishes/deleteDishes" + // 将 data 对象展开作为请求的参数 return http.delete("/api/dishes/deleteDishes", { params: { ...data diff --git a/client/src/apis/home.ts b/client/src/apis/home.ts index 501dc4e..bdd99c2 100644 --- a/client/src/apis/home.ts +++ b/client/src/apis/home.ts @@ -1,25 +1,56 @@ +// 从 '@/utils' 模块导入名为 http 的对象,该对象可能是用于发起 HTTP 请求的工具,比如对 axios 等请求库的封装 import { http } from '@/utils' -// 可售床位 + +/** + * 定义一个异步函数 getAvailableBed,用于获取可售床位信息 + * @returns 一个 Promise 对象,解析后得到的是获取可售床位信息的响应结果 + */ export async function getAvailableBed() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/availableBed' return http.get('/api/home/availableBed') } -// 业务趋势 + +/** + * 定义一个异步函数 getBusinessTrend,用于获取业务趋势信息 + * @returns 一个 Promise 对象,解析后得到的是获取业务趋势信息的响应结果 + */ export async function getBusinessTrend() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/businessTrend' return http.get('/api/home/businessTrend') } -// 客户来源渠道 + +/** + * 定义一个异步函数 getClientSource,用于获取客户来源渠道信息 + * @returns 一个 Promise 对象,解析后得到的是获取客户来源渠道信息的响应结果 + */ export async function getClientSource() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/clientSource' return http.get('/api/home/clientSource') } -// 本月业绩排行 + +/** + * 定义一个异步函数 getMonthPerformanceRank,用于获取本月业绩排行信息 + * @returns 一个 Promise 对象,解析后得到的是获取本月业绩排行信息的响应结果 + */ export async function getMonthPerformanceRank() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/monthPerformanceRank' return http.get('/api/home/monthPerformanceRank') } -// 今日概览 + +/** + * 定义一个异步函数 getTodayOverview,用于获取今日概览信息 + * @returns 一个 Promise 对象,解析后得到的是获取今日概览信息的响应结果 + */ export async function getTodayOverview() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/todayOverview' return http.get('/api/home/todayOverview') } -// 今日销售跟进 + +/** + * 定义一个异步函数 getTodaySaleFollow,用于获取今日销售跟进信息 + * @returns 一个 Promise 对象,解析后得到的是获取今日销售跟进信息的响应结果 + */ export async function getTodaySaleFollow() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/home/todaySaleFollow' return http.get('/api/home/todaySaleFollow') } diff --git a/client/src/apis/index.ts b/client/src/apis/index.ts index 067f355..9c44323 100644 --- a/client/src/apis/index.ts +++ b/client/src/apis/index.ts @@ -1,16 +1,29 @@ +// 注释说明这是动态路由的假数据,并且提示该部分代码可以删除 // 动态路由的假数据 可删除 +// 从 '@/utils' 模块导入名为 http 的对象, +// 推测该对象是用于发起 HTTP 请求的工具,可能是对 axios 等请求库的封装 import { http } from '@/utils' +// 注释说明发起请求的时机:在动态设置路由的时候(data => 树形结构 => 路由列表) // 问题:何时发起请求? 在动态设置路由的时候(data => 树形结构 => 路由列表) +/** + * 定义一个函数 getUserRouteList,用于获取用户的路由列表 + * @param uid - 用户 ID,类型为数字,用于作为请求参数来获取对应用户的路由列表 + * @returns 一个 Promise 对象,解析后得到的是获取到的用户路由列表数据(成功时),或者在失败时抛出错误 + */ function getUserRouteList(uid: number) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/user_router_list',请求体包含用户 ID return http .post('/api/user_router_list', { uid }) + // 处理请求成功的情况,直接返回请求得到的数据 .then((data) => data) + // 处理请求失败的情况,捕获错误并重新抛出,以便上层调用者处理 .catch((err) => { throw err }) } +// 导出 getUserRouteList 函数,以便在其他模块中可以导入和使用该函数 export { getUserRouteList } diff --git a/client/src/apis/order.ts b/client/src/apis/order.ts index 5c3a7a5..e98f9dd 100644 --- a/client/src/apis/order.ts +++ b/client/src/apis/order.ts @@ -1,40 +1,70 @@ +// 从 "@/utils" 模块导入名为 http 的对象, +// 推测该对象是用于发起 HTTP 请求的工具,可能是对 axios 等请求库的封装 import { http } from "@/utils"; + +// 从 "@/apis/bookManage" 模块导入 IPageSearchElderByKey 接口, +// 用于描述分页搜索老人时的请求参数结构 import { IPageSearchElderByKey } from "@/apis/bookManage"; + +// 从 "@/apis/dishes" 模块导入 IPageDishesByKey 接口, +// 用于描述分页查询菜品时的请求参数结构 import { IPageDishesByKey } from "@/apis/dishes"; +// 定义一个接口 IPageOrderByKey,用于描述分页查询点餐时的请求参数结构 interface IPageOrderByKey { - elderName:string; + // 老人姓名,用于筛选点餐记录,类型为字符串 + elderName: string; + // 老人电话,用于筛选点餐记录,类型为字符串 elderPhone: string; } +// 定义一个接口 IAddOrder,用于描述新增点餐时的数据结构 interface IAddOrder { + // 老人 ID,类型为字符串 elderId: string; + // 就餐方式,类型为字符串 dineType: string; + // 就餐日期,类型为字符串 dineDate: string; + // 点的菜品列表,类型为 any,需根据实际情况调整 orderDishesList: any; } +// 定义一个接口 IGetOrderById,用于描述根据编号查询点餐时的请求参数结构 interface IGetOrderById { + // 菜品 ID,这里可能是点餐记录中的菜品 ID,用于查询特定点餐记录,类型为字符串 dishesId: string; } +// 定义一个接口 ISendOrder,用于描述送餐时的数据结构 interface ISendOrder { + // 订单 ID,类型为字符串 id: string; + // 送餐日期,类型为字符串 deliverDishesDate: string; + // 送餐人员 ID,类型为字符串 staffId: string; } -// 就餐方式 +// 定义一个名为 IDineTypeList 的常量,是一个包含就餐方式选项的数组,每个选项有标签和对应的值 export const IDineTypeList = [ { label: "送餐", value: "送餐" }, { label: "堂食", value: "堂食" } ]; -// 分页查询点餐 +/** + * 定义一个异步函数 pageOrderByKey,用于分页查询点餐 + * @param data - 一个符合 IPageOrderByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询点餐的响应结果 + */ export async function pageOrderByKey(data: IPageOrderByKey) { - // 因为后台返回的字段与前端表单数据的prop不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 - // Reflect.has(data, 'name') ? (data.gradeName = data.name) : '' - // Reflect.has(data, 'type') ? (data.nurseType = data.type) : '' + // 因为后台返回的字段与前端表单数据的 prop 不一样, + // 但是组件封装需要一样,所以原本计划请求前处理某些字段, + // 但这里代码被注释掉了,可能是暂不处理或有其他调整 + // Reflect.has(data, 'name')? (data.gradeName = data.name) : '' + // Reflect.has(data, 'type')? (data.nurseType = data.type) : '' + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/order/pageOrderByKey" + // 将 data 对象展开作为请求的参数 return http.get("/api/order/pageOrderByKey", { params: { ...data @@ -42,31 +72,55 @@ export async function pageOrderByKey(data: IPageOrderByKey) { }); } -// 分页搜索老人 +/** + * 定义一个函数 pageSearchElderByKey,用于分页搜索老人 + * @param data - 一个符合 IPageSearchElderByKey 接口的对象,包含搜索所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页搜索老人的响应结果 + */ export function pageSearchElderByKey(data: IPageSearchElderByKey) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/order/pageSearchElderByKey" + // 将 data 对象展开作为请求的参数 return http.get('/api/order/pageSearchElderByKey', { params: { ...data } - }) + }); } -// 分页查询菜品 +/** + * 定义一个异步函数 pageDishesByKey,用于分页查询菜品(这里是在点餐相关模块中查询菜品) + * @param data - 一个符合 IPageDishesByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询菜品的响应结果 + */ export async function pageDishesByKey(data: IPageDishesByKey) { - return http.get("/api/order/pageDishesByKey",{ - params:{ + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/order/pageDishesByKey" + // 将 data 对象展开作为请求的参数 + return http.get("/api/order/pageDishesByKey", { + params: { ...data } }); } -// 新增点餐 +/** + * 定义一个函数 addOrder,用于新增点餐 + * @param data - 一个符合 IAddOrder 接口的对象,包含新增点餐所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增点餐操作的响应结果 + */ export function addOrder(data: IAddOrder) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 "/api/order/addOrder" + // 将 data 对象作为请求的主体 return http.post("/api/order/addOrder", data); } -// 根据编号查询点餐 +/** + * 定义一个异步函数 getOrderById,用于根据编号查询点餐 + * @param data - 一个符合 IGetOrderById 接口的对象,包含根据编号查询点餐所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号查询点餐的响应结果 + */ export async function getOrderById(data: IGetOrderById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/order/getOrderById" + // 将 data 对象展开作为请求的参数 return http.get("/api/order/getOrderById", { params: { ...data @@ -74,12 +128,22 @@ export async function getOrderById(data: IGetOrderById) { }); } -// 护理人员 +/** + * 定义一个异步函数 listNurseStaff,用于获取护理人员列表(这里在点餐模块中获取护理人员列表,可能与业务逻辑有关) + * @returns 一个 Promise 对象,解析后得到的是获取护理人员列表的响应结果 + */ export async function listNurseStaff() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/order/listNurseStaff" return http.get("/api/order/listNurseStaff"); } -// 送餐 +/** + * 定义一个函数 sendOrder,用于送餐 + * @param data - 一个符合 ISendOrder 接口的对象,包含送餐所需的数据 + * @returns 一个 Promise 对象,解析后得到的是送餐操作的响应结果 + */ export function sendOrder(data: ISendOrder) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/order/sendOrder" + // 将 data 对象作为请求的主体 return http.put("/api/order/sendOrder", data); } diff --git a/client/src/apis/retreatAudit.ts b/client/src/apis/retreatAudit.ts index 2abb61d..79fe3ee 100644 --- a/client/src/apis/retreatAudit.ts +++ b/client/src/apis/retreatAudit.ts @@ -1,29 +1,46 @@ +// 从 "@/utils" 模块导入名为 http 的对象,该对象可能用于发起 HTTP 请求,例如对 axios 等请求库的封装 import { http } from "@/utils"; +// 定义一个接口 IPageRetreatAuditByKey,用于描述分页查询退住审核时的请求参数结构 interface IPageRetreatAuditByKey { + // 老人姓名,用于筛选退住审核记录,类型为字符串 elderName: string; + // 老人性别,用于筛选退住审核记录,类型为字符串 elderSex: string; + // 身份证号码,用于筛选退住审核记录,类型为字符串 idNum: string; } +// 定义一个接口 IGetElderFeeById,用于描述根据编号获取老人费用详情时的请求参数结构 interface IGetElderFeeById { + // 老人 ID,类型为数字,用于指定获取费用详情的老人 elderId: number; } +// 定义一个接口 IAuditElderFee,用于描述审核老人费用详情时的数据结构 interface IAuditElderFee { + // 申请 ID,类型为数字,用于标识退住申请 applyId: number; + // 老人 ID,类型为数字,用于关联老人 elderId: number; + // 审核结果,类型为数字,可能是枚举值(如 0 表示不通过,1 表示通过等) auditResult: number; } -// 审核结果 +// 定义一个常量 IAuditResultList,包含审核结果的选项,每个选项有标签和对应的值 export const IAuditResultList = [ { label: "通过", value: "通过" }, { label: "不通过", value: "不通过" } ]; -// 分页查询退住审核 +/** + * 定义一个异步函数 pageRetreatAuditByKey,用于分页查询退住审核 + * @param data - 一个符合 IPageRetreatAuditByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询退住审核的响应结果 + */ export async function pageRetreatAuditByKey(data: IPageRetreatAuditByKey) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/retreatAudit/pageRetreatAuditByKey" + // 将 data 对象展开作为请求的参数 return http.get("/api/retreatAudit/pageRetreatAuditByKey", { params: { ...data @@ -31,8 +48,14 @@ export async function pageRetreatAuditByKey(data: IPageRetreatAuditByKey) { }); } -// 根据编号获取老人费用详情 +/** + * 定义一个异步函数 getElderFeeById,用于根据编号获取老人费用详情 + * @param data - 一个符合 IGetElderFeeById 接口的对象,包含根据编号获取老人费用详情所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号获取老人费用详情的响应结果 + */ export async function getElderFeeById(data: IGetElderFeeById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/retreatAudit/getElderFeeById" + // 将 data 对象展开作为请求的参数 return http.get("/api/retreatAudit/getElderFeeById", { params: { ...data @@ -40,7 +63,13 @@ export async function getElderFeeById(data: IGetElderFeeById) { }); } -// 审核老人费用详情 +/** + * 定义一个函数 auditElderFee,用于审核老人费用详情 + * @param data - 一个符合 IAuditElderFee 接口的对象,包含审核老人费用详情所需的数据 + * @returns 一个 Promise 对象,解析后得到的是审核老人费用详情操作的响应结果 + */ export function auditElderFee(data: IAuditElderFee) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/retreatAudit/auditElderFee" + // 将 data 对象作为请求的主体 return http.put("/api/retreatAudit/auditElderFee", data); } diff --git a/client/src/apis/roomType.ts b/client/src/apis/roomType.ts index 738f889..0458f2a 100644 --- a/client/src/apis/roomType.ts +++ b/client/src/apis/roomType.ts @@ -1,24 +1,42 @@ +// 从 "@/utils" 模块导入名为 http 的对象,该对象可能是用于发起 HTTP 请求的工具,比如对 axios 等请求库的封装 import { http } from "@/utils"; +// 定义一个接口 IPageRoomTypeByKey,用于描述分页查询房间类型时的请求参数结构 interface IPageRoomTypeByKey { + // 名称,用于筛选房间类型,类型为字符串 name: string; + // 房间类型名称,用于筛选房间类型,类型为字符串 roomTypeName: string; } +// 定义一个接口 IAddRoomType,用于描述新增房间类型时的数据结构 interface IAddRoomType { + // 房间类型的 ID,类型为字符串 id: string; + // 房间类型的名称,类型为字符串 name: string; + // 房间类型的月价格,类型为字符串 monthPrice: string; } +// 定义一个接口 IGetRoomTypeById,用于描述根据编号查询房间类型时的请求参数结构 interface IGetRoomTypeById { + // 房间类型 ID,类型为字符串 roomTypeId: string; } -// 分页查询房间类型 +/** + * 定义一个异步函数 pageRoomTypeByKey,用于分页查询房间类型 + * @param data - 一个符合 IPageRoomTypeByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询房间类型的响应结果 + */ export async function pageRoomTypeByKey(data: IPageRoomTypeByKey) { - // 因为后台返回的字段与前端表单数据的prop不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 - Reflect.has(data, "name") ? (data.roomTypeName = data.name) : ""; + // 因为后台返回的字段与前端表单数据的 prop 不一样, + // 但是组件封装需要一样,所以请求前增加一些这两个字段 + // 如果 data 对象中有 "name" 字段,则将其值赋给 "roomTypeName" 字段 + Reflect.has(data, "name")? (data.roomTypeName = data.name) : ""; + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/roomType/pageRoomTypeByKey" + // 将处理后的 data 对象展开作为请求的参数 return http.get("/api/roomType/pageRoomTypeByKey", { params: { ...data @@ -26,13 +44,25 @@ export async function pageRoomTypeByKey(data: IPageRoomTypeByKey) { }); } -// 新增房间类型 +/** + * 定义一个函数 addRoomType,用于新增房间类型 + * @param data - 一个符合 IAddRoomType 接口的对象,包含新增房间类型所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增房间类型操作的响应结果 + */ export function addRoomType(data: IAddRoomType) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 "/api/roomType/addRoomType" + // 将 data 对象作为请求的主体 return http.post("/api/roomType/addRoomType", data); } -// 根据编号查询房间类型 +/** + * 定义一个异步函数 getRoomTypeById,用于根据编号查询房间类型 + * @param data - 一个符合 IGetRoomTypeById 接口的对象,包含根据编号查询房间类型所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号查询房间类型的响应结果 + */ export async function getRoomTypeById(data: IGetRoomTypeById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/roomType/getRoomTypeById" + // 将 data 对象展开作为请求的参数 return http.get("/api/roomType/getRoomTypeById", { params: { ...data @@ -40,13 +70,25 @@ export async function getRoomTypeById(data: IGetRoomTypeById) { }); } -// 编辑房间类型 +/** + * 定义一个函数 editRoomType,用于编辑房间类型 + * @param data - 一个符合 IAddRoomType 接口的对象,包含编辑房间类型所需的数据 + * @returns 一个 Promise 对象,解析后得到的是编辑房间类型操作的响应结果 + */ export function editRoomType(data: IAddRoomType) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/roomType/editRoomType" + // 将 data 对象作为请求的主体 return http.put("/api/roomType/editRoomType", data); } -// 删除房间类型 +/** + * 定义一个异步函数 deleteRoomType,用于删除房间类型 + * @param data - 一个符合 IGetRoomTypeById 接口的对象,包含删除房间类型所需的参数 + * @returns 一个 Promise 对象,解析后得到的是删除房间类型操作的响应结果 + */ export async function deleteRoomType(data: IGetRoomTypeById) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 "/api/roomType/deleteRoomType" + // 将 data 对象展开作为请求的参数 return http.delete("/api/roomType/deleteRoomType", { params: { ...data diff --git a/client/src/apis/soldManage.ts b/client/src/apis/soldManage.ts index 36d9117..96a0ee5 100644 --- a/client/src/apis/soldManage.ts +++ b/client/src/apis/soldManage.ts @@ -1,58 +1,110 @@ +// 从 '@/utils' 模块导入名为 http 的对象,该对象可能是用于发起 HTTP 请求的工具,比如对 axios 等请求库的封装 import { http } from '@/utils' +// 定义一个接口 IAddConsult,用于描述新增咨询时的数据结构 interface IAddConsult { - address: string - age: string - consultContent: string - consultDate: string - consultName: string - consultPhone: string - elderName: string - elderPhone: string - idNum: string - relation: string - sex: string - sourceId: string | number - staffId: string | number - consultId?: string | number - elderId?: string | number + // 地址,类型为字符串 + address: string; + // 年龄,类型为字符串 + age: string; + // 咨询内容,类型为字符串 + consultContent: string; + // 咨询日期,类型为字符串 + consultDate: string; + // 咨询人姓名,类型为字符串 + consultName: string; + // 咨询人电话,类型为字符串 + consultPhone: string; + // 老人姓名,类型为字符串 + elderName: string; + // 老人电话,类型为字符串 + elderPhone: string; + // 身份证号码,类型为字符串 + idNum: string; + // 关系,类型为字符串 + relation: string; + // 性别,类型为字符串 + sex: string; + // 来源 ID,可以是字符串或数字 + sourceId: string | number; + // 接待人 ID,可以是字符串或数字 + staffId: string | number; + // 咨询 ID,可选,类型可以是字符串或数字 + consultId?: string | number; + // 老人 ID,可选,类型可以是字符串或数字 + elderId?: string | number; } +// 定义一个接口 ISearhFormConsultByKey,用于描述分页查询咨询时的请求参数结构 interface ISearhFormConsultByKey { - pageNum: number - pageSize: number - consultName?: string - consultPhone?: string - elderName?: string - elderPhone?: string - endTime?: string - sourceId?: string - staffId?: string - startTime?: string - sourceName?: string - staffName?: string + // 页码,类型为数字 + pageNum: number; + // 每页数量,类型为数字 + pageSize: number; + // 咨询人姓名,可选,类型为字符串 + consultName?: string; + // 咨询人电话,可选,类型为字符串 + consultPhone?: string; + // 老人姓名,可选,类型为字符串 + elderName?: string; + // 老人电话,可选,类型为字符串 + elderPhone?: string; + // 结束时间,可选,类型为字符串 + endTime?: string; + // 来源 ID,可选,类型为字符串 + sourceId?: string; + // 接待人 ID,可选,类型为字符串 + staffId?: string; + // 开始时间,可选,类型为字符串 + startTime?: string; + // 来源名称,可选,类型为字符串 + sourceName?: string; + // 接待人名称,可选,类型为字符串 + staffName?: string; } +// 定义一个接口 IConsultByForm,用于描述根据咨询人编号和老人编号获取咨询信息时的请求参数结构 interface IConsultByForm { - consultId: string | number - elderId: string | number + // 咨询 ID,可以是字符串或数字 + consultId: string | number; + // 老人 ID,可以是字符串或数字 + elderId: string | number; } -// 获取咨询管理表格数据 根据咨询人编号和老人编号获取咨询信息 +/** + * 定义一个异步函数 getConsultByForm,用于根据咨询人编号和老人编号获取咨询信息 + * @param data - 一个符合 IConsultByForm 接口的对象,包含获取咨询信息所需的参数 + * @returns 一个 Promise 对象,解析后得到的是获取咨询信息的响应结果 + */ export async function getConsultByForm(data: IConsultByForm) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/consult/getConsultByConsultIdAndElderId' + // 将 data 对象展开作为请求的参数 return http.get('/api/consult/getConsultByConsultIdAndElderId', { params: { ...data } }) } -//新增资询 + +/** + * 定义一个函数 addConsult,用于新增咨询 + * @param data - 一个符合 IAddConsult 接口的对象,包含新增咨询所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增咨询操作的响应结果 + */ export function addConsult(data: IAddConsult) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/consult/addConsult' + // 将 data 对象作为请求的主体 return http.post('/api/consult/addConsult', data) } -// 删除咨询 +/** + * 定义一个函数 delConsult,用于删除咨询 + * @param elderId - 老人 ID,可以是字符串或数字,用于标识要删除的咨询关联的老人 + * @returns 一个 Promise 对象,解析后得到的是删除咨询操作的响应结果 + */ export function delConsult(elderId: string | number) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 '/api/consult/deleteConsult' + // 将 elderId 作为请求的参数 return http.delete('/api/consult/deleteConsult', { params: { elderId @@ -60,13 +112,25 @@ export function delConsult(elderId: string | number) { }) } -//编辑咨询 +/** + * 定义一个函数 editConsult,用于编辑咨询 + * @param data - 一个符合 IAddConsult 接口的对象,包含编辑咨询所需的数据 + * @returns 一个 Promise 对象,解析后得到的是编辑咨询操作的响应结果 + */ export function editConsult(data: IAddConsult) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/consult/editConsult' + // 将 data 对象作为请求的主体 return http.put('/api/consult/editConsult', data) } -// 转为意向客户 +/** + * 定义一个函数 intentionConsult,用于将咨询转为意向客户 + * @param elderId - 老人 ID,可以是字符串或数字,用于标识要转为意向客户的咨询关联的老人 + * @returns 一个 Promise 对象,解析后得到的是将咨询转为意向客户操作的响应结果 + */ export function intentionConsult(elderId: string | number) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/consult/intentionConsult' + // 将包含 elderId 的对象作为请求的主体 return http.put('/api/consult/intentionConsult', { data: { elderId @@ -74,21 +138,37 @@ export function intentionConsult(elderId: string | number) { }) } -// 来源渠道 +/** + * 定义一个函数 listConsultSource,用于获取来源渠道 + * @returns 一个 Promise 对象,解析后得到的是获取来源渠道的响应结果 + */ export function listConsultSource() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/consult/listConsultSource' return http.get('/api/consult/listConsultSource') } -// 接待人 +/** + * 定义一个函数 listConsultStaff,用于获取接待人 + * @returns 一个 Promise 对象,解析后得到的是获取接待人的响应结果 + */ export function listConsultStaff() { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/consult/listConsultStaff' return http.get('/api/consult/listConsultStaff') } -// 分页查询咨询 +/** + * 定义一个异步函数 pageConsultByKey,用于分页查询咨询 + * @param data - 一个符合 ISearhFormConsultByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询咨询的响应结果 + */ export async function pageConsultByKey(data: ISearhFormConsultByKey) { - // 因为后台返回的字段与前端表单数据的prop不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 - Reflect.has(data, 'sourceName') ? (data.sourceId = data.sourceName) : '' - Reflect.has(data, 'staffName') ? (data.staffId = data.staffName) : '' + // 因为后台返回的字段与前端表单数据的 prop 不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 + // 如果 data 对象中有'sourceName' 字段,则将其值赋给'sourceId' 字段 + Reflect.has(data,'sourceName')? (data.sourceId = data.sourceName) : ''; + // 如果 data 对象中有'staffName' 字段,则将其值赋给'staffId' 字段 + Reflect.has(data,'staffName')? (data.staffId = data.staffName) : ''; + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/consult/pageConsultByKey' + // 将处理后的 data 对象展开作为请求的参数 const res = await http.get('/api/consult/pageConsultByKey', { params: { ...data @@ -97,17 +177,28 @@ export async function pageConsultByKey(data: ISearhFormConsultByKey) { return res } -//意向用户接口 +// 定义一个接口 ISearhFormIntentionByKey,用于描述分页查询意向客户时的请求参数结构 interface ISearhFormIntentionByKey { - pageNum: number - pageSize: number - elderName?: string - elderPhone?: string | number - labelId?: number + // 页码,类型为数字 + pageNum: number; + // 每页数量,类型为数字 + pageSize: number; + // 老人姓名,可选,类型为字符串 + elderName?: string; + // 老人电话,可选,可以是字符串或数字 + elderPhone?: string | number; + // 标签 ID,可选,类型为数字 + labelId?: number; } -//分页查询意向客户 +/** + * 定义一个异步函数 pageIntentionByKey,用于分页查询意向客户 + * @param data - 一个符合 ISearhFormIntentionByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询意向客户的响应结果 + */ export async function pageIntentionByKey(data: ISearhFormIntentionByKey) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/intention/pageIntentionByKey' + // 将 data 对象展开作为请求的参数 const res = await http.get('/api/intention/pageIntentionByKey', { params: { ...data @@ -116,23 +207,47 @@ export async function pageIntentionByKey(data: ISearhFormIntentionByKey) { return res } -// 新增沟通记录 +/** + * 定义一个函数 addCommunicationRecord,用于新增沟通记录 + * @param data - 包含新增沟通记录所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是新增沟通记录操作的响应结果 + */ export function addCommunicationRecord(data: any) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/intention/addCommunicationRecord' + // 将 data 对象作为请求的主体 return http.post('/api/intention/addCommunicationRecord', data) } -// 新增意向客户 +/** + * 定义一个函数 addIntention,用于新增意向客户 + * @param data - 包含新增意向客户所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是新增意向客户操作的响应结果 + */ export function addIntention(data: any) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/intention/addIntention' + // 将 data 对象作为请求的主体 return http.post('/api/intention/addIntention', data) } -// 新增回访计划 +/** + * 定义一个函数 addVisitPlan,用于新增回访计划 + * @param data - 包含新增回访计划所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是新增回访计划操作的响应结果 + */ export function addVisitPlan(data: any) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/intention/addVisitPlan' + // 将 data 对象作为请求的主体 return http.post('/api/intention/addVisitPlan', data) } -// 新增沟通记录 +/** + * 定义一个函数 deleteCommunicationRecord,用于删除沟通记录 + * @param communicationRecordId - 沟通记录 ID,类型为 any(具体类型需根据实际情况确定),用于标识要删除的沟通记录 + * @returns 一个 Promise 对象,解析后得到的是删除沟通记录操作的响应结果 + */ export function deleteCommunicationRecord(communicationRecordId: any) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 '/api/intention/deleteCommunicationRecord' + // 将 communicationRecordId 作为请求的参数 return http.delete('/api/intention/deleteCommunicationRecord', { params: { communicationRecordId @@ -140,8 +255,14 @@ export function deleteCommunicationRecord(communicationRecordId: any) { }) } -// 删除回访计划 +/** + * 定义一个函数 deleteVisitPlan,用于删除回访计划 + * @param visitPlanId - 回访计划 ID,类型为 any(具体类型需根据实际情况确定),用于标识要删除的回访计划 + * @returns 一个 Promise 对象,解析后得到的是删除回访计划操作的响应结果 + */ export function deleteVisitPlan(visitPlanId: any) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 '/api/intention/deleteVisitPlan' + // 将 visitPlanId 作为请求的参数 return http.delete('/api/intention/deleteVisitPlan', { params: { visitPlanId @@ -149,28 +270,58 @@ export function deleteVisitPlan(visitPlanId: any) { }) } -// 编辑沟通记录 +/** + * 定义一个函数 editCommunicationRecord,用于编辑沟通记录 + * @param data - 包含编辑沟通记录所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是编辑沟通记录操作的响应结果 + */ export function editCommunicationRecord(data: any) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/intention/editCommunicationRecord' + //将 data 对象作为请求的主体 return http.put('/api/intention/editCommunicationRecord', data) } -// 编辑意向客户 +/** + * 定义一个函数 editIntention,用于编辑意向客户 + * @param data - 包含编辑意向客户所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是编辑意向客户操作的响应结果 + */ export function editIntention(data: any) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/intention/editIntention' + // 将 data 对象作为请求的主体 return http.put('/api/intention/editIntention', data) } -// 编辑老人标签 +/** + * 定义一个函数 editElderLabel,用于编辑老人标签 + * @param data - 包含编辑老人标签所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是编辑老人标签操作的响应结果 + */ export function editElderLabel(data: any) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/intention/editElderLabel' + // 将 data 对象作为请求的主体 return http.put('/api/intention/editElderLabel', data) } -// 执行回访计划 +/** + * 定义一个函数 executeVisitPlan,用于执行回访计划 + * @param data - 包含执行回访计划所需数据的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是执行回访计划操作的响应结果 + */ export function executeVisitPlan(data: any) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/intention/executeVisitPlan' + // 将 data 对象作为请求的主体 return http.put('/api/intention/executeVisitPlan', data) } -// 根据编号获取编辑意向客户标签 +/** + * 定义一个函数 getEditElderLabelById,用于根据编号获取编辑意向客户标签 + * @param data - 包含获取编辑意向客户标签所需参数的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是根据编号获取编辑意向客户标签的响应结果 + */ export function getEditElderLabelById(data: any) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/intention/getEditElderLabelById' + // 将 data 对象展开作为请求的参数 return http.get('/api/intention/getEditElderLabelById', { params: { ...data @@ -178,8 +329,14 @@ export function getEditElderLabelById(data: any) { }) } -// 根据编号获取意向客户标签 +/** + * 定义一个函数 getElderLabelById,用于根据编号获取意向客户标签 + * @param data - 包含获取意向客户标签所需参数的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是根据编号获取意向客户标签的响应结果 + */ export function getElderLabelById(data: any) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/intention/getElderLabelById' + // 将 data 对象展开作为请求的参数 return http.get('/api/intention/getElderLabelById', { params: { ...data @@ -187,8 +344,14 @@ export function getElderLabelById(data: any) { }) } -// 根据编号获取意向客户 +/** + * 定义一个函数 getIntentById,用于根据编号获取意向客户 + * @param data - 包含获取意向客户所需参数的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是根据编号获取意向客户的响应结果 + */ export function getIntentById(data: any) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/intention/getIntentById' + // 将 data 对象展开作为请求的参数 return http.get('/api/intention/getIntentById', { params: { ...data @@ -196,8 +359,14 @@ export function getIntentById(data: any) { }) } -//客户标签 +/** + * 定义一个函数 listLabel,用于获取客户标签 + * @param data - 包含获取客户标签所需参数的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是获取客户标签的响应结果 + */ export function listLabel(data: any) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/intention/listLabel' + // 将 data 对象展开作为请求的参数 return http.get('/intention/listLabel', { params: { ...data @@ -205,29 +374,12 @@ export function listLabel(data: any) { }) } -// 分页查询沟通记录 +/** + * 定义一个函数 pageCommunicationRecord,用于分页查询沟通记录 + * @param data - 包含分页查询沟通记录所需参数的对象,类型为 any(具体结构需根据实际情况确定) + * @returns 一个 Promise 对象,解析后得到的是分页查询沟通记录的响应结果 + */ export function pageCommunicationRecord(data: any) { - return http.get('/intention/pageCommunicationRecord', { - params: { - ...data - } - }) -} - -// 分页搜索老人 -export function pageSearchElderByKey(data: any) { - return http.get('/intention/pageSearchElderByKey', { - params: { - ...data - } - }) -} - -// 分页查询回访计划 -export function pageVisitPlan(data: any) { - return http.get('/intention/pageVisitPlan', { - params: { - ...data - } - }) -} + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/intention/pageCommunicationRecord' + // 将 data 对象展开作为请求的参数 + return http.get diff --git a/client/src/apis/source.ts b/client/src/apis/source.ts index 8b54d01..58128b1 100644 --- a/client/src/apis/source.ts +++ b/client/src/apis/source.ts @@ -1,23 +1,40 @@ +// 从 "@/utils" 模块导入名为 http 的对象,推测该对象是用于发起 HTTP 请求的工具,可能是对 axios 等请求库的封装 import { http } from "@/utils"; +// 定义一个接口 IPageSourceByKey,用于描述分页查询来源渠道时的请求参数结构 interface IPageSourceByKey { + // 名称,用于筛选来源渠道,类型为字符串 name: string; + // 来源渠道名称,用于筛选来源渠道,类型为字符串 sourceName: string; } +// 定义一个接口 IAddSource,用于描述新增来源渠道时的数据结构 interface IAddSource { + // 来源渠道的 ID,类型为字符串 id: string; + // 来源渠道的名称,类型为字符串 name: string; } +// 定义一个接口 IGetSourceById,用于描述根据编号查询来源渠道时的请求参数结构 interface IGetSourceById { + // 来源渠道 ID,类型为字符串 sourceId: string; } -// 分页查询来源渠道 +/** + * 定义一个异步函数 pageSourceByKey,用于分页查询来源渠道 + * @param data - 一个符合 IPageSourceByKey 接口的对象,包含分页查询所需的参数 + * @returns 一个 Promise 对象,解析后得到的是分页查询来源渠道的响应结果 + */ export async function pageSourceByKey(data: IPageSourceByKey) { - // 因为后台返回的字段与前端表单数据的prop不一样,但是组件封装是需要一样的,所以请求前增加一些这两个字段 - Reflect.has(data, "name") ? (data.sourceName = data.name) : ""; + // 因为后台返回的字段与前端表单数据的 prop 不一样, + // 但是组件封装需要一样,所以请求前增加一些这两个字段 + // 如果 data 对象中有 "name" 字段,则将其值赋给 "sourceName" 字段 + Reflect.has(data, "name")? (data.sourceName = data.name) : ""; + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/source/pageSourceByKey" + // 将处理后的 data 对象展开作为请求的参数 return http.get("/api/source/pageSourceByKey", { params: { ...data @@ -25,13 +42,25 @@ export async function pageSourceByKey(data: IPageSourceByKey) { }); } -// 新增来源渠道 +/** + * 定义一个函数 addSource,用于新增来源渠道 + * @param data - 一个符合 IAddSource 接口的对象,包含新增来源渠道所需的数据 + * @returns 一个 Promise 对象,解析后得到的是新增来源渠道操作的响应结果 + */ export function addSource(data: IAddSource) { + // 使用导入的 http 对象发起 POST 请求,请求地址为 "/api/source/addSource" + // 将 data 对象作为请求的主体 return http.post("/api/source/addSource", data); } -// 根据编号查询来源渠道 +/** + * 定义一个异步函数 getSourceById,用于根据编号查询来源渠道 + * @param data - 一个符合 IGetSourceById 接口的对象,包含根据编号查询来源渠道所需的参数 + * @returns 一个 Promise 对象,解析后得到的是根据编号查询来源渠道的响应结果 + */ export async function getSourceById(data: IGetSourceById) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 "/api/source/getSourceById" + // 将 data 对象展开作为请求的参数 return http.get("/api/source/getSourceById", { params: { ...data @@ -39,13 +68,25 @@ export async function getSourceById(data: IGetSourceById) { }); } -// 编辑来源渠道 +/** + * 定义一个函数 editSource,用于编辑来源渠道 + * @param data - 一个符合 IAddSource 接口的对象,包含编辑来源渠道所需的数据 + * @returns 一个 Promise 对象,解析后得到的是编辑来源渠道操作的响应结果 + */ export function editSource(data: IAddSource) { + // 使用导入的 http 对象发起 PUT 请求,请求地址为 "/api/source/editSource" + // 将 data 对象作为请求的主体 return http.put("/api/source/editSource", data); } -// 删除来源渠道 +/** + * 定义一个异步函数 deleteSource,用于删除来源渠道 + * @param data - 一个符合 IGetSourceById 接口的对象,包含删除来源渠道所需的参数 + * @returns 一个 Promise 对象,解析后得到的是删除来源渠道操作的响应结果 + */ export async function deleteSource(data: IGetSourceById) { + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 "/api/source/deleteSource" + // 将 data 对象展开作为请求的参数 return http.delete("/api/source/deleteSource", { params: { ...data diff --git a/client/src/apis/user.ts b/client/src/apis/user.ts index 93eba6e..2317095 100644 --- a/client/src/apis/user.ts +++ b/client/src/apis/user.ts @@ -1,60 +1,106 @@ -import { http } from '@/utils' +// 从 '@/utils' 模块导入名为 http 的对象,推测该对象是用于发起 HTTP 请求的工具,可能是对 axios 等请求库的封装 +import { http } from '@/utils'; +// 定义一个接口 ILoginForm,用于描述登录表单的数据结构 interface ILoginForm { - pass: string - phone: string + // 密码,类型为字符串 + pass: string; + // 电话号码,类型为字符串 + phone: string; } +// 定义一个接口 ISendCodeForm,用于描述发送验证码表单的数据结构 interface ISendCodeForm { - pass: string - account: string + // 密码,类型为字符串 + pass: string; + // 账号,类型为字符串 + account: string; } +// 定义一个接口 IForgetPass,用于描述忘记密码时的数据结构 interface IForgetPass { - code: string - pass: string - account: string + // 验证码,类型为字符串 + code: string; + // 新密码,类型为字符串 + pass: string; + // 账号,类型为字符串 + account: string; } +// 定义一个接口 IEditPass,用于描述修改密码时的数据结构 interface IEditPass { - newPass: string - oldPass: string + // 新密码,类型为字符串 + newPass: string; + // 旧密码,类型为字符串 + oldPass: string; } +// 定义一个类 IEditPassImpl,实现了 IEditPass 接口,用于表示修改密码的数据实体 export class IEditPassImpl implements IEditPass { - newPass: string - oldPass: string + // 新密码属性 + newPass: string; + // 旧密码属性 + oldPass: string; + // 构造函数,接收新密码和旧密码作为参数,并赋值给对应的属性 constructor(newPass: string, oldPass: string) { - this.newPass = newPass - this.oldPass = oldPass + this.newPass = newPass; + this.oldPass = oldPass; } } -// 登录 +/** + * 定义一个函数 getLogin,用于处理登录操作 + * @param data - 一个符合 ILoginForm 接口的对象,包含登录所需的数据 + * @returns 一个 Promise 对象,解析后得到的是登录操作的响应结果 + */ export function getLogin(data: ILoginForm) { - return http.post('/api/account/login', data) + // 使用导入的 http 对象发起 POST 请求,请求地址为 '/api/account/login' + // 将 data 对象作为请求的主体 + return http.post('/api/account/login', data); } -// 发送验证码 +/** + * 定义一个异步函数 sendCode,用于发送验证码 + * @param data - 一个符合 ISendCodeForm 接口的对象,包含发送验证码所需的数据 + * @returns 一个 Promise 对象,解析后得到的是发送验证码操作的响应结果 + */ export async function sendCode(data: ISendCodeForm) { + // 使用导入的 http 对象发起 GET 请求,请求地址为 '/api/account/sendCode' + // 将 data 对象展开作为请求的参数 return http.get('/api/account/sendCode', { params: { ...data } - }) + }); } -// 忘记密码 +/** + * 定义一个异步函数 forgetPass,用于处理忘记密码的操作 + * @param data - 一个符合 IForgetPass 接口的对象,包含忘记密码操作所需的数据 + * @returns 一个 Promise 对象,解析后得到的是忘记密码操作的响应结果 + */ export async function forgetPass(data: IForgetPass) { - return http.put('/api/account/forget', data) + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/account/forget' + // 将 data 对象作为请求的主体 + return http.put('/api/account/forget', data); } -// 修改密码 +/** + * 定义一个异步函数 editPass,用于处理修改密码的操作 + * @param data - 一个符合 IEditPass 接口的对象,包含修改密码操作所需的数据 + * @returns 一个 Promise 对象,解析后得到的是修改密码操作的响应结果 + */ export async function editPass(data: IEditPass) { - return http.put('/api/account/edit', data) + // 使用导入的 http 对象发起 PUT 请求,请求地址为 '/api/account/edit' + // 将 data 对象作为请求的主体 + return http.put('/api/account/edit', data); } -// 退出登录 +/** + * 定义一个异步函数 getLogout,用于处理退出登录的操作 + * @returns 一个 Promise 对象,解析后得到的是退出登录操作的响应结果 + */ export async function getLogout() { - return http.delete('/api/account/logout') + // 使用导入的 http 对象发起 DELETE 请求,请求地址为 '/api/account/logout' + return http.delete('/api/account/logout'); } diff --git a/client/src/components/ProTable/Grid/components/GridItem.vue b/client/src/components/ProTable/Grid/components/GridItem.vue deleted file mode 100644 index 7e5389e..0000000 --- a/client/src/components/ProTable/Grid/components/GridItem.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - diff --git a/client/src/components/ProTable/Grid/index.vue b/client/src/components/ProTable/Grid/index.vue deleted file mode 100644 index fa2858b..0000000 --- a/client/src/components/ProTable/Grid/index.vue +++ /dev/null @@ -1,207 +0,0 @@ - - - diff --git a/client/src/components/ProTable/Grid/interface/index.ts b/client/src/components/ProTable/Grid/interface/index.ts deleted file mode 100644 index a3ff77d..0000000 --- a/client/src/components/ProTable/Grid/interface/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// 定义一个类型别名 BreakPoint,它的值只能是 'xs'、'sm'、'md'、'lg' 或 'xl' 中的一个, -// 通常用于表示响应式布局中的不同屏幕断点 -export type BreakPoint = 'xs' |'sm' |'md' | 'lg' | 'xl'; - -// 定义一个类型别名 Responsive,它是一个对象类型,包含两个可选属性 span 和 offset。 -// span 用于表示在响应式布局中元素所占的列数,类型为 number 类型的可选值。 -// offset 用于表示在响应式布局中元素的偏移量,类型为 number 类型的可选值。 -// 这个类型通常用于描述在不同屏幕断点下元素的布局属性 -export type Responsive = { - span?: number; - offset?: number; -}; diff --git a/client/src/components/ProTable/IconPark/index.vue b/client/src/components/ProTable/IconPark/index.vue deleted file mode 100644 index 9ca92a5..0000000 --- a/client/src/components/ProTable/IconPark/index.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/client/src/components/ProTable/ProTable/components/ColSetting.vue b/client/src/components/ProTable/ProTable/components/ColSetting.vue deleted file mode 100644 index 12323c8..0000000 --- a/client/src/components/ProTable/ProTable/components/ColSetting.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/ProTable/components/Pagination.vue b/client/src/components/ProTable/ProTable/components/Pagination.vue deleted file mode 100644 index 7109b8f..0000000 --- a/client/src/components/ProTable/ProTable/components/Pagination.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/client/src/components/ProTable/ProTable/components/TableColumn.vue b/client/src/components/ProTable/ProTable/components/TableColumn.vue deleted file mode 100644 index 233dbf7..0000000 --- a/client/src/components/ProTable/ProTable/components/TableColumn.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/client/src/components/ProTable/ProTable/index.md b/client/src/components/ProTable/ProTable/index.md deleted file mode 100644 index 1a70ec4..0000000 --- a/client/src/components/ProTable/ProTable/index.md +++ /dev/null @@ -1,87 +0,0 @@ -## ProTable 文档 📚 - -### 1、ProTable 属性(ProTableProps): - -> 使用 `v-bind="$attrs"` 通过属性透传将 **ProTable** 组件属性全部透传到 **el-table** 上,所以我们支持 **el-table** 的所有 **Props** 属性。在此基础上,还扩展了以下 **Props:** - -| 属性名 | 类型 | 是否必传 | 默认值 | 属性描述 | -| :----------: | :---------: | :------: | :-----------------------------------: | :--------------------------------------------------------------------------------------------------: | -| columns | ColumnProps | ✅ | — | ProTable 组件会根据此字段渲染搜索表单与表格列,详情见 ColumnProps | -| requestApi | Function | ✅ | — | 获取表格数据的请求 API | -| requestAuto | Boolean | ❌ | true | 表格初始化是否自动执行请求 API | -| dataCallback | Function | ❌ | — | 后台返回数据的回调函数,可对后台返回数据进行处理 | -| title | String | ❌ | — | 表格标题,目前只在打印的时候用到 | -| pagination | Boolean | ❌ | true | 是否显示分页组件:pagination 为 false 后台返回数据应该没有分页信息 和 list 字段,data 就是 list 数据 | -| initParam | Object | ❌ | {} | 表格请求的初始化参数,该值变化会自动请求表格数据 | -| toolButton | Boolean | ❌ | true | 是否显示表格功能按钮 | -| rowKey | String | ❌ | 'id' | 当表格数据多选时,所指定的 id | -| searchCol | Object | ❌ | { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 } | 表格搜索项每列占比配置 | - -### 2、Column 配置(ColumnProps): - -> 使用 `v-bind="column"` 通过属性透传将每一项 **column** 属性全部透传到 **el-table-column** 上,所以我们支持 **el-table-column** 的所有 **Props** 属性。在此基础上,还扩展了以下 **Props:** - -| 属性名 | 类型 | 是否必传 | 默认值 | 属性描述 | -| :----------: | :----------------: | :------: | :----: | :---------------------------------------------------------------------------------------------: | -| tag | Boolean | ❌ | false | 当前单元格值是否为标签展示,可通过 enum 数据中 tagType 字段指定 tag 类型 | -| isShow | Boolean | ❌ | true | 当前列是否显示在表格内(只对 prop 列生效) | -| search | SearchProps | ❌ | — | 搜索项配置,详情见 SearchProps | -| enum | Object \| Function | ❌ | — | 字典,可格式化单元格内容,还可以作为搜索框的下拉选项(字典可以为 API 请求函数,内部会自动执行) | -| isFilterEnum | Boolean | ❌ | true | 当前单元格值是否根据 enum 格式化(例如 enum 只作为搜索项数据,不参与内容格式化) | -| fieldNames | Object | ❌ | — | 指定字典 label && value 的 key 值 | -| headerRender | Function | ❌ | — | 自定义表头内容渲染(tsx 语法、h 语法) | -| render | Function | ❌ | — | 自定义单元格内容渲染(tsx 语法、h 语法) | -| \_children | ColumnProps | ❌ | — | 多级表头 | - -### 3、搜索项 配置(SearchProps): - -> 使用 `v-bind="column.search.props“` 通过属性透传将 **search.props** 属性全部透传到每一项搜索组件上,所以我们支持 **input、select、tree-select、date-packer、time-picker、time-select、switch** 大部分属性,并在其基础上还扩展了以下 **Props:** - -| 属性名 | 类型 | 是否必传 | 默认值 | 属性描述 | -| :----------: | :----: | :------: | :----: | :--------------------------------------------------------------------------------------------------------------------------------------------: | -| el | String | ✅ | — | 当前项搜索框的类型,支持:input、input-number、select、select-v2、tree-select、cascader、date-packer、time-picker、time-select、switch、slider | -| props | Object | ❌ | — | 根据 element plus 官方文档来传递,该属性所有值会透传到组件 | -| defaultValue | Any | ❌ | — | 搜索项默认值 | -| key | String | ❌ | — | 当搜索项 key 不为 prop 属性时,可通过 key 指定 | -| order | Number | ❌ | — | 搜索项排序(从小到大) | -| span | Number | ❌ | 1 | 搜索项所占用的列数,默认为 1 列 | -| offset | Number | ❌ | — | 搜索字段左侧偏移列数 | - -### 4、ProTable 事件: - -> 根据 **ElementPlus Table** 文档在 **ProTable** 组件上绑定事件即可,组件会通过 **$attrs** 透传给 **el-table**。 -> -> [el-table 事件文档链接](https://element-plus.org/zh-CN/component/table.html#table-%E4%BA%8B%E4%BB%B6) - -### 5、ProTable 方法: - -> **ProTable** 组件暴露了 **el-table** 实例和一些组件内部的参数和方法: -> -> [el-table 方法文档链接](https://element-plus.org/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95) - -| 方法名 | 描述 | -| :-------------: | :-------------------------------------------------------------------: | -| element | `el-table` 实例,可以通过`element.方法名`来调用 `el-table` 的所有方法 | -| tableData | 当前页面所展示的数据 | -| searchParam | 所有的搜索参数,不包含分页 | -| pageable | 当前表格的分页数据 | -| getTableList | 获取、刷新表格数据的方法(携带所有参数) | -| reset | 重置表格查询参数,相当于点击重置搜索按钮 | -| clearSelection | 清空表格所选择的数据,除此方法之外还可使用 `element.clearSelection()` | -| enumMap | 当前表格使用的所有字典数据(Map 数据结构) | -| isSelected | 表格是否选中数据 | -| selectedList | 表格选中的数据列表 | -| selectedListIds | 表格选中的数据列表的 id | - -### 6、ProTable 插槽: - -| 插槽名 | 描述 | -| :----------------------: | :-------------------------------------------------------------------------------------------------------------------------------------: | -| — | 默认插槽,支持直接在 ProTable 中写 el-table-column 标签 | -| tableHeader | 自定义表格头部左侧区域的插槽,一般情况该区域放操作按钮 | -| toolButton | 自定义表格头部左右侧侧功能区域的插槽 | -| append | 插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。 | -| empty | 当表格数据为空时自定义的内容 | -| pagination | 分页组件插槽 | -| `column.prop` | 单元格的作用域插槽 | -| `column.prop` + "Header" | 表头的作用域插槽 | diff --git a/client/src/components/ProTable/ProTable/index.vue b/client/src/components/ProTable/ProTable/index.vue deleted file mode 100644 index 912cb40..0000000 --- a/client/src/components/ProTable/ProTable/index.vue +++ /dev/null @@ -1,397 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/ProTable/interface/index.ts b/client/src/components/ProTable/ProTable/interface/index.ts deleted file mode 100644 index 8d9e597..0000000 --- a/client/src/components/ProTable/ProTable/interface/index.ts +++ /dev/null @@ -1,84 +0,0 @@ -// 从 "element-plus/es/components/table/src/table-column/defaults" 导入 TableColumnCtx 类型 -// TableColumnCtx 可能是 Element Plus 中表格列的上下文类型,包含了表格列的一些默认属性和方法 -import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults"; -// 从 "@/components/Grid/interface" 导入 BreakPoint 和 Responsive 类型 -// BreakPoint 可能表示响应式布局中的不同断点(如 xs, sm, md, lg, xl 等) -// Responsive 可能用于描述在不同断点下的响应式配置 -import { BreakPoint, Responsive } from "@/components/Grid/interface"; - -// 定义一个接口 EnumProps,用于描述枚举属性 -export interface EnumProps { - // 选项框显示的文字,类型为字符串 - label: string; - // 选项框值,可以是任意类型 - value: any; - // 是否禁用此选项,可选,默认为 undefined,类型为布尔值 - disabled?: boolean; - // 当 tag 为 true 时,此选择会指定 tag 显示类型,可选,默认为 undefined,类型为字符串 - tagType?: string; - // 为树形选择时,可以通过 children 属性指定子选项,可选,默认为 undefined,类型为 EnumProps 数组 - children?: EnumProps[]; - // 允许添加任意其他属性,属性名和值的类型都为任意类型 - [key: string]: any; -} - -// 定义一个类型别名 TypeProp,其值只能是 "index"、"selection" 或 "expand" 中的一个 -export type TypeProp = "index" | "selection" | "expand"; - -// 定义一个类型别名 SearchType,用于表示搜索框的类型 -// 可以是 "input"、"input-number" 等多种 Element Plus 组件类型 -export type SearchType = - | "input" - | "input-number" - | "select" - | "select-v2" - | "tree-select" - | "cascader" - | "date-picker" - | "time-picker" - | "time-select" - | "switch" - | "slider"; - -// 定义一个接口 SearchProps,用于描述搜索项的属性 -export type SearchProps = { - // 当前项搜索框的类型,类型为 SearchType - el: SearchType; - // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件,可选,默认为 undefined - props?: any; - // 当搜索项 key 不为 prop 属性时,可通过 key 指定,可选,默认为 undefined,类型为字符串 - key?: string; - // 搜索项排序(从大到小),可选,默认为 undefined,类型为数字 - order?: number; - // 搜索项所占用的列数,默认为 1 列,可选,默认为 undefined,类型为数字 - span?: number; - // 搜索字段左侧偏移列数,可选,默认为 undefined,类型为数字 - offset?: number; - // 搜索项默认值,可以是字符串、数字、布尔值或任意类型的数组,可选,默认为 undefined - defaultValue?: string | number | boolean | any[]; - // 扩展为包含 BreakPoint 类型的键和 Responsive 类型的值的部分记录,用于实现响应式配置 -} & Partial>; - -// 定义一个接口 ColumnProps,用于描述表格列的属性 -// 扩展自 Partial, "children" | "renderHeader" | "renderCell">>,表示部分继承 TableColumnCtx 类型并去除 "children"、"renderHeader" 和 "renderCell" 属性 -export interface ColumnProps - extends Partial, "children" | "renderHeader" | "renderCell">> { - // 是否是标签展示,可选,默认为 undefined,类型为布尔值 - tag?: boolean; - // 是否显示在表格当中,可选,默认为 undefined,类型为布尔值 - isShow?: boolean; - // 搜索项配置,可选,默认为 undefined,类型为 SearchProps 或 undefined - search?: SearchProps | undefined; - // 枚举类型(渲染值的字典),可以是 EnumProps 数组或一个返回 Promise 的函数,可选,默认为 undefined - enum?: EnumProps[] | ((params?: any) => Promise); - // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据),可选,默认为 undefined,类型为布尔值 - isFilterEnum?: boolean; - // 指定 label && value 的 key 值,可选,默认为 undefined,类型为包含 label 和 value 键的对象 - fieldNames?: { label: string; value: string }; - // 自定义表头内容渲染(tsx语法),可选,默认为 undefined,类型为一个接受 ColumnProps 类型参数并返回任意类型的函数 - headerRender?: (row: ColumnProps) => any; - // 自定义单元格内容渲染(tsx语法),可选,默认为 undefined,类型为一个接受包含 row 属性且类型为 T 的对象并返回任意类型的函数 - render?: (scope: { row: T }) => any; - // 多级表头,可选,默认为 undefined,类型为 ColumnProps 数组 - _children?: ColumnProps[]; -} diff --git a/client/src/components/ProTable/ReImageVerify/index.ts b/client/src/components/ProTable/ReImageVerify/index.ts deleted file mode 100644 index 6b4eca3..0000000 --- a/client/src/components/ProTable/ReImageVerify/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// 从当前目录下的 src 文件夹中的 index.vue 文件导入组件 -// 这里将导入的组件命名为 reImageVerify,它应该是一个 Vue 组件 -import reImageVerify from './src/index.vue' - -/** 图形验证码组件 */ -// 使用具名导出的方式,将导入的组件以 ReImageVerify 这个名称导出 -// 具名导出允许在导入时指定具体要导入的内容,方便在其他文件中使用 -export const ReImageVerify = reImageVerify - -// 使用默认导出的方式,将导入的组件作为默认导出 -// 默认导出允许在导入时可以使用任意名称来接收该组件,通常一个文件只能有一个默认导出 -export default ReImageVerify diff --git a/client/src/components/ProTable/ReImageVerify/src/hooks.ts b/client/src/components/ProTable/ReImageVerify/src/hooks.ts deleted file mode 100644 index 898eb05..0000000 --- a/client/src/components/ProTable/ReImageVerify/src/hooks.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { ref, onMounted } from 'vue' - -/** - * 绘制图形验证码 - * @param width - 图形宽度 - * @param height - 图形高度 - */ -// 定义一个名为 useImageVerify 的函数,用于生成和管理图形验证码,接受图形宽度和高度作为参数,有默认值 -export const useImageVerify = (width = 120, height = 40) => { - // 创建一个响应式引用 domRef,用于存储 元素的引用 - const domRef = ref() - // 创建一个响应式变量 imgCode,用于存储生成的图形验证码字符串 - const imgCode = ref('') - - // 定义一个函数 setImgCode,用于设置 imgCode 的值 - function setImgCode(code: string) { - imgCode.value = code - } - - // 定义一个函数 getImgCode,用于在 上绘制验证码并获取生成的验证码字符串 - function getImgCode() { - // 如果 domRef 没有值(即 元素未挂载),则直接返回 - if (!domRef.value) return - // 调用 draw 函数绘制验证码,并将返回的验证码字符串赋值给 imgCode - imgCode.value = draw(domRef.value, width, height) - } - - // 在组件挂载后执行的钩子函数,调用 getImgCode 函数生成验证码 - onMounted(() => { - getImgCode() - }) - - // 返回一个包含 domRef、imgCode、setImgCode 和 getImgCode 的对象,以便在其他地方使用这些变量和函数 - return { - domRef, - imgCode, - setImgCode, - getImgCode - } -} - -// 定义一个函数 randomNum,用于生成指定范围内的随机整数 -function randomNum(min: number, max: number) { - // 使用 Math.random() 生成一个 0 到 1 之间的随机小数,然后通过计算得到指定范围内的整数 - const num = Math.floor(Math.random() * (max - min) + min) - return num -} - -// 定义一个函数 randomColor,用于生成指定范围内的随机颜色(RGB 格式) -function randomColor(min: number, max: number) { - // 分别生成随机的红(r)、绿(g)、蓝(b)分量值 - const r = randomNum(min, max) - const g = randomNum(min, max) - const b = randomNum(min, max) - // 返回 RGB 格式的颜色字符串 - return `rgb(${r},${g},${b})` -} - -// 定义一个函数 draw,用于在 元素上绘制图形验证码 -function draw(dom: HTMLCanvasElement, width: number, height: number) { - // 初始化一个空字符串 imgCode,用于存储生成的验证码 - let imgCode = '' - - // 定义一个字符串 NUMBER_STRING,包含数字 0 到 9,用于生成验证码字符 - const NUMBER_STRING = '0123456789' - - // 获取 元素的 2D 绘图上下文 ctx - const ctx = dom.getContext('2d') - // 如果获取上下文失败(ctx 为 null),则直接返回空的验证码字符串 - if (!ctx) return imgCode - - // 设置绘图上下文的填充样式为随机颜色(背景色) - ctx.fillStyle = randomColor(180, 230) - // 使用填充样式绘制一个矩形,覆盖整个 区域,作为验证码的背景 - ctx.fillRect(0, 0, width, height) - // 循环 4 次,生成 4 个验证码字符 - for (let i = 0; i < 4; i += 1) { - // 从 NUMBER_STRING 中随机选取一个字符作为验证码字符 - const text = NUMBER_STRING[randomNum(0, NUMBER_STRING.length)] - // 将选取的字符添加到 imgCode 字符串中 - imgCode += text - // 随机生成字体大小 - const fontSize = randomNum(18, 41) - // 随机生成字符的旋转角度 - const deg = randomNum(-30, 30) - // 设置绘图上下文的字体样式 - ctx.font = `${fontSize}px Simhei` - // 设置文本基线为顶部 - ctx.textBaseline = 'top' - // 设置绘图上下文的填充样式为随机颜色(字符颜色) - ctx.fillStyle = randomColor(80, 150) - // 保存当前绘图上下文的状态 - ctx.save() - // 平移绘图上下文的原点到指定位置(每个字符的起始位置) - ctx.translate(30 * i + 15, 15) - // 旋转绘图上下文指定的角度 - ctx.rotate((deg * Math.PI) / 180) - // 在指定位置绘制字符 - ctx.fillText(text, -15 + 5, -15) - // 恢复之前保存的绘图上下文状态 - ctx.restore() - } - // 循环 5 次,绘制 5 条随机直线 - for (let i = 0; i < 5; i += 1) { - // 开始绘制路径 - ctx.beginPath() - // 设置路径的起始点为随机位置 - ctx.moveTo(randomNum(0, width), randomNum(0, height)) - // 设置路径的终点为随机位置 - ctx.lineTo(randomNum(0, width), randomNum(0, height)) - // 设置绘图上下文的描边样式为随机颜色 - ctx.strokeStyle = randomColor(180, 230) - // 关闭路径 - ctx.closePath() - // 绘制路径(直线) - ctx.stroke() - } - // 循环 41 次,绘制 41 个随机圆形 - for (let i = 0; i < 41; i += 1) { - // 开始绘制路径 - ctx.beginPath() - // 绘制一个圆形,圆心为随机位置,半径为 1 - ctx.arc(randomNum(0, width), randomNum(0, height), 1, 0, 2 * Math.PI) - // 关闭路径 - ctx.closePath() - // 设置绘图上下文的填充样式为随机颜色 - ctx.fillStyle = randomColor(150, 200) - // 填充圆形 - ctx.fill() - } - // 返回生成的验证码字符串 - return imgCode -} diff --git a/client/src/components/ProTable/ReImageVerify/src/index.vue b/client/src/components/ProTable/ReImageVerify/src/index.vue deleted file mode 100644 index b8548ec..0000000 --- a/client/src/components/ProTable/ReImageVerify/src/index.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/client/src/components/ProTable/SearchForm/components/SearchFormItem.vue b/client/src/components/ProTable/SearchForm/components/SearchFormItem.vue deleted file mode 100644 index 7e966ba..0000000 --- a/client/src/components/ProTable/SearchForm/components/SearchFormItem.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/client/src/components/ProTable/SearchForm/index.vue b/client/src/components/ProTable/SearchForm/index.vue deleted file mode 100644 index e587851..0000000 --- a/client/src/components/ProTable/SearchForm/index.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - diff --git a/client/src/components/ProTable/SvgIcon/index.vue b/client/src/components/ProTable/SvgIcon/index.vue deleted file mode 100644 index e25234e..0000000 --- a/client/src/components/ProTable/SvgIcon/index.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/elderListDialog/index.vue b/client/src/components/ProTable/elderListDialog/index.vue deleted file mode 100644 index 172f22c..0000000 --- a/client/src/components/ProTable/elderListDialog/index.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/my-card/my-card.vue b/client/src/components/ProTable/my-card/my-card.vue deleted file mode 100644 index d050f98..0000000 --- a/client/src/components/ProTable/my-card/my-card.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/treeDialog/index.vue b/client/src/components/ProTable/treeDialog/index.vue deleted file mode 100644 index c4d327e..0000000 --- a/client/src/components/ProTable/treeDialog/index.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - - - diff --git a/client/src/components/ProTable/upload/image/index.vue b/client/src/components/ProTable/upload/image/index.vue deleted file mode 100644 index e739333..0000000 --- a/client/src/components/ProTable/upload/image/index.vue +++ /dev/null @@ -1,189 +0,0 @@ - - - diff --git a/client/src/components/ProTable/wen-test/DynamicAdditionComponent.vue b/client/src/components/ProTable/wen-test/DynamicAdditionComponent.vue deleted file mode 100644 index c13ef16..0000000 --- a/client/src/components/ProTable/wen-test/DynamicAdditionComponent.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/client/src/hooks/interface/index.ts b/client/src/hooks/interface/index.ts index e26a422..05cfd4d 100644 --- a/client/src/hooks/interface/index.ts +++ b/client/src/hooks/interface/index.ts @@ -1,27 +1,42 @@ +// 定义一个名为 Table 的命名空间 export namespace Table { + // 在 Table 命名空间内,定义一个接口 Pageable,用于描述分页相关的属性 export interface Pageable { + // 当前页码,类型为数字 pageNum: number + // 每页显示的数量,类型为数字 pageSize: number + // 数据的总数量,类型为数字 total: number } + // 在 Table 命名空间内,定义一个接口 TableStateProps,用于描述表格相关的状态属性 export interface TableStateProps { + // 表格数据,是一个任意类型的数组 tableData: any[] + // 分页相关的属性,类型为 Pageable 接口 pageable: Pageable + // 搜索参数,是一个键值对对象,键为字符串,值为任意类型 searchParam: { [key: string]: any } + // 初始化的搜索参数,是一个键值对对象,键为字符串,值为任意类型 searchInitParam: { [key: string]: any } + // 用于获取总数的参数,是一个键值对对象,键为字符串,值为任意类型 totalParam: { [key: string]: any } + // 可选的图标相关属性,是一个键值对对象,键为字符串,值为任意类型,默认为 undefined icon?: { [key: string]: any } } } +// 定义一个名为 HandleData 的命名空间 export namespace HandleData { - export type MessageType = '' | 'success' | 'warning' | 'info' | 'error' + // 在 HandleData 命名空间内,定义一个类型别名 MessageType + // MessageType 的值可以是空字符串,或者是'success'、'warning'、'info'、'error' 中的一个 + export type MessageType = '' |'success' | 'warning' | 'info' | 'error' } diff --git a/client/src/hooks/useHandleData.ts b/client/src/hooks/useHandleData.ts index 5984785..f4a917a 100644 --- a/client/src/hooks/useHandleData.ts +++ b/client/src/hooks/useHandleData.ts @@ -1,4 +1,6 @@ +// 从 element-plus 库中导入 ElMessageBox 和 ElMessage 组件,分别用于显示确认框和提示消息 import { ElMessageBox, ElMessage } from 'element-plus' +// 从 './interface' 文件中导入 HandleData 命名空间,用于获取其中定义的类型 import { HandleData } from './interface' /** @@ -9,26 +11,42 @@ import { HandleData } from './interface' * @param {String} confirmType icon类型(不必传,默认为 warning) * @return Promise */ +// 定义一个泛型函数 useHandleData,P 表示 api 函数参数的类型,R 表示 api 函数返回值的类型 export const useHandleData =

( + // api 是一个函数,接收类型为 P 的参数并返回一个 Promise,Promise 的解析值类型为 R api: (params: P) => Promise, + // params 是 api 函数的参数,类型与 api 函数的参数类型一致 params: Parameters[0], + // message 是一个字符串,用于显示确认框中的提示信息 message: string, + // confirmType 是一个字符串,类型为 HandleData.MessageType,默认值为 'warning' confirmType: HandleData.MessageType = 'warning' ) => { + // 返回一个 Promise return new Promise((resolve, reject) => { + // 显示一个确认框 ElMessageBox.confirm(`是否${message}?`, '温馨提示', { + // 确认按钮的文本 confirmButtonText: '确定', + // 取消按钮的文本 cancelButtonText: '取消', + // 确认框的图标类型 type: confirmType, + // 是否可拖动 draggable: true - }).then(async () => { - const res = await api(params) - if (!res) return reject(false) - ElMessage({ - type: 'success', - message: `${message}成功!` - }) - resolve(true) }) + .then(async () => { + // 调用 api 函数并等待其返回结果 + const res = await api(params) + // 如果结果为 falsy 值,则 reject 该 Promise + if (!res) return reject(false) + // 显示一个成功提示消息 + ElMessage({ + type:'success', + message: `${message}成功!` + }) + // resolve 该 Promise,表示操作成功 + resolve(true) + }) }) } diff --git a/client/src/hooks/useIcons.ts b/client/src/hooks/useIcons.ts index 3c8fb3b..a99fbba 100644 --- a/client/src/hooks/useIcons.ts +++ b/client/src/hooks/useIcons.ts @@ -1,10 +1,21 @@ +// 从 '@/components/SvgIcon/index.vue' 导入 SvgIcon 组件 import SvgIcon from '@/components/SvgIcon/index.vue' +// 从 'vue' 导入 h 函数和 defineComponent 函数 import { h, defineComponent } from 'vue' +// 定义一个名为 useRenderIcon 的函数,它接受两个参数:iconName(字符串类型)和 attrs(可选的任意类型) export function useRenderIcon(iconName: string, attrs?: any) { + // 使用 defineComponent 函数定义一个新的组件 return defineComponent({ + // 新组件的名称为 'SvgIcon' name: 'SvgIcon', + // 定义组件的渲染函数 render() { + // 使用 h 函数创建一个 SvgIcon 组件的虚拟节点 + // 第一个参数是要创建的组件(这里是 SvgIcon) + // 第二个参数是一个对象,包含要传递给 SvgIcon 组件的属性 + // 'icon' 属性的值是传入的 iconName + // '...attrs' 表示将 attrs 对象中的所有属性也传递给 SvgIcon 组件 return h(SvgIcon, { icon: iconName, ...attrs diff --git a/client/src/hooks/useSelection.ts b/client/src/hooks/useSelection.ts index 3c4a8ad..b3df20a 100644 --- a/client/src/hooks/useSelection.ts +++ b/client/src/hooks/useSelection.ts @@ -4,16 +4,24 @@ import { ref, computed } from 'vue' * @description 表格多选数据操作 * @param {String} rowKey 当表格可以多选时,所指定的 id * */ +// 定义一个名为 useSelection 的函数,用于处理表格多选数据的操作 +// 接受一个可选参数 rowKey,默认值为 'id',表示行数据中用于唯一标识的键名 export const useSelection = (rowKey = 'id') => { - // 是否选中数据 + // 创建一个响应式变量 isSelected,用于表示是否选中了数据 + // 初始值为 false,类型为 boolean const isSelected = ref(false) - // 选中的数据列表 + // 创建一个响应式变量 selectedList,用于存储选中的数据列表 + // 初始值为空数组,类型为 any[] const selectedList = ref([]) - // 当前选中的所有ids(数组),可根据项目自行配置id字段 + // 创建一个计算属性 selectedListIds,用于获取当前选中的所有数据的 id 数组 + // 计算属性会根据依赖项(这里是 selectedList)的变化而自动更新 const selectedListIds = computed((): string[] => { + // 初始化一个空数组 ids 用于存储 id const ids: string[] = [] + // 遍历 selectedList 中的每一项数据 selectedList.value.forEach(item => ids.push(item[rowKey])) + // 返回包含所有 id 的数组 return ids }) @@ -22,11 +30,18 @@ export const useSelection = (rowKey = 'id') => { * @param {Array} rowArr 当前选择的所有数据 * @return void */ + // 定义一个函数 selectionChange,用于处理表格多选数据的变化事件 + // 接受一个参数 rowArr,类型为 any[],表示当前选中的所有数据 const selectionChange = (rowArr: any) => { - rowArr.length === 0 ? (isSelected.value = false) : (isSelected.value = true) - selectedList.value = rowArr - } + // 如果选中的数据列表为空,则将 isSelected 设置为 false + // 否则将 isSelected 设置为 true + rowArr.length === 0? (isSelected.value = false) : (isSelected.value = true) + // 更新 selectedList 为当前选中的数据列表 + selectedList.value = rowArr + } + // 返回一个包含 isSelected、selectedList、selectedListIds 和 selectionChange 的对象 + // 以便在其他地方使用这些变量和函数来处理表格多选数据 return { isSelected, selectedList, diff --git a/client/src/hooks/useTable.ts b/client/src/hooks/useTable.ts index f102ced..d9d5e6e 100644 --- a/client/src/hooks/useTable.ts +++ b/client/src/hooks/useTable.ts @@ -8,160 +8,196 @@ import { reactive, computed, toRefs } from 'vue' * @param {Boolean} isPageable 是否有分页(非必传,默认为true) * @param {Function} dataCallBack 对后台返回的数据进行处理的方法(非必传) * */ +// 定义一个名为 useTable 的函数,用于封装表格页面的操作方法 +// api 是获取表格数据的 API 方法,是必传参数 +// initParam 是获取数据的初始化参数,非必传,默认值为空对象 +// isPageable 表示是否有分页功能,非必传,默认值为 true +// dataCallBack 是对后台返回的数据进行处理的方法,非必传 export const useTable = ( api: (params: any) => Promise, initParam: object = {}, isPageable = true, dataCallBack?: (data: any) => any ) => { + // 使用 reactive 创建一个响应式的 state 对象,包含表格数据、分页数据、查询参数等 const state = reactive({ - // 表格数据 + // 表格数据,初始值为空数组 tableData: [], - // 分页数据 + // 分页数据,包含当前页数、每页显示条数和总条数 pageable: { - // 当前页数 + // 当前页数,初始值为 1 pageNum: 1, - // 每页显示条数 + // 每页显示条数,初始值为 10 pageSize: 10, - // 总条数 + // 总条数,初始值为 0 total: 0 }, - // 查询参数(只包括查询) + // 查询参数,只包括查询条件,初始值为空对象 searchParam: {}, - // 初始化默认的查询参数 + // 初始化默认的查询参数,初始值为空对象 searchInitParam: {}, - // 总参数(包含分页和查询参数) + // 总参数,包含分页和查询参数,初始值为空对象 totalParam: {} }) /** * @description 分页查询参数(只包括分页和表格字段排序,其他排序方式可自行配置) * */ + // 定义一个计算属性 pageParam,用于获取和设置分页查询参数 const pageParam = computed({ - get: () => { - return { - pageNum: state.pageable.pageNum, - pageSize: state.pageable.pageSize + // 获取分页查询参数 + get: () => { + return { + pageNum: state.pageable.pageNum, + pageSize: state.pageable.pageSize + } + }, + // 设置分页查询参数,这里暂时为空,可根据需要实现 + set: (newVal: any) => { // 我是分页更新之后的值 } - }, - set: (newVal: any) => { // 我是分页更新之后的值 - } - }) + }) /** * @description 获取表格数据 * @return void * */ + // 定义一个异步函数 getTableList,用于获取表格数据 const getTableList = async () => { - try { - // 先把初始化参数和分页参数放到总参数里面 - Object.assign( - state.totalParam, - initParam, - isPageable ? pageParam.value : {} - ) - //请求前格式化数据 - if (state.totalParam.consultDate) { - state.totalParam.startTime = state.totalParam.consultDate[0] - state.totalParam.endTime = state.totalParam.consultDate[1] - delete state.totalParam.consultDate - } - let { data } = await api({ - ...state.searchInitParam, - ...state.totalParam - }) - dataCallBack && (data = dataCallBack(data)) - // 获取当前表格数据 - state.tableData = isPageable ? data.list : data + try { + // 先把初始化参数和分页参数放到总参数里面 + Object.assign( + state.totalParam, + initParam, + isPageable? pageParam.value : {} + ) + // 请求前格式化数据,如果总参数中有 consultDate 字段,则进行处理 + if (state.totalParam.consultDate) { + state.totalParam.startTime = state.totalParam.consultDate[0] + state.totalParam.endTime = state.totalParam.consultDate[1] + delete state.totalParam.consultDate + } + // 调用 API 方法获取数据 + let { data } = await api({ + ...state.searchInitParam, + ...state.totalParam + }) + // 如果有数据处理回调函数,则对数据进行处理 + dataCallBack && (data = dataCallBack(data)) + // 获取当前表格数据,如果有分页,则取 data.list,否则取 data + state.tableData = isPageable? data.list : data - const { pageNum, pageSize, total } = data - isPageable && updatePageable({ pageNum, pageSize, total }) - } catch (error) { - console.log(error) + // 从返回的数据中获取分页信息 + const { pageNum, pageSize, total } = data + // 如果有分页,则更新分页信息 + isPageable && updatePageable({ pageNum, pageSize, total }) + } catch (error) { + // 如果发生错误,打印错误信息 + console.log(error) + } } - } /** * @description 更新查询参数 * @return void * */ + // 定义一个函数 updatedTotalParam,用于更新总参数 const updatedTotalParam = () => { - state.totalParam = {} - // 处理查询参数,可以给查询参数加自定义前缀操作 - const nowSearchParam: { [key: string]: any } = {} - // 防止手动清空输入框携带参数(这里可以自定义查询参数前缀) - for (const key in state.searchParam) { - // * 某些情况下参数为 false/0 也应该携带参数 - if ( - state.searchParam[key] || - state.searchParam[key] === false || - state.searchParam[key] === 0 - ) { - nowSearchParam[key] = state.searchParam[key] + state.totalParam = {} + // 处理查询参数,可以给查询参数加自定义前缀操作 + const nowSearchParam: { [key: string]: any } = {} + // 防止手动清空输入框携带参数(这里可以自定义查询参数前缀) + for (const key in state.searchParam) { + // * 某些情况下参数为 false/0 也应该携带参数 + if ( + state.searchParam[key] || + state.searchParam[key] === false || + state.searchParam[key] === 0 + ) { + nowSearchParam[key] = state.searchParam[key] + } } + // 将处理后的查询参数和分页参数合并到总参数中 + Object.assign( + state.totalParam, + nowSearchParam, + isPageable? pageParam.value : {} + ) } - Object.assign( - state.totalParam, - nowSearchParam, - isPageable ? pageParam.value : {} - ) - } /** * @description 更新分页信息 * @param {Object} resPageable 后台返回的分页数据 * @return void * */ + // 定义一个函数 updatePageable,用于更新分页信息 const updatePageable = (resPageable: Table.Pageable) => { - Object.assign(state.pageable, resPageable) - } + // 使用 Object.assign 方法将后台返回的分页数据合并到 state.pageable 中 + Object.assign(state.pageable, resPageable) + } /** * @description 表格数据查询 * @return void * */ + // 定义一个函数 search,用于进行表格数据查询 const search = () => { - state.pageable.pageNum = 1 - updatedTotalParam() - getTableList() - } + // 将当前页数设置为 1 + state.pageable.pageNum = 1 + // 更新总参数 + updatedTotalParam() + // 获取表格数据 + getTableList() + } /** * @description 表格数据重置 * @return void * */ + // 定义一个函数 reset,用于重置表格数据 const reset = () => { - state.pageable.pageNum = 1 - state.searchParam = {} - // 重置搜索表单的时,如果有默认搜索参数,则重置默认的搜索参数 - Object.keys(state.searchInitParam).forEach(key => { - state.searchParam[key] = state.searchInitParam[key] - }) - updatedTotalParam() - getTableList() - } + // 将当前页数设置为 1 + state.pageable.pageNum = 1 + // 清空搜索参数 + state.searchParam = {} + // 重置搜索表单时,如果有默认搜索参数,则重置为默认值 + Object.keys(state.searchInitParam).forEach(key => { + state.searchParam[key] = state.searchInitParam[key] + }) + // 更新总参数 + updatedTotalParam() + // 获取表格数据 + getTableList() + } /** * @description 每页条数改变 * @param {Number} val 当前条数 * @return void * */ + // 定义一个函数 handleSizeChange,用于处理每页条数改变的事件 const handleSizeChange = (val: number) => { - state.pageable.pageNum = 1 - state.pageable.pageSize = val - getTableList() - } + // 将当前页数设置为 1 + state.pageable.pageNum = 1 + // 更新每页显示条数 + state.pageable.pageSize = val + // 获取表格数据 + getTableList() + } /** * @description 当前页改变 * @param {Number} val 当前页 * @return void * */ + // 定义一个函数 handleCurrentChange,用于处理当前页改变的事件 const handleCurrentChange = (val: number) => { - state.pageable.pageNum = val - getTableList() - } + // 更新当前页数 + state.pageable.pageNum = val + // 获取表格数据 + getTableList() + } + // 返回一个包含 state 的响应式引用、获取表格数据的函数、查询函数、重置函数、处理每页条数改变和当前页改变的函数以及更新总参数的函数 return { ...toRefs(state), getTableList, diff --git a/client/src/icons/index.ts b/client/src/icons/index.ts index e4cd5fc..3ae6e10 100644 --- a/client/src/icons/index.ts +++ b/client/src/icons/index.ts @@ -1,15 +1,21 @@ +// 从项目路径 '@/components/SvgIcon/index.vue' 导入 SvgIcon 组件 import SvgIcon from '@/components/SvgIcon/index.vue' +// 从 'vue' 中导入 App 类型,用于表示 Vue 应用实例 import { App } from 'vue' // 获取上下文 require.context(检索的目录,是否检索子文件夹,正则表达式) // 返回值是一个函数(传入路径可以导入文件) // 通过静态方法keys可以检索所有文件路径 // 通过.prototype可以查看所有静态方法 - +// 这里指定检索当前目录下的 './svg' 文件夹,不检索子文件夹,匹配所有以.svg 结尾的文件 const svgRequired = require.context('./svg', false, /\.svg$/) +// 遍历所有匹配的 SVG 文件路径 svgRequired.keys().forEach(item => svgRequired(item)) +// 导出一个默认函数,该函数接收一个 Vue 应用实例 app 作为参数 export default (app: App) => { + // 使用 app.component 方法将 SvgIcon 组件注册为全局组件,别名为'svg-icon' + // 这样在整个 Vue 应用中都可以使用 标签来使用该组件 app.component('svg-icon', SvgIcon) } diff --git a/client/src/layout/components/NavBar/components/Avatar.vue b/client/src/layout/components/NavBar/components/Avatar.vue index f7e079b..961d375 100644 --- a/client/src/layout/components/NavBar/components/Avatar.vue +++ b/client/src/layout/components/NavBar/components/Avatar.vue @@ -1,34 +1,49 @@