From 98d1893a2b2b73008669a35e64ef6172c52e6354 Mon Sep 17 00:00:00 2001 From: wu <wsjxh1023@163.com> Date: Sun, 7 Apr 2024 09:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=91=E9=B8=A1=E6=B9=96=E8=80=81=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=9A=84=E6=A8=A1=E5=9D=97=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/clean.bat | 12 - bin/package.bat | 12 - bin/run.bat | 14 - doc/若依环境使用手册.docx | Bin 428430 -> 0 bytes .../jjh/common/entity/BaseInfoEntity.java | 52 + .../controller/BmsApprovalInfoController.java | 97 ++ .../BmsBigStrongAwardController.java | 99 ++ .../BmsBrandingAwardController.java | 99 ++ ...BmsCarrierConstructionAwardController.java | 99 ++ .../BmsCreditManagementController.java | 99 ++ .../BmsDeclarationRecordsController.java | 160 +++ .../BmsEnterpriseBasicInfoController.java | 98 ++ .../BmsEnterpriseDirectoryController.java | 97 ++ .../controller/BmsFieldInfoController.java | 97 ++ .../controller/BmsFileInfoController.java | 97 ++ .../BmsFundingDetailController.java | 97 ++ .../BmsIndustrialInternetAwardController.java | 99 ++ .../BmsIntegrationIndustriesController.java | 99 ++ ...msLogisticsDevelopmentAwardController.java | 99 ++ ...sManufacturingServicesAwardController.java | 99 ++ .../BmsOpenInterfaceController.java | 54 + ...msPlatformConstructionAwardController.java | 99 ++ .../controller/BmsProcessInfoController.java | 97 ++ .../controller/BmsProjectInfoController.java | 97 ++ .../BmsProjectSettlementAwardController.java | 99 ++ .../BmsSceneOpeningAwardController.java | 99 ++ .../controller/BmsTemplateInfoController.java | 106 ++ .../BmsTemplateRecordController.java | 107 ++ .../controller/BsmFundingInfoController.java | 97 ++ .../declaration/entity/BmsApprovalInfo.java | 110 ++ .../declaration/entity/BmsBigStrongAward.java | 134 +++ .../declaration/entity/BmsBrandingAward.java | 119 ++ .../entity/BmsCarrierConstructionAward.java | 63 + .../entity/BmsCreditManagement.java | 103 ++ .../entity/BmsDeclarationRecords.java | 94 ++ .../entity/BmsEnterpriseBasicInfo.java | 83 ++ .../entity/BmsEnterpriseDirectory.java | 50 + .../jjh/declaration/entity/BmsFieldInfo.java | 93 ++ .../jjh/declaration/entity/BmsFileInfo.java | 107 ++ .../declaration/entity/BmsFundingDetail.java | 145 +++ .../entity/BmsIndustrialInternetAward.java | 93 ++ .../entity/BmsIntegrationIndustries.java | 96 ++ .../entity/BmsLogisticsDevelopmentAward.java | 121 ++ .../entity/BmsManufacturingServicesAward.java | 121 ++ .../entity/BmsPlatformConstructionAward.java | 93 ++ .../declaration/entity/BmsProcessInfo.java | 73 ++ .../declaration/entity/BmsProjectInfo.java | 98 ++ .../entity/BmsProjectSettlementAward.java | 86 ++ .../entity/BmsSceneOpeningAward.java | 64 + .../declaration/entity/BmsTemplateInfo.java | 144 +++ .../declaration/entity/BmsTemplateRecord.java | 75 ++ .../declaration/entity/BsmFundingInfo.java | 110 ++ .../entity/dto/AppendixParamDto.java | 29 + .../ApprovalDeclarationRecordsQueryDto.java | 56 + .../entity/dto/BmsApprovalInfoUpdateDto.java | 43 + .../entity/dto/BmsBigStrongAwardAddDto.java | 44 + .../dto/BmsBigStrongAwardUpdateDto.java | 38 + .../entity/dto/BmsBrandingAwardAddDto.java | 34 + .../entity/dto/BmsBrandingAwardUpdateDto.java | 31 + .../BmsCarrierConstructionAwardAddDto.java | 45 + .../BmsCarrierConstructionAwardUpdateDto.java | 29 + .../entity/dto/BmsCreditManagementAddDto.java | 32 + .../dto/BmsCreditManagementUpdateDto.java | 32 + .../dto/BmsDeclarationRecordsAddDto.java | 60 + .../entity/dto/BmsDeclarationRecordsDto.java | 49 + .../dto/BmsEnterpriseBasicInfoAddDto.java | 61 + .../entity/dto/BmsFieldInfoAddDto.java | 32 + .../entity/dto/BmsFileInfoAddDto.java | 35 + .../entity/dto/BmsFundingDetailAddDto.java | 45 + .../entity/dto/BmsFundingDetailUpdateDto.java | 47 + .../dto/BmsIndustrialInternetAwardAddDto.java | 30 + .../BmsIndustrialInternetAwardUpdateDto.java | 33 + .../dto/BmsIntegrationIndustriesAddDto.java | 60 + .../BmsIntegrationIndustriesUpdateDto.java | 32 + .../BmsLogisticsDevelopmentAwardAddDto.java | 37 + ...BmsLogisticsDevelopmentAwardUpdateDto.java | 31 + .../BmsManufacturingServicesAwardAddDto.java | 38 + ...msManufacturingServicesAwardUpdateDto.java | 31 + .../dto/BmsMunicipalBureauReviewQueryDto.java | 50 + .../BmsPlatformConstructionAwardAddDto.java | 29 + ...BmsPlatformConstructionAwardUpdateDto.java | 31 + .../dto/BmsProjectSettlementAwardAddDto.java | 53 + .../BmsProjectSettlementAwardUpdateDto.java | 39 + .../dto/BmsSceneOpeningAwardAddDto.java | 33 + .../dto/BmsSceneOpeningAwardUpdateDto.java | 28 + .../entity/dto/BmsTemplateInfoAddDto.java | 27 + .../entity/dto/BmsTemplateQueryDto.java | 31 + .../entity/dto/BmsTemplateRecordAddDto.java | 25 + .../entity/dto/BmsTemplateRecordQueryDto.java | 52 + .../dto/BmsTemplateRecordUpdateDto.java | 27 + .../entity/dto/BsmFundingInfoAddDto.java | 69 ++ .../entity/dto/MunicipalReviewDto.java | 29 + .../entity/dto/MunicipalReviewInfoDto.java | 46 + .../entity/dto/OpenInterfaceApplyAddDto.java | 57 + .../jjh/declaration/entity/dto/UploadDto.java | 20 + .../vo/ApprovalDeclarationRecordsQueryVo.java | 69 ++ .../entity/vo/BmsApprovalInfoQueryVo.java | 58 + .../entity/vo/BmsBigStrongAwardQueryVo.java | 26 + .../vo/BmsDeclarationRecordsQueryVo.java | 89 ++ .../vo/BmsMunicipalBureauReviewQueryVo.java | 51 + .../vo/BmsProjectSettlementAwardQueryVo.java | 26 + .../vo/BmsProjectSettlementAwardVo.java | 67 ++ .../entity/vo/BmsTemplateInfoQueryVo.java | 23 + .../entity/vo/BmsTemplateRecordQueryVo.java | 69 ++ .../entity/vo/BmsTemplateRecordVo.java | 31 + .../entity/vo/DeclarationRecordsVo.java | 62 + .../entity/vo/EnterpriseInfoTemplateVo.java | 35 + .../mapper/BmsApprovalInfoMapper.java | 69 ++ .../mapper/BmsBigStrongAwardMapper.java | 63 + .../mapper/BmsBrandingAwardMapper.java | 62 + .../BmsCarrierConstructionAwardMapper.java | 62 + .../mapper/BmsCreditManagementMapper.java | 62 + .../mapper/BmsDeclarationRecordsMapper.java | 85 ++ .../mapper/BmsEnterpriseBasicInfoMapper.java | 62 + .../mapper/BmsEnterpriseDirectoryMapper.java | 62 + .../mapper/BmsFieldInfoMapper.java | 62 + .../declaration/mapper/BmsFileInfoMapper.java | 62 + .../mapper/BmsFundingDetailMapper.java | 62 + .../BmsIndustrialInternetAwardMapper.java | 62 + .../BmsIntegrationIndustriesMapper.java | 62 + .../BmsLogisticsDevelopmentAwardMapper.java | 62 + .../BmsManufacturingServicesAwardMapper.java | 62 + .../BmsPlatformConstructionAwardMapper.java | 62 + .../mapper/BmsProcessInfoMapper.java | 62 + .../mapper/BmsProjectInfoMapper.java | 65 + .../BmsProjectSettlementAwardMapper.java | 63 + .../mapper/BmsSceneOpeningAwardMapper.java | 62 + .../mapper/BmsTemplateInfoMapper.java | 69 ++ .../mapper/BmsTemplateRecordMapper.java | 75 ++ .../mapper/BsmFundingInfoMapper.java | 62 + .../service/IBmsApprovalInfoService.java | 69 ++ .../service/IBmsBigStrongAwardService.java | 65 + .../service/IBmsBrandingAwardService.java | 64 + .../IBmsCarrierConstructionAwardService.java | 64 + .../service/IBmsCreditManagementService.java | 64 + .../IBmsDeclarationRecordsService.java | 107 ++ .../IBmsEnterpriseBasicInfoService.java | 62 + .../IBmsEnterpriseDirectoryService.java | 62 + .../service/IBmsFieldInfoService.java | 62 + .../service/IBmsFileInfoService.java | 62 + .../service/IBmsFundingDetailService.java | 62 + .../IBmsIndustrialInternetAwardService.java | 64 + .../IBmsIntegrationIndustriesService.java | 64 + .../IBmsLogisticsDevelopmentAwardService.java | 64 + ...IBmsManufacturingServicesAwardService.java | 64 + .../IBmsPlatformConstructionAwardService.java | 64 + .../service/IBmsProcessInfoService.java | 62 + .../service/IBmsProjectInfoService.java | 65 + .../IBmsProjectSettlementAwardService.java | 65 + .../service/IBmsSceneOpeningAwardService.java | 64 + .../service/IBmsTemplateInfoService.java | 77 ++ .../service/IBmsTemplateRecordService.java | 71 ++ .../service/IBsmFundingInfoService.java | 62 + .../declaration/service/ICommonService.java | 40 + .../service/IOpenInterfaceService.java | 26 + .../impl/BmsApprovalInfoServiceImpl.java | 105 ++ .../impl/BmsBigStrongAwardServiceImpl.java | 168 +++ .../impl/BmsBrandingAwardServiceImpl.java | 140 +++ ...msCarrierConstructionAwardServiceImpl.java | 140 +++ .../impl/BmsCreditManagementServiceImpl.java | 141 +++ .../BmsDeclarationRecordsServiceImpl.java | 555 +++++++++ .../BmsEnterpriseBasicInfoServiceImpl.java | 88 ++ .../BmsEnterpriseDirectoryServiceImpl.java | 88 ++ .../service/impl/BmsFieldInfoServiceImpl.java | 89 ++ .../service/impl/BmsFileInfoServiceImpl.java | 89 ++ .../impl/BmsFundingDetailServiceImpl.java | 89 ++ ...BmsIndustrialInternetAwardServiceImpl.java | 141 +++ .../BmsIntegrationIndustriesServiceImpl.java | 142 +++ ...sLogisticsDevelopmentAwardServiceImpl.java | 143 +++ ...ManufacturingServicesAwardServiceImpl.java | 141 +++ ...sPlatformConstructionAwardServiceImpl.java | 145 +++ .../impl/BmsProcessInfoServiceImpl.java | 88 ++ .../impl/BmsProjectInfoServiceImpl.java | 94 ++ .../BmsProjectSettlementAwardServiceImpl.java | 165 +++ .../impl/BmsSceneOpeningAwardServiceImpl.java | 141 +++ .../impl/BmsTemplateInfoServiceImpl.java | 158 +++ .../impl/BmsTemplateRecordServiceImpl.java | 157 +++ .../impl/BsmFundingInfoServiceImpl.java | 88 ++ .../service/impl/CommonServiceImpl.java | 413 +++++++ .../impl/OpenInterfaceServiceImpl.java | 101 ++ .../ent/controller/JMemorandumController.java | 17 +- .../ent/controller/JProjectController.java | 42 +- .../controller/common/CommonController.java | 99 +- .../src/main/resources/application.yml | 4 +- .../jjh/declaration/BmsApprovalInfoMapper.xml | 176 +++ .../declaration/BmsBigStrongAwardMapper.xml | 104 ++ .../declaration/BmsBrandingAwardMapper.xml | 98 ++ .../BmsCarrierConstructionAwardMapper.xml | 151 +++ .../declaration/BmsCreditManagementMapper.xml | 111 ++ .../BmsDeclarationRecordsMapper.xml | 329 +++++ .../BmsEnterpriseBasicInfoMapper.xml | 105 ++ .../BmsEnterpriseDirectoryMapper.xml | 97 ++ .../jjh/declaration/BmsFieldInfoMapper.xml | 105 ++ .../jjh/declaration/BmsFileInfoMapper.xml | 111 ++ .../declaration/BmsFundingDetailMapper.xml | 128 ++ .../BmsIndustrialInternetAwardMapper.xml | 111 ++ .../BmsIntegrationIndustriesMapper.xml | 167 +++ .../BmsLogisticsDevelopmentAwardMapper.xml | 127 ++ .../BmsManufacturingServicesAwardMapper.xml | 120 ++ .../BmsPlatformConstructionAwardMapper.xml | 113 ++ .../jjh/declaration/BmsProcessInfoMapper.xml | 128 ++ .../jjh/declaration/BmsProjectInfoMapper.xml | 176 +++ .../BmsProjectSettlementAwardMapper.xml | 134 +++ .../BmsSceneOpeningAwardMapper.xml | 114 ++ .../jjh/declaration/BmsTemplateInfoMapper.xml | 147 +++ .../declaration/BmsTemplateRecordMapper.xml | 220 ++++ .../jjh/declaration/BsmFundingInfoMapper.xml | 156 +++ .../jjh/{ => ent}/JMemorandumMapper.xml | 0 .../mapper/jjh/{ => ent}/JProjectMapper.xml | 0 ruoyi-common/pom.xml | 24 +- .../common/constant/SecurityConstants.java | 48 + .../common/context/SecurityContextHolder.java | 84 ++ .../ruoyi/common/core/domain/TreeSelect.java | 51 +- .../common/core/domain/entity/SysDept.java | 170 +-- .../common/core/domain/entity/SysRole.java | 198 ++- .../common/core/domain/entity/SysUser.java | 262 ++-- .../ruoyi/common/utils/file/FileUtils.java | 206 ++-- .../common/utils/poi/ProjectExcelUtil.java | 389 +++--- .../common/utils/poi/ProjectValueUtil.java | 400 +++--- .../ruoyi/framework/config/CaptchaConfig.java | 34 +- .../com/ruoyi/system/domain/SysConfig.java | 90 +- .../ruoyi/system/domain/SysLogininfor.java | 98 +- .../com/ruoyi/system/domain/vo/RouterVo.java | 60 +- .../ruoyi/system/mapper/SysConfigMapper.java | 24 +- .../ruoyi/system/service/ISysMenuService.java | 44 +- .../service/impl/SysConfigServiceImpl.java | 103 +- .../service/impl/SysMenuServiceImpl.java | 261 ++-- .../mapper/system/SysConfigMapper.xml | 163 +-- .../resources/mapper/system/SysDeptMapper.xml | 318 ++--- .../mapper/system/SysDictDataMapper.xml | 257 ++-- .../mapper/system/SysDictTypeMapper.xml | 197 +-- .../mapper/system/SysLogininforMapper.xml | 97 +- .../resources/mapper/system/SysMenuMapper.xml | 438 ++++--- .../mapper/system/SysNoticeMapper.xml | 133 +- .../mapper/system/SysOperLogMapper.xml | 172 +-- .../resources/mapper/system/SysPostMapper.xml | 238 ++-- .../mapper/system/SysRoleDeptMapper.xml | 60 +- .../resources/mapper/system/SysRoleMapper.xml | 300 ++--- .../mapper/system/SysRoleMenuMapper.xml | 60 +- .../resources/mapper/system/SysUserMapper.xml | 475 ++++---- .../mapper/system/SysUserPostMapper.xml | 60 +- .../mapper/system/SysUserRoleMapper.xml | 83 +- ruoyi-ui/.editorconfig | 22 - ruoyi-ui/.env.development | 11 - ruoyi-ui/.env.production | 8 - ruoyi-ui/.env.staging | 10 - ruoyi-ui/.eslintignore | 10 - ruoyi-ui/.eslintrc.js | 199 --- ruoyi-ui/.gitignore | 23 - ruoyi-ui/README.md | 30 - ruoyi-ui/babel.config.js | 13 - ruoyi-ui/bin/build.bat | 12 - ruoyi-ui/bin/package.bat | 12 - ruoyi-ui/bin/run-web.bat | 12 - ruoyi-ui/build/index.js | 35 - ruoyi-ui/package.json | 90 -- ruoyi-ui/public/favicon.ico | Bin 5663 -> 0 bytes ruoyi-ui/public/html/ie.html | 46 - ruoyi-ui/public/index.html | 208 ---- ruoyi-ui/public/robots.txt | 2 - ruoyi-ui/src/App.vue | 28 - ruoyi-ui/src/api/login.js | 60 - ruoyi-ui/src/api/menu.js | 9 - ruoyi-ui/src/api/monitor/cache.js | 57 - ruoyi-ui/src/api/monitor/job.js | 71 -- ruoyi-ui/src/api/monitor/jobLog.js | 26 - ruoyi-ui/src/api/monitor/logininfor.js | 34 - ruoyi-ui/src/api/monitor/online.js | 18 - ruoyi-ui/src/api/monitor/operlog.js | 26 - ruoyi-ui/src/api/monitor/server.js | 9 - ruoyi-ui/src/api/system/config.js | 60 - ruoyi-ui/src/api/system/dept.js | 52 - ruoyi-ui/src/api/system/dict/data.js | 52 - ruoyi-ui/src/api/system/dict/type.js | 60 - ruoyi-ui/src/api/system/menu.js | 60 - ruoyi-ui/src/api/system/notice.js | 44 - ruoyi-ui/src/api/system/post.js | 44 - ruoyi-ui/src/api/system/role.js | 119 -- ruoyi-ui/src/api/system/user.js | 135 --- ruoyi-ui/src/api/tool/gen.js | 85 -- ruoyi-ui/src/assets/401_images/401.gif | Bin 164227 -> 0 bytes ruoyi-ui/src/assets/404_images/404.png | Bin 98071 -> 0 bytes ruoyi-ui/src/assets/404_images/404_cloud.png | Bin 4766 -> 0 bytes ruoyi-ui/src/assets/icons/index.js | 9 - ruoyi-ui/src/assets/icons/svg/404.svg | 1 - ruoyi-ui/src/assets/icons/svg/bug.svg | 1 - ruoyi-ui/src/assets/icons/svg/build.svg | 1 - ruoyi-ui/src/assets/icons/svg/button.svg | 1 - ruoyi-ui/src/assets/icons/svg/cascader.svg | 1 - ruoyi-ui/src/assets/icons/svg/chart.svg | 1 - ruoyi-ui/src/assets/icons/svg/checkbox.svg | 1 - ruoyi-ui/src/assets/icons/svg/clipboard.svg | 1 - ruoyi-ui/src/assets/icons/svg/code.svg | 1 - ruoyi-ui/src/assets/icons/svg/color.svg | 1 - ruoyi-ui/src/assets/icons/svg/component.svg | 1 - ruoyi-ui/src/assets/icons/svg/dashboard.svg | 1 - ruoyi-ui/src/assets/icons/svg/date-range.svg | 1 - ruoyi-ui/src/assets/icons/svg/date.svg | 1 - ruoyi-ui/src/assets/icons/svg/dict.svg | 1 - .../src/assets/icons/svg/documentation.svg | 1 - ruoyi-ui/src/assets/icons/svg/download.svg | 1 - ruoyi-ui/src/assets/icons/svg/drag.svg | 1 - ruoyi-ui/src/assets/icons/svg/druid.svg | 1 - ruoyi-ui/src/assets/icons/svg/edit.svg | 1 - ruoyi-ui/src/assets/icons/svg/education.svg | 1 - ruoyi-ui/src/assets/icons/svg/email.svg | 1 - ruoyi-ui/src/assets/icons/svg/example.svg | 1 - ruoyi-ui/src/assets/icons/svg/excel.svg | 1 - .../src/assets/icons/svg/exit-fullscreen.svg | 1 - ruoyi-ui/src/assets/icons/svg/eye-open.svg | 1 - ruoyi-ui/src/assets/icons/svg/eye.svg | 1 - ruoyi-ui/src/assets/icons/svg/form.svg | 1 - ruoyi-ui/src/assets/icons/svg/fullscreen.svg | 1 - ruoyi-ui/src/assets/icons/svg/github.svg | 1 - ruoyi-ui/src/assets/icons/svg/guide.svg | 1 - ruoyi-ui/src/assets/icons/svg/icon.svg | 1 - ruoyi-ui/src/assets/icons/svg/input.svg | 1 - .../src/assets/icons/svg/international.svg | 1 - ruoyi-ui/src/assets/icons/svg/job.svg | 1 - ruoyi-ui/src/assets/icons/svg/language.svg | 1 - ruoyi-ui/src/assets/icons/svg/link.svg | 1 - ruoyi-ui/src/assets/icons/svg/list.svg | 1 - ruoyi-ui/src/assets/icons/svg/lock.svg | 1 - ruoyi-ui/src/assets/icons/svg/log.svg | 1 - ruoyi-ui/src/assets/icons/svg/logininfor.svg | 1 - ruoyi-ui/src/assets/icons/svg/message.svg | 1 - ruoyi-ui/src/assets/icons/svg/money.svg | 1 - ruoyi-ui/src/assets/icons/svg/monitor.svg | 2 - ruoyi-ui/src/assets/icons/svg/nested.svg | 1 - ruoyi-ui/src/assets/icons/svg/number.svg | 1 - ruoyi-ui/src/assets/icons/svg/online.svg | 1 - ruoyi-ui/src/assets/icons/svg/password.svg | 1 - ruoyi-ui/src/assets/icons/svg/pdf.svg | 1 - ruoyi-ui/src/assets/icons/svg/people.svg | 1 - ruoyi-ui/src/assets/icons/svg/peoples.svg | 1 - ruoyi-ui/src/assets/icons/svg/phone.svg | 1 - ruoyi-ui/src/assets/icons/svg/post.svg | 1 - ruoyi-ui/src/assets/icons/svg/qq.svg | 1 - ruoyi-ui/src/assets/icons/svg/question.svg | 1 - ruoyi-ui/src/assets/icons/svg/radio.svg | 1 - ruoyi-ui/src/assets/icons/svg/rate.svg | 1 - ruoyi-ui/src/assets/icons/svg/redis-list.svg | 2 - ruoyi-ui/src/assets/icons/svg/redis.svg | 1 - ruoyi-ui/src/assets/icons/svg/row.svg | 1 - ruoyi-ui/src/assets/icons/svg/search.svg | 1 - ruoyi-ui/src/assets/icons/svg/select.svg | 1 - ruoyi-ui/src/assets/icons/svg/server.svg | 1 - ruoyi-ui/src/assets/icons/svg/shopping.svg | 1 - ruoyi-ui/src/assets/icons/svg/size.svg | 1 - ruoyi-ui/src/assets/icons/svg/skill.svg | 1 - ruoyi-ui/src/assets/icons/svg/slider.svg | 1 - ruoyi-ui/src/assets/icons/svg/star.svg | 1 - ruoyi-ui/src/assets/icons/svg/swagger.svg | 1 - ruoyi-ui/src/assets/icons/svg/switch.svg | 1 - ruoyi-ui/src/assets/icons/svg/system.svg | 2 - ruoyi-ui/src/assets/icons/svg/tab.svg | 1 - ruoyi-ui/src/assets/icons/svg/table.svg | 1 - ruoyi-ui/src/assets/icons/svg/textarea.svg | 1 - ruoyi-ui/src/assets/icons/svg/theme.svg | 1 - ruoyi-ui/src/assets/icons/svg/time-range.svg | 1 - ruoyi-ui/src/assets/icons/svg/time.svg | 1 - ruoyi-ui/src/assets/icons/svg/tool.svg | 1 - ruoyi-ui/src/assets/icons/svg/tree-table.svg | 1 - ruoyi-ui/src/assets/icons/svg/tree.svg | 1 - ruoyi-ui/src/assets/icons/svg/upload.svg | 1 - ruoyi-ui/src/assets/icons/svg/user.svg | 1 - ruoyi-ui/src/assets/icons/svg/validCode.svg | 1 - ruoyi-ui/src/assets/icons/svg/wechat.svg | 1 - ruoyi-ui/src/assets/icons/svg/zip.svg | 1 - ruoyi-ui/src/assets/icons/svgo.yml | 22 - ruoyi-ui/src/assets/images/dark.svg | 39 - ruoyi-ui/src/assets/images/light.svg | 39 - .../src/assets/images/login-background.jpg | Bin 521275 -> 0 bytes ruoyi-ui/src/assets/images/pay.png | Bin 140720 -> 0 bytes ruoyi-ui/src/assets/images/profile.jpg | Bin 81131 -> 0 bytes ruoyi-ui/src/assets/logo/logo.png | Bin 5663 -> 0 bytes ruoyi-ui/src/assets/styles/btn.scss | 99 -- ruoyi-ui/src/assets/styles/element-ui.scss | 92 -- .../src/assets/styles/element-variables.scss | 31 - ruoyi-ui/src/assets/styles/index.scss | 182 --- ruoyi-ui/src/assets/styles/mixin.scss | 66 - ruoyi-ui/src/assets/styles/ruoyi.scss | 291 ----- ruoyi-ui/src/assets/styles/sidebar.scss | 227 ---- ruoyi-ui/src/assets/styles/transition.scss | 49 - ruoyi-ui/src/assets/styles/variables.scss | 54 - ruoyi-ui/src/components/Breadcrumb/index.vue | 74 -- ruoyi-ui/src/components/Crontab/day.vue | 161 --- ruoyi-ui/src/components/Crontab/hour.vue | 114 -- ruoyi-ui/src/components/Crontab/index.vue | 430 ------- ruoyi-ui/src/components/Crontab/min.vue | 116 -- ruoyi-ui/src/components/Crontab/month.vue | 114 -- ruoyi-ui/src/components/Crontab/result.vue | 559 --------- ruoyi-ui/src/components/Crontab/second.vue | 117 -- ruoyi-ui/src/components/Crontab/week.vue | 202 ---- ruoyi-ui/src/components/Crontab/year.vue | 131 -- ruoyi-ui/src/components/DictData/index.js | 49 - ruoyi-ui/src/components/DictTag/index.vue | 89 -- ruoyi-ui/src/components/Editor/index.vue | 274 ----- ruoyi-ui/src/components/FileUpload/index.vue | 216 ---- ruoyi-ui/src/components/Hamburger/index.vue | 44 - .../src/components/HeaderSearch/index.vue | 198 --- ruoyi-ui/src/components/IconSelect/index.vue | 104 -- .../src/components/IconSelect/requireIcons.js | 11 - .../src/components/ImagePreview/index.vue | 90 -- ruoyi-ui/src/components/ImageUpload/index.vue | 226 ---- ruoyi-ui/src/components/Pagination/index.vue | 114 -- ruoyi-ui/src/components/PanThumb/index.vue | 142 --- ruoyi-ui/src/components/ParentView/index.vue | 3 - ruoyi-ui/src/components/RightPanel/index.vue | 106 -- .../src/components/RightToolbar/index.vue | 129 -- ruoyi-ui/src/components/RuoYi/Doc/index.vue | 21 - ruoyi-ui/src/components/RuoYi/Git/index.vue | 21 - ruoyi-ui/src/components/Screenfull/index.vue | 57 - ruoyi-ui/src/components/SizeSelect/index.vue | 56 - ruoyi-ui/src/components/SvgIcon/index.vue | 61 - ruoyi-ui/src/components/ThemePicker/index.vue | 173 --- ruoyi-ui/src/components/TopNav/index.vue | 195 --- ruoyi-ui/src/components/iFrame/index.vue | 36 - ruoyi-ui/src/directive/dialog/drag.js | 64 - ruoyi-ui/src/directive/dialog/dragHeight.js | 34 - ruoyi-ui/src/directive/dialog/dragWidth.js | 30 - ruoyi-ui/src/directive/index.js | 23 - ruoyi-ui/src/directive/module/clipboard.js | 54 - ruoyi-ui/src/directive/permission/hasPermi.js | 28 - ruoyi-ui/src/directive/permission/hasRole.js | 28 - ruoyi-ui/src/layout/components/AppMain.vue | 75 -- .../layout/components/IframeToggle/index.vue | 33 - .../src/layout/components/InnerLink/index.vue | 47 - ruoyi-ui/src/layout/components/Navbar.vue | 200 --- .../src/layout/components/Settings/index.vue | 260 ---- .../layout/components/Sidebar/FixiOSBug.js | 25 - .../src/layout/components/Sidebar/Item.vue | 33 - .../src/layout/components/Sidebar/Link.vue | 43 - .../src/layout/components/Sidebar/Logo.vue | 93 -- .../layout/components/Sidebar/SidebarItem.vue | 100 -- .../src/layout/components/Sidebar/index.vue | 57 - .../layout/components/TagsView/ScrollPane.vue | 94 -- .../src/layout/components/TagsView/index.vue | 332 ----- ruoyi-ui/src/layout/components/index.js | 5 - ruoyi-ui/src/layout/index.vue | 111 -- ruoyi-ui/src/layout/mixin/ResizeHandler.js | 45 - ruoyi-ui/src/main.js | 86 -- ruoyi-ui/src/permission.js | 58 - ruoyi-ui/src/plugins/auth.js | 60 - ruoyi-ui/src/plugins/cache.js | 77 -- ruoyi-ui/src/plugins/download.js | 79 -- ruoyi-ui/src/plugins/index.js | 20 - ruoyi-ui/src/plugins/modal.js | 83 -- ruoyi-ui/src/plugins/tab.js | 71 -- ruoyi-ui/src/router/index.js | 183 --- ruoyi-ui/src/settings.js | 44 - ruoyi-ui/src/store/getters.js | 19 - ruoyi-ui/src/store/index.js | 25 - ruoyi-ui/src/store/modules/app.js | 66 - ruoyi-ui/src/store/modules/dict.js | 50 - ruoyi-ui/src/store/modules/permission.js | 137 --- ruoyi-ui/src/store/modules/settings.js | 42 - ruoyi-ui/src/store/modules/tagsView.js | 228 ---- ruoyi-ui/src/store/modules/user.js | 101 -- ruoyi-ui/src/utils/auth.js | 15 - ruoyi-ui/src/utils/dict/Dict.js | 82 -- ruoyi-ui/src/utils/dict/DictConverter.js | 17 - ruoyi-ui/src/utils/dict/DictData.js | 13 - ruoyi-ui/src/utils/dict/DictMeta.js | 38 - ruoyi-ui/src/utils/dict/DictOptions.js | 51 - ruoyi-ui/src/utils/dict/index.js | 33 - ruoyi-ui/src/utils/errorCode.js | 6 - ruoyi-ui/src/utils/generator/config.js | 438 ------- ruoyi-ui/src/utils/generator/css.js | 18 - .../src/utils/generator/drawingDefault.js | 29 - ruoyi-ui/src/utils/generator/html.js | 359 ------ ruoyi-ui/src/utils/generator/icon.json | 1 - ruoyi-ui/src/utils/generator/js.js | 235 ---- ruoyi-ui/src/utils/generator/render.js | 126 -- ruoyi-ui/src/utils/index.js | 390 ------ ruoyi-ui/src/utils/jsencrypt.js | 30 - ruoyi-ui/src/utils/permission.js | 47 - ruoyi-ui/src/utils/request.js | 152 --- ruoyi-ui/src/utils/ruoyi.js | 233 ---- ruoyi-ui/src/utils/scroll-to.js | 58 - ruoyi-ui/src/utils/validate.js | 80 -- ruoyi-ui/src/views/dashboard/BarChart.vue | 102 -- ruoyi-ui/src/views/dashboard/LineChart.vue | 135 --- ruoyi-ui/src/views/dashboard/PanelGroup.vue | 181 --- ruoyi-ui/src/views/dashboard/PieChart.vue | 79 -- ruoyi-ui/src/views/dashboard/RaddarChart.vue | 116 -- ruoyi-ui/src/views/dashboard/mixins/resize.js | 56 - ruoyi-ui/src/views/error/401.vue | 88 -- ruoyi-ui/src/views/error/404.vue | 233 ---- ruoyi-ui/src/views/index.vue | 1067 ----------------- ruoyi-ui/src/views/index_v1.vue | 98 -- ruoyi-ui/src/views/login.vue | 219 ---- ruoyi-ui/src/views/monitor/cache/index.vue | 148 --- ruoyi-ui/src/views/monitor/cache/list.vue | 241 ---- ruoyi-ui/src/views/monitor/druid/index.vue | 15 - ruoyi-ui/src/views/monitor/job/index.vue | 513 -------- ruoyi-ui/src/views/monitor/job/log.vue | 295 ----- .../src/views/monitor/logininfor/index.vue | 246 ---- ruoyi-ui/src/views/monitor/online/index.vue | 122 -- ruoyi-ui/src/views/monitor/operlog/index.vue | 323 ----- ruoyi-ui/src/views/monitor/server/index.vue | 207 ---- ruoyi-ui/src/views/redirect.vue | 12 - ruoyi-ui/src/views/register.vue | 210 ---- ruoyi-ui/src/views/system/config/index.vue | 343 ------ ruoyi-ui/src/views/system/dept/index.vue | 340 ------ ruoyi-ui/src/views/system/dict/data.vue | 402 ------- ruoyi-ui/src/views/system/dict/index.vue | 347 ------ ruoyi-ui/src/views/system/menu/index.vue | 452 ------- ruoyi-ui/src/views/system/notice/index.vue | 312 ----- ruoyi-ui/src/views/system/post/index.vue | 309 ----- ruoyi-ui/src/views/system/role/authUser.vue | 199 --- ruoyi-ui/src/views/system/role/index.vue | 605 ---------- ruoyi-ui/src/views/system/role/selectUser.vue | 138 --- ruoyi-ui/src/views/system/user/authRole.vue | 117 -- ruoyi-ui/src/views/system/user/index.vue | 676 ----------- .../src/views/system/user/profile/index.vue | 91 -- .../views/system/user/profile/resetPwd.vue | 69 -- .../views/system/user/profile/userAvatar.vue | 184 --- .../views/system/user/profile/userInfo.vue | 88 -- .../src/views/tool/build/CodeTypeDialog.vue | 106 -- .../src/views/tool/build/DraggableItem.vue | 100 -- ruoyi-ui/src/views/tool/build/IconsDialog.vue | 123 -- ruoyi-ui/src/views/tool/build/RightPanel.vue | 946 --------------- .../src/views/tool/build/TreeNodeDialog.vue | 149 --- ruoyi-ui/src/views/tool/build/index.vue | 768 ------------ ruoyi-ui/src/views/tool/gen/basicInfoForm.vue | 60 - ruoyi-ui/src/views/tool/gen/createTable.vue | 45 - ruoyi-ui/src/views/tool/gen/editTable.vue | 234 ---- ruoyi-ui/src/views/tool/gen/genInfoForm.vue | 312 ----- ruoyi-ui/src/views/tool/gen/importTable.vue | 120 -- ruoyi-ui/src/views/tool/gen/index.vue | 354 ------ ruoyi-ui/src/views/tool/swagger/index.vue | 15 - ruoyi-ui/vue.config.js | 130 -- ry.bat | 67 -- ry.sh | 86 -- sql/quartz.sql | 174 --- sql/ry_20231130.sql | 700 ----------- 537 files changed, 20159 insertions(+), 29828 deletions(-) delete mode 100644 bin/clean.bat delete mode 100644 bin/package.bat delete mode 100644 bin/run.bat delete mode 100644 doc/若依环境使用手册.docx create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/common/entity/BaseInfoEntity.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsApprovalInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBigStrongAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBrandingAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCarrierConstructionAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCreditManagementController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsDeclarationRecordsController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseBasicInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFieldInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFileInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFundingDetailController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIndustrialInternetAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIntegrationIndustriesController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsLogisticsDevelopmentAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsManufacturingServicesAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsOpenInterfaceController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsPlatformConstructionAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProcessInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectSettlementAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsSceneOpeningAwardController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateRecordController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BsmFundingInfoController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsApprovalInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBigStrongAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBrandingAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCarrierConstructionAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCreditManagement.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsDeclarationRecords.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseBasicInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseDirectory.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFieldInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFileInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFundingDetail.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIndustrialInternetAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIntegrationIndustries.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsLogisticsDevelopmentAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsManufacturingServicesAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsPlatformConstructionAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProcessInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectSettlementAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsSceneOpeningAward.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateRecord.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BsmFundingInfo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/AppendixParamDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/ApprovalDeclarationRecordsQueryDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsApprovalInfoUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsEnterpriseBasicInfoAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFieldInfoAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFileInfoAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsMunicipalBureauReviewQueryDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateInfoAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateQueryDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordQueryDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordUpdateDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BsmFundingInfoAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewInfoDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/OpenInterfaceApplyAddDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/UploadDto.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/ApprovalDeclarationRecordsQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsApprovalInfoQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsBigStrongAwardQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsDeclarationRecordsQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsMunicipalBureauReviewQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateInfoQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordQueryVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/DeclarationRecordsVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/EnterpriseInfoTemplateVo.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsApprovalInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBigStrongAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBrandingAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCarrierConstructionAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCreditManagementMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsDeclarationRecordsMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseBasicInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseDirectoryMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFieldInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFileInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFundingDetailMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIndustrialInternetAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIntegrationIndustriesMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsLogisticsDevelopmentAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsManufacturingServicesAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsPlatformConstructionAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProcessInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectSettlementAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsSceneOpeningAwardMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateRecordMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BsmFundingInfoMapper.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsApprovalInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBigStrongAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBrandingAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCarrierConstructionAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCreditManagementService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsDeclarationRecordsService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseBasicInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseDirectoryService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFieldInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFileInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFundingDetailService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIndustrialInternetAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIntegrationIndustriesService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsLogisticsDevelopmentAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsManufacturingServicesAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsPlatformConstructionAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProcessInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectSettlementAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsSceneOpeningAwardService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateRecordService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBsmFundingInfoService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/ICommonService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IOpenInterfaceService.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsApprovalInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBigStrongAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBrandingAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCarrierConstructionAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCreditManagementServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsDeclarationRecordsServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseBasicInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseDirectoryServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFieldInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFileInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFundingDetailServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIndustrialInternetAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIntegrationIndustriesServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsLogisticsDevelopmentAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsManufacturingServicesAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsPlatformConstructionAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProcessInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectSettlementAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsSceneOpeningAwardServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateRecordServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BsmFundingInfoServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/CommonServiceImpl.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/OpenInterfaceServiceImpl.java create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsApprovalInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBigStrongAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBrandingAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCarrierConstructionAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCreditManagementMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsDeclarationRecordsMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseBasicInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseDirectoryMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFieldInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFileInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFundingDetailMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIndustrialInternetAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIntegrationIndustriesMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsLogisticsDevelopmentAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsManufacturingServicesAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsPlatformConstructionAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProcessInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectSettlementAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsSceneOpeningAwardMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateInfoMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateRecordMapper.xml create mode 100644 ruoyi-admin/src/main/resources/mapper/jjh/declaration/BsmFundingInfoMapper.xml rename ruoyi-admin/src/main/resources/mapper/jjh/{ => ent}/JMemorandumMapper.xml (100%) rename ruoyi-admin/src/main/resources/mapper/jjh/{ => ent}/JProjectMapper.xml (100%) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/SecurityConstants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/context/SecurityContextHolder.java delete mode 100644 ruoyi-ui/.editorconfig delete mode 100644 ruoyi-ui/.env.development delete mode 100644 ruoyi-ui/.env.production delete mode 100644 ruoyi-ui/.env.staging delete mode 100644 ruoyi-ui/.eslintignore delete mode 100644 ruoyi-ui/.eslintrc.js delete mode 100644 ruoyi-ui/.gitignore delete mode 100644 ruoyi-ui/README.md delete mode 100644 ruoyi-ui/babel.config.js delete mode 100644 ruoyi-ui/bin/build.bat delete mode 100644 ruoyi-ui/bin/package.bat delete mode 100644 ruoyi-ui/bin/run-web.bat delete mode 100644 ruoyi-ui/build/index.js delete mode 100644 ruoyi-ui/package.json delete mode 100644 ruoyi-ui/public/favicon.ico delete mode 100644 ruoyi-ui/public/html/ie.html delete mode 100644 ruoyi-ui/public/index.html delete mode 100644 ruoyi-ui/public/robots.txt delete mode 100644 ruoyi-ui/src/App.vue delete mode 100644 ruoyi-ui/src/api/login.js delete mode 100644 ruoyi-ui/src/api/menu.js delete mode 100644 ruoyi-ui/src/api/monitor/cache.js delete mode 100644 ruoyi-ui/src/api/monitor/job.js delete mode 100644 ruoyi-ui/src/api/monitor/jobLog.js delete mode 100644 ruoyi-ui/src/api/monitor/logininfor.js delete mode 100644 ruoyi-ui/src/api/monitor/online.js delete mode 100644 ruoyi-ui/src/api/monitor/operlog.js delete mode 100644 ruoyi-ui/src/api/monitor/server.js delete mode 100644 ruoyi-ui/src/api/system/config.js delete mode 100644 ruoyi-ui/src/api/system/dept.js delete mode 100644 ruoyi-ui/src/api/system/dict/data.js delete mode 100644 ruoyi-ui/src/api/system/dict/type.js delete mode 100644 ruoyi-ui/src/api/system/menu.js delete mode 100644 ruoyi-ui/src/api/system/notice.js delete mode 100644 ruoyi-ui/src/api/system/post.js delete mode 100644 ruoyi-ui/src/api/system/role.js delete mode 100644 ruoyi-ui/src/api/system/user.js delete mode 100644 ruoyi-ui/src/api/tool/gen.js delete mode 100644 ruoyi-ui/src/assets/401_images/401.gif delete mode 100644 ruoyi-ui/src/assets/404_images/404.png delete mode 100644 ruoyi-ui/src/assets/404_images/404_cloud.png delete mode 100644 ruoyi-ui/src/assets/icons/index.js delete mode 100644 ruoyi-ui/src/assets/icons/svg/404.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/bug.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/build.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/button.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/cascader.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/chart.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/checkbox.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/clipboard.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/code.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/color.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/component.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/dashboard.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/date-range.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/date.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/dict.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/documentation.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/download.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/drag.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/druid.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/edit.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/education.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/email.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/example.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/excel.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/eye-open.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/eye.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/form.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/fullscreen.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/github.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/guide.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/icon.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/input.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/international.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/job.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/language.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/link.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/list.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/lock.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/log.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/logininfor.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/message.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/money.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/monitor.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/nested.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/number.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/online.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/password.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/pdf.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/people.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/peoples.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/phone.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/post.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/qq.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/question.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/radio.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/rate.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/redis-list.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/redis.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/row.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/search.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/select.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/server.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/shopping.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/size.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/skill.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/slider.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/star.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/swagger.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/switch.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/system.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/tab.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/table.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/textarea.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/theme.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/time-range.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/time.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/tool.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/tree-table.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/tree.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/upload.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/user.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/validCode.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/wechat.svg delete mode 100644 ruoyi-ui/src/assets/icons/svg/zip.svg delete mode 100644 ruoyi-ui/src/assets/icons/svgo.yml delete mode 100644 ruoyi-ui/src/assets/images/dark.svg delete mode 100644 ruoyi-ui/src/assets/images/light.svg delete mode 100644 ruoyi-ui/src/assets/images/login-background.jpg delete mode 100644 ruoyi-ui/src/assets/images/pay.png delete mode 100644 ruoyi-ui/src/assets/images/profile.jpg delete mode 100644 ruoyi-ui/src/assets/logo/logo.png delete mode 100644 ruoyi-ui/src/assets/styles/btn.scss delete mode 100644 ruoyi-ui/src/assets/styles/element-ui.scss delete mode 100644 ruoyi-ui/src/assets/styles/element-variables.scss delete mode 100644 ruoyi-ui/src/assets/styles/index.scss delete mode 100644 ruoyi-ui/src/assets/styles/mixin.scss delete mode 100644 ruoyi-ui/src/assets/styles/ruoyi.scss delete mode 100644 ruoyi-ui/src/assets/styles/sidebar.scss delete mode 100644 ruoyi-ui/src/assets/styles/transition.scss delete mode 100644 ruoyi-ui/src/assets/styles/variables.scss delete mode 100644 ruoyi-ui/src/components/Breadcrumb/index.vue delete mode 100644 ruoyi-ui/src/components/Crontab/day.vue delete mode 100644 ruoyi-ui/src/components/Crontab/hour.vue delete mode 100644 ruoyi-ui/src/components/Crontab/index.vue delete mode 100644 ruoyi-ui/src/components/Crontab/min.vue delete mode 100644 ruoyi-ui/src/components/Crontab/month.vue delete mode 100644 ruoyi-ui/src/components/Crontab/result.vue delete mode 100644 ruoyi-ui/src/components/Crontab/second.vue delete mode 100644 ruoyi-ui/src/components/Crontab/week.vue delete mode 100644 ruoyi-ui/src/components/Crontab/year.vue delete mode 100644 ruoyi-ui/src/components/DictData/index.js delete mode 100644 ruoyi-ui/src/components/DictTag/index.vue delete mode 100644 ruoyi-ui/src/components/Editor/index.vue delete mode 100644 ruoyi-ui/src/components/FileUpload/index.vue delete mode 100644 ruoyi-ui/src/components/Hamburger/index.vue delete mode 100644 ruoyi-ui/src/components/HeaderSearch/index.vue delete mode 100644 ruoyi-ui/src/components/IconSelect/index.vue delete mode 100644 ruoyi-ui/src/components/IconSelect/requireIcons.js delete mode 100644 ruoyi-ui/src/components/ImagePreview/index.vue delete mode 100644 ruoyi-ui/src/components/ImageUpload/index.vue delete mode 100644 ruoyi-ui/src/components/Pagination/index.vue delete mode 100644 ruoyi-ui/src/components/PanThumb/index.vue delete mode 100644 ruoyi-ui/src/components/ParentView/index.vue delete mode 100644 ruoyi-ui/src/components/RightPanel/index.vue delete mode 100644 ruoyi-ui/src/components/RightToolbar/index.vue delete mode 100644 ruoyi-ui/src/components/RuoYi/Doc/index.vue delete mode 100644 ruoyi-ui/src/components/RuoYi/Git/index.vue delete mode 100644 ruoyi-ui/src/components/Screenfull/index.vue delete mode 100644 ruoyi-ui/src/components/SizeSelect/index.vue delete mode 100644 ruoyi-ui/src/components/SvgIcon/index.vue delete mode 100644 ruoyi-ui/src/components/ThemePicker/index.vue delete mode 100644 ruoyi-ui/src/components/TopNav/index.vue delete mode 100644 ruoyi-ui/src/components/iFrame/index.vue delete mode 100644 ruoyi-ui/src/directive/dialog/drag.js delete mode 100644 ruoyi-ui/src/directive/dialog/dragHeight.js delete mode 100644 ruoyi-ui/src/directive/dialog/dragWidth.js delete mode 100644 ruoyi-ui/src/directive/index.js delete mode 100644 ruoyi-ui/src/directive/module/clipboard.js delete mode 100644 ruoyi-ui/src/directive/permission/hasPermi.js delete mode 100644 ruoyi-ui/src/directive/permission/hasRole.js delete mode 100644 ruoyi-ui/src/layout/components/AppMain.vue delete mode 100644 ruoyi-ui/src/layout/components/IframeToggle/index.vue delete mode 100644 ruoyi-ui/src/layout/components/InnerLink/index.vue delete mode 100644 ruoyi-ui/src/layout/components/Navbar.vue delete mode 100644 ruoyi-ui/src/layout/components/Settings/index.vue delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/Item.vue delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/Link.vue delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/Logo.vue delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue delete mode 100644 ruoyi-ui/src/layout/components/Sidebar/index.vue delete mode 100644 ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue delete mode 100644 ruoyi-ui/src/layout/components/TagsView/index.vue delete mode 100644 ruoyi-ui/src/layout/components/index.js delete mode 100644 ruoyi-ui/src/layout/index.vue delete mode 100644 ruoyi-ui/src/layout/mixin/ResizeHandler.js delete mode 100644 ruoyi-ui/src/main.js delete mode 100644 ruoyi-ui/src/permission.js delete mode 100644 ruoyi-ui/src/plugins/auth.js delete mode 100644 ruoyi-ui/src/plugins/cache.js delete mode 100644 ruoyi-ui/src/plugins/download.js delete mode 100644 ruoyi-ui/src/plugins/index.js delete mode 100644 ruoyi-ui/src/plugins/modal.js delete mode 100644 ruoyi-ui/src/plugins/tab.js delete mode 100644 ruoyi-ui/src/router/index.js delete mode 100644 ruoyi-ui/src/settings.js delete mode 100644 ruoyi-ui/src/store/getters.js delete mode 100644 ruoyi-ui/src/store/index.js delete mode 100644 ruoyi-ui/src/store/modules/app.js delete mode 100644 ruoyi-ui/src/store/modules/dict.js delete mode 100644 ruoyi-ui/src/store/modules/permission.js delete mode 100644 ruoyi-ui/src/store/modules/settings.js delete mode 100644 ruoyi-ui/src/store/modules/tagsView.js delete mode 100644 ruoyi-ui/src/store/modules/user.js delete mode 100644 ruoyi-ui/src/utils/auth.js delete mode 100644 ruoyi-ui/src/utils/dict/Dict.js delete mode 100644 ruoyi-ui/src/utils/dict/DictConverter.js delete mode 100644 ruoyi-ui/src/utils/dict/DictData.js delete mode 100644 ruoyi-ui/src/utils/dict/DictMeta.js delete mode 100644 ruoyi-ui/src/utils/dict/DictOptions.js delete mode 100644 ruoyi-ui/src/utils/dict/index.js delete mode 100644 ruoyi-ui/src/utils/errorCode.js delete mode 100644 ruoyi-ui/src/utils/generator/config.js delete mode 100644 ruoyi-ui/src/utils/generator/css.js delete mode 100644 ruoyi-ui/src/utils/generator/drawingDefault.js delete mode 100644 ruoyi-ui/src/utils/generator/html.js delete mode 100644 ruoyi-ui/src/utils/generator/icon.json delete mode 100644 ruoyi-ui/src/utils/generator/js.js delete mode 100644 ruoyi-ui/src/utils/generator/render.js delete mode 100644 ruoyi-ui/src/utils/index.js delete mode 100644 ruoyi-ui/src/utils/jsencrypt.js delete mode 100644 ruoyi-ui/src/utils/permission.js delete mode 100644 ruoyi-ui/src/utils/request.js delete mode 100644 ruoyi-ui/src/utils/ruoyi.js delete mode 100644 ruoyi-ui/src/utils/scroll-to.js delete mode 100644 ruoyi-ui/src/utils/validate.js delete mode 100644 ruoyi-ui/src/views/dashboard/BarChart.vue delete mode 100644 ruoyi-ui/src/views/dashboard/LineChart.vue delete mode 100644 ruoyi-ui/src/views/dashboard/PanelGroup.vue delete mode 100644 ruoyi-ui/src/views/dashboard/PieChart.vue delete mode 100644 ruoyi-ui/src/views/dashboard/RaddarChart.vue delete mode 100644 ruoyi-ui/src/views/dashboard/mixins/resize.js delete mode 100644 ruoyi-ui/src/views/error/401.vue delete mode 100644 ruoyi-ui/src/views/error/404.vue delete mode 100644 ruoyi-ui/src/views/index.vue delete mode 100644 ruoyi-ui/src/views/index_v1.vue delete mode 100644 ruoyi-ui/src/views/login.vue delete mode 100644 ruoyi-ui/src/views/monitor/cache/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/cache/list.vue delete mode 100644 ruoyi-ui/src/views/monitor/druid/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/job/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/job/log.vue delete mode 100644 ruoyi-ui/src/views/monitor/logininfor/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/online/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/operlog/index.vue delete mode 100644 ruoyi-ui/src/views/monitor/server/index.vue delete mode 100644 ruoyi-ui/src/views/redirect.vue delete mode 100644 ruoyi-ui/src/views/register.vue delete mode 100644 ruoyi-ui/src/views/system/config/index.vue delete mode 100644 ruoyi-ui/src/views/system/dept/index.vue delete mode 100644 ruoyi-ui/src/views/system/dict/data.vue delete mode 100644 ruoyi-ui/src/views/system/dict/index.vue delete mode 100644 ruoyi-ui/src/views/system/menu/index.vue delete mode 100644 ruoyi-ui/src/views/system/notice/index.vue delete mode 100644 ruoyi-ui/src/views/system/post/index.vue delete mode 100644 ruoyi-ui/src/views/system/role/authUser.vue delete mode 100644 ruoyi-ui/src/views/system/role/index.vue delete mode 100644 ruoyi-ui/src/views/system/role/selectUser.vue delete mode 100644 ruoyi-ui/src/views/system/user/authRole.vue delete mode 100644 ruoyi-ui/src/views/system/user/index.vue delete mode 100644 ruoyi-ui/src/views/system/user/profile/index.vue delete mode 100644 ruoyi-ui/src/views/system/user/profile/resetPwd.vue delete mode 100644 ruoyi-ui/src/views/system/user/profile/userAvatar.vue delete mode 100644 ruoyi-ui/src/views/system/user/profile/userInfo.vue delete mode 100644 ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue delete mode 100644 ruoyi-ui/src/views/tool/build/DraggableItem.vue delete mode 100644 ruoyi-ui/src/views/tool/build/IconsDialog.vue delete mode 100644 ruoyi-ui/src/views/tool/build/RightPanel.vue delete mode 100644 ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue delete mode 100644 ruoyi-ui/src/views/tool/build/index.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/basicInfoForm.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/createTable.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/editTable.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/genInfoForm.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/importTable.vue delete mode 100644 ruoyi-ui/src/views/tool/gen/index.vue delete mode 100644 ruoyi-ui/src/views/tool/swagger/index.vue delete mode 100644 ruoyi-ui/vue.config.js delete mode 100644 ry.bat delete mode 100644 ry.sh delete mode 100644 sql/quartz.sql delete mode 100644 sql/ry_20231130.sql diff --git a/bin/clean.bat b/bin/clean.bat deleted file mode 100644 index 24c0974..0000000 --- a/bin/clean.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ��������target����·���� -echo. - -%~d0 -cd %~dp0 - -cd .. -call mvn clean - -pause \ No newline at end of file diff --git a/bin/package.bat b/bin/package.bat deleted file mode 100644 index c693ec0..0000000 --- a/bin/package.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ���Web���̣�����war/jar���ļ��� -echo. - -%~d0 -cd %~dp0 - -cd .. -call mvn clean package -Dmaven.test.skip=true - -pause \ No newline at end of file diff --git a/bin/run.bat b/bin/run.bat deleted file mode 100644 index 41efbd0..0000000 --- a/bin/run.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ʹ��Jar��������Web���̡� -echo. - -cd %~dp0 -cd ../ruoyi-admin/target - -set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m - -java -jar %JAVA_OPTS% ruoyi-admin.jar - -cd bin -pause \ No newline at end of file diff --git a/doc/若依环境使用手册.docx b/doc/若依环境使用手册.docx deleted file mode 100644 index 9e4daef4d9be2e445419109a02eaf321cd4d537e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428430 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	Rli)_iWGz7fMupr%QDEgRC> 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%0DfC-!Au^<Q0%m`XEL@1Ys{j@tA=_=Uom8^EHjQ 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 z∾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%0D$0i4SN));n7RdVpw~ze$@w6B*k7 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 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/common/entity/BaseInfoEntity.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/common/entity/BaseInfoEntity.java new file mode 100644 index 0000000..3dde8cb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/common/entity/BaseInfoEntity.java @@ -0,0 +1,52 @@ +package com.ruoyi.jjh.common.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * Entity基类 + * + * @author ruoyi + */ +@Data +public class BaseInfoEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.UPDATE) + private Date updateTime; + + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsApprovalInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsApprovalInfoController.java new file mode 100644 index 0000000..64867d9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsApprovalInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.service.IBmsApprovalInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 审批记录信息Controller + * + * @author farben + * @date 2023-09-09 + */ +@RestController +@RequestMapping("/approvalInfo") +public class BmsApprovalInfoController extends BaseController { + @Autowired + private IBmsApprovalInfoService bmsApprovalInfoService; + + /** + * 查询审批记录信息列表 + */ +// @RequiresPermissions("system:approvalInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsApprovalInfo bmsApprovalInfo) { + startPage(); + List<BmsApprovalInfo> list = bmsApprovalInfoService.selectBmsApprovalInfoList(bmsApprovalInfo); + return getDataTable(list); + } + + /** + * 导出审批记录信息列表 + */ +// @RequiresPermissions("system:approvalInfo:export") + @Log(title = "审批记录信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsApprovalInfo bmsApprovalInfo) { + List<BmsApprovalInfo> list = bmsApprovalInfoService.selectBmsApprovalInfoList(bmsApprovalInfo); + ExcelUtil<BmsApprovalInfo> util = new ExcelUtil<BmsApprovalInfo>(BmsApprovalInfo.class); + util.exportExcel(response, list, "审批记录信息数据"); + } + + /** + * 获取审批记录信息详细信息 + */ +// @RequiresPermissions("system:approvalInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsApprovalInfoService.selectBmsApprovalInfoById(id)); + } + + /** + * 新增审批记录信息 + */ +// @RequiresPermissions("system:approvalInfo:add") + @Log(title = "审批记录信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsApprovalInfo bmsApprovalInfo) { + return toAjax(bmsApprovalInfoService.insertBmsApprovalInfo(bmsApprovalInfo)); + } + + /** + * 修改审批记录信息 + */ +// @RequiresPermissions("system:approvalInfo:edit") + @Log(title = "审批记录信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsApprovalInfo bmsApprovalInfo) { + return toAjax(bmsApprovalInfoService.updateBmsApprovalInfo(bmsApprovalInfo)); + } + + /** + * 删除审批记录信息 + */ +// @RequiresPermissions("system:approvalInfo:remove") + @Log(title = "审批记录信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsApprovalInfoService.deleteBmsApprovalInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBigStrongAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBigStrongAwardController.java new file mode 100644 index 0000000..170f57f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBigStrongAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsBigStrongAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 做大做强奖详情Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/bigStrongAward") +public class BmsBigStrongAwardController extends BaseController { + @Autowired + private IBmsBigStrongAwardService bmsBigStrongAwardService; + + /** + * 查询做大做强奖详情列表 + */ +// @RequiresPermissions("system:bigStrongAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsBigStrongAward bmsBigStrongAward) { + startPage(); + List<BmsBigStrongAward> list = bmsBigStrongAwardService.selectBmsBigStrongAwardList(bmsBigStrongAward); + return getDataTable(list); + } + + /** + * 导出做大做强奖详情列表 + */ +// @RequiresPermissions("system:bigStrongAward:export") + @Log(title = "做大做强奖详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsBigStrongAward bmsBigStrongAward) { + List<BmsBigStrongAward> list = bmsBigStrongAwardService.selectBmsBigStrongAwardList(bmsBigStrongAward); + ExcelUtil<BmsBigStrongAward> util = new ExcelUtil<BmsBigStrongAward>(BmsBigStrongAward.class); + util.exportExcel(response, list, "做大做强奖详情数据"); + } + + /** + * 获取做大做强奖详情详细信息 + */ +// @RequiresPermissions("system:bigStrongAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsBigStrongAwardService.selectBmsBigStrongAwardById(id)); + } + + /** + * 新增做大做强奖详情 + */ +// @RequiresPermissions("system:bigStrongAward:add") + @Log(title = "做大做强奖详情", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsBigStrongAwardAddDto bmsBigStrongAwardAddDto) { + return toAjax(bmsBigStrongAwardService.insertBmsBigStrongAward(bmsBigStrongAwardAddDto)); + } + + /** + * 修改做大做强奖详情 + */ +// @RequiresPermissions("system:bigStrongAward:edit") + @Log(title = "做大做强奖详情", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsBigStrongAwardUpdateDto bmsBigStrongAwardUpdateDto) { + return toAjax(bmsBigStrongAwardService.updateBmsBigStrongAward(bmsBigStrongAwardUpdateDto)); + } + + /** + * 删除做大做强奖详情 + */ +// @RequiresPermissions("system:bigStrongAward:remove") + @Log(title = "做大做强奖详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsBigStrongAwardService.deleteBmsBigStrongAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBrandingAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBrandingAwardController.java new file mode 100644 index 0000000..8169e70 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsBrandingAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsBrandingAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 品牌打造奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/brandingAward") +public class BmsBrandingAwardController extends BaseController { + @Autowired + private IBmsBrandingAwardService bmsBrandingAwardService; + + /** + * 查询品牌打造奖补列表 + */ +// @RequiresPermissions("system:brandingAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsBrandingAward bmsBrandingAward) { + startPage(); + List<BmsBrandingAward> list = bmsBrandingAwardService.selectBmsBrandingAwardList(bmsBrandingAward); + return getDataTable(list); + } + + /** + * 导出品牌打造奖补列表 + */ +// @RequiresPermissions("system:brandingAward:export") + @Log(title = "品牌打造奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsBrandingAward bmsBrandingAward) { + List<BmsBrandingAward> list = bmsBrandingAwardService.selectBmsBrandingAwardList(bmsBrandingAward); + ExcelUtil<BmsBrandingAward> util = new ExcelUtil<BmsBrandingAward>(BmsBrandingAward.class); + util.exportExcel(response, list, "品牌打造奖补数据"); + } + + /** + * 获取品牌打造奖补详细信息 + */ +// @RequiresPermissions("system:brandingAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsBrandingAwardService.selectBmsBrandingAwardById(id)); + } + + /** + * 新增品牌打造奖补 + */ +// @RequiresPermissions("system:brandingAward:add") + @Log(title = "品牌打造奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsBrandingAwardAddDto bmsBrandingAwardAddDto) { + return toAjax(bmsBrandingAwardService.insertBmsBrandingAward(bmsBrandingAwardAddDto)); + } + + /** + * 修改品牌打造奖补 + */ +// @RequiresPermissions("system:brandingAward:edit") + @Log(title = "品牌打造奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsBrandingAwardUpdateDto bmsBrandingAwardUpdateDto) { + return toAjax(bmsBrandingAwardService.updateBmsBrandingAward(bmsBrandingAwardUpdateDto)); + } + + /** + * 删除品牌打造奖补 + */ +// @RequiresPermissions("system:brandingAward:remove") + @Log(title = "品牌打造奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsBrandingAwardService.deleteBmsBrandingAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCarrierConstructionAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCarrierConstructionAwardController.java new file mode 100644 index 0000000..f87c700 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCarrierConstructionAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsCarrierConstructionAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 载体建设奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/carrierConstructionAward") +public class BmsCarrierConstructionAwardController extends BaseController { + @Autowired + private IBmsCarrierConstructionAwardService bmsCarrierConstructionAwardService; + + /** + * 查询载体建设奖补列表 + */ +// @RequiresPermissions("system:carrierConstructionAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsCarrierConstructionAward bmsCarrierConstructionAward) { + startPage(); + List<BmsCarrierConstructionAward> list = bmsCarrierConstructionAwardService.selectBmsCarrierConstructionAwardList(bmsCarrierConstructionAward); + return getDataTable(list); + } + + /** + * 导出载体建设奖补列表 + */ +// @RequiresPermissions("system:carrierConstructionAward:export") + @Log(title = "载体建设奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsCarrierConstructionAward bmsCarrierConstructionAward) { + List<BmsCarrierConstructionAward> list = bmsCarrierConstructionAwardService.selectBmsCarrierConstructionAwardList(bmsCarrierConstructionAward); + ExcelUtil<BmsCarrierConstructionAward> util = new ExcelUtil<BmsCarrierConstructionAward>(BmsCarrierConstructionAward.class); + util.exportExcel(response, list, "载体建设奖补数据"); + } + + /** + * 获取载体建设奖补详细信息 + */ +// @RequiresPermissions("system:carrierConstructionAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsCarrierConstructionAwardService.selectBmsCarrierConstructionAwardById(id)); + } + + /** + * 新增载体建设奖补 + */ +// @RequiresPermissions("system:carrierConstructionAward:add") + @Log(title = "载体建设奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsCarrierConstructionAwardAddDto bmsCarrierConstructionAwardAddDto) { + return toAjax(bmsCarrierConstructionAwardService.insertBmsCarrierConstructionAward(bmsCarrierConstructionAwardAddDto)); + } + + /** + * 修改载体建设奖补 + */ +// @RequiresPermissions("system:carrierConstructionAward:edit") + @Log(title = "载体建设奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsCarrierConstructionAwardUpdateDto bmsCarrierConstructionAwardUpdateDto) { + return toAjax(bmsCarrierConstructionAwardService.updateBmsCarrierConstructionAward(bmsCarrierConstructionAwardUpdateDto)); + } + + /** + * 删除载体建设奖补 + */ +// @RequiresPermissions("system:carrierConstructionAward:remove") + @Log(title = "载体建设奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsCarrierConstructionAwardService.deleteBmsCarrierConstructionAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCreditManagementController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCreditManagementController.java new file mode 100644 index 0000000..11c6608 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsCreditManagementController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsCreditManagementService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 信用管理奖补Controller + * + * @author farben + * @date 2023-09-04 + */ +@RestController +@RequestMapping("/creditManagement") +public class BmsCreditManagementController extends BaseController { + @Autowired + private IBmsCreditManagementService bmsCreditManagementService; + + /** + * 查询信用管理奖补列表 + */ +// @RequiresPermissions("system:creditManagement:list") + @GetMapping("/list") + public TableDataInfo list(BmsCreditManagement bmsCreditManagement) { + startPage(); + List<BmsCreditManagement> list = bmsCreditManagementService.selectBmsCreditManagementList(bmsCreditManagement); + return getDataTable(list); + } + + /** + * 导出信用管理奖补列表 + */ +// @RequiresPermissions("system:creditManagement:export") + @Log(title = "信用管理奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsCreditManagement bmsCreditManagement) { + List<BmsCreditManagement> list = bmsCreditManagementService.selectBmsCreditManagementList(bmsCreditManagement); + ExcelUtil<BmsCreditManagement> util = new ExcelUtil<BmsCreditManagement>(BmsCreditManagement.class); + util.exportExcel(response, list, "信用管理奖补数据"); + } + + /** + * 获取信用管理奖补详细信息 + */ +// @RequiresPermissions("system:creditManagement:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsCreditManagementService.selectBmsCreditManagementById(id)); + } + + /** + * 新增信用管理奖补 + */ +// @RequiresPermissions("system:creditManagement:add") + @Log(title = "信用管理奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsCreditManagementAddDto bmsCreditManagementAddDto) { + return toAjax(bmsCreditManagementService.insertBmsCreditManagement(bmsCreditManagementAddDto)); + } + + /** + * 修改信用管理奖补 + */ +// @RequiresPermissions("system:creditManagement:edit") + @Log(title = "信用管理奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsCreditManagementUpdateDto bmsCreditManagementUpdateDto) { + return toAjax(bmsCreditManagementService.updateBmsCreditManagement(bmsCreditManagementUpdateDto)); + } + + /** + * 删除信用管理奖补 + */ +// @RequiresPermissions("system:creditManagement:remove") + @Log(title = "信用管理奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsCreditManagementService.deleteBmsCreditManagementByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsDeclarationRecordsController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsDeclarationRecordsController.java new file mode 100644 index 0000000..1ccbc1d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsDeclarationRecordsController.java @@ -0,0 +1,160 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.ApprovalDeclarationRecordsQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsApprovalInfoUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsDto; +import com.ruoyi.jjh.declaration.entity.dto.MunicipalReviewDto; +import com.ruoyi.jjh.declaration.entity.vo.ApprovalDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsMunicipalBureauReviewQueryVo; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 在线申报记录Controller + * + * @author farben + * @date 2023-08-28 + */ +@RestController +@RequestMapping("/declarationRecords") +public class BmsDeclarationRecordsController extends BaseController { + @Autowired + private IBmsDeclarationRecordsService bmsDeclarationRecordsService; + + + /** + * 审核列表 + * + * @param approvalDeclarationRecordsQueryDto + * @return {@link TableDataInfo} + * @author emiya.xie + * @create 2023/9/9 14:41 + */ + @GetMapping("/approvalList") + public TableDataInfo approvalList(ApprovalDeclarationRecordsQueryDto approvalDeclarationRecordsQueryDto) { + startPage(); + List<ApprovalDeclarationRecordsQueryVo> list = bmsDeclarationRecordsService.approvalList(approvalDeclarationRecordsQueryDto); + return getDataTable(list); + } + + @Log(title = "审批记录信息", businessType = BusinessType.UPDATE) + @PutMapping("/approvalEdit") + public AjaxResult approvalEdit(@RequestBody BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto) { + return toAjax(bmsDeclarationRecordsService.updateApprovalInfo(bmsApprovalInfoUpdateDto)); + } + + /** + * 查询在线申报记录列表 + */ +// @RequiresPermissions("system:declarationRecords:list") + @GetMapping("/list") + public TableDataInfo list(BmsDeclarationRecordsDto bmsDeclarationRecordsDto) { + startPage(); + List<BmsDeclarationRecordsQueryVo> list = bmsDeclarationRecordsService.selectBmsDeclarationRecordsList(bmsDeclarationRecordsDto); + return getDataTable(list); + } + + /** + * 查询在线申报记录列表-政务 + */ + @GetMapping("/listRecords") + public TableDataInfo listRecords(BmsDeclarationRecordsDto bmsDeclarationRecordsDto) { + startPage(); + List<BmsDeclarationRecordsQueryVo> list = bmsDeclarationRecordsService.selectBmsDeclarationRecordsZwList(bmsDeclarationRecordsDto); + return getDataTable(list); + } + + @Log(title = "下载市局审核申报记录", businessType = BusinessType.EXPORT) + @PostMapping("/exportMunicipalBureauReview") + public void export(HttpServletResponse response) { + List<BmsMunicipalBureauReviewQueryVo> list = bmsDeclarationRecordsService.selectMunicipalBureauReviewList(); + ExcelUtil<BmsMunicipalBureauReviewQueryVo> util = new ExcelUtil<BmsMunicipalBureauReviewQueryVo>(BmsMunicipalBureauReviewQueryVo.class); + util.exportExcel(response, list, "在线申报记录数据"); + } + + + /** + * 导出在线申报记录列表 + */ +// @RequiresPermissions("system:declarationRecords:export") + @Log(title = "在线申报记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsDeclarationRecordsDto bmsDeclarationRecordsDto) { + List<BmsDeclarationRecordsQueryVo> list = bmsDeclarationRecordsService.selectBmsDeclarationRecordsList(bmsDeclarationRecordsDto); + ExcelUtil<BmsDeclarationRecordsQueryVo> util = new ExcelUtil<BmsDeclarationRecordsQueryVo>(BmsDeclarationRecordsQueryVo.class); + util.exportExcel(response, list, "在线申报记录数据"); + } + + /** + * 获取在线申报记录详细信息 + */ +// @RequiresPermissions("system:declarationRecords:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsDeclarationRecordsService.selectBmsDeclarationRecordsById(id)); + } + + /** + * 新增在线申报记录 + */ +// @RequiresPermissions("system:declarationRecords:add") + @Log(title = "在线申报记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsDeclarationRecordsAddDto bmsDeclarationRecordsAddDto) { + return toAjax(bmsDeclarationRecordsService.insertBmsDeclarationRecords(bmsDeclarationRecordsAddDto)); + } + + /** + * 修改在线申报记录 + */ +// @RequiresPermissions("system:declarationRecords:edit") + @Log(title = "在线申报记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsDeclarationRecords bmsDeclarationRecords) { + return toAjax(bmsDeclarationRecordsService.updateBmsDeclarationRecords(bmsDeclarationRecords)); + } + + @Log(title = "市级评定结果确认-old", businessType = BusinessType.UPDATE) + @PutMapping("/municipalReview") + @Deprecated + public AjaxResult municipalReview(@RequestBody MunicipalReviewDto municipalReviewDto) { + return success("市级评定结果确认成功" + bmsDeclarationRecordsService.municipalReview(municipalReviewDto) + "条数据"); + } + + @Log(title = "市级评定结果确认-new", businessType = BusinessType.UPDATE) + @PutMapping("/municipalReviewNew") + public AjaxResult municipalReviewNew(@RequestBody MunicipalReviewDto municipalReviewDto) { + return success("市级评定结果确认成功" + bmsDeclarationRecordsService.municipalReviewNew(municipalReviewDto) + "条数据"); + } + + + /** + * 删除在线申报记录 + */ +// @RequiresPermissions("system:declarationRecords:remove") + @Log(title = "在线申报记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsDeclarationRecordsService.deleteBmsDeclarationRecordsByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseBasicInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseBasicInfoController.java new file mode 100644 index 0000000..34012f7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseBasicInfoController.java @@ -0,0 +1,98 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 企业基础信息Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/enterpriseBasicInfo") +public class BmsEnterpriseBasicInfoController extends BaseController { + + @Autowired + private IBmsEnterpriseBasicInfoService bmsEnterpriseBasicInfoService; + + /** + * 查询企业基础信息列表 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + startPage(); + List<BmsEnterpriseBasicInfo> list = bmsEnterpriseBasicInfoService.selectBmsEnterpriseBasicInfoList(bmsEnterpriseBasicInfo); + return getDataTable(list); + } + + /** + * 导出企业基础信息列表 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:export") + @Log(title = "企业基础信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + List<BmsEnterpriseBasicInfo> list = bmsEnterpriseBasicInfoService.selectBmsEnterpriseBasicInfoList(bmsEnterpriseBasicInfo); + ExcelUtil<BmsEnterpriseBasicInfo> util = new ExcelUtil<BmsEnterpriseBasicInfo>(BmsEnterpriseBasicInfo.class); + util.exportExcel(response, list, "企业基础信息数据"); + } + + /** + * 获取企业基础信息详细信息 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsEnterpriseBasicInfoService.selectBmsEnterpriseBasicInfoById(id)); + } + + /** + * 新增企业基础信息 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:add") + @Log(title = "企业基础信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + return toAjax(bmsEnterpriseBasicInfoService.insertBmsEnterpriseBasicInfo(bmsEnterpriseBasicInfo)); + } + + /** + * 修改企业基础信息 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:edit") + @Log(title = "企业基础信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + return toAjax(bmsEnterpriseBasicInfoService.updateBmsEnterpriseBasicInfo(bmsEnterpriseBasicInfo)); + } + + /** + * 删除企业基础信息 + */ +// @RequiresPermissions("system:enterpriseBasicInfo:remove") + @Log(title = "企业基础信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsEnterpriseBasicInfoService.deleteBmsEnterpriseBasicInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java new file mode 100644 index 0000000..81cb583 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsEnterpriseDirectoryController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 企业名录Controller + * + * @author farben + * @date 2023-08-31 + */ +@RestController +@RequestMapping("/enterpriseDirectory") +public class BmsEnterpriseDirectoryController extends BaseController { + @Autowired + private IBmsEnterpriseDirectoryService bmsEnterpriseDirectoryService; + + /** + * 查询企业名录列表 + */ +// @RequiresPermissions("system:enterpriseDirectory:list") + @GetMapping("/list") + public TableDataInfo list(BmsEnterpriseDirectory bmsEnterpriseDirectory) { + startPage(); + List<BmsEnterpriseDirectory> list = bmsEnterpriseDirectoryService.selectBmsEnterpriseDirectoryList(bmsEnterpriseDirectory); + return getDataTable(list); + } + + /** + * 导出企业名录列表 + */ +// @RequiresPermissions("system:enterpriseDirectory:export") + @Log(title = "企业名录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsEnterpriseDirectory bmsEnterpriseDirectory) { + List<BmsEnterpriseDirectory> list = bmsEnterpriseDirectoryService.selectBmsEnterpriseDirectoryList(bmsEnterpriseDirectory); + ExcelUtil<BmsEnterpriseDirectory> util = new ExcelUtil<BmsEnterpriseDirectory>(BmsEnterpriseDirectory.class); + util.exportExcel(response, list, "企业名录数据"); + } + + /** + * 获取企业名录详细信息 + */ +// @RequiresPermissions("system:enterpriseDirectory:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsEnterpriseDirectoryService.selectBmsEnterpriseDirectoryById(id)); + } + + /** + * 新增企业名录 + */ +// @RequiresPermissions("system:enterpriseDirectory:add") + @Log(title = "企业名录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsEnterpriseDirectory bmsEnterpriseDirectory) { + return toAjax(bmsEnterpriseDirectoryService.insertBmsEnterpriseDirectory(bmsEnterpriseDirectory)); + } + + /** + * 修改企业名录 + */ +// @RequiresPermissions("system:enterpriseDirectory:edit") + @Log(title = "企业名录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsEnterpriseDirectory bmsEnterpriseDirectory) { + return toAjax(bmsEnterpriseDirectoryService.updateBmsEnterpriseDirectory(bmsEnterpriseDirectory)); + } + + /** + * 删除企业名录 + */ +// @RequiresPermissions("system:enterpriseDirectory:remove") + @Log(title = "企业名录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsEnterpriseDirectoryService.deleteBmsEnterpriseDirectoryByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFieldInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFieldInfoController.java new file mode 100644 index 0000000..575079a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFieldInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsFieldInfo; +import com.ruoyi.jjh.declaration.service.IBmsFieldInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 模板字段填写详情Controller + * + * @author farben + * @date 2023-09-04 + */ +@RestController +@RequestMapping("/fieldInfo") +public class BmsFieldInfoController extends BaseController { + @Autowired + private IBmsFieldInfoService bmsFieldInfoService; + + /** + * 查询模板字段填写详情列表 + */ +// @RequiresPermissions("system:fieldInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsFieldInfo bmsFieldInfo) { + startPage(); + List<BmsFieldInfo> list = bmsFieldInfoService.selectBmsFieldInfoList(bmsFieldInfo); + return getDataTable(list); + } + + /** + * 导出模板字段填写详情列表 + */ +// @RequiresPermissions("system:fieldInfo:export") + @Log(title = "模板字段填写详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsFieldInfo bmsFieldInfo) { + List<BmsFieldInfo> list = bmsFieldInfoService.selectBmsFieldInfoList(bmsFieldInfo); + ExcelUtil<BmsFieldInfo> util = new ExcelUtil<BmsFieldInfo>(BmsFieldInfo.class); + util.exportExcel(response, list, "模板字段填写详情数据"); + } + + /** + * 获取模板字段填写详情详细信息 + */ +// @RequiresPermissions("system:fieldInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsFieldInfoService.selectBmsFieldInfoById(id)); + } + + /** + * 新增模板字段填写详情 + */ +// @RequiresPermissions("system:fieldInfo:add") + @Log(title = "模板字段填写详情", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsFieldInfo bmsFieldInfo) { + return toAjax(bmsFieldInfoService.insertBmsFieldInfo(bmsFieldInfo)); + } + + /** + * 修改模板字段填写详情 + */ +// @RequiresPermissions("system:fieldInfo:edit") + @Log(title = "模板字段填写详情", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsFieldInfo bmsFieldInfo) { + return toAjax(bmsFieldInfoService.updateBmsFieldInfo(bmsFieldInfo)); + } + + /** + * 删除模板字段填写详情 + */ +// @RequiresPermissions("system:fieldInfo:remove") + @Log(title = "模板字段填写详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsFieldInfoService.deleteBmsFieldInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFileInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFileInfoController.java new file mode 100644 index 0000000..ce9c182 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFileInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsFileInfo; +import com.ruoyi.jjh.declaration.service.IBmsFileInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 文件存储说明详情Controller + * + * @author farben + * @date 2023-09-04 + */ +@RestController +@RequestMapping("/fileInfo") +public class BmsFileInfoController extends BaseController { + @Autowired + private IBmsFileInfoService bmsFileInfoService; + + /** + * 查询文件存储说明详情列表 + */ +// @RequiresPermissions("system:fileInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsFileInfo bmsFileInfo) { + startPage(); + List<BmsFileInfo> list = bmsFileInfoService.selectBmsFileInfoList(bmsFileInfo); + return getDataTable(list); + } + + /** + * 导出文件存储说明详情列表 + */ +// @RequiresPermissions("system:fileInfo:export") + @Log(title = "文件存储说明详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsFileInfo bmsFileInfo) { + List<BmsFileInfo> list = bmsFileInfoService.selectBmsFileInfoList(bmsFileInfo); + ExcelUtil<BmsFileInfo> util = new ExcelUtil<BmsFileInfo>(BmsFileInfo.class); + util.exportExcel(response, list, "文件存储说明详情数据"); + } + + /** + * 获取文件存储说明详情详细信息 + */ +// @RequiresPermissions("system:fileInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsFileInfoService.selectBmsFileInfoById(id)); + } + + /** + * 新增文件存储说明详情 + */ +// @RequiresPermissions("system:fileInfo:add") + @Log(title = "文件存储说明详情", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsFileInfo bmsFileInfo) { + return toAjax(bmsFileInfoService.insertBmsFileInfo(bmsFileInfo)); + } + + /** + * 修改文件存储说明详情 + */ +// @RequiresPermissions("system:fileInfo:edit") + @Log(title = "文件存储说明详情", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsFileInfo bmsFileInfo) { + return toAjax(bmsFileInfoService.updateBmsFileInfo(bmsFileInfo)); + } + + /** + * 删除文件存储说明详情 + */ +// @RequiresPermissions("system:fileInfo:remove") + @Log(title = "文件存储说明详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsFileInfoService.deleteBmsFileInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFundingDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFundingDetailController.java new file mode 100644 index 0000000..0ce76fd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsFundingDetailController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.service.IBmsFundingDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 资金信息详情Controller + * + * @author farben + * @date 2023-09-04 + */ +@RestController +@RequestMapping("/fundingDetail") +public class BmsFundingDetailController extends BaseController { + @Autowired + private IBmsFundingDetailService bmsFundingDetailService; + + /** + * 查询资金信息详情列表 + */ +// @RequiresPermissions("system:fundingDetail:list") + @GetMapping("/list") + public TableDataInfo list(BmsFundingDetail bmsFundingDetail) { + startPage(); + List<BmsFundingDetail> list = bmsFundingDetailService.selectBmsFundingDetailList(bmsFundingDetail); + return getDataTable(list); + } + + /** + * 导出资金信息详情列表 + */ +// @RequiresPermissions("system:fundingDetail:export") + @Log(title = "资金信息详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsFundingDetail bmsFundingDetail) { + List<BmsFundingDetail> list = bmsFundingDetailService.selectBmsFundingDetailList(bmsFundingDetail); + ExcelUtil<BmsFundingDetail> util = new ExcelUtil<BmsFundingDetail>(BmsFundingDetail.class); + util.exportExcel(response, list, "资金信息详情数据"); + } + + /** + * 获取资金信息详情详细信息 + */ +// @RequiresPermissions("system:fundingDetail:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsFundingDetailService.selectBmsFundingDetailById(id)); + } + + /** + * 新增资金信息详情 + */ +// @RequiresPermissions("system:fundingDetail:add") + @Log(title = "资金信息详情", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsFundingDetail bmsFundingDetail) { + return toAjax(bmsFundingDetailService.insertBmsFundingDetail(bmsFundingDetail)); + } + + /** + * 修改资金信息详情 + */ +// @RequiresPermissions("system:fundingDetail:edit") + @Log(title = "资金信息详情", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsFundingDetail bmsFundingDetail) { + return toAjax(bmsFundingDetailService.updateBmsFundingDetail(bmsFundingDetail)); + } + + /** + * 删除资金信息详情 + */ +// @RequiresPermissions("system:fundingDetail:remove") + @Log(title = "资金信息详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsFundingDetailService.deleteBmsFundingDetailByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIndustrialInternetAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIndustrialInternetAwardController.java new file mode 100644 index 0000000..b4aafc8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIndustrialInternetAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsIndustrialInternetAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 5G+工业互联网奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/industrialInternetAward") +public class BmsIndustrialInternetAwardController extends BaseController { + @Autowired + private IBmsIndustrialInternetAwardService bmsIndustrialInternetAwardService; + + /** + * 查询5G+工业互联网奖补列表 + */ +// @RequiresPermissions("system:industrialInternetAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsIndustrialInternetAward bmsIndustrialInternetAward) { + startPage(); + List<BmsIndustrialInternetAward> list = bmsIndustrialInternetAwardService.selectBmsIndustrialInternetAwardList(bmsIndustrialInternetAward); + return getDataTable(list); + } + + /** + * 导出5G+工业互联网奖补列表 + */ +// @RequiresPermissions("system:industrialInternetAward:export") + @Log(title = "5G+工业互联网奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsIndustrialInternetAward bmsIndustrialInternetAward) { + List<BmsIndustrialInternetAward> list = bmsIndustrialInternetAwardService.selectBmsIndustrialInternetAwardList(bmsIndustrialInternetAward); + ExcelUtil<BmsIndustrialInternetAward> util = new ExcelUtil<BmsIndustrialInternetAward>(BmsIndustrialInternetAward.class); + util.exportExcel(response, list, "5G+工业互联网奖补数据"); + } + + /** + * 获取5G+工业互联网奖补详细信息 + */ +// @RequiresPermissions("system:industrialInternetAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsIndustrialInternetAwardService.selectBmsIndustrialInternetAwardById(id)); + } + + /** + * 新增5G+工业互联网奖补 + */ +// @RequiresPermissions("system:industrialInternetAward:add") + @Log(title = "5G+工业互联网奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsIndustrialInternetAwardAddDto bmsIndustrialInternetAwardAddDto) { + return toAjax(bmsIndustrialInternetAwardService.insertBmsIndustrialInternetAward(bmsIndustrialInternetAwardAddDto)); + } + + /** + * 修改5G+工业互联网奖补 + */ +// @RequiresPermissions("system:industrialInternetAward:edit") + @Log(title = "5G+工业互联网奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsIndustrialInternetAwardUpdateDto bmsIndustrialInternetAwardUpdateDto) { + return toAjax(bmsIndustrialInternetAwardService.updateBmsIndustrialInternetAward(bmsIndustrialInternetAwardUpdateDto)); + } + + /** + * 删除5G+工业互联网奖补 + */ +// @RequiresPermissions("system:industrialInternetAward:remove") + @Log(title = "5G+工业互联网奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsIndustrialInternetAwardService.deleteBmsIndustrialInternetAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIntegrationIndustriesController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIntegrationIndustriesController.java new file mode 100644 index 0000000..e7b124e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsIntegrationIndustriesController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsIntegrationIndustriesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 两业融合奖补Controller + * + * @author farben + * @date 2023-09-04 + */ +@RestController +@RequestMapping("/integrationIndustries") +public class BmsIntegrationIndustriesController extends BaseController { + @Autowired + private IBmsIntegrationIndustriesService bmsIntegrationIndustriesService; + + /** + * 查询两业融合奖补列表 + */ +// @RequiresPermissions("system:integrationIndustries:list") + @GetMapping("/list") + public TableDataInfo list(BmsIntegrationIndustries bmsIntegrationIndustries) { + startPage(); + List<BmsIntegrationIndustries> list = bmsIntegrationIndustriesService.selectBmsIntegrationIndustriesList(bmsIntegrationIndustries); + return getDataTable(list); + } + + /** + * 导出两业融合奖补列表 + */ +// @RequiresPermissions("system:integrationIndustries:export") + @Log(title = "两业融合奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsIntegrationIndustries bmsIntegrationIndustries) { + List<BmsIntegrationIndustries> list = bmsIntegrationIndustriesService.selectBmsIntegrationIndustriesList(bmsIntegrationIndustries); + ExcelUtil<BmsIntegrationIndustries> util = new ExcelUtil<BmsIntegrationIndustries>(BmsIntegrationIndustries.class); + util.exportExcel(response, list, "两业融合奖补数据"); + } + + /** + * 获取两业融合奖补详细信息 + */ +// @RequiresPermissions("system:integrationIndustries:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsIntegrationIndustriesService.selectBmsIntegrationIndustriesById(id)); + } + + /** + * 新增两业融合奖补 + */ +// @RequiresPermissions("system:integrationIndustries:add") + @Log(title = "两业融合奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsIntegrationIndustriesAddDto bmsIntegrationIndustriesAddDto) { + return toAjax(bmsIntegrationIndustriesService.insertBmsIntegrationIndustries(bmsIntegrationIndustriesAddDto)); + } + + /** + * 修改两业融合奖补 + */ +// @RequiresPermissions("system:integrationIndustries:edit") + @Log(title = "两业融合奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsIntegrationIndustriesUpdateDto bmsIntegrationIndustriesUpdateDto) { + return toAjax(bmsIntegrationIndustriesService.updateBmsIntegrationIndustries(bmsIntegrationIndustriesUpdateDto)); + } + + /** + * 删除两业融合奖补 + */ +// @RequiresPermissions("system:integrationIndustries:remove") + @Log(title = "两业融合奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsIntegrationIndustriesService.deleteBmsIntegrationIndustriesByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsLogisticsDevelopmentAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsLogisticsDevelopmentAwardController.java new file mode 100644 index 0000000..461285c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsLogisticsDevelopmentAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsLogisticsDevelopmentAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 物流发展奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/logisticsDevelopmentAward") +public class BmsLogisticsDevelopmentAwardController extends BaseController { + @Autowired + private IBmsLogisticsDevelopmentAwardService bmsLogisticsDevelopmentAwardService; + + /** + * 查询物流发展奖补列表 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward) { + startPage(); + List<BmsLogisticsDevelopmentAward> list = bmsLogisticsDevelopmentAwardService.selectBmsLogisticsDevelopmentAwardList(bmsLogisticsDevelopmentAward); + return getDataTable(list); + } + + /** + * 导出物流发展奖补列表 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:export") + @Log(title = "物流发展奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward) { + List<BmsLogisticsDevelopmentAward> list = bmsLogisticsDevelopmentAwardService.selectBmsLogisticsDevelopmentAwardList(bmsLogisticsDevelopmentAward); + ExcelUtil<BmsLogisticsDevelopmentAward> util = new ExcelUtil<BmsLogisticsDevelopmentAward>(BmsLogisticsDevelopmentAward.class); + util.exportExcel(response, list, "物流发展奖补数据"); + } + + /** + * 获取物流发展奖补详细信息 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsLogisticsDevelopmentAwardService.selectBmsLogisticsDevelopmentAwardById(id)); + } + + /** + * 新增物流发展奖补 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:add") + @Log(title = "物流发展奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsLogisticsDevelopmentAwardAddDto bmsLogisticsDevelopmentAwardAddDto) { + return toAjax(bmsLogisticsDevelopmentAwardService.insertBmsLogisticsDevelopmentAward(bmsLogisticsDevelopmentAwardAddDto)); + } + + /** + * 修改物流发展奖补 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:edit") + @Log(title = "物流发展奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsLogisticsDevelopmentAwardUpdateDto bmsLogisticsDevelopmentAwardUpdateDto) { + return toAjax(bmsLogisticsDevelopmentAwardService.updateBmsLogisticsDevelopmentAward(bmsLogisticsDevelopmentAwardUpdateDto)); + } + + /** + * 删除物流发展奖补 + */ +// @RequiresPermissions("system:logisticsDevelopmentAward:remove") + @Log(title = "物流发展奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsLogisticsDevelopmentAwardService.deleteBmsLogisticsDevelopmentAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsManufacturingServicesAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsManufacturingServicesAwardController.java new file mode 100644 index 0000000..56bc940 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsManufacturingServicesAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsManufacturingServicesAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 制造服务业有效投入奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/manufacturingServicesAward") +public class BmsManufacturingServicesAwardController extends BaseController { + @Autowired + private IBmsManufacturingServicesAwardService bmsManufacturingServicesAwardService; + + /** + * 查询制造服务业有效投入奖补列表 + */ +// @RequiresPermissions("system:manufacturingServicesAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsManufacturingServicesAward bmsManufacturingServicesAward) { + startPage(); + List<BmsManufacturingServicesAward> list = bmsManufacturingServicesAwardService.selectBmsManufacturingServicesAwardList(bmsManufacturingServicesAward); + return getDataTable(list); + } + + /** + * 导出制造服务业有效投入奖补列表 + */ +// @RequiresPermissions("system:manufacturingServicesAward:export") + @Log(title = "制造服务业有效投入奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsManufacturingServicesAward bmsManufacturingServicesAward) { + List<BmsManufacturingServicesAward> list = bmsManufacturingServicesAwardService.selectBmsManufacturingServicesAwardList(bmsManufacturingServicesAward); + ExcelUtil<BmsManufacturingServicesAward> util = new ExcelUtil<BmsManufacturingServicesAward>(BmsManufacturingServicesAward.class); + util.exportExcel(response, list, "制造服务业有效投入奖补数据"); + } + + /** + * 获取制造服务业有效投入奖补详细信息 + */ +// @RequiresPermissions("system:manufacturingServicesAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsManufacturingServicesAwardService.selectBmsManufacturingServicesAwardById(id)); + } + + /** + * 新增制造服务业有效投入奖补 + */ +// @RequiresPermissions("system:manufacturingServicesAward:add") + @Log(title = "制造服务业有效投入奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsManufacturingServicesAwardAddDto bmsManufacturingServicesAwardAddDto) { + return toAjax(bmsManufacturingServicesAwardService.insertBmsManufacturingServicesAward(bmsManufacturingServicesAwardAddDto)); + } + + /** + * 修改制造服务业有效投入奖补 + */ +// @RequiresPermissions("system:manufacturingServicesAward:edit") + @Log(title = "制造服务业有效投入奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsManufacturingServicesAwardUpdateDto bmsManufacturingServicesAwardUpdateDto) { + return toAjax(bmsManufacturingServicesAwardService.updateBmsManufacturingServicesAward(bmsManufacturingServicesAwardUpdateDto)); + } + + /** + * 删除制造服务业有效投入奖补 + */ +// @RequiresPermissions("system:manufacturingServicesAward:remove") + @Log(title = "制造服务业有效投入奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsManufacturingServicesAwardService.deleteBmsManufacturingServicesAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsOpenInterfaceController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsOpenInterfaceController.java new file mode 100644 index 0000000..31254cb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsOpenInterfaceController.java @@ -0,0 +1,54 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import com.ruoyi.jjh.declaration.entity.dto.OpenInterfaceApplyAddDto; +import com.ruoyi.jjh.declaration.entity.vo.EnterpriseInfoTemplateVo; +import com.ruoyi.jjh.declaration.service.IOpenInterfaceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * 审批记录信息Controller + * + * @author farben + * @date 2023-09-09 + */ +@RestController +@RequestMapping("/openInterface") +public class BmsOpenInterfaceController extends BaseController { + + @Autowired + private IOpenInterfaceService iOpenInterfaceService; + + @GetMapping("/enterpriseInfo/{creditCode}") + public AjaxResult enterpriseInfo(@PathVariable("creditCode") String creditCode) { + EnterpriseInfoTemplateVo enterpriseInfoTemplateVo = iOpenInterfaceService.enterpriseList(creditCode); + return success(enterpriseInfoTemplateVo); + } + + @Log(title = "新增申报记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody OpenInterfaceApplyAddDto openInterfaceApplyAddDto) { + return toAjax(iOpenInterfaceService.insertOpenInterfaceApplyAddDto(openInterfaceApplyAddDto)); + } + + @GetMapping("/{templateRecordId}") + public AjaxResult getProjectInfo(@PathVariable("templateRecordId") Long templateRecordId) { + BmsProjectInfo bmsProjectInfo = iOpenInterfaceService.getProjectInfo(templateRecordId); + return success(bmsProjectInfo); + } + + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsPlatformConstructionAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsPlatformConstructionAwardController.java new file mode 100644 index 0000000..fa55ded --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsPlatformConstructionAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsPlatformConstructionAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 平台建设奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/platformConstructionAward") +public class BmsPlatformConstructionAwardController extends BaseController { + @Autowired + private IBmsPlatformConstructionAwardService bmsPlatformConstructionAwardService; + + /** + * 查询平台建设奖补列表 + */ +// @RequiresPermissions("system:platformConstructionAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsPlatformConstructionAward bmsPlatformConstructionAward) { + startPage(); + List<BmsPlatformConstructionAward> list = bmsPlatformConstructionAwardService.selectBmsPlatformConstructionAwardList(bmsPlatformConstructionAward); + return getDataTable(list); + } + + /** + * 导出平台建设奖补列表 + */ +// @RequiresPermissions("system:platformConstructionAward:export") + @Log(title = "平台建设奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsPlatformConstructionAward bmsPlatformConstructionAward) { + List<BmsPlatformConstructionAward> list = bmsPlatformConstructionAwardService.selectBmsPlatformConstructionAwardList(bmsPlatformConstructionAward); + ExcelUtil<BmsPlatformConstructionAward> util = new ExcelUtil<BmsPlatformConstructionAward>(BmsPlatformConstructionAward.class); + util.exportExcel(response, list, "平台建设奖补数据"); + } + + /** + * 获取平台建设奖补详细信息 + */ +// @RequiresPermissions("system:platformConstructionAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsPlatformConstructionAwardService.selectBmsPlatformConstructionAwardById(id)); + } + + /** + * 新增平台建设奖补 + */ +// @RequiresPermissions("system:platformConstructionAward:add") + @Log(title = "平台建设奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsPlatformConstructionAwardAddDto bmsPlatformConstructionAwardAddDto) { + return toAjax(bmsPlatformConstructionAwardService.insertBmsPlatformConstructionAward(bmsPlatformConstructionAwardAddDto)); + } + + /** + * 修改平台建设奖补 + */ +// @RequiresPermissions("system:platformConstructionAward:edit") + @Log(title = "平台建设奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsPlatformConstructionAwardUpdateDto bmsPlatformConstructionAwardUpdateDto) { + return toAjax(bmsPlatformConstructionAwardService.updateBmsPlatformConstructionAward(bmsPlatformConstructionAwardUpdateDto)); + } + + /** + * 删除平台建设奖补 + */ +// @RequiresPermissions("system:platformConstructionAward:remove") + @Log(title = "平台建设奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsPlatformConstructionAwardService.deleteBmsPlatformConstructionAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProcessInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProcessInfoController.java new file mode 100644 index 0000000..fa1bc5b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProcessInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; +import com.ruoyi.jjh.declaration.service.IBmsProcessInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 审批流程Controller + * + * @author farben + * @date 2023-09-09 + */ +@RestController +@RequestMapping("/processInfo") +public class BmsProcessInfoController extends BaseController { + @Autowired + private IBmsProcessInfoService bmsProcessInfoService; + + /** + * 查询审批流程列表 + */ +// @RequiresPermissions("system:processInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsProcessInfo bmsProcessInfo) { + startPage(); + List<BmsProcessInfo> list = bmsProcessInfoService.selectBmsProcessInfoList(bmsProcessInfo); + return getDataTable(list); + } + + /** + * 导出审批流程列表 + */ +// @RequiresPermissions("system:processInfo:export") + @Log(title = "审批流程", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsProcessInfo bmsProcessInfo) { + List<BmsProcessInfo> list = bmsProcessInfoService.selectBmsProcessInfoList(bmsProcessInfo); + ExcelUtil<BmsProcessInfo> util = new ExcelUtil<BmsProcessInfo>(BmsProcessInfo.class); + util.exportExcel(response, list, "审批流程数据"); + } + + /** + * 获取审批流程详细信息 + */ +// @RequiresPermissions("system:processInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsProcessInfoService.selectBmsProcessInfoById(id)); + } + + /** + * 新增审批流程 + */ +// @RequiresPermissions("system:processInfo:add") + @Log(title = "审批流程", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsProcessInfo bmsProcessInfo) { + return toAjax(bmsProcessInfoService.insertBmsProcessInfo(bmsProcessInfo)); + } + + /** + * 修改审批流程 + */ +// @RequiresPermissions("system:processInfo:edit") + @Log(title = "审批流程", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsProcessInfo bmsProcessInfo) { + return toAjax(bmsProcessInfoService.updateBmsProcessInfo(bmsProcessInfo)); + } + + /** + * 删除审批流程 + */ +// @RequiresPermissions("system:processInfo:remove") + @Log(title = "审批流程", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsProcessInfoService.deleteBmsProcessInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectInfoController.java new file mode 100644 index 0000000..d7fa40e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import com.ruoyi.jjh.declaration.service.IBmsProjectInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 项目基本信息Controller + * + * @author farben + * @date 2023-09-09 + */ +@RestController +@RequestMapping("/projectInfo") +public class BmsProjectInfoController extends BaseController { + @Autowired + private IBmsProjectInfoService bmsProjectInfoService; + + /** + * 查询项目基本信息列表 + */ +// @RequiresPermissions("system:projectInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsProjectInfo bmsProjectInfo) { + startPage(); + List<BmsProjectInfo> list = bmsProjectInfoService.selectBmsProjectInfoList(bmsProjectInfo); + return getDataTable(list); + } + + /** + * 导出项目基本信息列表 + */ +// @RequiresPermissions("system:projectInfo:export") + @Log(title = "项目基本信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsProjectInfo bmsProjectInfo) { + List<BmsProjectInfo> list = bmsProjectInfoService.selectBmsProjectInfoList(bmsProjectInfo); + ExcelUtil<BmsProjectInfo> util = new ExcelUtil<BmsProjectInfo>(BmsProjectInfo.class); + util.exportExcel(response, list, "项目基本信息数据"); + } + + /** + * 获取项目基本信息详细信息 + */ +// @RequiresPermissions("system:projectInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsProjectInfoService.selectBmsProjectInfoById(id)); + } + + /** + * 新增项目基本信息 + */ +// @RequiresPermissions("system:projectInfo:add") + @Log(title = "项目基本信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsProjectInfo bmsProjectInfo) { + return toAjax(bmsProjectInfoService.insertBmsProjectInfo(bmsProjectInfo)); + } + + /** + * 修改项目基本信息 + */ +// @RequiresPermissions("system:projectInfo:edit") + @Log(title = "项目基本信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsProjectInfo bmsProjectInfo) { + return toAjax(bmsProjectInfoService.updateBmsProjectInfo(bmsProjectInfo)); + } + + /** + * 删除项目基本信息 + */ +// @RequiresPermissions("system:projectInfo:remove") + @Log(title = "项目基本信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsProjectInfoService.deleteBmsProjectInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectSettlementAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectSettlementAwardController.java new file mode 100644 index 0000000..3db84e0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsProjectSettlementAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsProjectSettlementAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 项目落户奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/projectSettlementAward") +public class BmsProjectSettlementAwardController extends BaseController { + @Autowired + private IBmsProjectSettlementAwardService bmsProjectSettlementAwardService; + + /** + * 查询项目落户奖补列表 + */ +// @RequiresPermissions("system:projectSettlementAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsProjectSettlementAward bmsProjectSettlementAward) { + startPage(); + List<BmsProjectSettlementAward> list = bmsProjectSettlementAwardService.selectBmsProjectSettlementAwardList(bmsProjectSettlementAward); + return getDataTable(list); + } + + /** + * 导出项目落户奖补列表 + */ +// @RequiresPermissions("system:projectSettlementAward:export") + @Log(title = "项目落户奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsProjectSettlementAward bmsProjectSettlementAward) { + List<BmsProjectSettlementAward> list = bmsProjectSettlementAwardService.selectBmsProjectSettlementAwardList(bmsProjectSettlementAward); + ExcelUtil<BmsProjectSettlementAward> util = new ExcelUtil<BmsProjectSettlementAward>(BmsProjectSettlementAward.class); + util.exportExcel(response, list, "项目落户奖补数据"); + } + + /** + * 获取项目落户奖补详细信息 + */ +// @RequiresPermissions("system:projectSettlementAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsProjectSettlementAwardService.selectBmsProjectSettlementAwardById(id)); + } + + /** + * 新增项目落户奖补 + */ +// @RequiresPermissions("system:projectSettlementAward:add") + @Log(title = "项目落户奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsProjectSettlementAwardAddDto bmsProjectSettlementAwardAddDto) { + return toAjax(bmsProjectSettlementAwardService.insertBmsProjectSettlementAward(bmsProjectSettlementAwardAddDto)); + } + + /** + * 修改项目落户奖补 + */ +// @RequiresPermissions("system:projectSettlementAward:edit") + @Log(title = "项目落户奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsProjectSettlementAwardUpdateDto bmsProjectSettlementAwardUpdateDto) { + return toAjax(bmsProjectSettlementAwardService.updateBmsProjectSettlementAward(bmsProjectSettlementAwardUpdateDto)); + } + + /** + * 删除项目落户奖补 + */ +// @RequiresPermissions("system:projectSettlementAward:remove") + @Log(title = "项目落户奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsProjectSettlementAwardService.deleteBmsProjectSettlementAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsSceneOpeningAwardController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsSceneOpeningAwardController.java new file mode 100644 index 0000000..25b1c87 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsSceneOpeningAwardController.java @@ -0,0 +1,99 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardUpdateDto; +import com.ruoyi.jjh.declaration.service.IBmsSceneOpeningAwardService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 场景开放奖补Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/sceneOpeningAward") +public class BmsSceneOpeningAwardController extends BaseController { + @Autowired + private IBmsSceneOpeningAwardService bmsSceneOpeningAwardService; + + /** + * 查询场景开放奖补列表 + */ +// @RequiresPermissions("system:sceneOpeningAward:list") + @GetMapping("/list") + public TableDataInfo list(BmsSceneOpeningAward bmsSceneOpeningAward) { + startPage(); + List<BmsSceneOpeningAward> list = bmsSceneOpeningAwardService.selectBmsSceneOpeningAwardList(bmsSceneOpeningAward); + return getDataTable(list); + } + + /** + * 导出场景开放奖补列表 + */ +// @RequiresPermissions("system:sceneOpeningAward:export") + @Log(title = "场景开放奖补", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsSceneOpeningAward bmsSceneOpeningAward) { + List<BmsSceneOpeningAward> list = bmsSceneOpeningAwardService.selectBmsSceneOpeningAwardList(bmsSceneOpeningAward); + ExcelUtil<BmsSceneOpeningAward> util = new ExcelUtil<BmsSceneOpeningAward>(BmsSceneOpeningAward.class); + util.exportExcel(response, list, "场景开放奖补数据"); + } + + /** + * 获取场景开放奖补详细信息 + */ +// @RequiresPermissions("system:sceneOpeningAward:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsSceneOpeningAwardService.selectBmsSceneOpeningAwardById(id)); + } + + /** + * 新增场景开放奖补 + */ +// @RequiresPermissions("system:sceneOpeningAward:add") + @Log(title = "场景开放奖补", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsSceneOpeningAwardAddDto bmsSceneOpeningAwardAddDto) { + return toAjax(bmsSceneOpeningAwardService.insertBmsSceneOpeningAward(bmsSceneOpeningAwardAddDto)); + } + + /** + * 修改场景开放奖补 + */ +// @RequiresPermissions("system:sceneOpeningAward:edit") + @Log(title = "场景开放奖补", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsSceneOpeningAwardUpdateDto bmsSceneOpeningAwardUpdateDto) { + return toAjax(bmsSceneOpeningAwardService.updateBmsSceneOpeningAward(bmsSceneOpeningAwardUpdateDto)); + } + + /** + * 删除场景开放奖补 + */ +// @RequiresPermissions("system:sceneOpeningAward:remove") + @Log(title = "场景开放奖补", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsSceneOpeningAwardService.deleteBmsSceneOpeningAwardByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateInfoController.java new file mode 100644 index 0000000..910437c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateInfoController.java @@ -0,0 +1,106 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateInfoQueryVo; +import com.ruoyi.jjh.declaration.service.IBmsTemplateInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 申报模板信息Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/templateInfo") +public class BmsTemplateInfoController extends BaseController { + @Autowired + private IBmsTemplateInfoService bmsTemplateInfoService; + + /** + * 查询申报模板信息列表 + */ +// @RequiresPermissions("system:templateInfo:list") + @GetMapping("/list") + public TableDataInfo list(BmsTemplateInfo bmsTemplateInfo) { + startPage(); + List<BmsTemplateInfoQueryVo> list = bmsTemplateInfoService.selectBmsTemplateInfoList(bmsTemplateInfo); + return getDataTable(list); + } + + /** + * 导出申报模板信息列表 + */ +// @RequiresPermissions("system:templateInfo:export") + @Log(title = "申报模板信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsTemplateInfo bmsTemplateInfo) { + List<BmsTemplateInfoQueryVo> list = bmsTemplateInfoService.selectBmsTemplateInfoList(bmsTemplateInfo); + ExcelUtil<BmsTemplateInfoQueryVo> util = new ExcelUtil<BmsTemplateInfoQueryVo>(BmsTemplateInfoQueryVo.class); + util.exportExcel(response, list, "申报模板信息数据"); + } + +// @RequiresPermissions("system:templateInfo:exportTemplate") + @Log(title = "导出模板表单", businessType = BusinessType.EXPORT) + @GetMapping(value = "/exportTemplate/{id}") + public void exportTemplate(HttpServletRequest request, HttpServletResponse response,@PathVariable("id")Long id){ + bmsTemplateInfoService.exportTemplate(request,response,id); + } + + /** + * 获取申报模板信息详细信息 + */ +// @RequiresPermissions("system:templateInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsTemplateInfoService.selectBmsTemplateInfoById(id)); + } + + /** + * 新增申报模板信息 + */ +// @RequiresPermissions("system:templateInfo:add") + @Log(title = "申报模板信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsTemplateInfo bmsTemplateInfo) { + return toAjax(bmsTemplateInfoService.insertBmsTemplateInfo(bmsTemplateInfo)); + } + + /** + * 修改申报模板信息 + */ +// @RequiresPermissions("system:templateInfo:edit") + @Log(title = "申报模板信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsTemplateInfo bmsTemplateInfo) { + return toAjax(bmsTemplateInfoService.updateBmsTemplateInfo(bmsTemplateInfo)); + } + + /** + * 删除申报模板信息 + */ +// @RequiresPermissions("system:templateInfo:remove") + @Log(title = "申报模板信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsTemplateInfoService.deleteBmsTemplateInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateRecordController.java new file mode 100644 index 0000000..db6ef6e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BmsTemplateRecordController.java @@ -0,0 +1,107 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo; +import com.ruoyi.jjh.declaration.service.IBmsTemplateRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 在线模板Controller + * + * @author farben + * @date 2023-09-07 + */ +@RestController +@RequestMapping("/templateRecord") +public class BmsTemplateRecordController extends BaseController { + @Autowired + private IBmsTemplateRecordService bmsTemplateRecordService; + + /** + * 查询在线模板列表 + */ +// @RequiresPermissions("system:templateRecord:list") + @GetMapping("/list") + public TableDataInfo list(BmsTemplateRecordQueryDto bmsTemplateRecordQueryDto) { + startPage(); + List<BmsTemplateRecordQueryVo> list = bmsTemplateRecordService.selectBmsTemplateRecordList(bmsTemplateRecordQueryDto); + return getDataTable(list); + } + + @GetMapping("/templateNameList") + public TableDataInfo templateNameList(BmsTemplateQueryDto bmsTemplateQueryDto){ + List<BmsTemplateRecordQueryVo> list = bmsTemplateRecordService.selectBmsTemplateNameList(bmsTemplateQueryDto); + return getDataTable(list); + } + + /** + * 导出在线模板列表 + */ +// @RequiresPermissions("system:templateRecord:export") + @Log(title = "在线模板", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BmsTemplateRecordQueryDto bmsTemplateRecordQueryDto) { + List<BmsTemplateRecordQueryVo> list = bmsTemplateRecordService.selectBmsTemplateRecordList(bmsTemplateRecordQueryDto); + ExcelUtil<BmsTemplateRecordQueryVo> util = new ExcelUtil<BmsTemplateRecordQueryVo>(BmsTemplateRecordQueryVo.class); + util.exportExcel(response, list, "在线模板数据"); + } + + /** + * 获取在线模板详细信息 + */ +// @RequiresPermissions("system:templateRecord:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bmsTemplateRecordService.selectBmsTemplateRecordById(id)); + } + + /** + * 新增在线模板 + */ +// @RequiresPermissions("system:templateRecord:add") + @Log(title = "在线模板", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BmsTemplateRecordAddDto bmsTemplateRecordAddDto) { + return toAjax(bmsTemplateRecordService.insertBmsTemplateRecord(bmsTemplateRecordAddDto)); + } + + /** + * 修改在线模板 + */ +// @RequiresPermissions("system:templateRecord:edit") + @Log(title = "在线模板", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BmsTemplateRecordUpdateDto bmsTemplateRecordUpdateDto) { + return toAjax(bmsTemplateRecordService.updateBmsTemplateRecord(bmsTemplateRecordUpdateDto)); + } + + /** + * 删除在线模板 + */ +// @RequiresPermissions("system:templateRecord:remove") + @Log(title = "在线模板", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bmsTemplateRecordService.deleteBmsTemplateRecordByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BsmFundingInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BsmFundingInfoController.java new file mode 100644 index 0000000..7c7f780 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/controller/BsmFundingInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.jjh.declaration.controller; + +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.jjh.declaration.entity.BsmFundingInfo; +import com.ruoyi.jjh.declaration.service.IBsmFundingInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 资金信息Controller + * + * @author farben + * @date 2023-08-25 + */ +@RestController +@RequestMapping("/fundingInfo") +public class BsmFundingInfoController extends BaseController { + @Autowired + private IBsmFundingInfoService bsmFundingInfoService; + + /** + * 查询资金信息列表 + */ +// @RequiresPermissions("system:fundingInfo:list") + @GetMapping("/list") + public TableDataInfo list(BsmFundingInfo bsmFundingInfo) { + startPage(); + List<BsmFundingInfo> list = bsmFundingInfoService.selectBsmFundingInfoList(bsmFundingInfo); + return getDataTable(list); + } + + /** + * 导出资金信息列表 + */ +// @RequiresPermissions("system:fundingInfo:export") + @Log(title = "资金信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, BsmFundingInfo bsmFundingInfo) { + List<BsmFundingInfo> list = bsmFundingInfoService.selectBsmFundingInfoList(bsmFundingInfo); + ExcelUtil<BsmFundingInfo> util = new ExcelUtil<BsmFundingInfo>(BsmFundingInfo.class); + util.exportExcel(response, list, "资金信息数据"); + } + + /** + * 获取资金信息详细信息 + */ +// @RequiresPermissions("system:fundingInfo:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return success(bsmFundingInfoService.selectBsmFundingInfoById(id)); + } + + /** + * 新增资金信息 + */ +// @RequiresPermissions("system:fundingInfo:add") + @Log(title = "资金信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody BsmFundingInfo bsmFundingInfo) { + return toAjax(bsmFundingInfoService.insertBsmFundingInfo(bsmFundingInfo)); + } + + /** + * 修改资金信息 + */ +// @RequiresPermissions("system:fundingInfo:edit") + @Log(title = "资金信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody BsmFundingInfo bsmFundingInfo) { + return toAjax(bsmFundingInfoService.updateBsmFundingInfo(bsmFundingInfo)); + } + + /** + * 删除资金信息 + */ +// @RequiresPermissions("system:fundingInfo:remove") + @Log(title = "资金信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(bsmFundingInfoService.deleteBsmFundingInfoByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsApprovalInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsApprovalInfo.java new file mode 100644 index 0000000..7cd4115 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsApprovalInfo.java @@ -0,0 +1,110 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 审批记录信息对象 bms_approval_info + * + * @author farben + * @date 2023-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsApprovalInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 流程id + */ + @Excel(name = "流程id") + private Long processId; + + /** + * 申报记录id + */ + @Excel(name = "申报记录id") + private Long declarationRecordsId; + + @Excel(name = "默认审批人id") + private Long approvalById; + + /** + * 审批状态(0=待审核.1=审批通过,2=审批驳回) + */ + @Excel(name = "审批状态(0=待审核.1=审批通过,2=审批驳回)") + private Integer approvalStatus; + + /** + * 审批意见 + */ + @Excel(name = "审批意见") + private String approvalOpinions; + + /** + * 审批附件 + */ + @Excel(name = "审批附件") + private String approvalAttachment; + + @Excel(name = "审批时间") + private Date approvalTime; + + /** + * 是否可审核(0=是,1=否,2=结束) + */ + @Excel(name = "是否可审核(0=是,1=否,2=结束)") + private Integer isReview; + + @Excel(name = "是否为拒绝前数据,0:否,1:是") + private Integer isBeforeData; + + /** + * 排序 + */ + @Excel(name = "排序") + private Integer sort; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Integer isDeleted; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("processId", getProcessId()) + .append("declarationRecordsId", getDeclarationRecordsId()) + .append("approvalById", getApprovalById()) + .append("approvalStatus", getApprovalStatus()) + .append("approvalOpinions", getApprovalOpinions()) + .append("approvalAttachment", getApprovalAttachment()) + .append("isReview", getIsReview()) + .append("isBeforeData", getIsBeforeData()) + .append("sort", getSort()) + .append("isDeleted", getIsDeleted()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBigStrongAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBigStrongAward.java new file mode 100644 index 0000000..1441b80 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBigStrongAward.java @@ -0,0 +1,134 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 做大做强奖详情对象 bms_big_strong_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsBigStrongAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 是否获得园区其他经营奖励 + */ + @Excel(name = "是否获得园区其他经营奖励,0:是,1:否", readConverterExp = "0=是,1=否") + private int isGainRewards; + + @Excel(name = "奖励说明") + private String rewardDescription; + + /** + * 成立时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "成立时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date establishTime; + + /** + * 企业近3年发展情况及未来发展计划 + */ + @Excel(name = "企业近3年发展情况及未来发展计划") + private String developmentPlan; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public int getIsGainRewards() { + return isGainRewards; + } + + public void setIsGainRewards(int isGainRewards) { + this.isGainRewards = isGainRewards; + } + + public Date getEstablishTime() { + return establishTime; + } + + public void setEstablishTime(Date establishTime) { + this.establishTime = establishTime; + } + + public String getDevelopmentPlan() { + return developmentPlan; + } + + public void setDevelopmentPlan(String developmentPlan) { + this.developmentPlan = developmentPlan; + } + + public String getRewardDescription() { + return rewardDescription; + } + + public void setRewardDescription(String rewardDescription) { + this.rewardDescription = rewardDescription; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("enterpriseId", getEnterpriseId()) + .append("isGainRewards", getIsGainRewards()) + .append("establishTime", getEstablishTime()) + .append("developmentPlan", getDevelopmentPlan()) + .append("isDeleted", getIsDeleted()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBrandingAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBrandingAward.java new file mode 100644 index 0000000..0dba0be --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsBrandingAward.java @@ -0,0 +1,119 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 品牌打造奖补对象 bms_branding_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsBrandingAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 所获荣誉/所举办活动 + */ + @Excel(name = "所获荣誉/所举办活动") + private String honorsReceived; + + /** + * 所属等级 + */ + @Excel(name = "所属等级") + private Long level; + + /** + * 证明材料 + */ + @Excel(name = "证明材料") + private String evidence; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public String getHonorsReceived() { + return honorsReceived; + } + + public void setHonorsReceived(String honorsReceived) { + this.honorsReceived = honorsReceived; + } + + public Long getLevel() { + return level; + } + + public void setLevel(Long level) { + this.level = level; + } + + public String getEvidence() { + return evidence; + } + + public void setEvidence(String evidence) { + this.evidence = evidence; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("enterpriseId", getEnterpriseId()) + .append("honorsReceived", getHonorsReceived()) + .append("level", getLevel()) + .append("evidence", getEvidence()) + .append("isDeleted", getIsDeleted()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCarrierConstructionAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCarrierConstructionAward.java new file mode 100644 index 0000000..8e3bf39 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCarrierConstructionAward.java @@ -0,0 +1,63 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 载体建设奖补对象 bms_carrier_construction_award + * + * @author farben + * @date 2023-08-25 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsCarrierConstructionAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** 主键id */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** 企业id */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 文体企业数量占比 */ + @Excel(name = "文体企业数量占比") + private String quantityProportion; + + /** 文体企业营收占比 */ + @Excel(name = "文体企业营收占比") + private String revenueProportion; + + /** 文体企业从业人员占比 */ + @Excel(name = "文体企业从业人员占比") + private String personnelProportion; + + /** 相关佐证材料 */ + @Excel(name = "相关佐证材料") + private String supportingMaterials; + + /** 项目工商登记许可 */ + @Excel(name = "项目工商登记许可") + private String businessLicense; + + /** 消防验收报告 */ + @Excel(name = "消防验收报告") + private String fireReport; + + /** 是否删除:0,未删除;1,已删除 */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCreditManagement.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCreditManagement.java new file mode 100644 index 0000000..f7cf231 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsCreditManagement.java @@ -0,0 +1,103 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 信用管理奖补对象 bms_credit_management + * + * @author farben + * @date 2023-09-04 + */ +public class BmsCreditManagement extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** 主键id */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** 企业id */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** 项目方案(包括项目基本情况介绍、项目投资情况以及实施进展、项目目标及取得的主要成效) */ + @Excel(name = "项目方案", readConverterExp = "包=括项目基本情况介绍、项目投资情况以及实施进展、项目目标及取得的主要成效") + private String projectPlan; + + /** 资金使用说明(项目未完成的需提供,内容主要包括项目计划投资额,投资明细,目前已完成投资情况和后续投入计划等) */ + @Excel(name = "资金使用说明", readConverterExp = "项=目未完成的需提供,内容主要包括项目计划投资额,投资明细,目前已完成投资情况和后续投入计划等") + private String usesFunds; + + /** 项目专项审计报告(项目已完成的需提供) */ + @Excel(name = "项目专项审计报告", readConverterExp = "项=目已完成的需提供") + private String auditReport; + + /** 是否删除:0,未删除;1,已删除 */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public void setId(Long id){ + this.id = id; + } + + public Long getId(){ + return id; + } + public void setEnterpriseId(Long enterpriseId){ + this.enterpriseId = enterpriseId; + } + + public Long getEnterpriseId(){ + return enterpriseId; + } + public void setProjectPlan(String projectPlan){ + this.projectPlan = projectPlan; + } + + public String getProjectPlan(){ + return projectPlan; + } + public void setUsesFunds(String usesFunds){ + this.usesFunds = usesFunds; + } + + public String getUsesFunds(){ + return usesFunds; + } + public void setAuditReport(String auditReport){ + this.auditReport = auditReport; + } + + public String getAuditReport(){ + return auditReport; + } + public void setIsDeleted(Long isDeleted){ + this.isDeleted = isDeleted; + } + + public Long getIsDeleted(){ + return isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("enterpriseId", getEnterpriseId()) + .append("projectPlan", getProjectPlan()) + .append("usesFunds", getUsesFunds()) + .append("auditReport", getAuditReport()) + .append("isDeleted", getIsDeleted()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsDeclarationRecords.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsDeclarationRecords.java new file mode 100644 index 0000000..14e0887 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsDeclarationRecords.java @@ -0,0 +1,94 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 在线申报记录对象 bms_declaration_records + * + * @author farben + * @date 2023-08-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsDeclarationRecords extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ApiModelProperty(value = "id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 项目名称 + */ + @ApiModelProperty(value = "项目名称") + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "事项") + @Excel(name = "事项") + private String matter; + + /** + * 企业id + */ + @ApiModelProperty(value = "企业id") + private Long enterpriseId; + + /** + * 年份 + */ + @ApiModelProperty(value = "年份") + @Excel(name = "年份") + private String year; + + /** + * 在线模板记录id + */ + @ApiModelProperty(value = "在线模板记录id") + private Long templateRecordId; + + /** + * 申报模版类型 + */ + @ApiModelProperty(value = "申报模版类型") + private Integer declarationTemplateType; + + /** + * 详情id:对应详情id + */ + @ApiModelProperty(value = "详情id:对应详情id") + private Long detailId; + + + /** + * 审批状态 + */ + @ApiModelProperty(value = "审批状态") + @Excel(name = "审批状态", readConverterExp = "0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @ApiModelProperty(value = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("projectName", getProjectName()).append("projectId", getProjectId()).append("enterpriseId", getEnterpriseId()).append("year", getYear()).append("templateRecordId", getTemplateRecordId()).append("declarationTemplateType", getDeclarationTemplateType()).append("detailId", getDetailId()).append("status", getStatus()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseBasicInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseBasicInfo.java new file mode 100644 index 0000000..bcfab6a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseBasicInfo.java @@ -0,0 +1,83 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 企业基础信息对象 bms_enterprise_basic_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsEnterpriseBasicInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业名称 + */ + @Excel(name = "企业名称") + private String enterpriseName; + + /** + * 企业统一信用代码 + */ + @Excel(name = "企业统一信用代码") + private String creditCode; + + /** + * 联系人 + */ + @Excel(name = "联系人") + private String contacts; + + /** + * 联系人电话 + */ + @Excel(name = "联系人电话") + private String contactsNumber; + + /** + * 企业地址 + */ + @Excel(name = "企业地址") + private String address; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("enterpriseName", getEnterpriseName()) + .append("creditCode", getCreditCode()) + .append("contacts", getContacts()) + .append("contactsNumber", getContactsNumber()) + .append("address", getAddress()) + .append("isDeleted", getIsDeleted()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseDirectory.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseDirectory.java new file mode 100644 index 0000000..8e98130 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsEnterpriseDirectory.java @@ -0,0 +1,50 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 企业名录对象 bms_enterprise_directory + * + * @author farben + * @date 2023-08-31 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsEnterpriseDirectory extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty(value = "在线模板记录id") + private Long templateRecordId; + + /** + * 企业名字 + */ + @Excel(name = "企业名字") + private String enterpriseName; + + /** + * 企业统一信用代码 + */ + @Excel(name = "企业统一信用代码") + private String creditCode; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("templateRecordId", getTemplateRecordId()).append("enterpriseName", getEnterpriseName()).append("creditCode", getCreditCode()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFieldInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFieldInfo.java new file mode 100644 index 0000000..9fddff6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFieldInfo.java @@ -0,0 +1,93 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 模板字段填写详情对象 bms_field_info + * + * @author farben + * @date 2023-09-04 + */ +public class BmsFieldInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 详情id + */ + @Excel(name = "详情id") + private Long detailId; + + /** + * 文件名称 + */ + @Excel(name = "文件名称") + private String fieldName; + + /** + * 文件说明 + */ + @Excel(name = "文件说明") + private String fieldResult; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDetailId() { + return detailId; + } + + public void setDetailId(Long detailId) { + this.detailId = detailId; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getFieldResult() { + return fieldResult; + } + + public void setFieldResult(String fieldResult) { + this.fieldResult = fieldResult; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("detailId", getDetailId()).append("fieldName", getFieldName()).append("fieldResult", getFieldResult()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFileInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFileInfo.java new file mode 100644 index 0000000..e917232 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFileInfo.java @@ -0,0 +1,107 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 文件存储说明详情对象 bms_file_info + * + * @author farben + * @date 2023-09-04 + */ +public class BmsFileInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 详情id + */ + @Excel(name = "详情id") + private Long detailId; + + /** + * 文件名称 + */ + @Excel(name = "文件名称") + private String fileName; + + /** + * 文件说明 + */ + @Excel(name = "文件说明") + private String fileDescription; + + /** + * 文件地址 + */ + @Excel(name = "文件地址") + private String fileUrl; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDetailId() { + return detailId; + } + + public void setDetailId(Long detailId) { + this.detailId = detailId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileDescription() { + return fileDescription; + } + + public void setFileDescription(String fileDescription) { + this.fileDescription = fileDescription; + } + + public String getFileUrl() { + return fileUrl; + } + + public void setFileUrl(String fileUrl) { + this.fileUrl = fileUrl; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("detailId", getDetailId()).append("fileName", getFileName()).append("fileDescription", getFileDescription()).append("fileUrl", getFileUrl()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFundingDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFundingDetail.java new file mode 100644 index 0000000..8e6b710 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsFundingDetail.java @@ -0,0 +1,145 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 资金信息详情对象 bms_funding_detail + * + * @author farben + * @date 2023-09-04 + */ +public class BmsFundingDetail extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 模板类型:1:项目落户奖补,2:做大做强奖补 + */ + @Excel(name = "模板类型:1:项目落户奖补,2:做大做强奖补") + private Integer type; + + /** + * 对应模板id + */ + @Excel(name = "对应模板id") + private int templateRecordId; + + /** + * 详情id + */ + @Excel(name = "详情id") + private Long detailId; + + private String vModel; + + /** + * 年份 + */ + @Excel(name = "年份") + private String year; + + /** + * 说明 + */ + @Excel(name = "说明") + private String illustrate; + + /** + * 金额 + */ + @Excel(name = "金额") + private Long amount; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public int getTemplateRecordId() { + return templateRecordId; + } + + public void setTemplateRecordId(int templateRecordId) { + this.templateRecordId = templateRecordId; + } + + public Long getDetailId() { + return detailId; + } + + public void setDetailId(Long detailId) { + this.detailId = detailId; + } + + public String getVModel() { + return vModel; + } + + public void setVModel(String vModel) { + this.vModel = vModel; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getIllustrate() { + return illustrate; + } + + public void setIllustrate(String illustrate) { + this.illustrate = illustrate; + } + + public Long getAmount() { + return amount; + } + + public void setAmount(Long amount) { + this.amount = amount; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("type", getType()).append("templateRecordId", getTemplateRecordId()).append("detailId", getDetailId()).append("vModel", getVModel()).append("year", getYear()).append("illustrate", getIllustrate()).append("amount", getAmount()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIndustrialInternetAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIndustrialInternetAward.java new file mode 100644 index 0000000..c874be4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIndustrialInternetAward.java @@ -0,0 +1,93 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 5G+工业互联网奖补对象 bms_industrial_internet_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsIndustrialInternetAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 荣誉名称 + */ + @Excel(name = "荣誉名称") + private String honoraryName; + + /** + * 证明材料 + */ + @Excel(name = "证明材料") + private String material; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public String getHonoraryName() { + return honoraryName; + } + + public void setHonoraryName(String honoraryName) { + this.honoraryName = honoraryName; + } + + public String getMaterial() { + return material; + } + + public void setMaterial(String material) { + this.material = material; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("honoraryName", getHonoraryName()).append("material", getMaterial()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIntegrationIndustries.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIntegrationIndustries.java new file mode 100644 index 0000000..d9425d0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsIntegrationIndustries.java @@ -0,0 +1,96 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 两业融合奖补对象 bms_integration_industries + * + * @author farben + * @date 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsIntegrationIndustries extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + @Excel(name = "申报类型", readConverterExp = "1=两业融合示范企业,2=制造业企业设立财务独立核算的制造服务业职能部门,3=制造业企业剥离服务业务成立独立的法人") + private Integer declarationType; + + /** + * 证明材料 + */ + @Excel(name = "证明材料") + private String evidence; + + /** + * 营业执照 + */ + @Excel(name = "营业执照") + private String businessLicense; + + /** + * 完税证明 + */ + @Excel(name = "完税证明") + private String taxPaymentCertificate; + + /** + * 审计报告 + */ + @Excel(name = "审计报告") + private String auditReport; + + /** + * 股权架构图 + */ + @Excel(name = "股权架构图") + private String equityStructureChart; + + /** + * 项目申报报告(含企业基本情况和项目基本情况) + */ + @Excel(name = "项目申报报告", readConverterExp = "含=企业基本情况和项目基本情况") + private String declarationReport; + + /** + * 独立核算相关证明 + */ + @Excel(name = "独立核算相关证明") + private String independentAccounting; + + /** + * 验资报告 + */ + @Excel(name = "验资报告") + private String capitalVerificationReport; + + /** + * 证明材料 + */ + @Excel(name = "证明材料") + private String otherEvidence; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsLogisticsDevelopmentAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsLogisticsDevelopmentAward.java new file mode 100644 index 0000000..b7eb472 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsLogisticsDevelopmentAward.java @@ -0,0 +1,121 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 物流发展奖补对象 bms_logistics_development_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsLogisticsDevelopmentAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 荣誉证明文件 + */ + @Excel(name = "荣誉证明文件") + private String honorCertificate; + + /** + * 平台名称 + */ + @Excel(name = "平台名称") + private String platformName; + + /** + * 企业投资项目备案通知书或核准批复文件 + */ + @Excel(name = "企业投资项目备案通知书或核准批复文件") + private String filingNotice; + + /** + * 会计师事务所出具的企业财务报表审计报告 + */ + @Excel(name = "会计师事务所出具的企业财务报表审计报告") + private String auditReport; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public String getHonorCertificate() { + return honorCertificate; + } + + public void setHonorCertificate(String honorCertificate) { + this.honorCertificate = honorCertificate; + } + + public String getPlatformName() { + return platformName; + } + + public void setPlatformName(String platformName) { + this.platformName = platformName; + } + + public String getFilingNotice() { + return filingNotice; + } + + public void setFilingNotice(String filingNotice) { + this.filingNotice = filingNotice; + } + + public String getAuditReport() { + return auditReport; + } + + public void setAuditReport(String auditReport) { + this.auditReport = auditReport; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("honorCertificate", getHonorCertificate()).append("platformName", getPlatformName()).append("filingNotice", getFilingNotice()).append("auditReport", getAuditReport()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsManufacturingServicesAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsManufacturingServicesAward.java new file mode 100644 index 0000000..2f8e6ad --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsManufacturingServicesAward.java @@ -0,0 +1,121 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 制造服务业有效投入奖补对象 bms_manufacturing_services_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsManufacturingServicesAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 企业投资项目备案通知书或核准批复文件 + */ + @Excel(name = "企业投资项目备案通知书或核准批复文件") + private String filingNotice; + + /** + * 购置设备发票清单及发票扫描件 + */ + @Excel(name = "购置设备发票清单及发票扫描件") + private String invoice; + + /** + * 会计师事务所出具的企业申报项目购置设备情况的专项审计报告 + */ + @Excel(name = "会计师事务所出具的企业申报项目购置设备情况的专项审计报告") + private String auditReport; + + /** + * 会计师事务所出具的企业财务报表审计报告 + */ + @Excel(name = "会计师事务所出具的企业财务报表审计报告") + private String financialStatements; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public String getFilingNotice() { + return filingNotice; + } + + public void setFilingNotice(String filingNotice) { + this.filingNotice = filingNotice; + } + + public String getInvoice() { + return invoice; + } + + public void setInvoice(String invoice) { + this.invoice = invoice; + } + + public String getAuditReport() { + return auditReport; + } + + public void setAuditReport(String auditReport) { + this.auditReport = auditReport; + } + + public String getFinancialStatements() { + return financialStatements; + } + + public void setFinancialStatements(String financialStatements) { + this.financialStatements = financialStatements; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("filingNotice", getFilingNotice()).append("invoice", getInvoice()).append("auditReport", getAuditReport()).append("financialStatements", getFinancialStatements()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsPlatformConstructionAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsPlatformConstructionAward.java new file mode 100644 index 0000000..d449dbf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsPlatformConstructionAward.java @@ -0,0 +1,93 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 平台建设奖补对象 bms_platform_construction_award + * + * @author farben + * @date 2023-08-25 + */ +public class BmsPlatformConstructionAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 平台(项目)名称 + */ + @Excel(name = "平台(项目)名称") + private String platformName; + + /** + * 合作协议 + */ + @Excel(name = "合作协议") + private String agreement; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getEnterpriseId() { + return enterpriseId; + } + + public void setEnterpriseId(Long enterpriseId) { + this.enterpriseId = enterpriseId; + } + + public String getPlatformName() { + return platformName; + } + + public void setPlatformName(String platformName) { + this.platformName = platformName; + } + + public String getAgreement() { + return agreement; + } + + public void setAgreement(String agreement) { + this.agreement = agreement; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("platformName", getPlatformName()).append("agreement", getAgreement()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProcessInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProcessInfo.java new file mode 100644 index 0000000..c74e585 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProcessInfo.java @@ -0,0 +1,73 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 审批流程对象 bms_process_info + * + * @author farben + * @date 2023-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProcessInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 对应审批类型(0=所有评审) + */ + @Excel(name = "对应审批类型(0=所有评审)") + private Integer approvalType; + + /** + * 对应审批层级(0=初审,1=复审,2=专家评审,3=市级评审) + */ + @Excel(name = "对应审批层级(0=初审,1=复审,2=专家评审,3=市级评审)") + private Integer approvalLevel; + + @Excel(name = "审批部门id") + private Long approvalDept; + + /** + * 审批人id + */ + @Excel(name = "默认审批人id") + private Long approvalById; + + @Excel(name = "审批人(可能有多个)") + private String approvalByIds; + + @Excel(name = "下一个审批id,结束为0") + private Long nextProcessId; + + /** + * 排序 + */ + @Excel(name = "排序") + private Integer sort; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Integer isDeleted; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("approvalType", getApprovalType()).append("approvalLevel", getApprovalLevel()).append("approvalById", getApprovalById()).append("approvalByIds", getApprovalByIds()).append("nextProcessId", getNextProcessId()).append("sort", getSort()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectInfo.java new file mode 100644 index 0000000..e28af5f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectInfo.java @@ -0,0 +1,98 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 项目基本信息对象 bms_project_info + * + * @author farben + * @date 2023-09-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Excel(name = "申报模版类型") + private Integer declarationTemplateType; + + /** + * 项目名称 + */ + @Excel(name = "项目名称") + private String projectName; + + /** + * 申报单位,企业id + */ + @Excel(name = "申报单位,企业id") + private Long enterpriseId; + + /** + * 产品领域(0=科技领域,1=信息技术服务,2=知识产权服务,3=检验检测服务,4=文化创意,5=科技服务,6=两业融合发展【科技服务】,7=两业融合发展【全产业链工业设计) + */ + @Excel(name = "产品领域(0=科技领域,1=信息技术服务,2=知识产权服务,3=检验检测服务,4=文化创意,5=科技服务,6=两业融合发展【科技服务】,7=两业融合发展【全产业链工业设计)") + private Long productArea; + + /** + * 年份 + */ + @Excel(name = "年份") + private String year; + + /** + * 项目开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "项目开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** + * 项目结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "项目结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + /** + * 申报竣工时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "申报竣工时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date completionTime; + + /** + * 扶持方式(0=投资补助) + */ + @Excel(name = "扶持方式(0=投资补助)") + private Long supportMethods; + + /** + * 申报时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "申报时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date declarationTime; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectSettlementAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectSettlementAward.java new file mode 100644 index 0000000..c404576 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsProjectSettlementAward.java @@ -0,0 +1,86 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 项目落户奖补对象 bms_project_settlement_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectSettlementAward extends BaseInfoEntity { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 申报单位成立时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "申报单位成立时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date establishTime; + + /** + * 截至目前员工人数 + */ + @Excel(name = "截至目前员工人数") + private Long employeeNum; + + /** + * 招商协议 + */ + @Excel(name = "招商协议") + private String agreement; + + /** + * 验资报告 + */ + @Excel(name = "验资报告") + private String report; + + /** + * 营业执照 + */ + @Excel(name = "营业执照") + private String businessLicense; + + /** + * 其他材料 + */ + @Excel(name = "其他材料") + private String otherMaterials; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("establishTime", getEstablishTime()).append("employeeNum", getEmployeeNum()).append("agreement", getAgreement()).append("report", getReport()).append("businessLicense", getBusinessLicense()).append("otherMaterials", getOtherMaterials()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsSceneOpeningAward.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsSceneOpeningAward.java new file mode 100644 index 0000000..9607390 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsSceneOpeningAward.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 场景开放奖补对象 bms_scene_opening_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsSceneOpeningAward extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 企业id + */ + @Excel(name = "企业id") + private Long enterpriseId; + + /** + * 项目名称 + */ + @Excel(name = "项目名称") + private String projectName; + + /** + * 所属类型 + */ + @Excel(name = "所属类型") + private Long type; + + /** + * 公示、发文证明、专家评分表 + */ + @Excel(name = "公示、发文证明、专家评分表") + private String material; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("enterpriseId", getEnterpriseId()).append("projectName", getProjectName()).append("type", getType()).append("material", getMaterial()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateInfo.java new file mode 100644 index 0000000..fe503b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateInfo.java @@ -0,0 +1,144 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import io.swagger.annotations.ApiModelProperty; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +public class BmsTemplateInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 模板名称 + */ + @ApiModelProperty(value = "模板名称") + @Excel(name = "模板名称") + private String templateName; + + + /** + * 级别 0:本级,1:省级 + */ + @ApiModelProperty(value = "级别 0:本级,1:省级") + @Excel(name = "级别 ", readConverterExp = "0=本级,1=省级") + private Long level; + + /** + * 产品领域 生产性服务业 现代服务业 新兴服务业 + */ + @ApiModelProperty(value = "产品领域 0:生产性服务业 1:现代服务业 2:新兴服务业") + @Excel(name = "产品领域", readConverterExp = "0=生产性服务业,1=现代服务业,2=新兴服务业") + private Long productArea; + + /** + * 申报类型 0:/, 1:试点区域,2:龙头型,3:创新型 + */ + @ApiModelProperty(value = "申报类型 0:/, 1:试点区域,2:龙头型,3:创新型") + @Excel(name = "申报类型", readConverterExp = "0=/, 1=试点区域,2=龙头型,3=创新型") + private Long type; + + /** + * 表单说明 + */ + @ApiModelProperty(value = "表单说明") + @Excel(name = "表单说明") + private String notes; + + /** + * 责任单位 0:经发委:1:规建委:2:行审局:3:市监局 + */ + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位", readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @ApiModelProperty(value = "是否删除:0,未删除;1,已删除") + @Excel(name = "是否删除", readConverterExp = "0=未删除,1=已删除") + private Long isDeleted; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public Long getLevel() { + return level; + } + + public void setLevel(Long level) { + this.level = level; + } + + public Long getProductArea() { + return productArea; + } + + public void setProductArea(Long productArea) { + this.productArea = productArea; + } + + public Long getType() { + return type; + } + + public void setType(Long type) { + this.type = type; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public Long getResponsibilityUnit() { + return responsibilityUnit; + } + + public void setResponsibilityUnit(Long responsibilityUnit) { + this.responsibilityUnit = responsibilityUnit; + } + + public Long getIsDeleted() { + return isDeleted; + } + + public void setIsDeleted(Long isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("templateName", getTemplateName()).append("level", getLevel()).append("productArea", getProductArea()).append("type", getType()).append("notes", getNotes()).append("responsibilityUnit", getResponsibilityUnit()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateRecord.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateRecord.java new file mode 100644 index 0000000..812aef4 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BmsTemplateRecord.java @@ -0,0 +1,75 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Size; +import java.util.Date; + +/** + * 在线模板对象 bms_template_record + * + * @author farben + * @date 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateRecord extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 模版id + */ + @Excel(name = "模版id") + private Long templateId; + + /** + * 企业名录分类 + */ + @ApiModelProperty(value = "企业名录分类") + @Excel(name = "企业名录分类") + private String enterpriseDirectory; + + /** + * 开放开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** + * 开放结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + @Excel(name = "上传文件名称") + private String fileName; + + /** + * 申报途径 0:系统申报;1:补录 + */ + @Excel(name = "申报途径 0:系统申报;1:补录") + private Long road; + + /** + * 说明 + */ + @Excel(name = "说明") + @Size(max = 200, message = "说明的长度要小于 200") + private String notes; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BsmFundingInfo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BsmFundingInfo.java new file mode 100644 index 0000000..e8cd9c2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/BsmFundingInfo.java @@ -0,0 +1,110 @@ +package com.ruoyi.jjh.declaration.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.common.entity.BaseInfoEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.Date; + +/** + * 资金信息对象 bsm_funding_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BsmFundingInfo extends BaseInfoEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 模板类型:1:项目落户奖补,2:做大做强奖补 + */ + @Excel(name = "模板类型:1:项目落户奖补,2:做大做强奖补") + private Integer type; + + /** + * 对应模板id + */ + @Excel(name = "对应模板id") + private Long templateId; + + @ApiModelProperty(value = "详情id") + private Long detailId; + + /** + * 营收年份 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "营收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date revenueYear; + + /** + * 营收 + */ + @Excel(name = "营收") + private Long revenue; + + /** + * 税收年份 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "税收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date taxationYear; + + /** + * 税收 + */ + @Excel(name = "税收") + private Long taxation; + + /** + * 预计营收年份 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "预计营收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date expectedRevenueYear; + + /** + * 预计营收 + */ + @Excel(name = "预计营收") + private Long expectedRevenue; + + /** + * 预计税收年份 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "预计税收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date expectedTaxationYear; + + /** + * 预计税收 + */ + @Excel(name = "预计税收") + private Long expectedTaxation; + + /** + * 是否删除:0,未删除;1,已删除 + */ + @Excel(name = "是否删除:0,未删除;1,已删除") + private Long isDeleted; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("type", getType()).append("templateId", getTemplateId()).append("revenueYear", getRevenueYear()).append("revenue", getRevenue()).append("taxationYear", getTaxationYear()).append("taxation", getTaxation()).append("expectedRevenueYear", getExpectedRevenueYear()).append("expectedRevenue", getExpectedRevenue()).append("expectedTaxationYear", getExpectedTaxationYear()).append("expectedTaxation", getExpectedTaxation()).append("isDeleted", getIsDeleted()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()).toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/AppendixParamDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/AppendixParamDto.java new file mode 100644 index 0000000..7817e63 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/AppendixParamDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import lombok.Data; + +/** + * <p> + * 附件参数dto + * <p> + * + * @className: AppendixParamDto + * @author: emiya.xie + * @create: 2023-03-03 10:46 + */ +@Data +public class AppendixParamDto { + + /** + * 附件id + */ + private Long id; + /** + * 其他 + */ + private String name; + /** + * 文件名称 + */ + private String deliverablesName; +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/ApprovalDeclarationRecordsQueryDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/ApprovalDeclarationRecordsQueryDto.java new file mode 100644 index 0000000..5389f27 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/ApprovalDeclarationRecordsQueryDto.java @@ -0,0 +1,56 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * <p> + * 审核申报记录查询 + * <p> + * + * @className: ApprovalDeclarationRecordsQueryDto + * @author: emiya.xie + * @create: 2023-09-09 15:07 + */ +@Data +public class ApprovalDeclarationRecordsQueryDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "事项") + private String matter; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目类型:也就是产品领域") + private Integer productArea; + + @ApiModelProperty(value = "申报单位") + private String enterpriseName; + + @ApiModelProperty(value = "扶持方式") + private Integer supportMethods; + + @ApiModelProperty(value = "项目开始时间") + private Date startTime; + + @ApiModelProperty(value = "项目结束时间") + private Date endTime; + + @ApiModelProperty(value = "审核状态") + private Integer status; + + @ApiModelProperty(value = "用户id") + private List<Long> userIds; + + @ApiModelProperty(value = "审批人id") + private Long approvalById; + + @ApiModelProperty(value = "审批状态集合") + private List<Integer> approvalStatusStr; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsApprovalInfoUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsApprovalInfoUpdateDto.java new file mode 100644 index 0000000..f925a86 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsApprovalInfoUpdateDto.java @@ -0,0 +1,43 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 审批记录信息对象 bms_approval_info + * + * @author farben + * @date 2023-09-09 + */ +@Data +public class BmsApprovalInfoUpdateDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 主键id */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** 申报记录id */ + @Excel(name = "申报记录id") + private Long declarationRecordsId; + + /** 审批状态(0=待审核.1=审批通过,2=审批驳回) */ + @Excel(name = "审批状态(0=待审核.1=审批通过,2=审批驳回)") + private Integer approvalStatus; + + /** 审批意见 */ + @Excel(name = "审批意见") + private String approvalOpinions; + + /** 审批附件 */ + @Excel(name = "审批附件") + private String approvalAttachment; + + @Excel(name = "排序") + private Integer sort; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardAddDto.java new file mode 100644 index 0000000..a9125ed --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardAddDto.java @@ -0,0 +1,44 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 做大做强奖详情对象 bms_big_strong_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsBigStrongAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 成立时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "成立时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date establishTime; + + /** 是否获得园区其他经营奖励 */ + @Excel(name = "是否获得园区其他经营奖励,0:是,1:否",readConverterExp = "0=是,1=否") + private int isGainRewards; + + @Excel(name = "奖励说明") + private String rewardDescription; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetailAddDto> fundingDetailList; + + /** 企业近3年发展情况及未来发展计划 */ + @Excel(name = "企业近3年发展情况及未来发展计划") + private String developmentPlan; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardUpdateDto.java new file mode 100644 index 0000000..c48054a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBigStrongAwardUpdateDto.java @@ -0,0 +1,38 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * 做大做强奖详情对象 bms_big_strong_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsBigStrongAwardUpdateDto extends BmsBigStrongAward implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetail> fundingDetailList; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardAddDto.java new file mode 100644 index 0000000..b96d8e5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardAddDto.java @@ -0,0 +1,34 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 品牌打造奖补对象 bms_branding_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsBrandingAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + + /** 所获荣誉/所举办活动 */ + @Excel(name = "所获荣誉/所举办活动") + private String honorsReceived; + + /** 所属等级 */ + @Excel(name = "所属等级") + private Long level; + + /** 证明材料 */ + @Excel(name = "证明材料") + private String evidence; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardUpdateDto.java new file mode 100644 index 0000000..ec9dbb7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsBrandingAwardUpdateDto.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 品牌打造奖补对象 bms_branding_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsBrandingAwardUpdateDto extends BmsBrandingAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardAddDto.java new file mode 100644 index 0000000..e6c9ffd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardAddDto.java @@ -0,0 +1,45 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 载体建设奖补对象 bms_carrier_construction_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsCarrierConstructionAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 文体企业数量占比 */ + @Excel(name = "文体企业数量占比") + private String quantityProportion; + + /** 文体企业营收占比 */ + @Excel(name = "文体企业营收占比") + private String revenueProportion; + + /** 文体企业从业人员占比 */ + @Excel(name = "文体企业从业人员占比") + private String personnelProportion; + + /** 相关佐证材料 */ + @Excel(name = "相关佐证材料") + private String supportingMaterials; + + /** 项目工商登记许可 */ + @Excel(name = "项目工商登记许可") + private String businessLicense; + + /** 消防验收报告 */ + @Excel(name = "消防验收报告") + private String fireReport; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardUpdateDto.java new file mode 100644 index 0000000..3ff45b2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCarrierConstructionAwardUpdateDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 载体建设奖补对象 bms_carrier_construction_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsCarrierConstructionAwardUpdateDto extends BmsCarrierConstructionAward { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @Excel(name = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementAddDto.java new file mode 100644 index 0000000..79c719d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementAddDto.java @@ -0,0 +1,32 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 信用管理奖补对象 bms_credit_management + * + * @author farben + * @date 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsCreditManagementAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + private static final long serialVersionUID = 1L; + + /** 项目方案(包括项目基本情况介绍、项目投资情况以及实施进展、项目目标及取得的主要成效) */ + @Excel(name = "项目方案") + private String projectPlan; + + /** 资金使用说明(项目未完成的需提供,内容主要包括项目计划投资额,投资明细,目前已完成投资情况和后续投入计划等) */ + @Excel(name = "资金使用说明") + private String usesFunds; + + /** 项目专项审计报告(项目已完成的需提供) */ + @Excel(name = "项目专项审计报告") + private String auditReport; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementUpdateDto.java new file mode 100644 index 0000000..4d59d1d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsCreditManagementUpdateDto.java @@ -0,0 +1,32 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 信用管理奖补对象 bms_credit_management + * + * @author farben + * @date 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsCreditManagementUpdateDto extends BmsCreditManagement { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsAddDto.java new file mode 100644 index 0000000..257204b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsAddDto.java @@ -0,0 +1,60 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 在线申报记录对象 bms_declaration_records + * + * @author farben + * @date 2023-08-28 + */ +@Data +public class BmsDeclarationRecordsAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 项目名称 */ + @ApiModelProperty(value = "项目名称") + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目Id") + private Long projectId; + + @ApiModelProperty(value = "提交事项") + private Long matter; + + /** 企业id */ + @ApiModelProperty(value = "企业id") + private Long enterpriseId; + + /** 年份 */ + @ApiModelProperty(value = "年份") + @Excel(name = "年份") + private String year; + + /** 模板id */ + @ApiModelProperty(value = "模板id") + private Long templateId; + + /** 申报模版类型 */ + @ApiModelProperty(value = "申报模版类型") + private Long declarationTemplateType; + + /** 详情id:对应详情id */ + @ApiModelProperty(value = "详情id:对应详情id") + private Long detailId; + + @ApiModelProperty(value = "添加的字段") + private List<BmsFieldInfoAddDto> fieldList; + + @ApiModelProperty(value = "上传的文件") + private List<BmsFileInfoAddDto> fileList; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsDto.java new file mode 100644 index 0000000..b72616f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsDeclarationRecordsDto.java @@ -0,0 +1,49 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * <p> + * 在线申报列表VO + * <p> + * + * @className: BmsDeclarationRecordsDto + * @author: emiya.xie + * @create: 2023-08-28 17:54 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsDeclarationRecordsDto extends BmsDeclarationRecords { + + @ApiModelProperty(value = "申报单位") + @Excel(name = "申报单位") + private String enterpriseName; + + /** 级别 0:本级,1:省级 */ + @ApiModelProperty(value = "级别 0:本级,1:省级") + @Excel(name = "级别", readConverterExp = "0=本级,1=省级") + private Long level; + + /** 申报类型 0:/, 1:试点区域,2:龙头型,3:创新型 */ + @ApiModelProperty(value = "申报类型 0:/, 1:试点区域,2:龙头型,3:创新型") + @Excel(name = "申报类型", readConverterExp = "0=/,1=试点区域,2=龙头型,3=创新型") + private Long type; + + /** 责任单位 0:经发委:1:规建委:2:行审局:3:市监局 */ + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位", readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + @ApiModelProperty(value = "模板名称") + private String templateName; + + @ApiModelProperty(value = "审批状态") + @Excel(name = "审批状态",readConverterExp = "0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private List<Long> statusStr; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsEnterpriseBasicInfoAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsEnterpriseBasicInfoAddDto.java new file mode 100644 index 0000000..d4bed3f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsEnterpriseBasicInfoAddDto.java @@ -0,0 +1,61 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 企业基础信息对象 bms_enterprise_basic_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +public class BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @Excel(name = "企业统一信用代码") + @ApiModelProperty(value = "企业统一信用代码") + private String creditCode; + + @Excel(name = "企业名称") + @ApiModelProperty(value = "企业名称") + private String enterpriseName; + + @Excel(name = "联系人") + @ApiModelProperty(value = "联系人") + private String contacts; + + @Excel(name = "联系人电话") + @ApiModelProperty(value = "联系人电话") + private String contactsNumber; + + @Excel(name = "企业地址") + @ApiModelProperty(value = "企业地址") + private String address; + + @ApiModelProperty(value = "在线申报模版id") + private int templateRecordId; + + @ApiModelProperty(value = "申报时间") + private Date fillingTime; + + @ApiModelProperty(value = "申报模版类型") + private int declarationTemplateType; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "年份") + private String year; + + @ApiModelProperty(value = "审批状态:0:草稿,1:初审中") + private Integer status; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFieldInfoAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFieldInfoAddDto.java new file mode 100644 index 0000000..ba98cc5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFieldInfoAddDto.java @@ -0,0 +1,32 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 模板字段填写详情对象 bms_field_info + * + * @author farben + * @date 2023-09-04 + */ +@Data +public class BmsFieldInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 详情id */ + @Excel(name = "详情id") + private Long detailId; + + /** 字段名称 */ + @Excel(name = "字段名称") + private String fieldName; + + /** 字段说明 */ + @Excel(name = "字段说明") + private String fieldResult; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFileInfoAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFileInfoAddDto.java new file mode 100644 index 0000000..a9e4172 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFileInfoAddDto.java @@ -0,0 +1,35 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 文件存储说明详情对象 bms_file_info + * + * @author farben + * @date 2023-09-04 + */ +@Data +public class BmsFileInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 详情id */ + @Excel(name = "详情id") + private Long detailId; + + /** 文件名称 */ + @Excel(name = "文件名称") + private String fileName; + + /** 文件说明 */ + @Excel(name = "文件说明") + private String fileDescription; + + /** 文件地址 */ + @Excel(name = "文件地址") + private String fileUrl; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailAddDto.java new file mode 100644 index 0000000..7df075f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailAddDto.java @@ -0,0 +1,45 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 资金信息详情对象 bms_funding_detail + * + * @author farben + * @date 2023-09-04 + */ +@Data +public class BmsFundingDetailAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 模板类型:1:项目落户奖补,2:做大做强奖补 */ + @Excel(name = "模板类型:1:项目落户奖补,2:做大做强奖补") + private Integer type; + + /** 对应模板id */ + @Excel(name = "对应模板id") + private Long templateRecordId; + + /** 详情id */ + @Excel(name = "详情id") + private Long detailId; + + private String vModel; + + /** 年份 */ + @Excel(name = "年份") + private String year; + + /** 说明 */ + @Excel(name = "说明") + private String illustrate; + + /** 金额 */ + @Excel(name = "金额") + private Long amount; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailUpdateDto.java new file mode 100644 index 0000000..7f599fe --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsFundingDetailUpdateDto.java @@ -0,0 +1,47 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 资金信息详情对象 bms_funding_detail + * + * @author farben + * @date 2023-09-04 + */ +@Data +public class BmsFundingDetailUpdateDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "资金信息详情id") + private Long id; + + /** 模板类型:1:项目落户奖补,2:做大做强奖补 */ + @Excel(name = "模板类型:1:项目落户奖补,2:做大做强奖补") + private Integer type; + + /** 对应模板id */ + @Excel(name = "对应模板id") + private Long templateId; + + /** 详情id */ + @Excel(name = "详情id") + private Long detailId; + + /** 年份 */ + @Excel(name = "年份") + private String year; + + /** 说明 */ + @Excel(name = "说明") + private String illustrate; + + /** 金额 */ + @Excel(name = "金额") + private Long amount; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardAddDto.java new file mode 100644 index 0000000..e90d644 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardAddDto.java @@ -0,0 +1,30 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 5G+工业互联网奖补对象 bms_industrial_internet_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsIndustrialInternetAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + private static final long serialVersionUID = 1L; + + + /** 荣誉名称 */ + @Excel(name = "荣誉名称") + private String honoraryName; + + /** 证明材料 */ + @Excel(name = "证明材料") + private String material; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardUpdateDto.java new file mode 100644 index 0000000..2064a9b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIndustrialInternetAwardUpdateDto.java @@ -0,0 +1,33 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 5G+工业互联网奖补对象 bms_industrial_internet_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsIndustrialInternetAwardUpdateDto extends BmsIndustrialInternetAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesAddDto.java new file mode 100644 index 0000000..de726dc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesAddDto.java @@ -0,0 +1,60 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 两业融合奖补对象 bms_integration_industries + * + * @author farben + * @date 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsIntegrationIndustriesAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @Excel(name = "申报类型",readConverterExp = "1=两业融合示范企业,2=制造业企业设立财务独立核算的制造服务业职能部门,3=制造业企业剥离服务业务成立独立的法人") + private Integer declarationType; + + /** 证明材料 */ + @Excel(name = "证明材料") + private String evidence; + + /** 营业执照 */ + @Excel(name = "营业执照") + private String businessLicense; + + /** 完税证明 */ + @Excel(name = "完税证明") + private String taxPaymentCertificate; + + /** 审计报告 */ + @Excel(name = "审计报告") + private String auditReport; + + /** 股权架构图 */ + @Excel(name = "股权架构图") + private String equityStructureChart; + + /** 项目申报报告(含企业基本情况和项目基本情况) */ + @Excel(name = "项目申报报告") + private String declarationReport; + + /** 独立核算相关证明 */ + @Excel(name = "独立核算相关证明") + private String independentAccounting; + + /** 验资报告 */ + @Excel(name = "验资报告") + private String capitalVerificationReport; + + /** 证明材料 */ + @Excel(name = "证明材料") + private String otherEvidence; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesUpdateDto.java new file mode 100644 index 0000000..53b2724 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsIntegrationIndustriesUpdateDto.java @@ -0,0 +1,32 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 两业融合奖补对象 bms_integration_industries + * + * @author farben + * @date 2023-09-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsIntegrationIndustriesUpdateDto extends BmsIntegrationIndustries { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardAddDto.java new file mode 100644 index 0000000..762e219 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardAddDto.java @@ -0,0 +1,37 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 物流发展奖补对象 bms_logistics_development_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsLogisticsDevelopmentAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 荣誉证明文件 */ + @Excel(name = "荣誉证明文件") + private String honorCertificate; + + /** 平台名称 */ + @Excel(name = "平台名称") + private String platformName; + + /** 企业投资项目备案通知书或核准批复文件 */ + @Excel(name = "企业投资项目备案通知书或核准批复文件") + private String filingNotice; + + /** 会计师事务所出具的企业财务报表审计报告 */ + @Excel(name = "会计师事务所出具的企业财务报表审计报告") + private String auditReport; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardUpdateDto.java new file mode 100644 index 0000000..6c169d8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsLogisticsDevelopmentAwardUpdateDto.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 物流发展奖补对象 bms_logistics_development_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsLogisticsDevelopmentAwardUpdateDto extends BmsLogisticsDevelopmentAward { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardAddDto.java new file mode 100644 index 0000000..0ac496c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardAddDto.java @@ -0,0 +1,38 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 制造服务业有效投入奖补对象 bms_manufacturing_services_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsManufacturingServicesAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 企业投资项目备案通知书或核准批复文件 */ + @Excel(name = "企业投资项目备案通知书或核准批复文件") + private String filingNotice; + + /** 购置设备发票清单及发票扫描件 */ + @Excel(name = "购置设备发票清单及发票扫描件") + private String invoice; + + /** 会计师事务所出具的企业申报项目购置设备情况的专项审计报告 */ + @Excel(name = "会计师事务所出具的企业申报项目购置设备情况的专项审计报告") + private String auditReport; + + /** 会计师事务所出具的企业财务报表审计报告 */ + @Excel(name = "会计师事务所出具的企业财务报表审计报告") + private String financialStatements; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardUpdateDto.java new file mode 100644 index 0000000..7c1c469 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsManufacturingServicesAwardUpdateDto.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 制造服务业有效投入奖补对象 bms_manufacturing_services_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsManufacturingServicesAwardUpdateDto extends BmsManufacturingServicesAward { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsMunicipalBureauReviewQueryDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsMunicipalBureauReviewQueryDto.java new file mode 100644 index 0000000..693176a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsMunicipalBureauReviewQueryDto.java @@ -0,0 +1,50 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * <p> + * 市局评审 查询 + * <p> + * + * @className: BmsDeclarationRecordsQueryVo + * @author: emiya.xie + * @create: 2023-08-28 17:54 + */ +@Data +public class BmsMunicipalBureauReviewQueryDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + @Excel(name="对应id") + private Long id; + + @ApiModelProperty(value = "统一信用代码") + @Excel(name = "统一信用代码") + private String creditCode; + + @ApiModelProperty(value = "企业名称") + @Excel(name = "企业名称") + private String enterpriseName; + + @ApiModelProperty(value = "申报类型") + @Excel(name = "申报类型") + private String projectName; + + @ApiModelProperty(value = "年份") + @Excel(name = "年份") + private String year; + + @ApiModelProperty(value = "市级评定结果,0:通过,1:不通过") + private Integer result; + + @ApiModelProperty(value = "市级评定结果意见") + private String opinion; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardAddDto.java new file mode 100644 index 0000000..ce4b7b9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardAddDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 平台建设奖补对象 bms_platform_construction_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsPlatformConstructionAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 平台(项目)名称 */ + @Excel(name = "平台(项目)名称") + private String platformName; + + /** 合作协议 */ + @Excel(name = "合作协议") + private String agreement; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardUpdateDto.java new file mode 100644 index 0000000..af8bab1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsPlatformConstructionAwardUpdateDto.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 平台建设奖补对象 bms_platform_construction_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsPlatformConstructionAwardUpdateDto extends BmsPlatformConstructionAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardAddDto.java new file mode 100644 index 0000000..99d3b4d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardAddDto.java @@ -0,0 +1,53 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 项目落户奖补对象 bms_project_settlement_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectSettlementAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "申报单位成立时间", width = 30, dateFormat = "yyyy-MM-dd") + @ApiModelProperty(value = "申报单位成立时间") + private Date establishTime; + + @Excel(name = "截至目前员工人数") + @ApiModelProperty(value = "截至目前员工人数") + private Long employeeNum; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetailAddDto> fundingDetailList; + + @Excel(name = "招商协议") + @ApiModelProperty(value = "招商协议") + private String agreement; + + @Excel(name = "验资报告") + @ApiModelProperty(value = "验资报告") + private String report; + + @Excel(name = "其他材料") + @ApiModelProperty(value = "其他材料") + private String otherMaterials; + + @Excel(name = "营业执照") + @ApiModelProperty(value = "营业执照") + private String businessLicense; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardUpdateDto.java new file mode 100644 index 0000000..add5903 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsProjectSettlementAwardUpdateDto.java @@ -0,0 +1,39 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.List; + +/** + * 项目落户奖补对象 bms_project_settlement_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectSettlementAwardUpdateDto extends BmsProjectSettlementAward implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetail> fundingDetailList; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardAddDto.java new file mode 100644 index 0000000..aefe2fa --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardAddDto.java @@ -0,0 +1,33 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 场景开放奖补对象 bms_scene_opening_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsSceneOpeningAwardAddDto extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 项目名称 */ + @Excel(name = "项目名称") + private String projectName; + + /** 所属类型 */ + @Excel(name = "所属类型") + private Long type; + + /** 公示、发文证明、专家评分表 */ + @Excel(name = "公示、发文证明、专家评分表") + private String material; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardUpdateDto.java new file mode 100644 index 0000000..0f5d23b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsSceneOpeningAwardUpdateDto.java @@ -0,0 +1,28 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 场景开放奖补对象 bms_scene_opening_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsSceneOpeningAwardUpdateDto extends BmsSceneOpeningAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "审批状态:0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝,9=评定驳回") + private Long status; + + @ApiModelProperty(value = "项目id") + private Long projectId; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateInfoAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateInfoAddDto.java new file mode 100644 index 0000000..1a8adf9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateInfoAddDto.java @@ -0,0 +1,27 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateInfoAddDto extends BmsTemplateInfo { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业名录") + private List<BmsEnterpriseDirectory> enterpriseDirectoryList; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateQueryDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateQueryDto.java new file mode 100644 index 0000000..e94af88 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateQueryDto.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +public class BmsTemplateQueryDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业id") + private Long enterpriseId; + + @ApiModelProperty(value = "企业信用统一信用代码") + private String creditCode; + + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位",readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordAddDto.java new file mode 100644 index 0000000..cbed95a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordAddDto.java @@ -0,0 +1,25 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 在线模板对象 bms_template_record + * + * @author farben + * @date 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateRecordAddDto extends BmsTemplateRecord { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业名录") + private List<BmsEnterpriseDirectory> enterpriseDirectoryList; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordQueryDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordQueryDto.java new file mode 100644 index 0000000..e59429b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordQueryDto.java @@ -0,0 +1,52 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +public class BmsTemplateRecordQueryDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业名录") + private String enterpriseDirectory; + + @ApiModelProperty(value = "模板id") + private Long templateId; + + @ApiModelProperty(value = "级别 0:本级,1:省级") + @Excel(name = "级别 ",readConverterExp = "0=本级,1=省级") + private Integer level; + + @ApiModelProperty(value = "申报途径,0:系统申报,1:补录") + @Excel(name = "申报途径",readConverterExp = "0=系统申报,1=补录") + private Long road; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** 开放结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位",readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + @ApiModelProperty(value = "模板名称") + private String templateName; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordUpdateDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordUpdateDto.java new file mode 100644 index 0000000..45b4cb1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BmsTemplateRecordUpdateDto.java @@ -0,0 +1,27 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +/** + * 在线模板对象 bms_template_record + * + * @author farben + * @date 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateRecordUpdateDto extends BmsTemplateRecord { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业名录") + private List<BmsEnterpriseDirectory> enterpriseDirectoryList; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BsmFundingInfoAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BsmFundingInfoAddDto.java new file mode 100644 index 0000000..f84afae --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/BsmFundingInfoAddDto.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import com.ruoyi.common.annotation.Excel; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 资金信息对象 bsm_funding_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +public class BsmFundingInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 模板类型:0:项目落户奖补,1:做大做强奖补 */ + @Excel(name = "模板类型:1:项目落户奖补,2:做大做强奖补") + private Long type; + + /** 对应模板id */ + @Excel(name = "对应模板id") + private Long templateId; + + @ApiModelProperty(value = "详情id") + private Long detailId; + + /** 营收年份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "营收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date revenueYear; + + /** 营收 */ + @Excel(name = "营收") + private Long revenue; + + /** 税收年份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "税收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date taxationYear; + + /** 税收 */ + @Excel(name = "税收") + private Long taxation; + + /** 预计营收年份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "预计营收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date expectedRevenueYear; + + /** 预计营收 */ + @Excel(name = "预计营收") + private Long expectedRevenue; + + /** 预计税收年份 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "预计税收年份", width = 30, dateFormat = "yyyy-MM-dd") + private Date expectedTaxationYear; + + /** 预计税收 */ + @Excel(name = "预计税收") + private Long expectedTaxation; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewDto.java new file mode 100644 index 0000000..22a0167 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewDto.java @@ -0,0 +1,29 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * <p> + * 市级评定Dto + * <p> + * + * @className: MunicipalReviewInfoDto + * @author: emiya.xie + * @create: 2023-09-13 16:30 + */ +@Data +public class MunicipalReviewDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "市级评定信息-old") + private List<MunicipalReviewInfoDto> list; + + @ApiModelProperty(value = "市级评定信息-new") + private List<BmsMunicipalBureauReviewQueryDto> reviewList; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewInfoDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewInfoDto.java new file mode 100644 index 0000000..b646787 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/MunicipalReviewInfoDto.java @@ -0,0 +1,46 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * <p> + * 市级评定 + * <p> + * + * @className: MunicipalReviewInfoDto + * @author: emiya.xie + * @create: 2023-09-13 16:30 + */ +@Data +public class MunicipalReviewInfoDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long declarationId; + + @ApiModelProperty(value = "企业id") + private Long enterpriseId; + + @ApiModelProperty(value = "企业名称") + private String enterpriseName; + + @ApiModelProperty(value = "企业统一信用代码") + private String creditCode; + + @ApiModelProperty(value = "申报类型说明") + private String declarationTypeStr; + + @ApiModelProperty(value = "年份") + private String year; + + @ApiModelProperty(value = "市级评定结果") + private String result; + + @ApiModelProperty(value = "结果") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/OpenInterfaceApplyAddDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/OpenInterfaceApplyAddDto.java new file mode 100644 index 0000000..1f11cc6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/OpenInterfaceApplyAddDto.java @@ -0,0 +1,57 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * <p> + * 申请记录信息新增-开放 + * <p> + * + * @className: OpenInterfaceApplyAddDto + * @author: emiya.xie + * @create: 2023-09-12 14:42 + */ +@Data +public class OpenInterfaceApplyAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "申报模版类型") + private Integer declarationTemplateType; + + @ApiModelProperty(value = "项目落户奖补新增Dto") + private BmsProjectSettlementAwardAddDto bmsProjectSettlementAwardAddDto; + + @ApiModelProperty(value = "做大做强奖补新增Dto") + private BmsBigStrongAwardAddDto bmsBigStrongAwardAddDto; + + @ApiModelProperty(value = "载体建设奖补新增Dto") + private BmsCarrierConstructionAwardAddDto bmsCarrierConstructionAwardAddDto; + + @ApiModelProperty(value = "台建设奖补新增Dto") + private BmsPlatformConstructionAwardAddDto bmsPlatformConstructionAwardAddDto; + + @ApiModelProperty(value = "品牌打造奖补新增Dto") + private BmsBrandingAwardAddDto bmsBrandingAwardAddDto; + + @ApiModelProperty(value = "场景开放奖补新增Dto") + private BmsSceneOpeningAwardAddDto bmsSceneOpeningAwardAddDto; + + @ApiModelProperty(value = "信用管理奖补新增Dto") + private BmsCreditManagementAddDto bmsCreditManagementAddDto; + + @ApiModelProperty(value = "5G+工业互联网奖补新增Dto") + private BmsIndustrialInternetAwardAddDto bmsIndustrialInternetAwardAddDto; + + @ApiModelProperty(value = "制造服务业有效投入奖补新增Dto") + private BmsManufacturingServicesAwardAddDto bmsManufacturingServicesAwardAddDto; + + @ApiModelProperty(value = "物流发展奖补新增Dto") + private BmsLogisticsDevelopmentAwardAddDto bmsLogisticsDevelopmentAwardAddDto; + + @ApiModelProperty(value = "两业融合奖补新增Dto") + private BmsIntegrationIndustriesAddDto bmsIntegrationIndustriesAddDto; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/UploadDto.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/UploadDto.java new file mode 100644 index 0000000..4aaec09 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/dto/UploadDto.java @@ -0,0 +1,20 @@ +package com.ruoyi.jjh.declaration.entity.dto; + +import lombok.Data; + +/** + * <p> + * 上传内容 + * <p> + * + * @className: UploadDto + * @author: emiya.xie + * @create: 2023-03-01 09:53 + */ +@Data +public class UploadDto { + + private String name; + + private String url; +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/ApprovalDeclarationRecordsQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/ApprovalDeclarationRecordsQueryVo.java new file mode 100644 index 0000000..27d938c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/ApprovalDeclarationRecordsQueryVo.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 审核申报记录查询 + * <p> + * + * @className: ApprovalDeclarationRecordsQueryDto + * @author: emiya.xie + * @create: 2023-09-09 15:07 + */ +@Data +public class ApprovalDeclarationRecordsQueryVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; + + @ApiModelProperty(value = "审批状态(0=待审核.1=审批通过,2=审批驳回)") + private Integer approvalStatus; + + @ApiModelProperty(value = "事项") + private String matter; + + @ApiModelProperty(value = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目类型:也就是产品领域") + private Integer productArea; + + @ApiModelProperty(value = "申报单位") + private String enterpriseName; + + @ApiModelProperty(value = "扶持方式") + private Integer supportMethods; + + @ApiModelProperty(value = "申请时间") + private Date createTime; + + @ApiModelProperty(value = "项目开始时间") + private Date startTime; + + @ApiModelProperty(value = "项目结束时间") + private Date endTime; + + @ApiModelProperty(value = "审核状态") + private Integer status; + + @ApiModelProperty(value = "申报记录模板id") + private Long templateRecordId; + + @ApiModelProperty(value = "申报记录模板id") + private Long templateId; + + @ApiModelProperty(value = "记录id") + private Long declarationRecordsId; + + @ApiModelProperty(value = "详情id") + private Long detailId; + + @ApiModelProperty(value = "审批时间") + private Date approvalTime; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsApprovalInfoQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsApprovalInfoQueryVo.java new file mode 100644 index 0000000..2c0a0a0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsApprovalInfoQueryVo.java @@ -0,0 +1,58 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 审批记录信息对象 bms_approval_info + * + * @author farben + * @date 2023-09-09 + */ +@Data +public class BmsApprovalInfoQueryVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** 主键id */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @Excel(name = "默认审批人id") + private Long approvalById; + + @Excel(name = "默认审批人") + private String approvalByName; + + /** 审批状态(0=待审核.1=审批通过,2=审批驳回) */ + @Excel(name = "审批状态(0=待审核.1=审批通过,2=审批驳回)") + private Integer approvalStatus; + + /** 审批意见 */ + @Excel(name = "审批意见") + private String approvalOpinions; + + /** 审批附件 */ + @Excel(name = "审批附件") + private String approvalAttachment; + + /** 是否可审核(0=是,1=否,2=结束) */ + @Excel(name = "是否可审核(0=是,1=否,2=结束)") + private Integer isReview; + + @Excel(name = "是否为拒绝前数据,0:否,1:是") + private Integer isBeforeData; + + /** 排序 */ + @Excel(name = "排序") + private Integer sort; + + @Excel(name = "审批时间") + private String approvalTime; + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsBigStrongAwardQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsBigStrongAwardQueryVo.java new file mode 100644 index 0000000..8e52ed0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsBigStrongAwardQueryVo.java @@ -0,0 +1,26 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +/** + * 做大做强奖详情对象 bms_big_strong_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsBigStrongAwardQueryVo extends BmsBigStrongAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetail> fundingDetailList; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsDeclarationRecordsQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsDeclarationRecordsQueryVo.java new file mode 100644 index 0000000..37497bf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsDeclarationRecordsQueryVo.java @@ -0,0 +1,89 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * <p> + * 在线申报列表VO + * <p> + * + * @className: BmsDeclarationRecordsQueryVo + * @author: emiya.xie + * @create: 2023-08-28 17:54 + */ +@Data +public class BmsDeclarationRecordsQueryVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + private Long id; + + @ApiModelProperty(value = "项目名称") + @Excel(name = "项目名称") + private String projectName; + + @ApiModelProperty(value = "项目id") + private Long projectId; + + @ApiModelProperty(value = "申报单位") + @Excel(name = "申报单位") + private String enterpriseName; + + @ApiModelProperty(value = "级别 0:本级,1:省级") + @Excel(name = "级别", readConverterExp = "0=本级,1=省级") + private Long level; + + @ApiModelProperty(value = "年份") + @Excel(name = "年份") + private String year; + + @ApiModelProperty(value = "申报类型 0:/, 1:试点区域,2:龙头型,3:创新型") + @Excel(name = "申报类型", readConverterExp = "0=/,1=试点区域,2=龙头型,3=创新型") + private Long type; + + @ApiModelProperty(value = "申报途径 0:系统申报;1:补录") + @Excel(name = "申报途径", readConverterExp = "0=系统申报,1=补录") + private Integer road; + + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位", readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + @ApiModelProperty(value = "申报表单") + @Excel(name = "申报表单", readConverterExp = "1=项目落户奖补企业申报模版,2=做大做强奖补企业申报模版,3=载体建设奖补企业申报模版" + + ",4=平台建设奖补企业申报模版,5=品牌打造奖补企业申报模版,6=场景开放奖补企业申报模版,7=信用管理奖补企业申报模版" + + ",8=5G+工业互联网奖补企业申报模版,9=制造服务业有效投入奖补企业申报模版,10=物流发展奖补企业申报模版") + private Long declarationTemplateType; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "申报时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + @ApiModelProperty(value = "企业id") + private Long enterpriseId; + + @ApiModelProperty(value = "申报模板id") + private Long templateRecordId; + + @ApiModelProperty(value = "申报模板id") + private Long templateId; + + @ApiModelProperty(value = "详情id:对应详情id") + private Long detailId; + + @ApiModelProperty(value = "审批状态") + @Excel(name = "审批状态", readConverterExp = "0=草稿,1=初审中,2=复审中,3=专家评审中,4=市级评定中,5=评定通过,6=专家评审-拒绝,7=复审-拒绝,8=初审-拒绝") + private Long status; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsMunicipalBureauReviewQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsMunicipalBureauReviewQueryVo.java new file mode 100644 index 0000000..81636b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsMunicipalBureauReviewQueryVo.java @@ -0,0 +1,51 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * <p> + * 市局评审 查询 + * <p> + * + * @className: BmsDeclarationRecordsQueryVo + * @author: emiya.xie + * @create: 2023-08-28 17:54 + */ +@Data +public class BmsMunicipalBureauReviewQueryVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + @Excel(name = "对应id") + private Long id; + + @ApiModelProperty(value = "统一信用代码") + @Excel(name = "统一信用代码") + private String creditCode; + + @ApiModelProperty(value = "企业名称") + @Excel(name = "企业名称") + private String enterpriseName; + + @ApiModelProperty(value = "申报类型") + @Excel(name = "申报类型") + private String projectName; + + @ApiModelProperty(value = "年份") + @Excel(name = "年份") + private String year; + + @ApiModelProperty(value = "市级评定结果,0:通过,1:不通过") + @Excel(name = "市级评定结果,0:通过,1:不通过") + private Integer result; + + @ApiModelProperty(value = "市级评定结果意见") + @Excel(name = "市级评定结果意见") + private String opinion; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardQueryVo.java new file mode 100644 index 0000000..7c9746c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardQueryVo.java @@ -0,0 +1,26 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +/** + * 项目落户奖补对象 bms_project_settlement_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectSettlementAwardQueryVo extends BmsProjectSettlementAward { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetail> fundingDetailList; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardVo.java new file mode 100644 index 0000000..907c9ba --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsProjectSettlementAwardVo.java @@ -0,0 +1,67 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.dto.BmsEnterpriseBasicInfoAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsFundingDetailAddDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 项目落户奖补对象 bms_project_settlement_award + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsProjectSettlementAwardVo extends BmsEnterpriseBasicInfoAddDto implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "记录id") + private Long id; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "申报单位成立时间", width = 30, dateFormat = "yyyy-MM-dd") + @ApiModelProperty(value = "申报单位成立时间") + private Date establishTime; + + @Excel(name = "截至目前员工人数") + @ApiModelProperty(value = "截至目前员工人数") + private Long employeeNum; + + @ApiModelProperty(value = "应收列表") + private List<BmsFundingDetailAddDto> fundingDetailList; + + @Excel(name = "招商协议") + @ApiModelProperty(value = "招商协议") + private String agreement; + + @Excel(name = "验资报告") + @ApiModelProperty(value = "验资报告") + private String report; + + @Excel(name = "其他材料") + @ApiModelProperty(value = "其他材料") + private String otherMaterials; + + @Excel(name = "营业执照") + @ApiModelProperty(value = "营业执照") + private String businessLicense; + + @ApiModelProperty(value = "创建者") + private String createBy; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "备注") + private String remark; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateInfoQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateInfoQueryVo.java new file mode 100644 index 0000000..c4337cb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateInfoQueryVo.java @@ -0,0 +1,23 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateInfoQueryVo extends BmsTemplateInfo { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "创建人") + private String createByName; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordQueryVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordQueryVo.java new file mode 100644 index 0000000..c4fca42 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordQueryVo.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 申报模板信息对象 bms_template_info + * + * @author farben + * @date 2023-08-25 + */ +@Data +public class BmsTemplateRecordQueryVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业项目名录id") + private Long templateRecordId; + + @ApiModelProperty(value = "企业名录") + private String enterpriseDirectory; + + @ApiModelProperty(value = "模板类型") + private String templateName; + + @ApiModelProperty(value = "模板id") + private Long templateId; + + @ApiModelProperty(value = "级别 0:本级,1:省级") + @Excel(name = "级别 ", readConverterExp = "0=本级,1=省级") + private int level; + + @ApiModelProperty(value = "申报途径,0:系统申报,1:补录") + @Excel(name = "申报途径", readConverterExp = "0=系统申报,1=补录") + private Long road; + + @ApiModelProperty(value = "上传文件名称") + private String fileName; + + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date startTime; + + /** + * 开放结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开放结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date endTime; + + @Excel(name = "说明") + private String notes; + + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位", readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + @ApiModelProperty(value = "创建人") + private String createByName; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordVo.java new file mode 100644 index 0000000..200f38b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/BmsTemplateRecordVo.java @@ -0,0 +1,31 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 在线模板对象 bms_template_record + * + * @author farben + * @date 2023-09-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class BmsTemplateRecordVo extends BmsTemplateRecord { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业名录列表") + private List<BmsEnterpriseDirectory> enterpriseDirectoryList; + + @ApiModelProperty(value = "责任单位 0:经发委:1:规建委:2:行审局:3:市监局") + @Excel(name = "责任单位", readConverterExp = "0=经发委,1=规建委,2=行审局,3=市监局") + private Long responsibilityUnit; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/DeclarationRecordsVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/DeclarationRecordsVo.java new file mode 100644 index 0000000..aaaaa83 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/DeclarationRecordsVo.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * <p> + * 记录详情 + * <p> + * + * @className: DeclarationRecordsVo + * @author: emiya.xie + * @create: 2023-09-05 14:58 + */ +@Data +public class DeclarationRecordsVo implements Serializable { + + private static final long serialVersionUID = 1L; + @ApiModelProperty(value = "审核信息") + public List<BmsApprovalInfoQueryVo> approvalInfoList; + @ApiModelProperty(value = "申请记录") + private BmsDeclarationRecords bmsDeclarationRecords; + @ApiModelProperty(value = "企业基础信息对象") + private BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo; + @ApiModelProperty(value = "1、项目落户奖补对象") + private BmsProjectSettlementAwardQueryVo bmsProjectSettlementAwardQueryVo; + @ApiModelProperty(value = "2、做大做强奖详情对象") + private BmsBigStrongAwardQueryVo bmsBigStrongAwardQueryVo; + @ApiModelProperty(value = "3、载体建设奖补对象") + private BmsCarrierConstructionAward bmsCarrierConstructionAward; + @ApiModelProperty(value = "4、平台建设奖补对象") + private BmsPlatformConstructionAward bmsPlatformConstructionAward; + @ApiModelProperty(value = "5、品牌打造奖补对象") + private BmsBrandingAward bmsBrandingAward; + @ApiModelProperty(value = "6、场景开放奖补对象") + private BmsSceneOpeningAward bmsSceneOpeningAward; + @ApiModelProperty(value = "7、信用管理奖补对象") + private BmsCreditManagement bmsCreditManagement; + @ApiModelProperty(value = "8、5G+工业互联网奖补对象") + private BmsIndustrialInternetAward bmsIndustrialInternetAward; + @ApiModelProperty(value = "9、制造服务业有效投入奖补对象") + private BmsManufacturingServicesAward bmsManufacturingServicesAward; + @ApiModelProperty(value = "10、物流发展奖补对象") + private BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward; + @ApiModelProperty(value = "11、两业融合奖补对象") + private BmsIntegrationIndustries bmsIntegrationIndustries; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/EnterpriseInfoTemplateVo.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/EnterpriseInfoTemplateVo.java new file mode 100644 index 0000000..ca445bd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/entity/vo/EnterpriseInfoTemplateVo.java @@ -0,0 +1,35 @@ +package com.ruoyi.jjh.declaration.entity.vo; + +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * <p> + * 企业模板信息Vo + * <p> + * + * @className: EnterpriseInfoTemplateVo + * @author: emiya.xie + * @create: 2023-09-12 11:13 + */ +@Data +public class EnterpriseInfoTemplateVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "企业信息列表") + public List<BmsEnterpriseBasicInfo> enterpriseBasicList; + + @ApiModelProperty(value = "在线模板列表") + private List<BmsTemplateRecordQueryVo> templateRecordList; + + @ApiModelProperty(value = "项目列表") + private List<BmsProjectInfo> projectInfoList; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsApprovalInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsApprovalInfoMapper.java new file mode 100644 index 0000000..bd78c0e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsApprovalInfoMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsApprovalInfoQueryVo; + +import java.util.List; + +/** + * 审批记录信息Mapper接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface BmsApprovalInfoMapper extends BaseMapper<BmsApprovalInfo> { + /** + * 查询审批记录信息 + * + * @param id 审批记录信息主键 + * @return 审批记录信息 + */ + public BmsApprovalInfo selectBmsApprovalInfoById(Long id); + + /** + * 查询审批记录信息列表 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 审批记录信息集合 + */ + public List<BmsApprovalInfo> selectBmsApprovalInfoList(BmsApprovalInfo bmsApprovalInfo); + + /** + * 新增审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + public int insertBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo); + + /** + * 修改审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + public int updateBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo); + + /** + * 删除审批记录信息 + * + * @param id 审批记录信息主键 + * @return 结果 + */ + public int deleteBmsApprovalInfoById(Long id); + + /** + * 批量删除审批记录信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsApprovalInfoByIds(Long[] ids); + + public int updateApproval(Long declarationRecordsId); + + public int updateApprovalList(List<Long> list); + + public List<BmsApprovalInfoQueryVo> getApprovalInfoList(Long declarationRecordsId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBigStrongAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBigStrongAwardMapper.java new file mode 100644 index 0000000..f01ed3b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBigStrongAwardMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.vo.BmsBigStrongAwardQueryVo; + +import java.util.List; + +/** + * 做大做强奖详情Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsBigStrongAwardMapper extends BaseMapper<BmsBigStrongAward> { + /** + * 查询做大做强奖详情 + * + * @param id 做大做强奖详情主键 + * @return 做大做强奖详情 + */ + public BmsBigStrongAwardQueryVo selectBmsBigStrongAwardById(Long id); + + /** + * 查询做大做强奖详情列表 + * + * @param bmsBigStrongAward 做大做强奖详情 + * @return 做大做强奖详情集合 + */ + public List<BmsBigStrongAward> selectBmsBigStrongAwardList(BmsBigStrongAward bmsBigStrongAward); + + /** + * 新增做大做强奖详情 + * + * @param bmsBigStrongAward 做大做强奖详情 + * @return 结果 + */ + public int insertBmsBigStrongAward(BmsBigStrongAward bmsBigStrongAward); + + /** + * 修改做大做强奖详情 + * + * @param bmsBigStrongAward 做大做强奖详情 + * @return 结果 + */ + public int updateBmsBigStrongAward(BmsBigStrongAward bmsBigStrongAward); + + /** + * 删除做大做强奖详情 + * + * @param id 做大做强奖详情主键 + * @return 结果 + */ + public int deleteBmsBigStrongAwardById(Long id); + + /** + * 批量删除做大做强奖详情 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsBigStrongAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBrandingAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBrandingAwardMapper.java new file mode 100644 index 0000000..4c39cd1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsBrandingAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; + +import java.util.List; + +/** + * 品牌打造奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsBrandingAwardMapper extends BaseMapper<BmsBrandingAward> { + /** + * 查询品牌打造奖补 + * + * @param id 品牌打造奖补主键 + * @return 品牌打造奖补 + */ + public BmsBrandingAward selectBmsBrandingAwardById(Long id); + + /** + * 查询品牌打造奖补列表 + * + * @param bmsBrandingAward 品牌打造奖补 + * @return 品牌打造奖补集合 + */ + public List<BmsBrandingAward> selectBmsBrandingAwardList(BmsBrandingAward bmsBrandingAward); + + /** + * 新增品牌打造奖补 + * + * @param bmsBrandingAward 品牌打造奖补 + * @return 结果 + */ + public int insertBmsBrandingAward(BmsBrandingAward bmsBrandingAward); + + /** + * 修改品牌打造奖补 + * + * @param bmsBrandingAward 品牌打造奖补 + * @return 结果 + */ + public int updateBmsBrandingAward(BmsBrandingAward bmsBrandingAward); + + /** + * 删除品牌打造奖补 + * + * @param id 品牌打造奖补主键 + * @return 结果 + */ + public int deleteBmsBrandingAwardById(Long id); + + /** + * 批量删除品牌打造奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsBrandingAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCarrierConstructionAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCarrierConstructionAwardMapper.java new file mode 100644 index 0000000..22e4cb5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCarrierConstructionAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; + +import java.util.List; + +/** + * 载体建设奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsCarrierConstructionAwardMapper extends BaseMapper<BmsCarrierConstructionAward> { + /** + * 查询载体建设奖补 + * + * @param id 载体建设奖补主键 + * @return 载体建设奖补 + */ + public BmsCarrierConstructionAward selectBmsCarrierConstructionAwardById(Long id); + + /** + * 查询载体建设奖补列表 + * + * @param bmsCarrierConstructionAward 载体建设奖补 + * @return 载体建设奖补集合 + */ + public List<BmsCarrierConstructionAward> selectBmsCarrierConstructionAwardList(BmsCarrierConstructionAward bmsCarrierConstructionAward); + + /** + * 新增载体建设奖补 + * + * @param bmsCarrierConstructionAward 载体建设奖补 + * @return 结果 + */ + public int insertBmsCarrierConstructionAward(BmsCarrierConstructionAward bmsCarrierConstructionAward); + + /** + * 修改载体建设奖补 + * + * @param bmsCarrierConstructionAward 载体建设奖补 + * @return 结果 + */ + public int updateBmsCarrierConstructionAward(BmsCarrierConstructionAward bmsCarrierConstructionAward); + + /** + * 删除载体建设奖补 + * + * @param id 载体建设奖补主键 + * @return 结果 + */ + public int deleteBmsCarrierConstructionAwardById(Long id); + + /** + * 批量删除载体建设奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsCarrierConstructionAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCreditManagementMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCreditManagementMapper.java new file mode 100644 index 0000000..19369cd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsCreditManagementMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; + +import java.util.List; + +/** + * 信用管理奖补Mapper接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface BmsCreditManagementMapper extends BaseMapper<BmsCreditManagement> { + /** + * 查询信用管理奖补 + * + * @param id 信用管理奖补主键 + * @return 信用管理奖补 + */ + public BmsCreditManagement selectBmsCreditManagementById(Long id); + + /** + * 查询信用管理奖补列表 + * + * @param bmsCreditManagement 信用管理奖补 + * @return 信用管理奖补集合 + */ + public List<BmsCreditManagement> selectBmsCreditManagementList(BmsCreditManagement bmsCreditManagement); + + /** + * 新增信用管理奖补 + * + * @param bmsCreditManagement 信用管理奖补 + * @return 结果 + */ + public int insertBmsCreditManagement(BmsCreditManagement bmsCreditManagement); + + /** + * 修改信用管理奖补 + * + * @param bmsCreditManagement 信用管理奖补 + * @return 结果 + */ + public int updateBmsCreditManagement(BmsCreditManagement bmsCreditManagement); + + /** + * 删除信用管理奖补 + * + * @param id 信用管理奖补主键 + * @return 结果 + */ + public int deleteBmsCreditManagementById(Long id); + + /** + * 批量删除信用管理奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsCreditManagementByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsDeclarationRecordsMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsDeclarationRecordsMapper.java new file mode 100644 index 0000000..bec43b5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsDeclarationRecordsMapper.java @@ -0,0 +1,85 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.ApprovalDeclarationRecordsQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsDto; +import com.ruoyi.jjh.declaration.entity.vo.ApprovalDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsMunicipalBureauReviewQueryVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 在线申报记录Mapper接口 + * + * @author farben + * @date 2023-08-28 + */ +public interface BmsDeclarationRecordsMapper extends BaseMapper<BmsDeclarationRecords> { + /** + * 查询在线申报记录 + * + * @param id 在线申报记录主键 + * @return 在线申报记录 + */ + public BmsDeclarationRecords selectBmsDeclarationRecordsById(Long id); + + /** + * 查询在线申报记录列表 + * + * @param bmsDeclarationRecordsDto 在线申报记录 + * @return 在线申报记录集合 + */ + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto); + + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsZwList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto); + + public List<BmsMunicipalBureauReviewQueryVo> selectMunicipalBureauReviewList(); + + public List<ApprovalDeclarationRecordsQueryVo> approvalList(ApprovalDeclarationRecordsQueryDto approvalDeclarationRecordsQueryDto); + + /** + * 新增在线申报记录 + * + * @param bmsDeclarationRecords 在线申报记录 + * @return 结果 + */ + public int insertBmsDeclarationRecords(BmsDeclarationRecords bmsDeclarationRecords); + + /** + * 修改在线申报记录 + * + * @param bmsDeclarationRecords 在线申报记录 + * @return 结果 + */ + public int updateBmsDeclarationRecords(BmsDeclarationRecords bmsDeclarationRecords); + + /** + * 删除在线申报记录 + * + * @param id 在线申报记录主键 + * @return 结果 + */ + public int deleteBmsDeclarationRecordsById(Long id); + + /** + * 批量删除在线申报记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsDeclarationRecordsByIds(Long[] ids); + + /** + * 更新项目名称by Id + * + * @param id + * @param projectName + * @return {@link int} + * @author emiya.xie + * @create 2023/9/6 15:13 + */ + public int updateProjectNameById(@Param("id") Long id, @Param("projectName")String projectName,@Param("projectId")Long projectId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseBasicInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseBasicInfoMapper.java new file mode 100644 index 0000000..8055940 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseBasicInfoMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; + +import java.util.List; + +/** + * 企业基础信息Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsEnterpriseBasicInfoMapper extends BaseMapper<BmsEnterpriseBasicInfo> { + /** + * 查询企业基础信息 + * + * @param id 企业基础信息主键 + * @return 企业基础信息 + */ + public BmsEnterpriseBasicInfo selectBmsEnterpriseBasicInfoById(Long id); + + /** + * 查询企业基础信息列表 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 企业基础信息集合 + */ + public List<BmsEnterpriseBasicInfo> selectBmsEnterpriseBasicInfoList(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 新增企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + public int insertBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 修改企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + public int updateBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 删除企业基础信息 + * + * @param id 企业基础信息主键 + * @return 结果 + */ + public int deleteBmsEnterpriseBasicInfoById(Long id); + + /** + * 批量删除企业基础信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsEnterpriseBasicInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseDirectoryMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseDirectoryMapper.java new file mode 100644 index 0000000..4327792 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsEnterpriseDirectoryMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; + +import java.util.List; + +/** + * 企业名录Mapper接口 + * + * @author farben + * @date 2023-08-31 + */ +public interface BmsEnterpriseDirectoryMapper extends BaseMapper<BmsEnterpriseDirectory> { + /** + * 查询企业名录 + * + * @param id 企业名录主键 + * @return 企业名录 + */ + public BmsEnterpriseDirectory selectBmsEnterpriseDirectoryById(Long id); + + /** + * 查询企业名录列表 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 企业名录集合 + */ + public List<BmsEnterpriseDirectory> selectBmsEnterpriseDirectoryList(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 新增企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + public int insertBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 修改企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + public int updateBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 删除企业名录 + * + * @param id 企业名录主键 + * @return 结果 + */ + public int deleteBmsEnterpriseDirectoryById(Long id); + + /** + * 批量删除企业名录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsEnterpriseDirectoryByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFieldInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFieldInfoMapper.java new file mode 100644 index 0000000..053d961 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFieldInfoMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsFieldInfo; + +import java.util.List; + +/** + * 模板字段填写详情Mapper接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface BmsFieldInfoMapper extends BaseMapper<BmsFieldInfo> { + /** + * 查询模板字段填写详情 + * + * @param id 模板字段填写详情主键 + * @return 模板字段填写详情 + */ + public BmsFieldInfo selectBmsFieldInfoById(Long id); + + /** + * 查询模板字段填写详情列表 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 模板字段填写详情集合 + */ + public List<BmsFieldInfo> selectBmsFieldInfoList(BmsFieldInfo bmsFieldInfo); + + /** + * 新增模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + public int insertBmsFieldInfo(BmsFieldInfo bmsFieldInfo); + + /** + * 修改模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + public int updateBmsFieldInfo(BmsFieldInfo bmsFieldInfo); + + /** + * 删除模板字段填写详情 + * + * @param id 模板字段填写详情主键 + * @return 结果 + */ + public int deleteBmsFieldInfoById(Long id); + + /** + * 批量删除模板字段填写详情 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsFieldInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFileInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFileInfoMapper.java new file mode 100644 index 0000000..cb8e83d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFileInfoMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsFileInfo; + +import java.util.List; + +/** + * 文件存储说明详情Mapper接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface BmsFileInfoMapper extends BaseMapper<BmsFileInfo> { + /** + * 查询文件存储说明详情 + * + * @param id 文件存储说明详情主键 + * @return 文件存储说明详情 + */ + public BmsFileInfo selectBmsFileInfoById(Long id); + + /** + * 查询文件存储说明详情列表 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 文件存储说明详情集合 + */ + public List<BmsFileInfo> selectBmsFileInfoList(BmsFileInfo bmsFileInfo); + + /** + * 新增文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + public int insertBmsFileInfo(BmsFileInfo bmsFileInfo); + + /** + * 修改文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + public int updateBmsFileInfo(BmsFileInfo bmsFileInfo); + + /** + * 删除文件存储说明详情 + * + * @param id 文件存储说明详情主键 + * @return 结果 + */ + public int deleteBmsFileInfoById(Long id); + + /** + * 批量删除文件存储说明详情 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsFileInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFundingDetailMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFundingDetailMapper.java new file mode 100644 index 0000000..8b6c679 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsFundingDetailMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; + +import java.util.List; + +/** + * 资金信息详情Mapper接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface BmsFundingDetailMapper extends BaseMapper<BmsFundingDetail> { + /** + * 查询资金信息详情 + * + * @param id 资金信息详情主键 + * @return 资金信息详情 + */ + public BmsFundingDetail selectBmsFundingDetailById(Long id); + + /** + * 查询资金信息详情列表 + * + * @param bmsFundingDetail 资金信息详情 + * @return 资金信息详情集合 + */ + public List<BmsFundingDetail> selectBmsFundingDetailList(BmsFundingDetail bmsFundingDetail); + + /** + * 新增资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + public int insertBmsFundingDetail(BmsFundingDetail bmsFundingDetail); + + /** + * 修改资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + public int updateBmsFundingDetail(BmsFundingDetail bmsFundingDetail); + + /** + * 删除资金信息详情 + * + * @param id 资金信息详情主键 + * @return 结果 + */ + public int deleteBmsFundingDetailById(Long id); + + /** + * 批量删除资金信息详情 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsFundingDetailByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIndustrialInternetAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIndustrialInternetAwardMapper.java new file mode 100644 index 0000000..9034f49 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIndustrialInternetAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; + +import java.util.List; + +/** + * 5G+工业互联网奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsIndustrialInternetAwardMapper extends BaseMapper<BmsIndustrialInternetAward> { + /** + * 查询5G+工业互联网奖补 + * + * @param id 5G+工业互联网奖补主键 + * @return 5G+工业互联网奖补 + */ + public BmsIndustrialInternetAward selectBmsIndustrialInternetAwardById(Long id); + + /** + * 查询5G+工业互联网奖补列表 + * + * @param bmsIndustrialInternetAward 5G+工业互联网奖补 + * @return 5G+工业互联网奖补集合 + */ + public List<BmsIndustrialInternetAward> selectBmsIndustrialInternetAwardList(BmsIndustrialInternetAward bmsIndustrialInternetAward); + + /** + * 新增5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAward 5G+工业互联网奖补 + * @return 结果 + */ + public int insertBmsIndustrialInternetAward(BmsIndustrialInternetAward bmsIndustrialInternetAward); + + /** + * 修改5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAward 5G+工业互联网奖补 + * @return 结果 + */ + public int updateBmsIndustrialInternetAward(BmsIndustrialInternetAward bmsIndustrialInternetAward); + + /** + * 删除5G+工业互联网奖补 + * + * @param id 5G+工业互联网奖补主键 + * @return 结果 + */ + public int deleteBmsIndustrialInternetAwardById(Long id); + + /** + * 批量删除5G+工业互联网奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsIndustrialInternetAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIntegrationIndustriesMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIntegrationIndustriesMapper.java new file mode 100644 index 0000000..a17f394 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsIntegrationIndustriesMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; + +import java.util.List; + +/** + * 两业融合奖补Mapper接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface BmsIntegrationIndustriesMapper extends BaseMapper<BmsIntegrationIndustries> { + /** + * 查询两业融合奖补 + * + * @param id 两业融合奖补主键 + * @return 两业融合奖补 + */ + public BmsIntegrationIndustries selectBmsIntegrationIndustriesById(Long id); + + /** + * 查询两业融合奖补列表 + * + * @param bmsIntegrationIndustries 两业融合奖补 + * @return 两业融合奖补集合 + */ + public List<BmsIntegrationIndustries> selectBmsIntegrationIndustriesList(BmsIntegrationIndustries bmsIntegrationIndustries); + + /** + * 新增两业融合奖补 + * + * @param bmsIntegrationIndustries 两业融合奖补 + * @return 结果 + */ + public int insertBmsIntegrationIndustries(BmsIntegrationIndustries bmsIntegrationIndustries); + + /** + * 修改两业融合奖补 + * + * @param bmsIntegrationIndustries 两业融合奖补 + * @return 结果 + */ + public int updateBmsIntegrationIndustries(BmsIntegrationIndustries bmsIntegrationIndustries); + + /** + * 删除两业融合奖补 + * + * @param id 两业融合奖补主键 + * @return 结果 + */ + public int deleteBmsIntegrationIndustriesById(Long id); + + /** + * 批量删除两业融合奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsIntegrationIndustriesByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsLogisticsDevelopmentAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsLogisticsDevelopmentAwardMapper.java new file mode 100644 index 0000000..cff8189 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsLogisticsDevelopmentAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; + +import java.util.List; + +/** + * 物流发展奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsLogisticsDevelopmentAwardMapper extends BaseMapper<BmsLogisticsDevelopmentAward> { + /** + * 查询物流发展奖补 + * + * @param id 物流发展奖补主键 + * @return 物流发展奖补 + */ + public BmsLogisticsDevelopmentAward selectBmsLogisticsDevelopmentAwardById(Long id); + + /** + * 查询物流发展奖补列表 + * + * @param bmsLogisticsDevelopmentAward 物流发展奖补 + * @return 物流发展奖补集合 + */ + public List<BmsLogisticsDevelopmentAward> selectBmsLogisticsDevelopmentAwardList(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward); + + /** + * 新增物流发展奖补 + * + * @param bmsLogisticsDevelopmentAward 物流发展奖补 + * @return 结果 + */ + public int insertBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward); + + /** + * 修改物流发展奖补 + * + * @param bmsLogisticsDevelopmentAward 物流发展奖补 + * @return 结果 + */ + public int updateBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward); + + /** + * 删除物流发展奖补 + * + * @param id 物流发展奖补主键 + * @return 结果 + */ + public int deleteBmsLogisticsDevelopmentAwardById(Long id); + + /** + * 批量删除物流发展奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsLogisticsDevelopmentAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsManufacturingServicesAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsManufacturingServicesAwardMapper.java new file mode 100644 index 0000000..76d883c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsManufacturingServicesAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; + +import java.util.List; + +/** + * 制造服务业有效投入奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsManufacturingServicesAwardMapper extends BaseMapper<BmsManufacturingServicesAward> { + /** + * 查询制造服务业有效投入奖补 + * + * @param id 制造服务业有效投入奖补主键 + * @return 制造服务业有效投入奖补 + */ + public BmsManufacturingServicesAward selectBmsManufacturingServicesAwardById(Long id); + + /** + * 查询制造服务业有效投入奖补列表 + * + * @param bmsManufacturingServicesAward 制造服务业有效投入奖补 + * @return 制造服务业有效投入奖补集合 + */ + public List<BmsManufacturingServicesAward> selectBmsManufacturingServicesAwardList(BmsManufacturingServicesAward bmsManufacturingServicesAward); + + /** + * 新增制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAward 制造服务业有效投入奖补 + * @return 结果 + */ + public int insertBmsManufacturingServicesAward(BmsManufacturingServicesAward bmsManufacturingServicesAward); + + /** + * 修改制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAward 制造服务业有效投入奖补 + * @return 结果 + */ + public int updateBmsManufacturingServicesAward(BmsManufacturingServicesAward bmsManufacturingServicesAward); + + /** + * 删除制造服务业有效投入奖补 + * + * @param id 制造服务业有效投入奖补主键 + * @return 结果 + */ + public int deleteBmsManufacturingServicesAwardById(Long id); + + /** + * 批量删除制造服务业有效投入奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsManufacturingServicesAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsPlatformConstructionAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsPlatformConstructionAwardMapper.java new file mode 100644 index 0000000..18be636 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsPlatformConstructionAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; + +import java.util.List; + +/** + * 平台建设奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsPlatformConstructionAwardMapper extends BaseMapper<BmsPlatformConstructionAward> { + /** + * 查询平台建设奖补 + * + * @param id 平台建设奖补主键 + * @return 平台建设奖补 + */ + public BmsPlatformConstructionAward selectBmsPlatformConstructionAwardById(Long id); + + /** + * 查询平台建设奖补列表 + * + * @param bmsPlatformConstructionAward 平台建设奖补 + * @return 平台建设奖补集合 + */ + public List<BmsPlatformConstructionAward> selectBmsPlatformConstructionAwardList(BmsPlatformConstructionAward bmsPlatformConstructionAward); + + /** + * 新增平台建设奖补 + * + * @param bmsPlatformConstructionAward 平台建设奖补 + * @return 结果 + */ + public int insertBmsPlatformConstructionAward(BmsPlatformConstructionAward bmsPlatformConstructionAward); + + /** + * 修改平台建设奖补 + * + * @param bmsPlatformConstructionAward 平台建设奖补 + * @return 结果 + */ + public int updateBmsPlatformConstructionAward(BmsPlatformConstructionAward bmsPlatformConstructionAward); + + /** + * 删除平台建设奖补 + * + * @param id 平台建设奖补主键 + * @return 结果 + */ + public int deleteBmsPlatformConstructionAwardById(Long id); + + /** + * 批量删除平台建设奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsPlatformConstructionAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProcessInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProcessInfoMapper.java new file mode 100644 index 0000000..cffc9c8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProcessInfoMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; + +import java.util.List; + +/** + * 审批流程Mapper接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface BmsProcessInfoMapper extends BaseMapper<BmsProcessInfo> { + /** + * 查询审批流程 + * + * @param id 审批流程主键 + * @return 审批流程 + */ + public BmsProcessInfo selectBmsProcessInfoById(Long id); + + /** + * 查询审批流程列表 + * + * @param bmsProcessInfo 审批流程 + * @return 审批流程集合 + */ + public List<BmsProcessInfo> selectBmsProcessInfoList(BmsProcessInfo bmsProcessInfo); + + /** + * 新增审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + public int insertBmsProcessInfo(BmsProcessInfo bmsProcessInfo); + + /** + * 修改审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + public int updateBmsProcessInfo(BmsProcessInfo bmsProcessInfo); + + /** + * 删除审批流程 + * + * @param id 审批流程主键 + * @return 结果 + */ + public int deleteBmsProcessInfoById(Long id); + + /** + * 批量删除审批流程 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsProcessInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectInfoMapper.java new file mode 100644 index 0000000..39746aa --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectInfoMapper.java @@ -0,0 +1,65 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; + +import java.util.List; + +/** + * 项目基本信息Mapper接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface BmsProjectInfoMapper extends BaseMapper<BmsProjectInfo> { + /** + * 查询项目基本信息 + * + * @param id 项目基本信息主键 + * @return 项目基本信息 + */ + public BmsProjectInfo selectBmsProjectInfoById(Long id); + + /** + * 查询项目基本信息列表 + * + * @param bmsProjectInfo 项目基本信息 + * @return 项目基本信息集合 + */ + public List<BmsProjectInfo> selectBmsProjectInfoList(BmsProjectInfo bmsProjectInfo); + + /** + * 新增项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + public int insertBmsProjectInfo(BmsProjectInfo bmsProjectInfo); + + /** + * 修改项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + public int updateBmsProjectInfo(BmsProjectInfo bmsProjectInfo); + + /** + * 删除项目基本信息 + * + * @param id 项目基本信息主键 + * @return 结果 + */ + public int deleteBmsProjectInfoById(Long id); + + /** + * 批量删除项目基本信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsProjectInfoByIds(Long[] ids); + + + public BmsProjectInfo getProjectInfo(Long templateRecordId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectSettlementAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectSettlementAwardMapper.java new file mode 100644 index 0000000..11f5bae --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsProjectSettlementAwardMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import com.ruoyi.jjh.declaration.entity.vo.BmsProjectSettlementAwardQueryVo; + +import java.util.List; + +/** + * 项目落户奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsProjectSettlementAwardMapper extends BaseMapper<BmsProjectSettlementAward> { + /** + * 查询项目落户奖补 + * + * @param id 项目落户奖补主键 + * @return 项目落户奖补 + */ + public BmsProjectSettlementAwardQueryVo selectBmsProjectSettlementAwardById(Long id); + + /** + * 查询项目落户奖补列表 + * + * @param bmsProjectSettlementAward 项目落户奖补 + * @return 项目落户奖补集合 + */ + public List<BmsProjectSettlementAward> selectBmsProjectSettlementAwardList(BmsProjectSettlementAward bmsProjectSettlementAward); + + /** + * 新增项目落户奖补 + * + * @param bmsProjectSettlementAward 项目落户奖补 + * @return 结果 + */ + public int insertBmsProjectSettlementAward(BmsProjectSettlementAward bmsProjectSettlementAward); + + /** + * 修改项目落户奖补 + * + * @param bmsProjectSettlementAward 项目落户奖补 + * @return 结果 + */ + public int updateBmsProjectSettlementAward(BmsProjectSettlementAward bmsProjectSettlementAward); + + /** + * 删除项目落户奖补 + * + * @param id 项目落户奖补主键 + * @return 结果 + */ + public int deleteBmsProjectSettlementAwardById(Long id); + + /** + * 批量删除项目落户奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsProjectSettlementAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsSceneOpeningAwardMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsSceneOpeningAwardMapper.java new file mode 100644 index 0000000..d01eba2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsSceneOpeningAwardMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; + +import java.util.List; + +/** + * 场景开放奖补Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsSceneOpeningAwardMapper extends BaseMapper<BmsSceneOpeningAward> { + /** + * 查询场景开放奖补 + * + * @param id 场景开放奖补主键 + * @return 场景开放奖补 + */ + public BmsSceneOpeningAward selectBmsSceneOpeningAwardById(Long id); + + /** + * 查询场景开放奖补列表 + * + * @param bmsSceneOpeningAward 场景开放奖补 + * @return 场景开放奖补集合 + */ + public List<BmsSceneOpeningAward> selectBmsSceneOpeningAwardList(BmsSceneOpeningAward bmsSceneOpeningAward); + + /** + * 新增场景开放奖补 + * + * @param bmsSceneOpeningAward 场景开放奖补 + * @return 结果 + */ + public int insertBmsSceneOpeningAward(BmsSceneOpeningAward bmsSceneOpeningAward); + + /** + * 修改场景开放奖补 + * + * @param bmsSceneOpeningAward 场景开放奖补 + * @return 结果 + */ + public int updateBmsSceneOpeningAward(BmsSceneOpeningAward bmsSceneOpeningAward); + + /** + * 删除场景开放奖补 + * + * @param id 场景开放奖补主键 + * @return 结果 + */ + public int deleteBmsSceneOpeningAwardById(Long id); + + /** + * 批量删除场景开放奖补 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsSceneOpeningAwardByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateInfoMapper.java new file mode 100644 index 0000000..639aab1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateInfoMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateInfoQueryVo; + +import java.util.List; + +/** + * 申报模板信息Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BmsTemplateInfoMapper extends BaseMapper<BmsTemplateInfo> { + /** + * 查询申报模板信息 + * + * @param id 申报模板信息主键 + * @return 申报模板信息 + */ + public BmsTemplateInfo selectBmsTemplateInfoById(Long id); + + /** + * 查询申报模板信息列表 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 申报模板信息集合 + */ + public List<BmsTemplateInfoQueryVo> selectBmsTemplateInfoList(BmsTemplateInfo bmsTemplateInfo); + /** + * 查询申报模板信息列表 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 申报模板信息集合 + */ + public List<BmsTemplateInfoQueryVo> templateInfoList(BmsTemplateInfo bmsTemplateInfo); + /** + * 新增申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + public int insertBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo); + + /** + * 修改申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + public int updateBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo); + + /** + * 删除申报模板信息 + * + * @param id 申报模板信息主键 + * @return 结果 + */ + public int deleteBmsTemplateInfoById(Long id); + + /** + * 批量删除申报模板信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsTemplateInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateRecordMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateRecordMapper.java new file mode 100644 index 0000000..4e8f895 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BmsTemplateRecordMapper.java @@ -0,0 +1,75 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordQueryDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 在线模板Mapper接口 + * + * @author farben + * @date 2023-09-07 + */ +public interface BmsTemplateRecordMapper extends BaseMapper<BmsTemplateRecord> { + /** + * 查询在线模板 + * + * @param id 在线模板主键 + * @return 在线模板 + */ + public BmsTemplateRecord selectBmsTemplateRecordById(Long id); + + public BmsTemplateRecordVo selectBmsTemplateRecordVoById(Long id); + + /** + * 查询在线模板列表 + * + * @param bmsTemplateRecord 在线模板 + * @return 在线模板集合 + */ + public List<BmsTemplateRecord> selectBmsTemplateRecordList(BmsTemplateRecord bmsTemplateRecord); + + /** + * 新增在线模板 + * + * @param bmsTemplateRecord 在线模板 + * @return 结果 + */ + public int insertBmsTemplateRecord(BmsTemplateRecord bmsTemplateRecord); + + /** + * 修改在线模板 + * + * @param bmsTemplateRecord 在线模板 + * @return 结果 + */ + public int updateBmsTemplateRecord(BmsTemplateRecord bmsTemplateRecord); + + /** + * 删除在线模板 + * + * @param id 在线模板主键 + * @return 结果 + */ + public int deleteBmsTemplateRecordById(Long id); + + /** + * 批量删除在线模板 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBmsTemplateRecordByIds(Long[] ids); + + public List<BmsTemplateRecordQueryVo> selectTemplateRecordVo(BmsTemplateRecordQueryDto bmsTemplateRecordQueryDto); + + public List<BmsTemplateRecordQueryVo> selectTemplateRecordList(@Param("creditCode") String creditCode); + + public List<BmsTemplateRecordQueryVo> selectBmsTemplateNameList(BmsTemplateQueryDto bmsTemplateQueryDto); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BsmFundingInfoMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BsmFundingInfoMapper.java new file mode 100644 index 0000000..1a36a09 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/mapper/BsmFundingInfoMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.jjh.declaration.entity.BsmFundingInfo; + +import java.util.List; + +/** + * 资金信息Mapper接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface BsmFundingInfoMapper extends BaseMapper<BsmFundingInfo> { + /** + * 查询资金信息 + * + * @param id 资金信息主键 + * @return 资金信息 + */ + public BsmFundingInfo selectBsmFundingInfoById(Long id); + + /** + * 查询资金信息列表 + * + * @param bsmFundingInfo 资金信息 + * @return 资金信息集合 + */ + public List<BsmFundingInfo> selectBsmFundingInfoList(BsmFundingInfo bsmFundingInfo); + + /** + * 新增资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + public int insertBsmFundingInfo(BsmFundingInfo bsmFundingInfo); + + /** + * 修改资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + public int updateBsmFundingInfo(BsmFundingInfo bsmFundingInfo); + + /** + * 删除资金信息 + * + * @param id 资金信息主键 + * @return 结果 + */ + public int deleteBsmFundingInfoById(Long id); + + /** + * 批量删除资金信息 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteBsmFundingInfoByIds(Long[] ids); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsApprovalInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsApprovalInfoService.java new file mode 100644 index 0000000..c637829 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsApprovalInfoService.java @@ -0,0 +1,69 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsApprovalInfoQueryVo; + +import java.util.List; + +/** + * 审批记录信息Service接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface IBmsApprovalInfoService extends IService<BmsApprovalInfo> { + /** + * 查询审批记录信息 + * + * @param id 审批记录信息主键 + * @return 审批记录信息 + */ + public BmsApprovalInfo selectBmsApprovalInfoById(Long id); + + /** + * 查询审批记录信息列表 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 审批记录信息集合 + */ + public List<BmsApprovalInfo> selectBmsApprovalInfoList(BmsApprovalInfo bmsApprovalInfo); + + /** + * 新增审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + public int insertBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo); + + /** + * 修改审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + public int updateBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo); + + /** + * 批量删除审批记录信息 + * + * @param ids 需要删除的审批记录信息主键集合 + * @return 结果 + */ + public int deleteBmsApprovalInfoByIds(Long[] ids); + + public int updateApproval(Long declarationRecordsId); + + public int updateApprovalList(List<Long> recordsId); + + /** + * 删除审批记录信息信息 + * + * @param id 审批记录信息主键 + * @return 结果 + */ + public int deleteBmsApprovalInfoById(Long id); + + public List<BmsApprovalInfoQueryVo> getApprovalInfoList(Long declarationRecordsId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBigStrongAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBigStrongAwardService.java new file mode 100644 index 0000000..3c83a34 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBigStrongAwardService.java @@ -0,0 +1,65 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsBigStrongAwardQueryVo; + +import java.util.List; + +/** + * 做大做强奖详情Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsBigStrongAwardService extends IService<BmsBigStrongAward> { + /** + * 查询做大做强奖详情 + * + * @param id 做大做强奖详情主键 + * @return 做大做强奖详情 + */ + public BmsBigStrongAwardQueryVo selectBmsBigStrongAwardById(Long id); + + /** + * 查询做大做强奖详情列表 + * + * @param bmsBigStrongAward 做大做强奖详情 + * @return 做大做强奖详情集合 + */ + public List<BmsBigStrongAward> selectBmsBigStrongAwardList(BmsBigStrongAward bmsBigStrongAward); + + /** + * 新增做大做强奖详情 + * + * @param bmsBigStrongAwardAddDto 做大做强奖详情 + * @return 结果 + */ + public int insertBmsBigStrongAward(BmsBigStrongAwardAddDto bmsBigStrongAwardAddDto); + + /** + * 修改做大做强奖详情 + * + * @param bmsBigStrongAwardUpdateDto 做大做强奖详情 + * @return 结果 + */ + public int updateBmsBigStrongAward(BmsBigStrongAwardUpdateDto bmsBigStrongAwardUpdateDto); + + /** + * 批量删除做大做强奖详情 + * + * @param ids 需要删除的做大做强奖详情主键集合 + * @return 结果 + */ + public int deleteBmsBigStrongAwardByIds(Long[] ids); + + /** + * 删除做大做强奖详情信息 + * + * @param id 做大做强奖详情主键 + * @return 结果 + */ + public int deleteBmsBigStrongAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBrandingAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBrandingAwardService.java new file mode 100644 index 0000000..81c29d7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsBrandingAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardUpdateDto; + +import java.util.List; + +/** + * 品牌打造奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsBrandingAwardService extends IService<BmsBrandingAward> { + /** + * 查询品牌打造奖补 + * + * @param id 品牌打造奖补主键 + * @return 品牌打造奖补 + */ + public BmsBrandingAward selectBmsBrandingAwardById(Long id); + + /** + * 查询品牌打造奖补列表 + * + * @param bmsBrandingAward 品牌打造奖补 + * @return 品牌打造奖补集合 + */ + public List<BmsBrandingAward> selectBmsBrandingAwardList(BmsBrandingAward bmsBrandingAward); + + /** + * 新增品牌打造奖补 + * + * @param bmsBrandingAwardAddDto 品牌打造奖补 + * @return 结果 + */ + public int insertBmsBrandingAward(BmsBrandingAwardAddDto bmsBrandingAwardAddDto); + + /** + * 修改品牌打造奖补 + * + * @param bmsBrandingAwardUpdateDto 品牌打造奖补 + * @return 结果 + */ + public int updateBmsBrandingAward(BmsBrandingAwardUpdateDto bmsBrandingAwardUpdateDto); + + /** + * 批量删除品牌打造奖补 + * + * @param ids 需要删除的品牌打造奖补主键集合 + * @return 结果 + */ + public int deleteBmsBrandingAwardByIds(Long[] ids); + + /** + * 删除品牌打造奖补信息 + * + * @param id 品牌打造奖补主键 + * @return 结果 + */ + public int deleteBmsBrandingAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCarrierConstructionAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCarrierConstructionAwardService.java new file mode 100644 index 0000000..1c8903e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCarrierConstructionAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardUpdateDto; + +import java.util.List; + +/** + * 载体建设奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsCarrierConstructionAwardService extends IService<BmsCarrierConstructionAward> { + /** + * 查询载体建设奖补 + * + * @param id 载体建设奖补主键 + * @return 载体建设奖补 + */ + public BmsCarrierConstructionAward selectBmsCarrierConstructionAwardById(Long id); + + /** + * 查询载体建设奖补列表 + * + * @param bmsCarrierConstructionAward 载体建设奖补 + * @return 载体建设奖补集合 + */ + public List<BmsCarrierConstructionAward> selectBmsCarrierConstructionAwardList(BmsCarrierConstructionAward bmsCarrierConstructionAward); + + /** + * 新增载体建设奖补 + * + * @param bmsCarrierConstructionAwardAddDto 载体建设奖补 + * @return 结果 + */ + public int insertBmsCarrierConstructionAward(BmsCarrierConstructionAwardAddDto bmsCarrierConstructionAwardAddDto); + + /** + * 修改载体建设奖补 + * + * @param bmsCarrierConstructionAwardUpdateDto 载体建设奖补 + * @return 结果 + */ + public int updateBmsCarrierConstructionAward(BmsCarrierConstructionAwardUpdateDto bmsCarrierConstructionAwardUpdateDto); + + /** + * 批量删除载体建设奖补 + * + * @param ids 需要删除的载体建设奖补主键集合 + * @return 结果 + */ + public int deleteBmsCarrierConstructionAwardByIds(Long[] ids); + + /** + * 删除载体建设奖补信息 + * + * @param id 载体建设奖补主键 + * @return 结果 + */ + public int deleteBmsCarrierConstructionAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCreditManagementService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCreditManagementService.java new file mode 100644 index 0000000..e5d3f89 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsCreditManagementService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementUpdateDto; + +import java.util.List; + +/** + * 信用管理奖补Service接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface IBmsCreditManagementService extends IService<BmsCreditManagement> { + /** + * 查询信用管理奖补 + * + * @param id 信用管理奖补主键 + * @return 信用管理奖补 + */ + public BmsCreditManagement selectBmsCreditManagementById(Long id); + + /** + * 查询信用管理奖补列表 + * + * @param bmsCreditManagement 信用管理奖补 + * @return 信用管理奖补集合 + */ + public List<BmsCreditManagement> selectBmsCreditManagementList(BmsCreditManagement bmsCreditManagement); + + /** + * 新增信用管理奖补 + * + * @param bmsCreditManagementAddDto 信用管理奖补 + * @return 结果 + */ + public int insertBmsCreditManagement(BmsCreditManagementAddDto bmsCreditManagementAddDto); + + /** + * 修改信用管理奖补 + * + * @param bmsCreditManagementUpdateDto 信用管理奖补 + * @return 结果 + */ + public int updateBmsCreditManagement(BmsCreditManagementUpdateDto bmsCreditManagementUpdateDto); + + /** + * 批量删除信用管理奖补 + * + * @param ids 需要删除的信用管理奖补主键集合 + * @return 结果 + */ + public int deleteBmsCreditManagementByIds(Long[] ids); + + /** + * 删除信用管理奖补信息 + * + * @param id 信用管理奖补主键 + * @return 结果 + */ + public int deleteBmsCreditManagementById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsDeclarationRecordsService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsDeclarationRecordsService.java new file mode 100644 index 0000000..bab862f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsDeclarationRecordsService.java @@ -0,0 +1,107 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.ApprovalDeclarationRecordsQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsApprovalInfoUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsDto; +import com.ruoyi.jjh.declaration.entity.dto.MunicipalReviewDto; +import com.ruoyi.jjh.declaration.entity.vo.ApprovalDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsMunicipalBureauReviewQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.DeclarationRecordsVo; + +import java.util.List; + +/** + * 在线申报记录Service接口 + * + * @author farben + * @date 2023-08-28 + */ +public interface IBmsDeclarationRecordsService extends IService<BmsDeclarationRecords> { + /** + * 查询在线申报记录 + * + * @param id 在线申报记录主键 + * @return 在线申报记录 + */ + public DeclarationRecordsVo selectBmsDeclarationRecordsById(Long id); + + /** + * 查询在线申报记录列表 + * + * @param bmsDeclarationRecordsDto 在线申报记录 + * @return 在线申报记录集合 + */ + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto); + + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsZwList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto); + + + public List<BmsMunicipalBureauReviewQueryVo> selectMunicipalBureauReviewList(); + + public List<ApprovalDeclarationRecordsQueryVo> approvalList(ApprovalDeclarationRecordsQueryDto approvalDeclarationRecordsQueryDto); + + public int updateBmsApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto); + + public int updateApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto); + + /** + * 新增在线申报记录 + * + * @param bmsDeclarationRecordsAddDto 在线申报记录 + * @return 结果 + */ + public int insertBmsDeclarationRecords(BmsDeclarationRecordsAddDto bmsDeclarationRecordsAddDto); + + /** + * 修改在线申报记录 + * + * @param bmsDeclarationRecords 在线申报记录 + * @return 结果 + */ + public int updateBmsDeclarationRecords(BmsDeclarationRecords bmsDeclarationRecords); + + /** + * 市级评定确认 + * + * @param municipalReviewDto + * @return {@link int} + * @author emiya.xie + * @create 2023/9/13 17:18 + */ + public int municipalReview(MunicipalReviewDto municipalReviewDto); + + public int municipalReviewNew(MunicipalReviewDto municipalReviewDto); + + /** + * 批量删除在线申报记录 + * + * @param ids 需要删除的在线申报记录主键集合 + * @return 结果 + */ + public int deleteBmsDeclarationRecordsByIds(Long[] ids); + + /** + * 删除在线申报记录信息 + * + * @param id 在线申报记录主键 + * @return 结果 + */ + public int deleteBmsDeclarationRecordsById(Long id); + + /** + * 更新项目名称by Id + * + * @param id + * @param projectName + * @return {@link int} + * @author emiya.xie + * @create 2023/9/6 15:13 + */ + public int updateProjectNameById(Long id, String projectName, Long projectId); + + public int updateDeclarationRecords(Long declarationId, Long projectId, String projectName, Long status); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseBasicInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseBasicInfoService.java new file mode 100644 index 0000000..859498f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseBasicInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; + +import java.util.List; + +/** + * 企业基础信息Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsEnterpriseBasicInfoService extends IService<BmsEnterpriseBasicInfo> { + /** + * 查询企业基础信息 + * + * @param id 企业基础信息主键 + * @return 企业基础信息 + */ + public BmsEnterpriseBasicInfo selectBmsEnterpriseBasicInfoById(Long id); + + /** + * 查询企业基础信息列表 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 企业基础信息集合 + */ + public List<BmsEnterpriseBasicInfo> selectBmsEnterpriseBasicInfoList(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 新增企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + public int insertBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 修改企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + public int updateBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo); + + /** + * 批量删除企业基础信息 + * + * @param ids 需要删除的企业基础信息主键集合 + * @return 结果 + */ + public int deleteBmsEnterpriseBasicInfoByIds(Long[] ids); + + /** + * 删除企业基础信息信息 + * + * @param id 企业基础信息主键 + * @return 结果 + */ + public int deleteBmsEnterpriseBasicInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseDirectoryService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseDirectoryService.java new file mode 100644 index 0000000..e327545 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsEnterpriseDirectoryService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; + +import java.util.List; + +/** + * 企业名录Service接口 + * + * @author farben + * @date 2023-08-31 + */ +public interface IBmsEnterpriseDirectoryService extends IService<BmsEnterpriseDirectory> { + /** + * 查询企业名录 + * + * @param id 企业名录主键 + * @return 企业名录 + */ + public BmsEnterpriseDirectory selectBmsEnterpriseDirectoryById(Long id); + + /** + * 查询企业名录列表 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 企业名录集合 + */ + public List<BmsEnterpriseDirectory> selectBmsEnterpriseDirectoryList(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 新增企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + public int insertBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 修改企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + public int updateBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory); + + /** + * 批量删除企业名录 + * + * @param ids 需要删除的企业名录主键集合 + * @return 结果 + */ + public int deleteBmsEnterpriseDirectoryByIds(Long[] ids); + + /** + * 删除企业名录信息 + * + * @param id 企业名录主键 + * @return 结果 + */ + public int deleteBmsEnterpriseDirectoryById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFieldInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFieldInfoService.java new file mode 100644 index 0000000..930a3b9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFieldInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsFieldInfo; + +import java.util.List; + +/** + * 模板字段填写详情Service接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface IBmsFieldInfoService extends IService<BmsFieldInfo> { + /** + * 查询模板字段填写详情 + * + * @param id 模板字段填写详情主键 + * @return 模板字段填写详情 + */ + public BmsFieldInfo selectBmsFieldInfoById(Long id); + + /** + * 查询模板字段填写详情列表 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 模板字段填写详情集合 + */ + public List<BmsFieldInfo> selectBmsFieldInfoList(BmsFieldInfo bmsFieldInfo); + + /** + * 新增模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + public int insertBmsFieldInfo(BmsFieldInfo bmsFieldInfo); + + /** + * 修改模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + public int updateBmsFieldInfo(BmsFieldInfo bmsFieldInfo); + + /** + * 批量删除模板字段填写详情 + * + * @param ids 需要删除的模板字段填写详情主键集合 + * @return 结果 + */ + public int deleteBmsFieldInfoByIds(Long[] ids); + + /** + * 删除模板字段填写详情信息 + * + * @param id 模板字段填写详情主键 + * @return 结果 + */ + public int deleteBmsFieldInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFileInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFileInfoService.java new file mode 100644 index 0000000..44496b5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFileInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsFileInfo; + +import java.util.List; + +/** + * 文件存储说明详情Service接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface IBmsFileInfoService extends IService<BmsFileInfo> { + /** + * 查询文件存储说明详情 + * + * @param id 文件存储说明详情主键 + * @return 文件存储说明详情 + */ + public BmsFileInfo selectBmsFileInfoById(Long id); + + /** + * 查询文件存储说明详情列表 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 文件存储说明详情集合 + */ + public List<BmsFileInfo> selectBmsFileInfoList(BmsFileInfo bmsFileInfo); + + /** + * 新增文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + public int insertBmsFileInfo(BmsFileInfo bmsFileInfo); + + /** + * 修改文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + public int updateBmsFileInfo(BmsFileInfo bmsFileInfo); + + /** + * 批量删除文件存储说明详情 + * + * @param ids 需要删除的文件存储说明详情主键集合 + * @return 结果 + */ + public int deleteBmsFileInfoByIds(Long[] ids); + + /** + * 删除文件存储说明详情信息 + * + * @param id 文件存储说明详情主键 + * @return 结果 + */ + public int deleteBmsFileInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFundingDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFundingDetailService.java new file mode 100644 index 0000000..ac56dfd --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsFundingDetailService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; + +import java.util.List; + +/** + * 资金信息详情Service接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface IBmsFundingDetailService extends IService<BmsFundingDetail> { + /** + * 查询资金信息详情 + * + * @param id 资金信息详情主键 + * @return 资金信息详情 + */ + public BmsFundingDetail selectBmsFundingDetailById(Long id); + + /** + * 查询资金信息详情列表 + * + * @param bmsFundingDetail 资金信息详情 + * @return 资金信息详情集合 + */ + public List<BmsFundingDetail> selectBmsFundingDetailList(BmsFundingDetail bmsFundingDetail); + + /** + * 新增资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + public int insertBmsFundingDetail(BmsFundingDetail bmsFundingDetail); + + /** + * 修改资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + public int updateBmsFundingDetail(BmsFundingDetail bmsFundingDetail); + + /** + * 批量删除资金信息详情 + * + * @param ids 需要删除的资金信息详情主键集合 + * @return 结果 + */ + public int deleteBmsFundingDetailByIds(Long[] ids); + + /** + * 删除资金信息详情信息 + * + * @param id 资金信息详情主键 + * @return 结果 + */ + public int deleteBmsFundingDetailById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIndustrialInternetAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIndustrialInternetAwardService.java new file mode 100644 index 0000000..615a4aa --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIndustrialInternetAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardUpdateDto; + +import java.util.List; + +/** + * 5G+工业互联网奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsIndustrialInternetAwardService extends IService<BmsIndustrialInternetAward> { + /** + * 查询5G+工业互联网奖补 + * + * @param id 5G+工业互联网奖补主键 + * @return 5G+工业互联网奖补 + */ + public BmsIndustrialInternetAward selectBmsIndustrialInternetAwardById(Long id); + + /** + * 查询5G+工业互联网奖补列表 + * + * @param bmsIndustrialInternetAward 5G+工业互联网奖补 + * @return 5G+工业互联网奖补集合 + */ + public List<BmsIndustrialInternetAward> selectBmsIndustrialInternetAwardList(BmsIndustrialInternetAward bmsIndustrialInternetAward); + + /** + * 新增5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAwardAddDto 5G+工业互联网奖补 + * @return 结果 + */ + public int insertBmsIndustrialInternetAward(BmsIndustrialInternetAwardAddDto bmsIndustrialInternetAwardAddDto); + + /** + * 修改5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAwardUpdateDto 5G+工业互联网奖补 + * @return 结果 + */ + public int updateBmsIndustrialInternetAward(BmsIndustrialInternetAwardUpdateDto bmsIndustrialInternetAwardUpdateDto); + + /** + * 批量删除5G+工业互联网奖补 + * + * @param ids 需要删除的5G+工业互联网奖补主键集合 + * @return 结果 + */ + public int deleteBmsIndustrialInternetAwardByIds(Long[] ids); + + /** + * 删除5G+工业互联网奖补信息 + * + * @param id 5G+工业互联网奖补主键 + * @return 结果 + */ + public int deleteBmsIndustrialInternetAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIntegrationIndustriesService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIntegrationIndustriesService.java new file mode 100644 index 0000000..87dcb29 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsIntegrationIndustriesService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesUpdateDto; + +import java.util.List; + +/** + * 两业融合奖补Service接口 + * + * @author farben + * @date 2023-09-04 + */ +public interface IBmsIntegrationIndustriesService extends IService<BmsIntegrationIndustries> { + /** + * 查询两业融合奖补 + * + * @param id 两业融合奖补主键 + * @return 两业融合奖补 + */ + public BmsIntegrationIndustries selectBmsIntegrationIndustriesById(Long id); + + /** + * 查询两业融合奖补列表 + * + * @param bmsIntegrationIndustries 两业融合奖补 + * @return 两业融合奖补集合 + */ + public List<BmsIntegrationIndustries> selectBmsIntegrationIndustriesList(BmsIntegrationIndustries bmsIntegrationIndustries); + + /** + * 新增两业融合奖补 + * + * @param bmsIntegrationIndustriesAddDto 两业融合奖补 + * @return 结果 + */ + public int insertBmsIntegrationIndustries(BmsIntegrationIndustriesAddDto bmsIntegrationIndustriesAddDto); + + /** + * 修改两业融合奖补 + * + * @param bmsIntegrationIndustriesUpdateDto 两业融合奖补 + * @return 结果 + */ + public int updateBmsIntegrationIndustries(BmsIntegrationIndustriesUpdateDto bmsIntegrationIndustriesUpdateDto); + + /** + * 批量删除两业融合奖补 + * + * @param ids 需要删除的两业融合奖补主键集合 + * @return 结果 + */ + public int deleteBmsIntegrationIndustriesByIds(Long[] ids); + + /** + * 删除两业融合奖补信息 + * + * @param id 两业融合奖补主键 + * @return 结果 + */ + public int deleteBmsIntegrationIndustriesById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsLogisticsDevelopmentAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsLogisticsDevelopmentAwardService.java new file mode 100644 index 0000000..6a1300b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsLogisticsDevelopmentAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardUpdateDto; + +import java.util.List; + +/** + * 物流发展奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsLogisticsDevelopmentAwardService extends IService<BmsLogisticsDevelopmentAward> { + /** + * 查询物流发展奖补 + * + * @param id 物流发展奖补主键 + * @return 物流发展奖补 + */ + public BmsLogisticsDevelopmentAward selectBmsLogisticsDevelopmentAwardById(Long id); + + /** + * 查询物流发展奖补列表 + * + * @param bmsLogisticsDevelopmentAward 物流发展奖补 + * @return 物流发展奖补集合 + */ + public List<BmsLogisticsDevelopmentAward> selectBmsLogisticsDevelopmentAwardList(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward); + + /** + * 新增物流发展奖补 + * + * @param bmsLogisticsDevelopmentAwardAddDto 物流发展奖补 + * @return 结果 + */ + public int insertBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAwardAddDto bmsLogisticsDevelopmentAwardAddDto); + + /** + * 修改物流发展奖补 + * + * @param bmsLogisticsDevelopmentAwardUpdateDto 物流发展奖补 + * @return 结果 + */ + public int updateBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAwardUpdateDto bmsLogisticsDevelopmentAwardUpdateDto); + + /** + * 批量删除物流发展奖补 + * + * @param ids 需要删除的物流发展奖补主键集合 + * @return 结果 + */ + public int deleteBmsLogisticsDevelopmentAwardByIds(Long[] ids); + + /** + * 删除物流发展奖补信息 + * + * @param id 物流发展奖补主键 + * @return 结果 + */ + public int deleteBmsLogisticsDevelopmentAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsManufacturingServicesAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsManufacturingServicesAwardService.java new file mode 100644 index 0000000..7b08c55 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsManufacturingServicesAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardUpdateDto; + +import java.util.List; + +/** + * 制造服务业有效投入奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsManufacturingServicesAwardService extends IService<BmsManufacturingServicesAward> { + /** + * 查询制造服务业有效投入奖补 + * + * @param id 制造服务业有效投入奖补主键 + * @return 制造服务业有效投入奖补 + */ + public BmsManufacturingServicesAward selectBmsManufacturingServicesAwardById(Long id); + + /** + * 查询制造服务业有效投入奖补列表 + * + * @param bmsManufacturingServicesAward 制造服务业有效投入奖补 + * @return 制造服务业有效投入奖补集合 + */ + public List<BmsManufacturingServicesAward> selectBmsManufacturingServicesAwardList(BmsManufacturingServicesAward bmsManufacturingServicesAward); + + /** + * 新增制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAwardAddDto 制造服务业有效投入奖补 + * @return 结果 + */ + public int insertBmsManufacturingServicesAward(BmsManufacturingServicesAwardAddDto bmsManufacturingServicesAwardAddDto); + + /** + * 修改制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAwardUpdateDto 制造服务业有效投入奖补 + * @return 结果 + */ + public int updateBmsManufacturingServicesAward(BmsManufacturingServicesAwardUpdateDto bmsManufacturingServicesAwardUpdateDto); + + /** + * 批量删除制造服务业有效投入奖补 + * + * @param ids 需要删除的制造服务业有效投入奖补主键集合 + * @return 结果 + */ + public int deleteBmsManufacturingServicesAwardByIds(Long[] ids); + + /** + * 删除制造服务业有效投入奖补信息 + * + * @param id 制造服务业有效投入奖补主键 + * @return 结果 + */ + public int deleteBmsManufacturingServicesAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsPlatformConstructionAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsPlatformConstructionAwardService.java new file mode 100644 index 0000000..d611e74 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsPlatformConstructionAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardUpdateDto; + +import java.util.List; + +/** + * 平台建设奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsPlatformConstructionAwardService extends IService<BmsPlatformConstructionAward> { + /** + * 查询平台建设奖补 + * + * @param id 平台建设奖补主键 + * @return 平台建设奖补 + */ + public BmsPlatformConstructionAward selectBmsPlatformConstructionAwardById(Long id); + + /** + * 查询平台建设奖补列表 + * + * @param bmsPlatformConstructionAward 平台建设奖补 + * @return 平台建设奖补集合 + */ + public List<BmsPlatformConstructionAward> selectBmsPlatformConstructionAwardList(BmsPlatformConstructionAward bmsPlatformConstructionAward); + + /** + * 新增平台建设奖补 + * + * @param bmsPlatformConstructionAwardAddDto 平台建设奖补 + * @return 结果 + */ + public int insertBmsPlatformConstructionAward(BmsPlatformConstructionAwardAddDto bmsPlatformConstructionAwardAddDto); + + /** + * 修改平台建设奖补 + * + * @param bmsPlatformConstructionAwardUpdateDto 平台建设奖补 + * @return 结果 + */ + public int updateBmsPlatformConstructionAward(BmsPlatformConstructionAwardUpdateDto bmsPlatformConstructionAwardUpdateDto); + + /** + * 批量删除平台建设奖补 + * + * @param ids 需要删除的平台建设奖补主键集合 + * @return 结果 + */ + public int deleteBmsPlatformConstructionAwardByIds(Long[] ids); + + /** + * 删除平台建设奖补信息 + * + * @param id 平台建设奖补主键 + * @return 结果 + */ + public int deleteBmsPlatformConstructionAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProcessInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProcessInfoService.java new file mode 100644 index 0000000..c2ea2c1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProcessInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; + +import java.util.List; + +/** + * 审批流程Service接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface IBmsProcessInfoService extends IService<BmsProcessInfo> { + /** + * 查询审批流程 + * + * @param id 审批流程主键 + * @return 审批流程 + */ + public BmsProcessInfo selectBmsProcessInfoById(Long id); + + /** + * 查询审批流程列表 + * + * @param bmsProcessInfo 审批流程 + * @return 审批流程集合 + */ + public List<BmsProcessInfo> selectBmsProcessInfoList(BmsProcessInfo bmsProcessInfo); + + /** + * 新增审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + public int insertBmsProcessInfo(BmsProcessInfo bmsProcessInfo); + + /** + * 修改审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + public int updateBmsProcessInfo(BmsProcessInfo bmsProcessInfo); + + /** + * 批量删除审批流程 + * + * @param ids 需要删除的审批流程主键集合 + * @return 结果 + */ + public int deleteBmsProcessInfoByIds(Long[] ids); + + /** + * 删除审批流程信息 + * + * @param id 审批流程主键 + * @return 结果 + */ + public int deleteBmsProcessInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectInfoService.java new file mode 100644 index 0000000..94075e1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectInfoService.java @@ -0,0 +1,65 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; + +import java.util.List; + +/** + * 项目基本信息Service接口 + * + * @author farben + * @date 2023-09-09 + */ +public interface IBmsProjectInfoService extends IService<BmsProjectInfo> { + /** + * 查询项目基本信息 + * + * @param id 项目基本信息主键 + * @return 项目基本信息 + */ + public BmsProjectInfo selectBmsProjectInfoById(Long id); + + /** + * 查询项目基本信息列表 + * + * @param bmsProjectInfo 项目基本信息 + * @return 项目基本信息集合 + */ + public List<BmsProjectInfo> selectBmsProjectInfoList(BmsProjectInfo bmsProjectInfo); + + /** + * 新增项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + public int insertBmsProjectInfo(BmsProjectInfo bmsProjectInfo); + + /** + * 修改项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + public int updateBmsProjectInfo(BmsProjectInfo bmsProjectInfo); + + /** + * 批量删除项目基本信息 + * + * @param ids 需要删除的项目基本信息主键集合 + * @return 结果 + */ + public int deleteBmsProjectInfoByIds(Long[] ids); + + /** + * 删除项目基本信息信息 + * + * @param id 项目基本信息主键 + * @return 结果 + */ + public int deleteBmsProjectInfoById(Long id); + + + public BmsProjectInfo getProjectInfo(Long templateRecordId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectSettlementAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectSettlementAwardService.java new file mode 100644 index 0000000..1ea4af3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsProjectSettlementAwardService.java @@ -0,0 +1,65 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsProjectSettlementAwardQueryVo; + +import java.util.List; + +/** + * 项目落户奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsProjectSettlementAwardService extends IService<BmsProjectSettlementAward> { + /** + * 查询项目落户奖补 + * + * @param id 项目落户奖补主键 + * @return 项目落户奖补 + */ + public BmsProjectSettlementAwardQueryVo selectBmsProjectSettlementAwardById(Long id); + + /** + * 查询项目落户奖补列表 + * + * @param bmsProjectSettlementAward 项目落户奖补 + * @return 项目落户奖补集合 + */ + public List<BmsProjectSettlementAward> selectBmsProjectSettlementAwardList(BmsProjectSettlementAward bmsProjectSettlementAward); + + /** + * 新增项目落户奖补 + * + * @param bmsProjectSettlementAwardAddDto 项目落户奖补 + * @return 结果 + */ + public int insertBmsProjectSettlementAward(BmsProjectSettlementAwardAddDto bmsProjectSettlementAwardAddDto); + + /** + * 修改项目落户奖补 + * + * @param bmsProjectSettlementAwardUpdateDto 项目落户奖补 + * @return 结果 + */ + public int updateBmsProjectSettlementAward(BmsProjectSettlementAwardUpdateDto bmsProjectSettlementAwardUpdateDto); + + /** + * 批量删除项目落户奖补 + * + * @param ids 需要删除的项目落户奖补主键集合 + * @return 结果 + */ + public int deleteBmsProjectSettlementAwardByIds(Long[] ids); + + /** + * 删除项目落户奖补信息 + * + * @param id 项目落户奖补主键 + * @return 结果 + */ + public int deleteBmsProjectSettlementAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsSceneOpeningAwardService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsSceneOpeningAwardService.java new file mode 100644 index 0000000..f2448e0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsSceneOpeningAwardService.java @@ -0,0 +1,64 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardUpdateDto; + +import java.util.List; + +/** + * 场景开放奖补Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsSceneOpeningAwardService extends IService<BmsSceneOpeningAward> { + /** + * 查询场景开放奖补 + * + * @param id 场景开放奖补主键 + * @return 场景开放奖补 + */ + public BmsSceneOpeningAward selectBmsSceneOpeningAwardById(Long id); + + /** + * 查询场景开放奖补列表 + * + * @param bmsSceneOpeningAward 场景开放奖补 + * @return 场景开放奖补集合 + */ + public List<BmsSceneOpeningAward> selectBmsSceneOpeningAwardList(BmsSceneOpeningAward bmsSceneOpeningAward); + + /** + * 新增场景开放奖补 + * + * @param bmsSceneOpeningAwardAddDto 场景开放奖补 + * @return 结果 + */ + public int insertBmsSceneOpeningAward(BmsSceneOpeningAwardAddDto bmsSceneOpeningAwardAddDto); + + /** + * 修改场景开放奖补 + * + * @param bmsSceneOpeningAwardUpdateDto 场景开放奖补 + * @return 结果 + */ + public int updateBmsSceneOpeningAward(BmsSceneOpeningAwardUpdateDto bmsSceneOpeningAwardUpdateDto); + + /** + * 批量删除场景开放奖补 + * + * @param ids 需要删除的场景开放奖补主键集合 + * @return 结果 + */ + public int deleteBmsSceneOpeningAwardByIds(Long[] ids); + + /** + * 删除场景开放奖补信息 + * + * @param id 场景开放奖补主键 + * @return 结果 + */ + public int deleteBmsSceneOpeningAwardById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateInfoService.java new file mode 100644 index 0000000..43afa79 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateInfoService.java @@ -0,0 +1,77 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateInfoQueryVo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 申报模板信息Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBmsTemplateInfoService extends IService<BmsTemplateInfo> { + /** + * 查询申报模板信息 + * + * @param id 申报模板信息主键 + * @return 申报模板信息 + */ + public BmsTemplateInfo selectBmsTemplateInfoById(Long id); + + /** + * 查询申报模板信息列表 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 申报模板信息集合 + */ + public List<BmsTemplateInfoQueryVo> selectBmsTemplateInfoList(BmsTemplateInfo bmsTemplateInfo); + + /** + * 导出模板表单 + * + * @param request + * @param response + * @param id + * @return + * @author emiya.xie + * @create 2023/8/31 10:25 + */ + public void exportTemplate(HttpServletRequest request, HttpServletResponse response, Long id); + + /** + * 新增申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + public int insertBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo); + + /** + * 修改申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + public int updateBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo); + + /** + * 批量删除申报模板信息 + * + * @param ids 需要删除的申报模板信息主键集合 + * @return 结果 + */ + public int deleteBmsTemplateInfoByIds(Long[] ids); + + /** + * 删除申报模板信息信息 + * + * @param id 申报模板信息主键 + * @return 结果 + */ + public int deleteBmsTemplateInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateRecordService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateRecordService.java new file mode 100644 index 0000000..dcca8b0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBmsTemplateRecordService.java @@ -0,0 +1,71 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordVo; + +import java.util.List; + +/** + * 在线模板Service接口 + * + * @author farben + * @date 2023-09-07 + */ +public interface IBmsTemplateRecordService extends IService<BmsTemplateRecord> { + /** + * 查询在线模板 + * + * @param id 在线模板主键 + * @return 在线模板 + */ + public BmsTemplateRecordVo selectBmsTemplateRecordById(Long id); + + /** + * 查询在线模板列表 + * + * @param bmsTemplateRecordQueryDto 在线模板 + * @return 在线模板集合 + */ + public List<BmsTemplateRecordQueryVo> selectBmsTemplateRecordList(BmsTemplateRecordQueryDto bmsTemplateRecordQueryDto); + + public List<BmsTemplateRecordQueryVo> selectTemplateRecordList(String creditCode); + + public List<BmsTemplateRecordQueryVo> selectBmsTemplateNameList(BmsTemplateQueryDto bmsTemplateQueryDto); + /** + * 新增在线模板 + * + * @param bmsTemplateRecordAddDto 在线模板 + * @return 结果 + */ + public int insertBmsTemplateRecord(BmsTemplateRecordAddDto bmsTemplateRecordAddDto); + + /** + * 修改在线模板 + * + * @param bmsTemplateRecordUpdateDto 在线模板 + * @return 结果 + */ + public int updateBmsTemplateRecord(BmsTemplateRecordUpdateDto bmsTemplateRecordUpdateDto); + + /** + * 批量删除在线模板 + * + * @param ids 需要删除的在线模板主键集合 + * @return 结果 + */ + public int deleteBmsTemplateRecordByIds(Long[] ids); + + /** + * 删除在线模板信息 + * + * @param id 在线模板主键 + * @return 结果 + */ + public int deleteBmsTemplateRecordById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBsmFundingInfoService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBsmFundingInfoService.java new file mode 100644 index 0000000..7f9fbd0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IBsmFundingInfoService.java @@ -0,0 +1,62 @@ +package com.ruoyi.jjh.declaration.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.jjh.declaration.entity.BsmFundingInfo; + +import java.util.List; + +/** + * 资金信息Service接口 + * + * @author farben + * @date 2023-08-25 + */ +public interface IBsmFundingInfoService extends IService<BsmFundingInfo> { + /** + * 查询资金信息 + * + * @param id 资金信息主键 + * @return 资金信息 + */ + public BsmFundingInfo selectBsmFundingInfoById(Long id); + + /** + * 查询资金信息列表 + * + * @param bsmFundingInfo 资金信息 + * @return 资金信息集合 + */ + public List<BsmFundingInfo> selectBsmFundingInfoList(BsmFundingInfo bsmFundingInfo); + + /** + * 新增资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + public int insertBsmFundingInfo(BsmFundingInfo bsmFundingInfo); + + /** + * 修改资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + public int updateBsmFundingInfo(BsmFundingInfo bsmFundingInfo); + + /** + * 批量删除资金信息 + * + * @param ids 需要删除的资金信息主键集合 + * @return 结果 + */ + public int deleteBsmFundingInfoByIds(Long[] ids); + + /** + * 删除资金信息信息 + * + * @param id 资金信息主键 + * @return 结果 + */ + public int deleteBsmFundingInfoById(Long id); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/ICommonService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/ICommonService.java new file mode 100644 index 0000000..ed6670e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/ICommonService.java @@ -0,0 +1,40 @@ +package com.ruoyi.jjh.declaration.service; + +import com.ruoyi.jjh.declaration.entity.dto.BmsApprovalInfoUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.OpenInterfaceApplyAddDto; +import com.ruoyi.jjh.declaration.entity.vo.DeclarationRecordsVo; + +import java.util.List; + +/** + * <p> + * 公共服务 + * <p> + * + * @interfaceName: CommonService + * @author: emiya.xie + * @create: 2023-08-31 15:43 + */ +public interface ICommonService { + + public Long checkEnterprise(String creditCode,int templateRecordId); + + public void checkDeclaration(String creditCode,int templateRecordId); + + public void checkEnterprise(Long enterpriseId,Long templateId); + + public void getData(int templateRecordId, Long detailId, DeclarationRecordsVo declarationRecordsVo); + + public void insertProcessInfo(Long declarationRecordId,Integer approvalType); + + public void insertAuditRecord(Long declarationRecordId,Integer approvalType); + + public void cleanProcessList(Long declarationRecordId); + + public List<Long> getUserIds(Long userId); + + public int updateBmsApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto); + + public int insertOpenInterfaceApplyAddDto(OpenInterfaceApplyAddDto openInterfaceApplyAddDto); + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IOpenInterfaceService.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IOpenInterfaceService.java new file mode 100644 index 0000000..ff4abd9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/IOpenInterfaceService.java @@ -0,0 +1,26 @@ +package com.ruoyi.jjh.declaration.service; + +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import com.ruoyi.jjh.declaration.entity.dto.OpenInterfaceApplyAddDto; +import com.ruoyi.jjh.declaration.entity.vo.EnterpriseInfoTemplateVo; + + +/** + * <p> + * 开放接口 + * <p> + * + * @className: IOpenInterfaceService + * @author: emiya.xie + * @create: 2023-09-12 10:13 + */ +public interface IOpenInterfaceService { + + public EnterpriseInfoTemplateVo enterpriseList(String creditCode); + + + public int insertOpenInterfaceApplyAddDto(OpenInterfaceApplyAddDto openInterfaceApplyAddDto); + + public BmsProjectInfo getProjectInfo(Long templateRecordId); + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsApprovalInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsApprovalInfoServiceImpl.java new file mode 100644 index 0000000..95ee5ab --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsApprovalInfoServiceImpl.java @@ -0,0 +1,105 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsApprovalInfoQueryVo; +import com.ruoyi.jjh.declaration.mapper.BmsApprovalInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsApprovalInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 审批记录信息Service业务层处理 + * + * @author farben + * @date 2023-09-09 + */ +@Service +public class BmsApprovalInfoServiceImpl extends ServiceImpl<BmsApprovalInfoMapper,BmsApprovalInfo> implements IBmsApprovalInfoService { + + + /** + * 查询审批记录信息 + * + * @param id 审批记录信息主键 + * @return 审批记录信息 + */ + @Override + public BmsApprovalInfo selectBmsApprovalInfoById(Long id) { + return baseMapper.selectBmsApprovalInfoById(id); + } + + /** + * 查询审批记录信息列表 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 审批记录信息 + */ + @Override + public List<BmsApprovalInfo> selectBmsApprovalInfoList(BmsApprovalInfo bmsApprovalInfo) { + return baseMapper.selectBmsApprovalInfoList(bmsApprovalInfo); + } + + /** + * 新增审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + @Override + public int insertBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo) { + bmsApprovalInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsApprovalInfo(bmsApprovalInfo); + } + + /** + * 修改审批记录信息 + * + * @param bmsApprovalInfo 审批记录信息 + * @return 结果 + */ + @Override + public int updateBmsApprovalInfo(BmsApprovalInfo bmsApprovalInfo) { + bmsApprovalInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsApprovalInfo(bmsApprovalInfo); + } + + /** + * 批量删除审批记录信息 + * + * @param ids 需要删除的审批记录信息主键 + * @return 结果 + */ + @Override + public int deleteBmsApprovalInfoByIds(Long[] ids) { + return baseMapper.deleteBmsApprovalInfoByIds(ids); + } + + @Override + public int updateApproval(Long declarationRecordsId) { + return baseMapper.updateApproval(declarationRecordsId); + } + + @Override + public int updateApprovalList(List<Long> recordsId) { + return baseMapper.updateApprovalList(recordsId); + } + + /** + * 删除审批记录信息信息 + * + * @param id 审批记录信息主键 + * @return 结果 + */ + @Override + public int deleteBmsApprovalInfoById(Long id) { + return baseMapper.deleteBmsApprovalInfoById(id); + } + + @Override + public List<BmsApprovalInfoQueryVo> getApprovalInfoList(Long declarationRecordsId) { + return baseMapper.getApprovalInfoList(declarationRecordsId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBigStrongAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBigStrongAwardServiceImpl.java new file mode 100644 index 0000000..feaa24c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBigStrongAwardServiceImpl.java @@ -0,0 +1,168 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.jjh.declaration.entity.BmsBigStrongAward; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBigStrongAwardUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsFundingDetailAddDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsBigStrongAwardQueryVo; +import com.ruoyi.jjh.declaration.mapper.BmsBigStrongAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsBigStrongAwardService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsFundingDetailService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 做大做强奖详情Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +@Lazy +public class BmsBigStrongAwardServiceImpl extends ServiceImpl<BmsBigStrongAwardMapper, BmsBigStrongAward> implements IBmsBigStrongAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsFundingDetailService iBmsFundingDetailService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询做大做强奖详情 + * + * @param id 做大做强奖详情主键 + * @return 做大做强奖详情 + */ + @Override + public BmsBigStrongAwardQueryVo selectBmsBigStrongAwardById(Long id) { + return baseMapper.selectBmsBigStrongAwardById(id); + } + + /** + * 查询做大做强奖详情列表 + * + * @param bmsBigStrongAward 做大做强奖详情 + * @return 做大做强奖详情 + */ + @Override + public List<BmsBigStrongAward> selectBmsBigStrongAwardList(BmsBigStrongAward bmsBigStrongAward) { + return baseMapper.selectBmsBigStrongAwardList(bmsBigStrongAward); + } + + /** + * 新增做大做强奖详情 + * + * @param bmsBigStrongAwardAddDto 做大做强奖详情 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsBigStrongAward(BmsBigStrongAwardAddDto bmsBigStrongAwardAddDto) { + + // check 企业信息 + Long enterpriseId = iCommonService.checkEnterprise(bmsBigStrongAwardAddDto.getCreditCode(), bmsBigStrongAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsBigStrongAwardAddDto.getCreditCode() + , bmsBigStrongAwardAddDto.getTemplateRecordId()); + if (enterpriseId == 0) { + return 0; + } + BmsBigStrongAward bmsBigStrongAward = new BmsBigStrongAward(); + BeanUtil.copyProperties(bmsBigStrongAwardAddDto, bmsBigStrongAward); + bmsBigStrongAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsBigStrongAward); + + List<BmsFundingDetailAddDto> fundingDetailList = bmsBigStrongAwardAddDto.getFundingDetailList(); + List<BmsFundingDetail> fundingInfoList = new ArrayList<>(); + fundingDetailList.forEach(x -> { + BmsFundingDetail fundingInfo = new BmsFundingDetail(); + BeanUtil.copyProperties(x, fundingInfo); + fundingInfo.setType(2); + fundingInfo.setTemplateRecordId(bmsBigStrongAwardAddDto.getTemplateRecordId()); + fundingInfo.setDetailId(bmsBigStrongAward.getId()); + fundingInfoList.add(fundingInfo); + }); + // 批量新增资金信息 + iBmsFundingDetailService.saveOrUpdateBatch(fundingInfoList); + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsBigStrongAwardAddDto, declarationRecords); + declarationRecords.setMatter("提交做大做强奖补申请"); + declarationRecords.setDetailId(bmsBigStrongAward.getId()); + declarationRecords.setEnterpriseId(enterpriseId); + iBmsDeclarationRecordsService.save(declarationRecords); + // 申请审批 + if (bmsBigStrongAwardAddDto.getStatus() == 1) { + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(), 0); + } + + return num; + } + + + /** + * 修改做大做强奖详情 + * + * @param bmsBigStrongAwardUpdateDto 做大做强奖详情 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsBigStrongAward(BmsBigStrongAwardUpdateDto bmsBigStrongAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsBigStrongAwardUpdateDto.getDeclarationRecordsId() + , bmsBigStrongAwardUpdateDto.getProjectId(), bmsBigStrongAwardUpdateDto.getProjectName() + , bmsBigStrongAwardUpdateDto.getStatus()); + num = baseMapper.updateBmsBigStrongAward(bmsBigStrongAwardUpdateDto); + List<BmsFundingDetail> fundingDetailList = bmsBigStrongAwardUpdateDto.getFundingDetailList(); + iBmsFundingDetailService.saveOrUpdateBatch(fundingDetailList); + // 申请审批 + if (bmsBigStrongAwardUpdateDto.getStatus() == 1) { + // 审批状态 + iCommonService.insertAuditRecord(bmsBigStrongAwardUpdateDto.getDeclarationRecordsId(), 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除做大做强奖详情 + * + * @param ids 需要删除的做大做强奖详情主键 + * @return 结果 + */ + @Override + public int deleteBmsBigStrongAwardByIds(Long[] ids) { + return baseMapper.deleteBmsBigStrongAwardByIds(ids); + } + + /** + * 删除做大做强奖详情信息 + * + * @param id 做大做强奖详情主键 + * @return 结果 + */ + @Override + public int deleteBmsBigStrongAwardById(Long id) { + return baseMapper.deleteBmsBigStrongAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBrandingAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBrandingAwardServiceImpl.java new file mode 100644 index 0000000..f353db1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsBrandingAwardServiceImpl.java @@ -0,0 +1,140 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsBrandingAward; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsBrandingAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsBrandingAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsBrandingAwardService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 品牌打造奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsBrandingAwardServiceImpl extends ServiceImpl<BmsBrandingAwardMapper,BmsBrandingAward> implements IBmsBrandingAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + /** + * 查询品牌打造奖补 + * + * @param id 品牌打造奖补主键 + * @return 品牌打造奖补 + */ + @Override + public BmsBrandingAward selectBmsBrandingAwardById(Long id) { + return baseMapper.selectBmsBrandingAwardById(id); + } + + /** + * 查询品牌打造奖补列表 + * + * @param bmsBrandingAward 品牌打造奖补 + * @return 品牌打造奖补 + */ + @Override + public List<BmsBrandingAward> selectBmsBrandingAwardList(BmsBrandingAward bmsBrandingAward) { + return baseMapper.selectBmsBrandingAwardList(bmsBrandingAward); + } + + /** + * 新增品牌打造奖补 + * + * @param bmsBrandingAwardAddDto 品牌打造奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsBrandingAward(BmsBrandingAwardAddDto bmsBrandingAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsBrandingAwardAddDto.getCreditCode() + ,bmsBrandingAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsBrandingAwardAddDto.getCreditCode() + ,bmsBrandingAwardAddDto.getTemplateRecordId()); + BmsBrandingAward bmsBrandingAward = new BmsBrandingAward(); + BeanUtil.copyProperties(bmsBrandingAwardAddDto,bmsBrandingAward); + bmsBrandingAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsBrandingAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsBrandingAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交品牌打造奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsBrandingAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsBrandingAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改品牌打造奖补 + * + * @param bmsBrandingAwardUpdateDto 品牌打造奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsBrandingAward(BmsBrandingAwardUpdateDto bmsBrandingAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsBrandingAwardUpdateDto.getDeclarationRecordsId() + ,bmsBrandingAwardUpdateDto.getProjectId(),bmsBrandingAwardUpdateDto.getProjectName() + ,bmsBrandingAwardUpdateDto.getStatus()); + + bmsBrandingAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsBrandingAward(bmsBrandingAwardUpdateDto); + // 申请审批 + if (bmsBrandingAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsBrandingAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除品牌打造奖补 + * + * @param ids 需要删除的品牌打造奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsBrandingAwardByIds(Long[] ids) { + return baseMapper.deleteBmsBrandingAwardByIds(ids); + } + + /** + * 删除品牌打造奖补信息 + * + * @param id 品牌打造奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsBrandingAwardById(Long id) { + return baseMapper.deleteBmsBrandingAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCarrierConstructionAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCarrierConstructionAwardServiceImpl.java new file mode 100644 index 0000000..984cf66 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCarrierConstructionAwardServiceImpl.java @@ -0,0 +1,140 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCarrierConstructionAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsCarrierConstructionAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsCarrierConstructionAwardService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 载体建设奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsCarrierConstructionAwardServiceImpl extends ServiceImpl<BmsCarrierConstructionAwardMapper,BmsCarrierConstructionAward> implements IBmsCarrierConstructionAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + /** + * 查询载体建设奖补 + * + * @param id 载体建设奖补主键 + * @return 载体建设奖补 + */ + @Override + public BmsCarrierConstructionAward selectBmsCarrierConstructionAwardById(Long id) { + return baseMapper.selectBmsCarrierConstructionAwardById(id); + } + + /** + * 查询载体建设奖补列表 + * + * @param bmsCarrierConstructionAward 载体建设奖补 + * @return 载体建设奖补 + */ + @Override + public List<BmsCarrierConstructionAward> selectBmsCarrierConstructionAwardList(BmsCarrierConstructionAward bmsCarrierConstructionAward) { + return baseMapper.selectBmsCarrierConstructionAwardList(bmsCarrierConstructionAward); + } + + /** + * 新增载体建设奖补 + * + * @param bmsCarrierConstructionAwardAddDto 载体建设奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsCarrierConstructionAward(BmsCarrierConstructionAwardAddDto bmsCarrierConstructionAwardAddDto) { + + Long enterpriseId = iCommonService.checkEnterprise(bmsCarrierConstructionAwardAddDto.getCreditCode() + ,bmsCarrierConstructionAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsCarrierConstructionAwardAddDto.getCreditCode() + ,bmsCarrierConstructionAwardAddDto.getTemplateRecordId()); + BmsCarrierConstructionAward bmsCarrierConstructionAward = new BmsCarrierConstructionAward(); + BeanUtil.copyProperties(bmsCarrierConstructionAwardAddDto,bmsCarrierConstructionAward); + bmsCarrierConstructionAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsCarrierConstructionAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsCarrierConstructionAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交载体建设奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsCarrierConstructionAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsCarrierConstructionAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改载体建设奖补 + * + * @param bmsCarrierConstructionAwardUpdateDto 载体建设奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsCarrierConstructionAward(BmsCarrierConstructionAwardUpdateDto bmsCarrierConstructionAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsCarrierConstructionAwardUpdateDto.getDeclarationRecordsId() + ,bmsCarrierConstructionAwardUpdateDto.getProjectId(),bmsCarrierConstructionAwardUpdateDto.getProjectName() + ,bmsCarrierConstructionAwardUpdateDto.getStatus()); + bmsCarrierConstructionAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsCarrierConstructionAward(bmsCarrierConstructionAwardUpdateDto); + // 申请审批 + if (bmsCarrierConstructionAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsCarrierConstructionAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除载体建设奖补 + * + * @param ids 需要删除的载体建设奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsCarrierConstructionAwardByIds(Long[] ids) { + return baseMapper.deleteBmsCarrierConstructionAwardByIds(ids); + } + + /** + * 删除载体建设奖补信息 + * + * @param id 载体建设奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsCarrierConstructionAwardById(Long id) { + return baseMapper.deleteBmsCarrierConstructionAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCreditManagementServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCreditManagementServiceImpl.java new file mode 100644 index 0000000..5a1f990 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsCreditManagementServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsCreditManagement; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsCreditManagementUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsCreditManagementMapper; +import com.ruoyi.jjh.declaration.service.IBmsCreditManagementService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 信用管理奖补Service业务层处理 + * + * @author farben + * @date 2023-09-04 + */ +@Service +public class BmsCreditManagementServiceImpl extends ServiceImpl<BmsCreditManagementMapper,BmsCreditManagement> implements IBmsCreditManagementService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询信用管理奖补 + * + * @param id 信用管理奖补主键 + * @return 信用管理奖补 + */ + @Override + public BmsCreditManagement selectBmsCreditManagementById(Long id) { + return baseMapper.selectBmsCreditManagementById(id); + } + + /** + * 查询信用管理奖补列表 + * + * @param bmsCreditManagement 信用管理奖补 + * @return 信用管理奖补 + */ + @Override + public List<BmsCreditManagement> selectBmsCreditManagementList(BmsCreditManagement bmsCreditManagement) { + return baseMapper.selectBmsCreditManagementList(bmsCreditManagement); + } + + /** + * 新增信用管理奖补 + * + * @param bmsCreditManagementAddDto 信用管理奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsCreditManagement(BmsCreditManagementAddDto bmsCreditManagementAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsCreditManagementAddDto.getCreditCode() + ,bmsCreditManagementAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsCreditManagementAddDto.getCreditCode() + ,bmsCreditManagementAddDto.getTemplateRecordId()); + BmsCreditManagement bmsCreditManagement = new BmsCreditManagement(); + BeanUtil.copyProperties(bmsCreditManagementAddDto,bmsCreditManagement); + bmsCreditManagement.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsCreditManagement); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsCreditManagementAddDto,declarationRecords); + declarationRecords.setMatter("提交信用管理奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsCreditManagement.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsCreditManagementAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改信用管理奖补 + * + * @param bmsCreditManagementUpdateDto 信用管理奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsCreditManagement(BmsCreditManagementUpdateDto bmsCreditManagementUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsCreditManagementUpdateDto.getDeclarationRecordsId() + ,bmsCreditManagementUpdateDto.getProjectId(),bmsCreditManagementUpdateDto.getProjectName() + ,bmsCreditManagementUpdateDto.getStatus()); + + bmsCreditManagementUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsCreditManagement(bmsCreditManagementUpdateDto); + // 申请审批 + if (bmsCreditManagementUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsCreditManagementUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除信用管理奖补 + * + * @param ids 需要删除的信用管理奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsCreditManagementByIds(Long[] ids) { + return baseMapper.deleteBmsCreditManagementByIds(ids); + } + + /** + * 删除信用管理奖补信息 + * + * @param id 信用管理奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsCreditManagementById(Long id) { + return baseMapper.deleteBmsCreditManagementById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsDeclarationRecordsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsDeclarationRecordsServiceImpl.java new file mode 100644 index 0000000..b6f401b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsDeclarationRecordsServiceImpl.java @@ -0,0 +1,555 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.context.SecurityContextHolder; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsFieldInfo; +import com.ruoyi.jjh.declaration.entity.BmsFileInfo; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; +import com.ruoyi.jjh.declaration.entity.dto.ApprovalDeclarationRecordsQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsApprovalInfoUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsFieldInfoAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsFileInfoAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsMunicipalBureauReviewQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.MunicipalReviewDto; +import com.ruoyi.jjh.declaration.entity.dto.MunicipalReviewInfoDto; +import com.ruoyi.jjh.declaration.entity.vo.ApprovalDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsMunicipalBureauReviewQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.DeclarationRecordsVo; +import com.ruoyi.jjh.declaration.mapper.BmsDeclarationRecordsMapper; +import com.ruoyi.jjh.declaration.service.IBmsApprovalInfoService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import com.ruoyi.jjh.declaration.service.IBmsFieldInfoService; +import com.ruoyi.jjh.declaration.service.IBmsFileInfoService; +import com.ruoyi.jjh.declaration.service.IBmsProcessInfoService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 在线申报记录Service业务层处理 + * + * @author farben + * @date 2023-08-28 + */ +@Service +public class BmsDeclarationRecordsServiceImpl extends ServiceImpl<BmsDeclarationRecordsMapper, BmsDeclarationRecords> implements IBmsDeclarationRecordsService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsFieldInfoService iBmsFieldInfoService; + + @Autowired + private IBmsFileInfoService iBmsFileInfoService; + + @Autowired + private IBmsApprovalInfoService iBmsApprovalInfoService; + + @Autowired + private IBmsProcessInfoService iBmsProcessInfoService; + + @Autowired + private IBmsEnterpriseBasicInfoService iBmsEnterpriseBasicInfoService; + + + /** + * 查询在线申报记录 + * + * @param id 在线申报记录主键 + * @return 在线申报记录 + */ + @Override + public DeclarationRecordsVo selectBmsDeclarationRecordsById(Long id) { + // 获取申请记录 + BmsDeclarationRecords declarationRecords = baseMapper.selectBmsDeclarationRecordsById(id); + DeclarationRecordsVo declarationRecordsVo = new DeclarationRecordsVo(); + declarationRecordsVo.setBmsDeclarationRecords(declarationRecords); + // 在线模板记录id + int declarationTemplateType = declarationRecords.getDeclarationTemplateType(); + // 详情id + Long detailId = declarationRecords.getDetailId(); + // 企业id + Long enterpriseId = declarationRecords.getEnterpriseId(); + // 获取详情数据 + iCommonService.getData(declarationTemplateType, detailId, declarationRecordsVo); + //企业基本信息 + declarationRecordsVo.setBmsEnterpriseBasicInfo(iBmsEnterpriseBasicInfoService.selectBmsEnterpriseBasicInfoById(enterpriseId)); + + declarationRecordsVo.setApprovalInfoList(iBmsApprovalInfoService.getApprovalInfoList(id)); + + return declarationRecordsVo; + } + + + /** + * 查询在线申报记录列表 + * + * @param bmsDeclarationRecordsDto 在线申报记录 + * @return 在线申报记录 + */ + @Override + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto) { + return baseMapper.selectBmsDeclarationRecordsList(bmsDeclarationRecordsDto); + } + + @Override + public List<BmsDeclarationRecordsQueryVo> selectBmsDeclarationRecordsZwList(BmsDeclarationRecordsDto bmsDeclarationRecordsDto) { + return baseMapper.selectBmsDeclarationRecordsZwList(bmsDeclarationRecordsDto); + } + + @Override + public List<BmsMunicipalBureauReviewQueryVo> selectMunicipalBureauReviewList() { + return baseMapper.selectMunicipalBureauReviewList(); + } + + /** + * 审核列表 + * + * @param approvalDeclarationRecordsQueryDto + * @return {@link List< ApprovalDeclarationRecordsQueryVo>} + * @author emiya.xie + * @create 2023/9/9 15:14 + */ + @Override + public List<ApprovalDeclarationRecordsQueryVo> approvalList(ApprovalDeclarationRecordsQueryDto approvalDeclarationRecordsQueryDto) { +// approvalDeclarationRecordsQueryDto.setUserIds(iCommonService.getUserIds(SecurityContextHolder.getUserId())); + approvalDeclarationRecordsQueryDto.setApprovalById(SecurityContextHolder.getUserId()); + return baseMapper.approvalList(approvalDeclarationRecordsQueryDto); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto) { + Boolean flag = false; + List<BmsApprovalInfo> approvalInfoList = iBmsApprovalInfoService.lambdaQuery().eq(BmsApprovalInfo::getDeclarationRecordsId, bmsApprovalInfoUpdateDto.getDeclarationRecordsId()).orderByAsc(BmsApprovalInfo::getSort).list(); + AtomicReference<Long> processId = new AtomicReference<>(0L); + if (CollectionUtil.isNotEmpty(approvalInfoList)) { + approvalInfoList.forEach(x -> { + if (x.getIsReview().equals(0)) { + bmsApprovalInfoUpdateDto.setId(x.getId()); + bmsApprovalInfoUpdateDto.setSort(x.getSort()); + BeanUtil.copyProperties(bmsApprovalInfoUpdateDto, x); + x.setApprovalById(SecurityContextHolder.getUserId()); + x.setApprovalTime(DateUtils.getNowDate()); + processId.set(x.getProcessId()); + } + }); + approvalInfoList.forEach(x -> { + if ((bmsApprovalInfoUpdateDto.getSort() + 1) == x.getSort()) { + x.setIsReview(0); + } + }); + flag = iBmsApprovalInfoService.saveOrUpdateBatch(approvalInfoList); + approval(bmsApprovalInfoUpdateDto, processId.get()); + } + if (!flag) { + return 0; + } + return 1; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto) { + // 新增审核记录,修改申报记录状态 + List<BmsProcessInfo> bmsProcessInfoList = iBmsProcessInfoService.lambdaQuery().eq(BmsProcessInfo::getApprovalType, 0).list(); + BmsProcessInfo bmsProcessInfo = new BmsProcessInfo(); + bmsProcessInfoList.forEach(x -> { + boolean flag = Arrays.asList(x.getApprovalByIds().split(",")).contains(String.valueOf(SecurityContextHolder.getUserId())); + if (flag) { + BeanUtil.copyProperties(x, bmsProcessInfo); + } + }); + // 审批记录 + List<BmsApprovalInfo> approvalInfoList = iBmsApprovalInfoService.lambdaQuery().eq(BmsApprovalInfo::getDeclarationRecordsId, bmsApprovalInfoUpdateDto.getDeclarationRecordsId()).orderByDesc(BmsApprovalInfo::getSort).list(); + // 更新审批记录 + if (CollectionUtil.isNotEmpty(approvalInfoList)) { + approvalInfoList.forEach(x -> { + if (bmsProcessInfo.getId().equals(x.getProcessId()) && x.getApprovalStatus().equals(0)) { + // 更新审批记录 + Integer sort = x.getSort(); + bmsApprovalInfoUpdateDto.setId(x.getId()); +// bmsApprovalInfoUpdateDto.setSort(x.getSort()); + BeanUtil.copyProperties(bmsApprovalInfoUpdateDto, x); + x.setSort(sort); + x.setApprovalById(SecurityContextHolder.getUserId()); + x.setApprovalTime(DateUtils.getNowDate()); + x.setIsReview(2); + iBmsApprovalInfoService.saveOrUpdate(x); + } + }); + } + + // 新增记录 + if (bmsApprovalInfoUpdateDto.getApprovalStatus().equals(1)) { + BmsProcessInfo bmsProcessInfo2 = new BmsProcessInfo(); + bmsProcessInfoList.forEach(x -> { + if (x.getId().equals(bmsProcessInfo.getNextProcessId())) { + BeanUtil.copyProperties(x, bmsProcessInfo2); + } + }); + if (BeanUtil.isNotEmpty(bmsProcessInfo2)) { + BmsApprovalInfo bmsApprovalInfo = new BmsApprovalInfo(); + bmsApprovalInfo.setProcessId(bmsProcessInfo2.getId()); + bmsApprovalInfo.setDeclarationRecordsId(bmsApprovalInfoUpdateDto.getDeclarationRecordsId()); + bmsApprovalInfo.setApprovalById(bmsProcessInfo2.getApprovalById()); + bmsApprovalInfo.setApprovalStatus(0); + bmsApprovalInfo.setSort(approvalInfoList.size() + 1); + iBmsApprovalInfoService.saveOrUpdate(bmsApprovalInfo); + } + } + // 更新记录状态 + int num = approval(bmsApprovalInfoUpdateDto, bmsProcessInfo); + + return num; + } + + public int approval(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto, BmsProcessInfo bmsProcessInfo) { + + BmsDeclarationRecords bmsDeclarationRecords = baseMapper.selectById(bmsApprovalInfoUpdateDto.getDeclarationRecordsId()); + if (bmsProcessInfo.getApprovalLevel().equals(0)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(2L); + } else { + bmsDeclarationRecords.setStatus(8L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(1)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(3L); + } else { + bmsDeclarationRecords.setStatus(7L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(2)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(4L); + } else { + bmsDeclarationRecords.setStatus(6L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(3)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(5L); + } else { + bmsDeclarationRecords.setStatus(9L); + } + } + return baseMapper.updateById(bmsDeclarationRecords); + } + + /** + * 审批 + * + * @param bmsApprovalInfoUpdateDto + * @param processId + * @return + * @author emiya.xie + * @create 2023/9/9 18:22 + */ + public void approval(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto, Long processId) { + BmsProcessInfo bmsProcessInfo = iBmsProcessInfoService.lambdaQuery().eq(BmsProcessInfo::getId, processId).list().get(0); + if (BeanUtil.isNotEmpty(bmsProcessInfo)) { + BmsDeclarationRecords bmsDeclarationRecords = baseMapper.selectById(bmsApprovalInfoUpdateDto.getDeclarationRecordsId()); + if (bmsProcessInfo.getApprovalLevel().equals(0)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(2L); + } else { + bmsDeclarationRecords.setStatus(8L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(1)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(3L); + } else { + bmsDeclarationRecords.setStatus(7L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(2)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(4L); + } else { + bmsDeclarationRecords.setStatus(6L); + } + } else if (bmsProcessInfo.getApprovalLevel().equals(3)) { + if (bmsApprovalInfoUpdateDto.getApprovalStatus() == 1) { + bmsDeclarationRecords.setStatus(5L); + } else { + bmsDeclarationRecords.setStatus(9L); + } + } + baseMapper.updateById(bmsDeclarationRecords); + } + } + + /** + * 新增在线申报记录 + * + * @param bmsDeclarationRecordsAddDto 在线申报记录 + * @return 结果 + */ + @Override + public int insertBmsDeclarationRecords(BmsDeclarationRecordsAddDto bmsDeclarationRecordsAddDto) { + iCommonService.checkEnterprise(bmsDeclarationRecordsAddDto.getEnterpriseId(), bmsDeclarationRecordsAddDto.getTemplateId()); + BmsDeclarationRecords bmsDeclarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsDeclarationRecordsAddDto, bmsDeclarationRecords); + bmsDeclarationRecords.setMatter(""); + // 新增在线申请记录 + int num = baseMapper.insert(bmsDeclarationRecords); + // 批量保存字段信息 + List<BmsFieldInfoAddDto> fieldList = bmsDeclarationRecordsAddDto.getFieldList(); + List<BmsFieldInfo> fieldInfoList = new ArrayList<>(); + if (null != fieldList && fieldList.size() > 0) { + fieldList.forEach(x -> { + BmsFieldInfo bmsFieldInfo = new BmsFieldInfo(); + BeanUtil.copyProperties(x, bmsFieldInfo); + bmsFieldInfo.setDetailId(bmsDeclarationRecords.getId()); + fieldInfoList.add(bmsFieldInfo); + }); + iBmsFieldInfoService.saveOrUpdateBatch(fieldInfoList); + } + // 批量保存文件信息 + List<BmsFileInfoAddDto> fileList = bmsDeclarationRecordsAddDto.getFileList(); + List<BmsFileInfo> fileInfoList = new ArrayList<>(); + if (null != fileList && fileList.size() > 0) { + fileList.forEach(x -> { + BmsFileInfo bmsFileInfo = new BmsFileInfo(); + BeanUtil.copyProperties(x, bmsFileInfo); + bmsFileInfo.setDetailId(bmsDeclarationRecords.getId()); + fileInfoList.add(bmsFileInfo); + }); + iBmsFileInfoService.saveOrUpdateBatch(fileInfoList); + } + return num; + } + + /** + * 修改在线申报记录 + * + * @param bmsDeclarationRecords 在线申报记录 + * @return 结果 + */ + @Override + public int updateBmsDeclarationRecords(BmsDeclarationRecords bmsDeclarationRecords) { + bmsDeclarationRecords.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsDeclarationRecords(bmsDeclarationRecords); + } + + /** + * 市级评定结果确认 + * + * @param municipalReviewDto + * @return {@link int} + * @author emiya.xie + * @create 2023/9/13 17:21 + */ + @Override + public int municipalReview(MunicipalReviewDto municipalReviewDto) { + List<MunicipalReviewInfoDto> list = municipalReviewDto.getList(); + // 需要更新的数据 + List<BmsDeclarationRecords> reviewrecordsList = new ArrayList<>(); + // 统一信用代码、年份、申报类型 -- > 申报记录 --> + // 查询企业数据 + List<BmsEnterpriseBasicInfo> enterpriseInfoList = iBmsEnterpriseBasicInfoService.lambdaQuery().list(); + Map<String, BmsEnterpriseBasicInfo> enterpriseBasicMap = enterpriseInfoList.stream().collect(Collectors.toMap(BmsEnterpriseBasicInfo::getCreditCode, Function.identity())); + + // 匹配企业 + List<Long> enterpriseIdList = new ArrayList<>(); + list.forEach(x -> { + if (enterpriseBasicMap.containsKey(x.getCreditCode())) { + x.setEnterpriseId(enterpriseBasicMap.get(x.getCreditCode()).getId()); + // 获取对应企业id集合 + enterpriseIdList.add(enterpriseBasicMap.get(x.getCreditCode()).getId()); + } + // 区分状态 + if (x.getResult().equals("通过")) { + x.setStatus(5L); + } else { + x.setStatus(9L); + } + }); + + //获取对应企业的申报记录 + List<BmsDeclarationRecords> recordsList = baseMapper.selectList(Wrappers.lambdaQuery(BmsDeclarationRecords.class).in(BmsDeclarationRecords::getEnterpriseId, enterpriseIdList).eq(BmsDeclarationRecords::getStatus, 4)); + if (CollectionUtil.isNotEmpty(recordsList)) { + // 根据条件对比获取记录id + + // 记录id集合 + List<Long> declarationIdList = new ArrayList<>(); + for (BmsDeclarationRecords records : recordsList) { + for (MunicipalReviewInfoDto dto : list) { + if (records.getEnterpriseId().equals(dto.getEnterpriseId()) && records.getYear().equals(dto.getYear()) && records.getProjectName().contains(dto.getDeclarationTypeStr())) { + records.setStatus(dto.getStatus()); + dto.setDeclarationId(records.getId()); + declarationIdList.add(records.getId()); + reviewrecordsList.add(records); + } + } + } + + if (CollectionUtil.isNotEmpty(reviewrecordsList)) { + Map<Long, MunicipalReviewInfoDto> reviewInfoMap = list.stream().collect(Collectors.toMap(MunicipalReviewInfoDto::getDeclarationId, Function.identity())); + + // 查询审批记录并更新 + List<BmsApprovalInfo> approvalInfoList = iBmsApprovalInfoService.lambdaQuery().in(BmsApprovalInfo::getDeclarationRecordsId, declarationIdList).eq(BmsApprovalInfo::getProcessId, 4).eq(BmsApprovalInfo::getApprovalStatus, 0).list(); + // 需要更新的审批数据的id + List<Long> recordsIdList = new ArrayList<>(); + approvalInfoList.forEach(x -> { + if (reviewInfoMap.containsKey(x.getDeclarationRecordsId())) { + MunicipalReviewInfoDto reviewInfoDto = reviewInfoMap.get(x.getDeclarationRecordsId()); + if (reviewInfoDto.getStatus() == 5) { + x.setApprovalStatus(1); + } else { + recordsIdList.add(x.getDeclarationRecordsId()); + x.setApprovalStatus(2); + x.setIsBeforeData(1); + } + x.setApprovalOpinions(reviewInfoDto.getResult()); + x.setApprovalById(SecurityContextHolder.getUserId()); + x.setApprovalTime(DateUtils.getNowDate()); + } + }); + if (CollectionUtil.isNotEmpty(recordsIdList)) { + iBmsApprovalInfoService.updateApprovalList(recordsIdList); + } + // 批量保存记录 + boolean b = this.saveOrUpdateBatch(reviewrecordsList); + // 审查审批记录 + iBmsApprovalInfoService.saveOrUpdateBatch(approvalInfoList); + } + } + + return reviewrecordsList.size(); + } + + /** + * 市局审批 + * + * @param municipalReviewDto + * @return {@link int} + * @author emiya.xie + * @create 2023/9/17 13:59 + */ + @Override + public int municipalReviewNew(MunicipalReviewDto municipalReviewDto) { + List<BmsMunicipalBureauReviewQueryDto> reviewList = municipalReviewDto.getReviewList(); + // 需要更新的申报记录 + List<BmsDeclarationRecords> recordsUpdate = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(reviewList)) { + //TODO + // 1、根据导入的申报记录id获取对应数据 + // 2、修改申报记录状态, + // 3、更新申报记录对应的审核记录(如果是拒绝,还要修改审核记录的isBeforeData数据状态) + List<Long> ids = reviewList.stream().map(BmsMunicipalBureauReviewQueryDto::getId).collect(Collectors.toList()); + // 查询到的申报记录 + List<BmsDeclarationRecords> records = baseMapper.selectList(Wrappers.lambdaQuery(BmsDeclarationRecords.class).in(BmsDeclarationRecords::getId, ids).eq(BmsDeclarationRecords::getStatus, 4)); + // key :记录id,形成map + Map<Long, BmsDeclarationRecords> recordsMap = records.stream().collect(Collectors.toMap(BmsDeclarationRecords::getId, Function.identity())); + // 查询审批记录并更新 + List<BmsApprovalInfo> approvalInfoList = iBmsApprovalInfoService.lambdaQuery().in(BmsApprovalInfo::getDeclarationRecordsId, ids).eq(BmsApprovalInfo::getProcessId, 4).eq(BmsApprovalInfo::getApprovalStatus, 0).list(); + Map<Long, BmsApprovalInfo> approvalMap = approvalInfoList.stream().collect(Collectors.toMap(BmsApprovalInfo::getDeclarationRecordsId, Function.identity())); + + // 需要更新的审批记录 + List<BmsApprovalInfo> approvalInfoUpdate = new ArrayList<>(); + // 需要更新的审批数据的id + List<Long> recordsIdList = new ArrayList<>(); + reviewList.forEach(x -> { + if (recordsMap.containsKey(x.getId())) { + BmsDeclarationRecords bmsDeclarationRecords = recordsMap.get(x.getId()); + if (x.getResult() == 0) { + bmsDeclarationRecords.setStatus(5L); + } else { + bmsDeclarationRecords.setStatus(9L); + } + recordsUpdate.add(bmsDeclarationRecords); + } + if (approvalMap.containsKey(x.getId())) { + BmsApprovalInfo bmsApprovalInfo = approvalMap.get(x.getId()); + if (x.getResult() == 0) { + bmsApprovalInfo.setApprovalStatus(1); + } else { + bmsApprovalInfo.setApprovalStatus(2); + recordsIdList.add(x.getId()); + } + bmsApprovalInfo.setApprovalOpinions(x.getOpinion()); + bmsApprovalInfo.setApprovalTime(DateUtils.getNowDate()); + approvalInfoUpdate.add(bmsApprovalInfo); + } + }); + + if (CollectionUtil.isNotEmpty(recordsIdList)) { + iBmsApprovalInfoService.updateApprovalList(recordsIdList); + } + // 批量保存记录 + this.saveOrUpdateBatch(recordsUpdate); + // 审查审批记录 + iBmsApprovalInfoService.saveOrUpdateBatch(approvalInfoUpdate); + } + return recordsUpdate.size(); + } + + /** + * 批量删除在线申报记录 + * + * @param ids 需要删除的在线申报记录主键 + * @return 结果 + */ + @Override + public int deleteBmsDeclarationRecordsByIds(Long[] ids) { + return baseMapper.deleteBmsDeclarationRecordsByIds(ids); + } + + /** + * 删除在线申报记录信息 + * + * @param id 在线申报记录主键 + * @return 结果 + */ + @Override + public int deleteBmsDeclarationRecordsById(Long id) { + return baseMapper.deleteBmsDeclarationRecordsById(id); + } + + /** + * 更新项目名称by Id + * + * @param id + * @param projectName + * @return {@link int} + * @author emiya.xie + * @create 2023/9/6 15:13 + */ + @Override + public int updateProjectNameById(Long id, String projectName, Long projectId) { + return baseMapper.updateProjectNameById(id, projectName, projectId); + } + + @Override + public int updateDeclarationRecords(Long declarationId, Long projectId, String projectName, Long status) { + BmsDeclarationRecords bmsDeclarationRecords = baseMapper.selectById(declarationId); + if (bmsDeclarationRecords.getStatus() == 6 || bmsDeclarationRecords.getStatus() == 7 || bmsDeclarationRecords.getStatus() == 8) { + // 被拒绝,将原审批记录修改为拒绝前数据 + iBmsApprovalInfoService.updateApproval(declarationId); + } + bmsDeclarationRecords.setProjectId(projectId); + bmsDeclarationRecords.setProjectName(projectName); + bmsDeclarationRecords.setStatus(status); + return baseMapper.updateById(bmsDeclarationRecords); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseBasicInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseBasicInfoServiceImpl.java new file mode 100644 index 0000000..c37aa02 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseBasicInfoServiceImpl.java @@ -0,0 +1,88 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.mapper.BmsEnterpriseBasicInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 企业基础信息Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsEnterpriseBasicInfoServiceImpl extends ServiceImpl<BmsEnterpriseBasicInfoMapper,BmsEnterpriseBasicInfo> implements IBmsEnterpriseBasicInfoService { + + /** + * 查询企业基础信息 + * + * @param id 企业基础信息主键 + * @return 企业基础信息 + */ + @Override + public BmsEnterpriseBasicInfo selectBmsEnterpriseBasicInfoById(Long id) { + return baseMapper.selectBmsEnterpriseBasicInfoById(id); + } + + /** + * 查询企业基础信息列表 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 企业基础信息 + */ + @Override + public List<BmsEnterpriseBasicInfo> selectBmsEnterpriseBasicInfoList(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + return baseMapper.selectBmsEnterpriseBasicInfoList(bmsEnterpriseBasicInfo); + } + + /** + * 新增企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + @Override + public int insertBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + bmsEnterpriseBasicInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsEnterpriseBasicInfo(bmsEnterpriseBasicInfo); + } + + /** + * 修改企业基础信息 + * + * @param bmsEnterpriseBasicInfo 企业基础信息 + * @return 结果 + */ + @Override + public int updateBmsEnterpriseBasicInfo(BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo) { + bmsEnterpriseBasicInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsEnterpriseBasicInfo(bmsEnterpriseBasicInfo); + } + + /** + * 批量删除企业基础信息 + * + * @param ids 需要删除的企业基础信息主键 + * @return 结果 + */ + @Override + public int deleteBmsEnterpriseBasicInfoByIds(Long[] ids) { + return baseMapper.deleteBmsEnterpriseBasicInfoByIds(ids); + } + + /** + * 删除企业基础信息信息 + * + * @param id 企业基础信息主键 + * @return 结果 + */ + @Override + public int deleteBmsEnterpriseBasicInfoById(Long id) { + return baseMapper.deleteBmsEnterpriseBasicInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseDirectoryServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseDirectoryServiceImpl.java new file mode 100644 index 0000000..ea57213 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsEnterpriseDirectoryServiceImpl.java @@ -0,0 +1,88 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.mapper.BmsEnterpriseDirectoryMapper; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 企业名录Service业务层处理 + * + * @author farben + * @date 2023-08-31 + */ +@Service +public class BmsEnterpriseDirectoryServiceImpl extends ServiceImpl<BmsEnterpriseDirectoryMapper,BmsEnterpriseDirectory> implements IBmsEnterpriseDirectoryService { + + /** + * 查询企业名录 + * + * @param id 企业名录主键 + * @return 企业名录 + */ + @Override + public BmsEnterpriseDirectory selectBmsEnterpriseDirectoryById(Long id) { + return baseMapper.selectBmsEnterpriseDirectoryById(id); + } + + /** + * 查询企业名录列表 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 企业名录 + */ + @Override + public List<BmsEnterpriseDirectory> selectBmsEnterpriseDirectoryList(BmsEnterpriseDirectory bmsEnterpriseDirectory) { + return baseMapper.selectBmsEnterpriseDirectoryList(bmsEnterpriseDirectory); + } + + /** + * 新增企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + @Override + public int insertBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory) { + bmsEnterpriseDirectory.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsEnterpriseDirectory(bmsEnterpriseDirectory); + } + + /** + * 修改企业名录 + * + * @param bmsEnterpriseDirectory 企业名录 + * @return 结果 + */ + @Override + public int updateBmsEnterpriseDirectory(BmsEnterpriseDirectory bmsEnterpriseDirectory) { + bmsEnterpriseDirectory.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsEnterpriseDirectory(bmsEnterpriseDirectory); + } + + /** + * 批量删除企业名录 + * + * @param ids 需要删除的企业名录主键 + * @return 结果 + */ + @Override + public int deleteBmsEnterpriseDirectoryByIds(Long[] ids) { + return baseMapper.deleteBmsEnterpriseDirectoryByIds(ids); + } + + /** + * 删除企业名录信息 + * + * @param id 企业名录主键 + * @return 结果 + */ + @Override + public int deleteBmsEnterpriseDirectoryById(Long id) { + return baseMapper.deleteBmsEnterpriseDirectoryById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFieldInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFieldInfoServiceImpl.java new file mode 100644 index 0000000..79eb811 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFieldInfoServiceImpl.java @@ -0,0 +1,89 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsFieldInfo; +import com.ruoyi.jjh.declaration.mapper.BmsFieldInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsFieldInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 模板字段填写详情Service业务层处理 + * + * @author farben + * @date 2023-09-04 + */ +@Service +public class BmsFieldInfoServiceImpl extends ServiceImpl<BmsFieldInfoMapper,BmsFieldInfo> implements IBmsFieldInfoService { + + + /** + * 查询模板字段填写详情 + * + * @param id 模板字段填写详情主键 + * @return 模板字段填写详情 + */ + @Override + public BmsFieldInfo selectBmsFieldInfoById(Long id) { + return baseMapper.selectBmsFieldInfoById(id); + } + + /** + * 查询模板字段填写详情列表 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 模板字段填写详情 + */ + @Override + public List<BmsFieldInfo> selectBmsFieldInfoList(BmsFieldInfo bmsFieldInfo) { + return baseMapper.selectBmsFieldInfoList(bmsFieldInfo); + } + + /** + * 新增模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + @Override + public int insertBmsFieldInfo(BmsFieldInfo bmsFieldInfo) { + bmsFieldInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsFieldInfo(bmsFieldInfo); + } + + /** + * 修改模板字段填写详情 + * + * @param bmsFieldInfo 模板字段填写详情 + * @return 结果 + */ + @Override + public int updateBmsFieldInfo(BmsFieldInfo bmsFieldInfo) { + bmsFieldInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsFieldInfo(bmsFieldInfo); + } + + /** + * 批量删除模板字段填写详情 + * + * @param ids 需要删除的模板字段填写详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFieldInfoByIds(Long[] ids) { + return baseMapper.deleteBmsFieldInfoByIds(ids); + } + + /** + * 删除模板字段填写详情信息 + * + * @param id 模板字段填写详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFieldInfoById(Long id) { + return baseMapper.deleteBmsFieldInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFileInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFileInfoServiceImpl.java new file mode 100644 index 0000000..1dc753c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFileInfoServiceImpl.java @@ -0,0 +1,89 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsFileInfo; +import com.ruoyi.jjh.declaration.mapper.BmsFileInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsFileInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 文件存储说明详情Service业务层处理 + * + * @author farben + * @date 2023-09-04 + */ +@Service +public class BmsFileInfoServiceImpl extends ServiceImpl<BmsFileInfoMapper,BmsFileInfo> implements IBmsFileInfoService { + + + /** + * 查询文件存储说明详情 + * + * @param id 文件存储说明详情主键 + * @return 文件存储说明详情 + */ + @Override + public BmsFileInfo selectBmsFileInfoById(Long id) { + return baseMapper.selectBmsFileInfoById(id); + } + + /** + * 查询文件存储说明详情列表 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 文件存储说明详情 + */ + @Override + public List<BmsFileInfo> selectBmsFileInfoList(BmsFileInfo bmsFileInfo) { + return baseMapper.selectBmsFileInfoList(bmsFileInfo); + } + + /** + * 新增文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + @Override + public int insertBmsFileInfo(BmsFileInfo bmsFileInfo) { + bmsFileInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsFileInfo(bmsFileInfo); + } + + /** + * 修改文件存储说明详情 + * + * @param bmsFileInfo 文件存储说明详情 + * @return 结果 + */ + @Override + public int updateBmsFileInfo(BmsFileInfo bmsFileInfo) { + bmsFileInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsFileInfo(bmsFileInfo); + } + + /** + * 批量删除文件存储说明详情 + * + * @param ids 需要删除的文件存储说明详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFileInfoByIds(Long[] ids) { + return baseMapper.deleteBmsFileInfoByIds(ids); + } + + /** + * 删除文件存储说明详情信息 + * + * @param id 文件存储说明详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFileInfoById(Long id) { + return baseMapper.deleteBmsFileInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFundingDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFundingDetailServiceImpl.java new file mode 100644 index 0000000..98b6e6e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsFundingDetailServiceImpl.java @@ -0,0 +1,89 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.mapper.BmsFundingDetailMapper; +import com.ruoyi.jjh.declaration.service.IBmsFundingDetailService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 资金信息详情Service业务层处理 + * + * @author farben + * @date 2023-09-04 + */ +@Service +public class BmsFundingDetailServiceImpl extends ServiceImpl<BmsFundingDetailMapper,BmsFundingDetail> implements IBmsFundingDetailService { + + + /** + * 查询资金信息详情 + * + * @param id 资金信息详情主键 + * @return 资金信息详情 + */ + @Override + public BmsFundingDetail selectBmsFundingDetailById(Long id) { + return baseMapper.selectBmsFundingDetailById(id); + } + + /** + * 查询资金信息详情列表 + * + * @param bmsFundingDetail 资金信息详情 + * @return 资金信息详情 + */ + @Override + public List<BmsFundingDetail> selectBmsFundingDetailList(BmsFundingDetail bmsFundingDetail) { + return baseMapper.selectBmsFundingDetailList(bmsFundingDetail); + } + + /** + * 新增资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + @Override + public int insertBmsFundingDetail(BmsFundingDetail bmsFundingDetail) { + bmsFundingDetail.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsFundingDetail(bmsFundingDetail); + } + + /** + * 修改资金信息详情 + * + * @param bmsFundingDetail 资金信息详情 + * @return 结果 + */ + @Override + public int updateBmsFundingDetail(BmsFundingDetail bmsFundingDetail) { + bmsFundingDetail.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsFundingDetail(bmsFundingDetail); + } + + /** + * 批量删除资金信息详情 + * + * @param ids 需要删除的资金信息详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFundingDetailByIds(Long[] ids) { + return baseMapper.deleteBmsFundingDetailByIds(ids); + } + + /** + * 删除资金信息详情信息 + * + * @param id 资金信息详情主键 + * @return 结果 + */ + @Override + public int deleteBmsFundingDetailById(Long id) { + return baseMapper.deleteBmsFundingDetailById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIndustrialInternetAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIndustrialInternetAwardServiceImpl.java new file mode 100644 index 0000000..c97f516 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIndustrialInternetAwardServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIndustrialInternetAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsIndustrialInternetAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsIndustrialInternetAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 5G+工业互联网奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsIndustrialInternetAwardServiceImpl extends ServiceImpl<BmsIndustrialInternetAwardMapper,BmsIndustrialInternetAward> implements IBmsIndustrialInternetAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询5G+工业互联网奖补 + * + * @param id 5G+工业互联网奖补主键 + * @return 5G+工业互联网奖补 + */ + @Override + public BmsIndustrialInternetAward selectBmsIndustrialInternetAwardById(Long id) { + return baseMapper.selectBmsIndustrialInternetAwardById(id); + } + + /** + * 查询5G+工业互联网奖补列表 + * + * @param bmsIndustrialInternetAward 5G+工业互联网奖补 + * @return 5G+工业互联网奖补 + */ + @Override + public List<BmsIndustrialInternetAward> selectBmsIndustrialInternetAwardList(BmsIndustrialInternetAward bmsIndustrialInternetAward) { + return baseMapper.selectBmsIndustrialInternetAwardList(bmsIndustrialInternetAward); + } + + /** + * 新增5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAwardAddDto 5G+工业互联网奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsIndustrialInternetAward(BmsIndustrialInternetAwardAddDto bmsIndustrialInternetAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsIndustrialInternetAwardAddDto.getCreditCode() + ,bmsIndustrialInternetAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsIndustrialInternetAwardAddDto.getCreditCode() + ,bmsIndustrialInternetAwardAddDto.getTemplateRecordId()); + BmsIndustrialInternetAward bmsIndustrialInternetAward = new BmsIndustrialInternetAward(); + BeanUtil.copyProperties(bmsIndustrialInternetAwardAddDto,bmsIndustrialInternetAward); + bmsIndustrialInternetAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsIndustrialInternetAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsIndustrialInternetAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交5G+工业互联网奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsIndustrialInternetAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsIndustrialInternetAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改5G+工业互联网奖补 + * + * @param bmsIndustrialInternetAwardUpdateDto 5G+工业互联网奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsIndustrialInternetAward(BmsIndustrialInternetAwardUpdateDto bmsIndustrialInternetAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsIndustrialInternetAwardUpdateDto.getDeclarationRecordsId() + ,bmsIndustrialInternetAwardUpdateDto.getProjectId(),bmsIndustrialInternetAwardUpdateDto.getProjectName() + ,bmsIndustrialInternetAwardUpdateDto.getStatus()); + + bmsIndustrialInternetAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsIndustrialInternetAward(bmsIndustrialInternetAwardUpdateDto); + // 申请审批 + if (bmsIndustrialInternetAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsIndustrialInternetAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除5G+工业互联网奖补 + * + * @param ids 需要删除的5G+工业互联网奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsIndustrialInternetAwardByIds(Long[] ids) { + return baseMapper.deleteBmsIndustrialInternetAwardByIds(ids); + } + + /** + * 删除5G+工业互联网奖补信息 + * + * @param id 5G+工业互联网奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsIndustrialInternetAwardById(Long id) { + return baseMapper.deleteBmsIndustrialInternetAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIntegrationIndustriesServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIntegrationIndustriesServiceImpl.java new file mode 100644 index 0000000..3c3c92e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsIntegrationIndustriesServiceImpl.java @@ -0,0 +1,142 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsIntegrationIndustriesUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsIntegrationIndustriesMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsIntegrationIndustriesService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 两业融合奖补Service业务层处理 + * + * @author farben + * @date 2023-09-04 + */ +@Service +public class BmsIntegrationIndustriesServiceImpl extends ServiceImpl<BmsIntegrationIndustriesMapper,BmsIntegrationIndustries> implements IBmsIntegrationIndustriesService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询两业融合奖补 + * + * @param id 两业融合奖补主键 + * @return 两业融合奖补 + */ + @Override + public BmsIntegrationIndustries selectBmsIntegrationIndustriesById(Long id) { + return baseMapper.selectBmsIntegrationIndustriesById(id); + } + + /** + * 查询两业融合奖补列表 + * + * @param bmsIntegrationIndustries 两业融合奖补 + * @return 两业融合奖补 + */ + @Override + public List<BmsIntegrationIndustries> selectBmsIntegrationIndustriesList(BmsIntegrationIndustries bmsIntegrationIndustries) { + return baseMapper.selectBmsIntegrationIndustriesList(bmsIntegrationIndustries); + } + + /** + * 新增两业融合奖补 + * + * @param bmsIntegrationIndustriesAddDto 两业融合奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsIntegrationIndustries(BmsIntegrationIndustriesAddDto bmsIntegrationIndustriesAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsIntegrationIndustriesAddDto.getCreditCode() + ,bmsIntegrationIndustriesAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsIntegrationIndustriesAddDto.getCreditCode() + ,bmsIntegrationIndustriesAddDto.getTemplateRecordId()); + BmsIntegrationIndustries bmsIntegrationIndustries = new BmsIntegrationIndustries(); + BeanUtil.copyProperties(bmsIntegrationIndustriesAddDto,bmsIntegrationIndustries); + bmsIntegrationIndustries.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsIntegrationIndustries); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsIntegrationIndustriesAddDto,declarationRecords); + declarationRecords.setMatter("提交两业融合奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsIntegrationIndustries.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsIntegrationIndustriesAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改两业融合奖补 + * + * @param bmsIntegrationIndustriesUpdateDto 两业融合奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsIntegrationIndustries(BmsIntegrationIndustriesUpdateDto bmsIntegrationIndustriesUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsIntegrationIndustriesUpdateDto.getDeclarationRecordsId() + ,bmsIntegrationIndustriesUpdateDto.getProjectId(),bmsIntegrationIndustriesUpdateDto.getProjectName() + ,bmsIntegrationIndustriesUpdateDto.getStatus()); + + bmsIntegrationIndustriesUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsIntegrationIndustries(bmsIntegrationIndustriesUpdateDto); + // 申请审批 + if (bmsIntegrationIndustriesUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsIntegrationIndustriesUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + bmsIntegrationIndustriesUpdateDto.setUpdateTime(DateUtils.getNowDate()); + return num; + } + + /** + * 批量删除两业融合奖补 + * + * @param ids 需要删除的两业融合奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsIntegrationIndustriesByIds(Long[] ids) { + return baseMapper.deleteBmsIntegrationIndustriesByIds(ids); + } + + /** + * 删除两业融合奖补信息 + * + * @param id 两业融合奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsIntegrationIndustriesById(Long id) { + return baseMapper.deleteBmsIntegrationIndustriesById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsLogisticsDevelopmentAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsLogisticsDevelopmentAwardServiceImpl.java new file mode 100644 index 0000000..7feca83 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsLogisticsDevelopmentAwardServiceImpl.java @@ -0,0 +1,143 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsLogisticsDevelopmentAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsLogisticsDevelopmentAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsLogisticsDevelopmentAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 物流发展奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsLogisticsDevelopmentAwardServiceImpl extends ServiceImpl<BmsLogisticsDevelopmentAwardMapper,BmsLogisticsDevelopmentAward> implements IBmsLogisticsDevelopmentAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + /** + * 查询物流发展奖补 + * + * @param id 物流发展奖补主键 + * @return 物流发展奖补 + */ + @Override + public BmsLogisticsDevelopmentAward selectBmsLogisticsDevelopmentAwardById(Long id) { + return baseMapper.selectBmsLogisticsDevelopmentAwardById(id); + } + + /** + * 查询物流发展奖补列表 + * + * @param bmsLogisticsDevelopmentAward 物流发展奖补 + * @return 物流发展奖补 + */ + @Override + public List<BmsLogisticsDevelopmentAward> selectBmsLogisticsDevelopmentAwardList(BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward) { + return baseMapper.selectBmsLogisticsDevelopmentAwardList(bmsLogisticsDevelopmentAward); + } + + /** + * 新增物流发展奖补 + * + * @param bmsLogisticsDevelopmentAwardAddDto 物流发展奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAwardAddDto bmsLogisticsDevelopmentAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsLogisticsDevelopmentAwardAddDto.getCreditCode() + ,bmsLogisticsDevelopmentAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsLogisticsDevelopmentAwardAddDto.getCreditCode() + ,bmsLogisticsDevelopmentAwardAddDto.getTemplateRecordId()); + BmsLogisticsDevelopmentAward bmsLogisticsDevelopmentAward = new BmsLogisticsDevelopmentAward(); + + BeanUtil.copyProperties(bmsLogisticsDevelopmentAwardAddDto,bmsLogisticsDevelopmentAward); + bmsLogisticsDevelopmentAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsLogisticsDevelopmentAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsLogisticsDevelopmentAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交物流发展奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsLogisticsDevelopmentAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsLogisticsDevelopmentAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改物流发展奖补 + * + * @param bmsLogisticsDevelopmentAwardUpdateDto 物流发展奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsLogisticsDevelopmentAward(BmsLogisticsDevelopmentAwardUpdateDto bmsLogisticsDevelopmentAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsLogisticsDevelopmentAwardUpdateDto.getDeclarationRecordsId() + ,bmsLogisticsDevelopmentAwardUpdateDto.getProjectId(),bmsLogisticsDevelopmentAwardUpdateDto.getProjectName() + ,bmsLogisticsDevelopmentAwardUpdateDto.getStatus()); + + iBmsDeclarationRecordsService.updateProjectNameById(bmsLogisticsDevelopmentAwardUpdateDto.getId() + ,bmsLogisticsDevelopmentAwardUpdateDto.getProjectName(),bmsLogisticsDevelopmentAwardUpdateDto.getProjectId()); + bmsLogisticsDevelopmentAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsLogisticsDevelopmentAward(bmsLogisticsDevelopmentAwardUpdateDto); + // 申请审批 + if (bmsLogisticsDevelopmentAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsLogisticsDevelopmentAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除物流发展奖补 + * + * @param ids 需要删除的物流发展奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsLogisticsDevelopmentAwardByIds(Long[] ids) { + return baseMapper.deleteBmsLogisticsDevelopmentAwardByIds(ids); + } + + /** + * 删除物流发展奖补信息 + * + * @param id 物流发展奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsLogisticsDevelopmentAwardById(Long id) { + return baseMapper.deleteBmsLogisticsDevelopmentAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsManufacturingServicesAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsManufacturingServicesAwardServiceImpl.java new file mode 100644 index 0000000..aa5af54 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsManufacturingServicesAwardServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsManufacturingServicesAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsManufacturingServicesAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsManufacturingServicesAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 制造服务业有效投入奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsManufacturingServicesAwardServiceImpl extends ServiceImpl<BmsManufacturingServicesAwardMapper,BmsManufacturingServicesAward> implements IBmsManufacturingServicesAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询制造服务业有效投入奖补 + * + * @param id 制造服务业有效投入奖补主键 + * @return 制造服务业有效投入奖补 + */ + @Override + public BmsManufacturingServicesAward selectBmsManufacturingServicesAwardById(Long id) { + return baseMapper.selectBmsManufacturingServicesAwardById(id); + } + + /** + * 查询制造服务业有效投入奖补列表 + * + * @param bmsManufacturingServicesAward 制造服务业有效投入奖补 + * @return 制造服务业有效投入奖补 + */ + @Override + public List<BmsManufacturingServicesAward> selectBmsManufacturingServicesAwardList(BmsManufacturingServicesAward bmsManufacturingServicesAward) { + return baseMapper.selectBmsManufacturingServicesAwardList(bmsManufacturingServicesAward); + } + + /** + * 新增制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAwardAddDto 制造服务业有效投入奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsManufacturingServicesAward(BmsManufacturingServicesAwardAddDto bmsManufacturingServicesAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsManufacturingServicesAwardAddDto.getCreditCode() + ,bmsManufacturingServicesAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsManufacturingServicesAwardAddDto.getCreditCode() + ,bmsManufacturingServicesAwardAddDto.getTemplateRecordId()); + BmsManufacturingServicesAward bmsManufacturingServicesAward = new BmsManufacturingServicesAward(); + BeanUtil.copyProperties(bmsManufacturingServicesAwardAddDto,bmsManufacturingServicesAward); + bmsManufacturingServicesAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsManufacturingServicesAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsManufacturingServicesAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交制造服务业有效投入奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsManufacturingServicesAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsManufacturingServicesAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改制造服务业有效投入奖补 + * + * @param bmsManufacturingServicesAwardUpdateDto 制造服务业有效投入奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsManufacturingServicesAward(BmsManufacturingServicesAwardUpdateDto bmsManufacturingServicesAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsManufacturingServicesAwardUpdateDto.getDeclarationRecordsId() + ,bmsManufacturingServicesAwardUpdateDto.getProjectId(),bmsManufacturingServicesAwardUpdateDto.getProjectName() + ,bmsManufacturingServicesAwardUpdateDto.getStatus()); + + bmsManufacturingServicesAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsManufacturingServicesAward(bmsManufacturingServicesAwardUpdateDto); + // 申请审批 + if (bmsManufacturingServicesAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsManufacturingServicesAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除制造服务业有效投入奖补 + * + * @param ids 需要删除的制造服务业有效投入奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsManufacturingServicesAwardByIds(Long[] ids) { + return baseMapper.deleteBmsManufacturingServicesAwardByIds(ids); + } + + /** + * 删除制造服务业有效投入奖补信息 + * + * @param id 制造服务业有效投入奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsManufacturingServicesAwardById(Long id) { + return baseMapper.deleteBmsManufacturingServicesAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsPlatformConstructionAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsPlatformConstructionAwardServiceImpl.java new file mode 100644 index 0000000..4ce7593 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsPlatformConstructionAwardServiceImpl.java @@ -0,0 +1,145 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsPlatformConstructionAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsPlatformConstructionAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsPlatformConstructionAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 平台建设奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +@Lazy +public class BmsPlatformConstructionAwardServiceImpl extends ServiceImpl<BmsPlatformConstructionAwardMapper,BmsPlatformConstructionAward> implements IBmsPlatformConstructionAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询平台建设奖补 + * + * @param id 平台建设奖补主键 + * @return 平台建设奖补 + */ + @Override + public BmsPlatformConstructionAward selectBmsPlatformConstructionAwardById(Long id) { + return baseMapper.selectBmsPlatformConstructionAwardById(id); + } + + /** + * 查询平台建设奖补列表 + * + * @param bmsPlatformConstructionAward 平台建设奖补 + * @return 平台建设奖补 + */ + @Override + public List<BmsPlatformConstructionAward> selectBmsPlatformConstructionAwardList(BmsPlatformConstructionAward bmsPlatformConstructionAward) { + return baseMapper.selectBmsPlatformConstructionAwardList(bmsPlatformConstructionAward); + } + + /** + * 新增平台建设奖补 + * + * @param bmsPlatformConstructionAwardAddDto 平台建设奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsPlatformConstructionAward(BmsPlatformConstructionAwardAddDto bmsPlatformConstructionAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsPlatformConstructionAwardAddDto.getCreditCode() + ,bmsPlatformConstructionAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsPlatformConstructionAwardAddDto.getCreditCode() + ,bmsPlatformConstructionAwardAddDto.getTemplateRecordId()); + BmsPlatformConstructionAward bmsPlatformConstructionAward = new BmsPlatformConstructionAward(); + BeanUtil.copyProperties(bmsPlatformConstructionAwardAddDto,bmsPlatformConstructionAward); + bmsPlatformConstructionAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsPlatformConstructionAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsPlatformConstructionAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交平台建设奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsPlatformConstructionAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsPlatformConstructionAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改平台建设奖补 + * + * @param bmsPlatformConstructionAwardUpdateDto 平台建设奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsPlatformConstructionAward(BmsPlatformConstructionAwardUpdateDto bmsPlatformConstructionAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsPlatformConstructionAwardUpdateDto.getDeclarationRecordsId() + ,bmsPlatformConstructionAwardUpdateDto.getProjectId(),bmsPlatformConstructionAwardUpdateDto.getProjectName() + ,bmsPlatformConstructionAwardUpdateDto.getStatus()); + + iBmsDeclarationRecordsService.updateProjectNameById(bmsPlatformConstructionAwardUpdateDto.getId() + ,bmsPlatformConstructionAwardUpdateDto.getProjectName(),bmsPlatformConstructionAwardUpdateDto.getProjectId()); + bmsPlatformConstructionAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num = baseMapper.updateBmsPlatformConstructionAward(bmsPlatformConstructionAwardUpdateDto); + // 申请审批 + if (bmsPlatformConstructionAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsPlatformConstructionAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除平台建设奖补 + * + * @param ids 需要删除的平台建设奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsPlatformConstructionAwardByIds(Long[] ids) { + return baseMapper.deleteBmsPlatformConstructionAwardByIds(ids); + } + + /** + * 删除平台建设奖补信息 + * + * @param id 平台建设奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsPlatformConstructionAwardById(Long id) { + return baseMapper.deleteBmsPlatformConstructionAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProcessInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProcessInfoServiceImpl.java new file mode 100644 index 0000000..03ae406 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProcessInfoServiceImpl.java @@ -0,0 +1,88 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; +import com.ruoyi.jjh.declaration.mapper.BmsProcessInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsProcessInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 审批流程Service业务层处理 + * + * @author farben + * @date 2023-09-09 + */ +@Service +public class BmsProcessInfoServiceImpl extends ServiceImpl<BmsProcessInfoMapper,BmsProcessInfo> implements IBmsProcessInfoService { + + /** + * 查询审批流程 + * + * @param id 审批流程主键 + * @return 审批流程 + */ + @Override + public BmsProcessInfo selectBmsProcessInfoById(Long id) { + return baseMapper.selectBmsProcessInfoById(id); + } + + /** + * 查询审批流程列表 + * + * @param bmsProcessInfo 审批流程 + * @return 审批流程 + */ + @Override + public List<BmsProcessInfo> selectBmsProcessInfoList(BmsProcessInfo bmsProcessInfo) { + return baseMapper.selectBmsProcessInfoList(bmsProcessInfo); + } + + /** + * 新增审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + @Override + public int insertBmsProcessInfo(BmsProcessInfo bmsProcessInfo) { + bmsProcessInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsProcessInfo(bmsProcessInfo); + } + + /** + * 修改审批流程 + * + * @param bmsProcessInfo 审批流程 + * @return 结果 + */ + @Override + public int updateBmsProcessInfo(BmsProcessInfo bmsProcessInfo) { + bmsProcessInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsProcessInfo(bmsProcessInfo); + } + + /** + * 批量删除审批流程 + * + * @param ids 需要删除的审批流程主键 + * @return 结果 + */ + @Override + public int deleteBmsProcessInfoByIds(Long[] ids) { + return baseMapper.deleteBmsProcessInfoByIds(ids); + } + + /** + * 删除审批流程信息 + * + * @param id 审批流程主键 + * @return 结果 + */ + @Override + public int deleteBmsProcessInfoById(Long id) { + return baseMapper.deleteBmsProcessInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectInfoServiceImpl.java new file mode 100644 index 0000000..9f20f22 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectInfoServiceImpl.java @@ -0,0 +1,94 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import com.ruoyi.jjh.declaration.mapper.BmsProjectInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsProjectInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 项目基本信息Service业务层处理 + * + * @author farben + * @date 2023-09-09 + */ +@Service +public class BmsProjectInfoServiceImpl extends ServiceImpl<BmsProjectInfoMapper,BmsProjectInfo> implements IBmsProjectInfoService { + + + /** + * 查询项目基本信息 + * + * @param id 项目基本信息主键 + * @return 项目基本信息 + */ + @Override + public BmsProjectInfo selectBmsProjectInfoById(Long id) { + return baseMapper.selectBmsProjectInfoById(id); + } + + /** + * 查询项目基本信息列表 + * + * @param bmsProjectInfo 项目基本信息 + * @return 项目基本信息 + */ + @Override + public List<BmsProjectInfo> selectBmsProjectInfoList(BmsProjectInfo bmsProjectInfo) { + return baseMapper.selectBmsProjectInfoList(bmsProjectInfo); + } + + /** + * 新增项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + @Override + public int insertBmsProjectInfo(BmsProjectInfo bmsProjectInfo) { + bmsProjectInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBmsProjectInfo(bmsProjectInfo); + } + + /** + * 修改项目基本信息 + * + * @param bmsProjectInfo 项目基本信息 + * @return 结果 + */ + @Override + public int updateBmsProjectInfo(BmsProjectInfo bmsProjectInfo) { + bmsProjectInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsProjectInfo(bmsProjectInfo); + } + + /** + * 批量删除项目基本信息 + * + * @param ids 需要删除的项目基本信息主键 + * @return 结果 + */ + @Override + public int deleteBmsProjectInfoByIds(Long[] ids) { + return baseMapper.deleteBmsProjectInfoByIds(ids); + } + + /** + * 删除项目基本信息信息 + * + * @param id 项目基本信息主键 + * @return 结果 + */ + @Override + public int deleteBmsProjectInfoById(Long id) { + return baseMapper.deleteBmsProjectInfoById(id); + } + + @Override + public BmsProjectInfo getProjectInfo(Long templateRecordId){ + return baseMapper.getProjectInfo(templateRecordId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectSettlementAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectSettlementAwardServiceImpl.java new file mode 100644 index 0000000..a5e33b3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsProjectSettlementAwardServiceImpl.java @@ -0,0 +1,165 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsFundingDetailAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsProjectSettlementAwardUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsProjectSettlementAwardQueryVo; +import com.ruoyi.jjh.declaration.mapper.BmsProjectSettlementAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsFundingDetailService; +import com.ruoyi.jjh.declaration.service.IBmsProjectSettlementAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 项目落户奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +@Lazy +public class BmsProjectSettlementAwardServiceImpl extends ServiceImpl<BmsProjectSettlementAwardMapper, BmsProjectSettlementAward> implements IBmsProjectSettlementAwardService { + + @Autowired + private ICommonService iCommonService; + + + @Autowired + private IBmsFundingDetailService iBmsFundingDetailService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询项目落户奖补 + * + * @param id 项目落户奖补主键 + * @return 项目落户奖补 + */ + @Override + public BmsProjectSettlementAwardQueryVo selectBmsProjectSettlementAwardById(Long id) { + return baseMapper.selectBmsProjectSettlementAwardById(id); + } + + /** + * 查询项目落户奖补列表 + * + * @param bmsProjectSettlementAward 项目落户奖补 + * @return 项目落户奖补 + */ + @Override + public List<BmsProjectSettlementAward> selectBmsProjectSettlementAwardList(BmsProjectSettlementAward bmsProjectSettlementAward) { + return baseMapper.selectBmsProjectSettlementAwardList(bmsProjectSettlementAward); + } + + /** + * 新增项目落户奖补 + * + * @param bmsProjectSettlementAwardAddDto 项目落户奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsProjectSettlementAward(BmsProjectSettlementAwardAddDto bmsProjectSettlementAwardAddDto) { + + //检测企业信息 + Long enterpriseId = iCommonService.checkEnterprise(bmsProjectSettlementAwardAddDto.getCreditCode() + , bmsProjectSettlementAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsProjectSettlementAwardAddDto.getCreditCode() + , bmsProjectSettlementAwardAddDto.getTemplateRecordId()); + BmsProjectSettlementAward projectSettlementAward = new BmsProjectSettlementAward(); + BeanUtil.copyProperties(bmsProjectSettlementAwardAddDto, projectSettlementAward); + projectSettlementAward.setEnterpriseId(enterpriseId); + // 新增项目落户奖补对象 + int num = baseMapper.insert(projectSettlementAward); + List<BmsFundingDetailAddDto> fundingDetailAddList = bmsProjectSettlementAwardAddDto.getFundingDetailList(); + List<BmsFundingDetail> fundingDetailList = new ArrayList<>(); + fundingDetailAddList.forEach(x -> { + BmsFundingDetail fundingDetail = new BmsFundingDetail(); + BeanUtil.copyProperties(x, fundingDetail); + fundingDetail.setType(1); + fundingDetail.setTemplateRecordId(bmsProjectSettlementAwardAddDto.getTemplateRecordId()); + fundingDetail.setDetailId(projectSettlementAward.getId()); + fundingDetailList.add(fundingDetail); + }); + // 批量新增资金信息 + iBmsFundingDetailService.saveOrUpdateBatch(fundingDetailList); + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsProjectSettlementAwardAddDto, declarationRecords); + declarationRecords.setMatter("提交落户奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(projectSettlementAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsProjectSettlementAwardAddDto.getStatus() == 1) { + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(), 0); + } + return num; + } + + /** + * 修改项目落户奖补 + * + * @param bmsProjectSettlementAwardUpdateDto 项目落户奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsProjectSettlementAward(BmsProjectSettlementAwardUpdateDto bmsProjectSettlementAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsProjectSettlementAwardUpdateDto.getDeclarationRecordsId() + , bmsProjectSettlementAwardUpdateDto.getProjectId(), bmsProjectSettlementAwardUpdateDto.getProjectName() + , bmsProjectSettlementAwardUpdateDto.getStatus()); + + num = baseMapper.updateBmsProjectSettlementAward(bmsProjectSettlementAwardUpdateDto); + List<BmsFundingDetail> fundingDetailList = bmsProjectSettlementAwardUpdateDto.getFundingDetailList(); + iBmsFundingDetailService.saveOrUpdateBatch(fundingDetailList); + // 申请审批 + if (bmsProjectSettlementAwardUpdateDto.getStatus() == 1) { + // 审批状态 + iCommonService.insertAuditRecord(bmsProjectSettlementAwardUpdateDto.getDeclarationRecordsId(), 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除项目落户奖补 + * + * @param ids 需要删除的项目落户奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsProjectSettlementAwardByIds(Long[] ids) { + return baseMapper.deleteBmsProjectSettlementAwardByIds(ids); + } + + /** + * 删除项目落户奖补信息 + * + * @param id 项目落户奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsProjectSettlementAwardById(Long id) { + return baseMapper.deleteBmsProjectSettlementAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsSceneOpeningAwardServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsSceneOpeningAwardServiceImpl.java new file mode 100644 index 0000000..31cda92 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsSceneOpeningAwardServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsSceneOpeningAwardUpdateDto; +import com.ruoyi.jjh.declaration.mapper.BmsSceneOpeningAwardMapper; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsSceneOpeningAwardService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 场景开放奖补Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsSceneOpeningAwardServiceImpl extends ServiceImpl<BmsSceneOpeningAwardMapper,BmsSceneOpeningAward> implements IBmsSceneOpeningAwardService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + /** + * 查询场景开放奖补 + * + * @param id 场景开放奖补主键 + * @return 场景开放奖补 + */ + @Override + public BmsSceneOpeningAward selectBmsSceneOpeningAwardById(Long id) { + return baseMapper.selectBmsSceneOpeningAwardById(id); + } + + /** + * 查询场景开放奖补列表 + * + * @param bmsSceneOpeningAward 场景开放奖补 + * @return 场景开放奖补 + */ + @Override + public List<BmsSceneOpeningAward> selectBmsSceneOpeningAwardList(BmsSceneOpeningAward bmsSceneOpeningAward) { + return baseMapper.selectBmsSceneOpeningAwardList(bmsSceneOpeningAward); + } + + /** + * 新增场景开放奖补 + * + * @param bmsSceneOpeningAwardAddDto 场景开放奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsSceneOpeningAward(BmsSceneOpeningAwardAddDto bmsSceneOpeningAwardAddDto) { + Long enterpriseId = iCommonService.checkEnterprise(bmsSceneOpeningAwardAddDto.getCreditCode() + ,bmsSceneOpeningAwardAddDto.getTemplateRecordId()); + // check 申报信息 + iCommonService.checkDeclaration(bmsSceneOpeningAwardAddDto.getCreditCode() + ,bmsSceneOpeningAwardAddDto.getTemplateRecordId()); + BmsSceneOpeningAward bmsSceneOpeningAward = new BmsSceneOpeningAward(); + BeanUtil.copyProperties(bmsSceneOpeningAwardAddDto,bmsSceneOpeningAward); + bmsSceneOpeningAward.setEnterpriseId(enterpriseId); + // 新增做大做强奖详情 + int num = baseMapper.insert(bmsSceneOpeningAward); + + // 新增申请记录 + BmsDeclarationRecords declarationRecords = new BmsDeclarationRecords(); + BeanUtil.copyProperties(bmsSceneOpeningAwardAddDto,declarationRecords); + declarationRecords.setMatter("提交场景开放奖补申请"); + declarationRecords.setEnterpriseId(enterpriseId); + declarationRecords.setDetailId(bmsSceneOpeningAward.getId()); + iBmsDeclarationRecordsService.save(declarationRecords); + // 生成审核 + if (bmsSceneOpeningAwardAddDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(declarationRecords.getId(),0); + } + return num; + } + + /** + * 修改场景开放奖补 + * + * @param bmsSceneOpeningAwardUpdateDto 场景开放奖补 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsSceneOpeningAward(BmsSceneOpeningAwardUpdateDto bmsSceneOpeningAwardUpdateDto) { + int num = 0; + try { + iBmsDeclarationRecordsService.updateDeclarationRecords(bmsSceneOpeningAwardUpdateDto.getDeclarationRecordsId() + ,bmsSceneOpeningAwardUpdateDto.getProjectId(),bmsSceneOpeningAwardUpdateDto.getProjectName() + ,bmsSceneOpeningAwardUpdateDto.getStatus()); + + bmsSceneOpeningAwardUpdateDto.setUpdateTime(DateUtils.getNowDate()); + num=baseMapper.updateBmsSceneOpeningAward(bmsSceneOpeningAwardUpdateDto); + // 申请审批 + if (bmsSceneOpeningAwardUpdateDto.getStatus()==1){ + // 审批状态 + iCommonService.insertAuditRecord(bmsSceneOpeningAwardUpdateDto.getDeclarationRecordsId(),0); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 批量删除场景开放奖补 + * + * @param ids 需要删除的场景开放奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsSceneOpeningAwardByIds(Long[] ids) { + return baseMapper.deleteBmsSceneOpeningAwardByIds(ids); + } + + /** + * 删除场景开放奖补信息 + * + * @param id 场景开放奖补主键 + * @return 结果 + */ + @Override + public int deleteBmsSceneOpeningAwardById(Long id) { + return baseMapper.deleteBmsSceneOpeningAwardById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateInfoServiceImpl.java new file mode 100644 index 0000000..b200420 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateInfoServiceImpl.java @@ -0,0 +1,158 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.jjh.declaration.entity.BmsTemplateInfo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateInfoQueryVo; +import com.ruoyi.jjh.declaration.mapper.BmsTemplateInfoMapper; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import com.ruoyi.jjh.declaration.service.IBmsTemplateInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * 申报模板信息Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BmsTemplateInfoServiceImpl extends ServiceImpl<BmsTemplateInfoMapper, BmsTemplateInfo> implements IBmsTemplateInfoService { + + @Autowired + private IBmsEnterpriseDirectoryService enterpriseDirectoryService; + + /** + * 查询申报模板信息 + * + * @param id 申报模板信息主键 + * @return 申报模板信息 + */ + @Override + public BmsTemplateInfo selectBmsTemplateInfoById(Long id) { + return baseMapper.selectBmsTemplateInfoById(id); + } + + /** + * 查询申报模板信息列表 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 申报模板信息 + */ + @Override + public List<BmsTemplateInfoQueryVo> selectBmsTemplateInfoList(BmsTemplateInfo bmsTemplateInfo) { + return baseMapper.templateInfoList(bmsTemplateInfo); + } + + /** + * 导出模板表单 + * + * @param request + * @param response + * @param id + * @return + * @author emiya.xie + * @create 2023/8/31 10:25 + */ + @Override + public void exportTemplate(HttpServletRequest request, HttpServletResponse response, Long id) { + BmsTemplateInfo bmsTemplateInfo = baseMapper.selectById(id); + if (BeanUtil.isEmpty(bmsTemplateInfo)) { + throw new ServiceException("没有找到合适的模板!"); + } + String fileName = bmsTemplateInfo.getTemplateName() + ".xlsx"; + String file = "/template/" + fileName; + InputStream is = this.getClass().getResourceAsStream(file); + byte[] fileData = new byte[0]; + try { + fileData = input2byte(is); + } catch (IOException e) { + e.printStackTrace(); + } + FileUtils.downloadFile(response, request, fileName, fileData); + } + + private byte[] input2byte(InputStream inStream) + throws IOException { + ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); + byte[] buff = new byte[100]; + int rc = 0; + while ((rc = inStream.read(buff, 0, 100)) > 0) { + swapStream.write(buff, 0, rc); + } + byte[] in2b = swapStream.toByteArray(); + return in2b; + } + + /** + * 新增申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo) { + int num = 0; + try { + bmsTemplateInfo.setCreateTime(DateUtils.getNowDate()); + num = baseMapper.insertBmsTemplateInfo(bmsTemplateInfo); +// List<BmsEnterpriseDirectory> enterpriseDirectoryList = bmsTemplateInfo +// .getEnterpriseDirectoryList(); +// if (null != enterpriseDirectoryList && enterpriseDirectoryList.size()>0){ +// enterpriseDirectoryList.forEach(x->{ +// x.setTemplateId(bmsTemplateInfoAddDto.getId()); +// }); +// enterpriseDirectoryService.saveOrUpdateBatch(enterpriseDirectoryList); +// } + } catch (Exception e) { + e.printStackTrace(); + } + return num; + } + + /** + * 修改申报模板信息 + * + * @param bmsTemplateInfo 申报模板信息 + * @return 结果 + */ + @Override + public int updateBmsTemplateInfo(BmsTemplateInfo bmsTemplateInfo) { + bmsTemplateInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBmsTemplateInfo(bmsTemplateInfo); + } + + /** + * 批量删除申报模板信息 + * + * @param ids 需要删除的申报模板信息主键 + * @return 结果 + */ + @Override + public int deleteBmsTemplateInfoByIds(Long[] ids) { + return baseMapper.deleteBmsTemplateInfoByIds(ids); + } + + /** + * 删除申报模板信息信息 + * + * @param id 申报模板信息主键 + * @return 结果 + */ + @Override + public int deleteBmsTemplateInfoById(Long id) { + return baseMapper.deleteBmsTemplateInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateRecordServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateRecordServiceImpl.java new file mode 100644 index 0000000..082b525 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BmsTemplateRecordServiceImpl.java @@ -0,0 +1,157 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordAddDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordQueryDto; +import com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordUpdateDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordVo; +import com.ruoyi.jjh.declaration.mapper.BmsTemplateRecordMapper; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import com.ruoyi.jjh.declaration.service.IBmsTemplateRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 在线模板Service业务层处理 + * + * @author farben + * @date 2023-09-07 + */ +@Service +public class BmsTemplateRecordServiceImpl extends ServiceImpl<BmsTemplateRecordMapper,BmsTemplateRecord> implements IBmsTemplateRecordService { + + @Autowired + private IBmsEnterpriseDirectoryService enterpriseDirectoryService; + + @Autowired + private IBmsEnterpriseBasicInfoService iBmsEnterpriseBasicInfoService; + /** + * 查询在线模板 + * + * @param id 在线模板主键 + * @return 在线模板 + */ + @Override + public BmsTemplateRecordVo selectBmsTemplateRecordById(Long id) { + BmsTemplateRecordVo bmsTemplateRecordVo = baseMapper.selectBmsTemplateRecordVoById(id); + List<BmsEnterpriseDirectory> list = enterpriseDirectoryService.lambdaQuery() + .eq(BmsEnterpriseDirectory::getTemplateRecordId, id).list(); + bmsTemplateRecordVo.setEnterpriseDirectoryList(list); + return bmsTemplateRecordVo; + } + + /** + * 查询在线模板列表 + * + * @param bmsTemplateRecordQueryDto 在线模板 + * @return 在线模板 + */ + @Override + public List<BmsTemplateRecordQueryVo> selectBmsTemplateRecordList(BmsTemplateRecordQueryDto bmsTemplateRecordQueryDto) { + return baseMapper.selectTemplateRecordVo(bmsTemplateRecordQueryDto); + } + + @Override + public List<BmsTemplateRecordQueryVo> selectTemplateRecordList(String creditCode) { + return baseMapper.selectTemplateRecordList(creditCode); + } + + @Override + public List<BmsTemplateRecordQueryVo> selectBmsTemplateNameList(BmsTemplateQueryDto bmsTemplateQueryDto) { + Long enterpriseId = bmsTemplateQueryDto.getEnterpriseId(); + BmsEnterpriseBasicInfo bmsEnterpriseBasicInfo = iBmsEnterpriseBasicInfoService.selectBmsEnterpriseBasicInfoById(enterpriseId); + if (BeanUtil.isNotEmpty(bmsEnterpriseBasicInfo)){ + bmsTemplateQueryDto.setCreditCode(bmsEnterpriseBasicInfo.getCreditCode()); + return baseMapper.selectBmsTemplateNameList(bmsTemplateQueryDto); + } + return null; + } + + /** + * 新增在线模板 + * + * @param bmsTemplateRecordAddDto 在线模板 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertBmsTemplateRecord(BmsTemplateRecordAddDto bmsTemplateRecordAddDto) { + int num = 0; + try { + bmsTemplateRecordAddDto.setCreateTime(DateUtils.getNowDate()); + num = baseMapper.insertBmsTemplateRecord(bmsTemplateRecordAddDto); + List<BmsEnterpriseDirectory> enterpriseDirectoryList = bmsTemplateRecordAddDto + .getEnterpriseDirectoryList(); + if (null != enterpriseDirectoryList && enterpriseDirectoryList.size()>0){ + enterpriseDirectoryList.forEach(x->{ + x.setTemplateRecordId(bmsTemplateRecordAddDto.getId()); + }); + enterpriseDirectoryService.saveOrUpdateBatch(enterpriseDirectoryList); + } + }catch (Exception e){ + e.printStackTrace(); + } + return num; + } + + /** + * 修改在线模板 + * + * @param bmsTemplateRecordUpdateDto 在线模板 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsTemplateRecord(BmsTemplateRecordUpdateDto bmsTemplateRecordUpdateDto) { + bmsTemplateRecordUpdateDto.setUpdateTime(DateUtils.getNowDate()); + int num = baseMapper.updateBmsTemplateRecord(bmsTemplateRecordUpdateDto); + // 删除企业相关列表 + QueryWrapper<BmsEnterpriseDirectory> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("template_record_id",bmsTemplateRecordUpdateDto.getId()); + enterpriseDirectoryService.remove(queryWrapper); + // 新增企业相关列表 + List<BmsEnterpriseDirectory> enterpriseDirectoryList = bmsTemplateRecordUpdateDto + .getEnterpriseDirectoryList(); + if (null != enterpriseDirectoryList && enterpriseDirectoryList.size()>0){ + enterpriseDirectoryList.forEach(x->{ + x.setTemplateRecordId(bmsTemplateRecordUpdateDto.getId()); + }); + enterpriseDirectoryService.saveOrUpdateBatch(enterpriseDirectoryList); + } + return num; + } + + /** + * 批量删除在线模板 + * + * @param ids 需要删除的在线模板主键 + * @return 结果 + */ + @Override + public int deleteBmsTemplateRecordByIds(Long[] ids) { + return baseMapper.deleteBmsTemplateRecordByIds(ids); + } + + /** + * 删除在线模板信息 + * + * @param id 在线模板主键 + * @return 结果 + */ + @Override + public int deleteBmsTemplateRecordById(Long id) { + return baseMapper.deleteBmsTemplateRecordById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BsmFundingInfoServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BsmFundingInfoServiceImpl.java new file mode 100644 index 0000000..a674288 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/BsmFundingInfoServiceImpl.java @@ -0,0 +1,88 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.jjh.declaration.entity.BsmFundingInfo; +import com.ruoyi.jjh.declaration.mapper.BsmFundingInfoMapper; +import com.ruoyi.jjh.declaration.service.IBsmFundingInfoService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 资金信息Service业务层处理 + * + * @author farben + * @date 2023-08-25 + */ +@Service +public class BsmFundingInfoServiceImpl extends ServiceImpl<BsmFundingInfoMapper,BsmFundingInfo> implements IBsmFundingInfoService { + + /** + * 查询资金信息 + * + * @param id 资金信息主键 + * @return 资金信息 + */ + @Override + public BsmFundingInfo selectBsmFundingInfoById(Long id) { + return baseMapper.selectBsmFundingInfoById(id); + } + + /** + * 查询资金信息列表 + * + * @param bsmFundingInfo 资金信息 + * @return 资金信息 + */ + @Override + public List<BsmFundingInfo> selectBsmFundingInfoList(BsmFundingInfo bsmFundingInfo) { + return baseMapper.selectBsmFundingInfoList(bsmFundingInfo); + } + + /** + * 新增资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + @Override + public int insertBsmFundingInfo(BsmFundingInfo bsmFundingInfo) { + bsmFundingInfo.setCreateTime(DateUtils.getNowDate()); + return baseMapper.insertBsmFundingInfo(bsmFundingInfo); + } + + /** + * 修改资金信息 + * + * @param bsmFundingInfo 资金信息 + * @return 结果 + */ + @Override + public int updateBsmFundingInfo(BsmFundingInfo bsmFundingInfo) { + bsmFundingInfo.setUpdateTime(DateUtils.getNowDate()); + return baseMapper.updateBsmFundingInfo(bsmFundingInfo); + } + + /** + * 批量删除资金信息 + * + * @param ids 需要删除的资金信息主键 + * @return 结果 + */ + @Override + public int deleteBsmFundingInfoByIds(Long[] ids) { + return baseMapper.deleteBsmFundingInfoByIds(ids); + } + + /** + * 删除资金信息信息 + * + * @param id 资金信息主键 + * @return 结果 + */ + @Override + public int deleteBsmFundingInfoById(Long id) { + return baseMapper.deleteBsmFundingInfoById(id); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/CommonServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/CommonServiceImpl.java new file mode 100644 index 0000000..617cd58 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/CommonServiceImpl.java @@ -0,0 +1,413 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.context.SecurityContextHolder; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.jjh.declaration.entity.BmsApprovalInfo; +import com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsFundingDetail; +import com.ruoyi.jjh.declaration.entity.BmsProcessInfo; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import com.ruoyi.jjh.declaration.entity.dto.BmsApprovalInfoUpdateDto; +import com.ruoyi.jjh.declaration.entity.dto.OpenInterfaceApplyAddDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsBigStrongAwardQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.BmsProjectSettlementAwardQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.DeclarationRecordsVo; +import com.ruoyi.jjh.declaration.service.IBmsApprovalInfoService; +import com.ruoyi.jjh.declaration.service.IBmsBigStrongAwardService; +import com.ruoyi.jjh.declaration.service.IBmsBrandingAwardService; +import com.ruoyi.jjh.declaration.service.IBmsCarrierConstructionAwardService; +import com.ruoyi.jjh.declaration.service.IBmsCreditManagementService; +import com.ruoyi.jjh.declaration.service.IBmsDeclarationRecordsService; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import com.ruoyi.jjh.declaration.service.IBmsFundingDetailService; +import com.ruoyi.jjh.declaration.service.IBmsIndustrialInternetAwardService; +import com.ruoyi.jjh.declaration.service.IBmsIntegrationIndustriesService; +import com.ruoyi.jjh.declaration.service.IBmsLogisticsDevelopmentAwardService; +import com.ruoyi.jjh.declaration.service.IBmsManufacturingServicesAwardService; +import com.ruoyi.jjh.declaration.service.IBmsPlatformConstructionAwardService; +import com.ruoyi.jjh.declaration.service.IBmsProcessInfoService; +import com.ruoyi.jjh.declaration.service.IBmsProjectSettlementAwardService; +import com.ruoyi.jjh.declaration.service.IBmsSceneOpeningAwardService; +import com.ruoyi.jjh.declaration.service.IBmsTemplateRecordService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * <p> + * 公共服务impl + * <p> + * + * @className: CommonServiceImpl + * @author: emiya.xie + * @create: 2023-08-31 15:44 + */ +@Service +@Lazy +public class CommonServiceImpl implements ICommonService { + + + @Autowired + private IBmsProcessInfoService iBmsProcessInfoService; + + @Autowired + private IBmsApprovalInfoService iBmsApprovalInfoService; + + @Autowired + private IBmsEnterpriseBasicInfoService bmsEnterpriseBasicInfoService; + + @Autowired + private IBmsEnterpriseDirectoryService bmsEnterpriseDirectoryService; + + @Autowired + private IBmsProjectSettlementAwardService iBmsProjectSettlementAwardService; + + @Autowired + private IBmsBigStrongAwardService iBmsBigStrongAwardService; + + @Autowired + private IBmsCarrierConstructionAwardService iBmsCarrierConstructionAwardService; + + @Autowired + private IBmsPlatformConstructionAwardService iBmsPlatformConstructionAwardService; + + @Autowired + private IBmsBrandingAwardService iBmsBrandingAwardService; + + @Autowired + private IBmsSceneOpeningAwardService iBmsSceneOpeningAwardService; + + @Autowired + private IBmsCreditManagementService iBmsCreditManagementService; + + @Autowired + private IBmsIndustrialInternetAwardService iBmsIndustrialInternetAwardService; + + @Autowired + private IBmsManufacturingServicesAwardService iBmsManufacturingServicesAwardService; + + @Autowired + private IBmsLogisticsDevelopmentAwardService iBmsLogisticsDevelopmentAwardService; + + @Autowired + private IBmsIntegrationIndustriesService iBmsIntegrationIndustriesService; + + @Autowired + private IBmsFundingDetailService iBmsFundingDetailService; + + @Autowired + private IBmsTemplateRecordService iBmsTemplateRecordService; + + @Autowired + private IBmsDeclarationRecordsService iBmsDeclarationRecordsService; + + + /** + * 检测企业信息 + * + * @param creditCode 企业统一信用代码 + * @param templateRecordId 模板 + * @return + * @author emiya.xie + * @create 2023/8/31 15:48 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Long checkEnterprise(String creditCode, int templateRecordId) { + Long enterpriseId = 0L; + BmsEnterpriseBasicInfo basicInfo = bmsEnterpriseBasicInfoService.getOne(Wrappers.lambdaQuery(BmsEnterpriseBasicInfo.class).eq(BmsEnterpriseBasicInfo::getCreditCode, creditCode)); + if (BeanUtil.isEmpty(basicInfo)) { + throw new ServiceException("申请企业未入企业库!"); + } + enterpriseId = basicInfo.getId(); + BmsEnterpriseDirectory enterpriseDirectory = bmsEnterpriseDirectoryService.getOne(Wrappers.lambdaQuery(BmsEnterpriseDirectory.class).eq(BmsEnterpriseDirectory::getCreditCode, creditCode).eq(BmsEnterpriseDirectory::getTemplateRecordId, templateRecordId)); + if (BeanUtil.isEmpty(enterpriseDirectory)) { + throw new ServiceException("申请企业不在企业名录中!"); + } + return enterpriseId; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void checkDeclaration(String creditCode, int templateRecordId) { + // check当前企业是否已经申请 + BmsEnterpriseBasicInfo enterpriseInfo = bmsEnterpriseBasicInfoService.getOne(Wrappers.lambdaQuery(BmsEnterpriseBasicInfo.class).eq(BmsEnterpriseBasicInfo::getCreditCode, creditCode)); + // check 申请是否过期 + BmsTemplateRecord templateRecord = iBmsTemplateRecordService.lambdaQuery().eq(BmsTemplateRecord::getId, templateRecordId).le(BmsTemplateRecord::getStartTime, LocalDate.now()).ge(BmsTemplateRecord::getEndTime, LocalDate.now()).one(); + if (BeanUtil.isEmpty(templateRecord)) { + throw new ServiceException("该申请已经错过时间"); + } + List<BmsDeclarationRecords> list = iBmsDeclarationRecordsService.lambdaQuery().eq(BmsDeclarationRecords::getEnterpriseId, enterpriseInfo.getId()).eq(BmsDeclarationRecords::getTemplateRecordId, templateRecord.getId()).list(); + if (CollectionUtil.isNotEmpty(list)) { + throw new ServiceException("该企业已经申请,请勿重复申请!"); + } + + } + + /** + * 检测企业信息 + * + * @param enterpriseId 企业id + * @param templateId 模板id + * @return {@link Boolean} + * @author emiya.xie + * @create 2023/9/4 22:55 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void checkEnterprise(Long enterpriseId, Long templateId) { + try { + BmsEnterpriseBasicInfo basicInfo = bmsEnterpriseBasicInfoService.getOne(Wrappers.lambdaQuery(BmsEnterpriseBasicInfo.class).eq(BmsEnterpriseBasicInfo::getId, enterpriseId)); + if (BeanUtil.isEmpty(basicInfo)) { + throw new ServiceException("申请企业未入企业库!"); + } + BmsEnterpriseDirectory enterpriseDirectory = bmsEnterpriseDirectoryService.getOne(Wrappers.lambdaQuery(BmsEnterpriseDirectory.class).eq(BmsEnterpriseDirectory::getCreditCode, basicInfo.getCreditCode()).eq(BmsEnterpriseDirectory::getTemplateRecordId, templateId)); + if (BeanUtil.isEmpty(enterpriseDirectory)) { + throw new ServiceException("申请企业不在企业名录中!"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 获取申请记录详情 + * + * @param declarationTemplateType 模板id + * @param detailId 详情id + * @param declarationRecordsVo + * @return + * @author emiya.xie + * @create 2023/9/5 15:55 + */ + @Override + public void getData(int declarationTemplateType, Long detailId, DeclarationRecordsVo declarationRecordsVo) { + // 根据模板id查询对应数据 + if (declarationTemplateType == 1) { + // 项目落户奖补 + BmsProjectSettlementAwardQueryVo settlementAwardQueryVo = iBmsProjectSettlementAwardService.selectBmsProjectSettlementAwardById(detailId); + List<BmsFundingDetail> list = iBmsFundingDetailService.lambdaQuery().eq(BmsFundingDetail::getDetailId, settlementAwardQueryVo.getId()).list(); + settlementAwardQueryVo.setFundingDetailList(list); + declarationRecordsVo.setBmsProjectSettlementAwardQueryVo(settlementAwardQueryVo); + } else if (declarationTemplateType == 2) { + // 做大做强奖补 + BmsBigStrongAwardQueryVo bmsBigStrongAwardQueryVo = iBmsBigStrongAwardService.selectBmsBigStrongAwardById(detailId); + List<BmsFundingDetail> list = iBmsFundingDetailService.lambdaQuery().eq(BmsFundingDetail::getDetailId, bmsBigStrongAwardQueryVo.getId()).list(); + bmsBigStrongAwardQueryVo.setFundingDetailList(list); + declarationRecordsVo.setBmsBigStrongAwardQueryVo(bmsBigStrongAwardQueryVo); + } else if (declarationTemplateType == 3) { + // 载体建设奖补 + declarationRecordsVo.setBmsCarrierConstructionAward(iBmsCarrierConstructionAwardService.selectBmsCarrierConstructionAwardById(detailId)); + } else if (declarationTemplateType == 4) { + // 平台建设奖补 + declarationRecordsVo.setBmsPlatformConstructionAward(iBmsPlatformConstructionAwardService.selectBmsPlatformConstructionAwardById(detailId)); + } else if (declarationTemplateType == 5) { + // 品牌打造奖补 + declarationRecordsVo.setBmsBrandingAward(iBmsBrandingAwardService.selectBmsBrandingAwardById(detailId)); + } else if (declarationTemplateType == 6) { + // 场景开放奖补 + declarationRecordsVo.setBmsSceneOpeningAward(iBmsSceneOpeningAwardService.selectBmsSceneOpeningAwardById(detailId)); + } else if (declarationTemplateType == 7) { + // 信用管理奖补 + declarationRecordsVo.setBmsCreditManagement(iBmsCreditManagementService.selectBmsCreditManagementById(detailId)); + } else if (declarationTemplateType == 8) { + // 5G+工业互联网奖补 + declarationRecordsVo.setBmsIndustrialInternetAward(iBmsIndustrialInternetAwardService.selectBmsIndustrialInternetAwardById(detailId)); + } else if (declarationTemplateType == 9) { + // 制造服务业有效投入奖补 + declarationRecordsVo.setBmsManufacturingServicesAward(iBmsManufacturingServicesAwardService.selectBmsManufacturingServicesAwardById(detailId)); + } else if (declarationTemplateType == 10) { + // 物流发展奖补 + declarationRecordsVo.setBmsLogisticsDevelopmentAward(iBmsLogisticsDevelopmentAwardService.selectBmsLogisticsDevelopmentAwardById(detailId)); + } else if (declarationTemplateType == 11) { + // 两业融合奖补 + declarationRecordsVo.setBmsIntegrationIndustries(iBmsIntegrationIndustriesService.selectBmsIntegrationIndustriesById(detailId)); + } + } + + /** + * 生成审批信息 + * + * @param declarationRecordId + * @param approvalType + * @return + * @author emiya.xie + * @create 2023/9/9 16:44 + */ + @Override + public void insertProcessInfo(Long declarationRecordId, Integer approvalType) { + // 获取流程信息 + List<BmsProcessInfo> processInfoList = iBmsProcessInfoService.lambdaQuery().eq(BmsProcessInfo::getApprovalType, approvalType).list(); + if (CollectionUtil.isNotEmpty(processInfoList)) { + List<BmsApprovalInfo> approvalList = new ArrayList<>(); + processInfoList.forEach(x -> { + BmsApprovalInfo approvalInfo = new BmsApprovalInfo(); + approvalInfo.setProcessId(x.getId()); + approvalInfo.setDeclarationRecordsId(declarationRecordId); + approvalInfo.setApprovalStatus(0); + approvalInfo.setApprovalById(x.getApprovalById()); + approvalInfo.setSort(x.getSort()); + if (x.getSort() == 1) { + approvalInfo.setIsReview(0); + } + approvalList.add(approvalInfo); + }); + iBmsApprovalInfoService.saveOrUpdateBatch(approvalList); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void insertAuditRecord(Long declarationRecordId, Integer approvalType) { + // 获取流程信息 + List<BmsProcessInfo> processInfoList = iBmsProcessInfoService.lambdaQuery().eq(BmsProcessInfo::getApprovalType, approvalType).list(); + + List<BmsApprovalInfo> list = new ArrayList<BmsApprovalInfo>(); + list = iBmsApprovalInfoService.lambdaQuery().eq(BmsApprovalInfo::getDeclarationRecordsId, declarationRecordId).list(); + if (CollectionUtil.isNotEmpty(processInfoList)) { + List<BmsApprovalInfo> finalList = list; + processInfoList.forEach(x -> { + if (x.getSort() == 1) { + addApprovalInfo(declarationRecordId, x.getApprovalById(), x.getId(), finalList.size() + 1); + } +// if (x.getApprovalById().equals(SecurityContextHolder.getUserId())){ +// addApprovalInfo(declarationRecordId,x.getApprovalById(),x.getId(),list.size()); +// } + }); + } + } + + /** + * 新增审批记录 + * + * @param declarationRecordId + * @param approvalById + * @param processId + * @param sort + * @return + * @author emiya.xie + * @create 2023/9/14 14:50 + */ + public void addApprovalInfo(Long declarationRecordId, Long approvalById, Long processId, Integer sort) { + BmsApprovalInfo approvalInfo = new BmsApprovalInfo(); + approvalInfo.setProcessId(processId); + approvalInfo.setDeclarationRecordsId(declarationRecordId); + approvalInfo.setApprovalStatus(0); + approvalInfo.setApprovalById(approvalById); + approvalInfo.setSort(sort); + approvalInfo.setIsReview(0); + iBmsApprovalInfoService.save(approvalInfo); + } + + /** + * 清空审批流程 + * + * @param declarationRecordId + * @return + * @author emiya.xie + * @create 2023/9/11 10:30 + */ + @Override + public void cleanProcessList(Long declarationRecordId) { + // 获取流程信息 + List<BmsApprovalInfo> list = iBmsApprovalInfoService.lambdaQuery().eq(BmsApprovalInfo::getDeclarationRecordsId, declarationRecordId).list(); + if (CollectionUtil.isNotEmpty(list)) { + list.forEach(x -> { + x.setApprovalStatus(0); + x.setApprovalOpinions(null); + x.setApprovalAttachment(null); + x.setApprovalTime(null); + if (x.getSort() == 1) { + x.setIsReview(0); + } else { + x.setIsReview(1); + } + }); + iBmsApprovalInfoService.saveOrUpdateBatch(list); + } + } + + @Override + public List<Long> getUserIds(Long userId) { + + return null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateBmsApprovalInfo(BmsApprovalInfoUpdateDto bmsApprovalInfoUpdateDto) { + Boolean flag = false; + List<BmsApprovalInfo> approvalInfoList = iBmsApprovalInfoService.lambdaQuery().eq(BmsApprovalInfo::getDeclarationRecordsId, bmsApprovalInfoUpdateDto.getDeclarationRecordsId()).orderByAsc(BmsApprovalInfo::getSort).list(); + if (CollectionUtil.isNotEmpty(approvalInfoList)) { + approvalInfoList.forEach(x -> { + if (x.getId().equals(bmsApprovalInfoUpdateDto.getId())) { + BeanUtil.copyProperties(bmsApprovalInfoUpdateDto, x); + x.setApprovalById(SecurityContextHolder.getUserId()); + } + if ((bmsApprovalInfoUpdateDto.getSort() + 1) == x.getIsReview()) { + x.setIsReview(0); + } + }); + flag = iBmsApprovalInfoService.saveOrUpdateBatch(approvalInfoList); + } + if (!flag) { + return 0; + } + return 1; + } + + @Override + public int insertOpenInterfaceApplyAddDto(OpenInterfaceApplyAddDto openInterfaceApplyAddDto) { + int num = 0; + // 根据模板id查询对应数据 + if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 1) { + // 项目落户奖补 + num = iBmsProjectSettlementAwardService.insertBmsProjectSettlementAward(openInterfaceApplyAddDto.getBmsProjectSettlementAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 2) { + // 做大做强奖补 + num = iBmsBigStrongAwardService.insertBmsBigStrongAward(openInterfaceApplyAddDto.getBmsBigStrongAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 3) { + // 载体建设奖补 + num = iBmsCarrierConstructionAwardService.insertBmsCarrierConstructionAward(openInterfaceApplyAddDto.getBmsCarrierConstructionAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 4) { + // 平台建设奖补 + num = iBmsPlatformConstructionAwardService.insertBmsPlatformConstructionAward(openInterfaceApplyAddDto.getBmsPlatformConstructionAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 5) { + // 品牌打造奖补 + num = iBmsBrandingAwardService.insertBmsBrandingAward(openInterfaceApplyAddDto.getBmsBrandingAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 6) { + // 场景开放奖补 + num = iBmsSceneOpeningAwardService.insertBmsSceneOpeningAward(openInterfaceApplyAddDto.getBmsSceneOpeningAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 7) { + // 信用管理奖补 + num = iBmsCreditManagementService.insertBmsCreditManagement(openInterfaceApplyAddDto.getBmsCreditManagementAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 8) { + // 5G+工业互联网奖补 + num = iBmsIndustrialInternetAwardService.insertBmsIndustrialInternetAward(openInterfaceApplyAddDto.getBmsIndustrialInternetAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 9) { + // 制造服务业有效投入奖补 + num = iBmsManufacturingServicesAwardService.insertBmsManufacturingServicesAward(openInterfaceApplyAddDto.getBmsManufacturingServicesAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 10) { + // 物流发展奖补 + num = iBmsLogisticsDevelopmentAwardService.insertBmsLogisticsDevelopmentAward(openInterfaceApplyAddDto.getBmsLogisticsDevelopmentAwardAddDto()); + } else if (openInterfaceApplyAddDto.getDeclarationTemplateType() == 11) { + // 两业融合奖补 + num = iBmsIntegrationIndustriesService.insertBmsIntegrationIndustries(openInterfaceApplyAddDto.getBmsIntegrationIndustriesAddDto()); + } + return num; + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/OpenInterfaceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/OpenInterfaceServiceImpl.java new file mode 100644 index 0000000..e89c8ec --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/declaration/service/impl/OpenInterfaceServiceImpl.java @@ -0,0 +1,101 @@ +package com.ruoyi.jjh.declaration.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo; +import com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory; +import com.ruoyi.jjh.declaration.entity.BmsProjectInfo; +import com.ruoyi.jjh.declaration.entity.BmsTemplateRecord; +import com.ruoyi.jjh.declaration.entity.dto.OpenInterfaceApplyAddDto; +import com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo; +import com.ruoyi.jjh.declaration.entity.vo.EnterpriseInfoTemplateVo; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseBasicInfoService; +import com.ruoyi.jjh.declaration.service.IBmsEnterpriseDirectoryService; +import com.ruoyi.jjh.declaration.service.IBmsProjectInfoService; +import com.ruoyi.jjh.declaration.service.IBmsProjectSettlementAwardService; +import com.ruoyi.jjh.declaration.service.IBmsTemplateRecordService; +import com.ruoyi.jjh.declaration.service.ICommonService; +import com.ruoyi.jjh.declaration.service.IOpenInterfaceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * <p> + * 开放接口impl + * <p> + * + * @className: OpenInterfaceServiceImpl + * @author: emiya.xie + * @create: 2023-09-12 10:13 + */ +@Service +public class OpenInterfaceServiceImpl implements IOpenInterfaceService { + + @Autowired + private ICommonService iCommonService; + + @Autowired + private IBmsEnterpriseBasicInfoService iBmsEnterpriseBasicInfoService; + + @Autowired + private IBmsEnterpriseDirectoryService iBmsEnterpriseDirectoryService; + + @Autowired + private IBmsTemplateRecordService iBmsTemplateRecordService; + + @Autowired + private IBmsProjectInfoService iBmsProjectInfoService; + + @Autowired + private IBmsProjectSettlementAwardService iBmsProjectSettlementAwardService; + + + @Override + public EnterpriseInfoTemplateVo enterpriseList(String creditCode) { + EnterpriseInfoTemplateVo enterpriseInfoTemplateVo = new EnterpriseInfoTemplateVo(); + // 获取企业信息 + List<BmsEnterpriseBasicInfo> enterpriseList = iBmsEnterpriseBasicInfoService.lambdaQuery() + .like(BmsEnterpriseBasicInfo::getCreditCode, creditCode).list(); + List<BmsEnterpriseDirectory> directoryList = new ArrayList<>(); + List<BmsTemplateRecord> templateRecordList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(enterpriseList)) { + // 企业信息不为空,获取企业名录信息 + enterpriseInfoTemplateVo.setEnterpriseBasicList(enterpriseList); + List<String> creditCodeList = enterpriseList.stream().map(BmsEnterpriseBasicInfo::getCreditCode).collect(Collectors.toList()); + // 企业名录列表 + directoryList = iBmsEnterpriseDirectoryService.lambdaQuery().in(BmsEnterpriseDirectory::getCreditCode, creditCodeList).list(); + System.out.println(directoryList); + } + if (CollectionUtil.isNotEmpty(directoryList)) { + List<Long> templateRecordIdList = directoryList.stream().map(BmsEnterpriseDirectory::getTemplateRecordId).distinct() + .collect(Collectors.toList()); + templateRecordList = iBmsTemplateRecordService.lambdaQuery().in(BmsTemplateRecord::getId, templateRecordIdList) + .eq(BmsTemplateRecord::getRoad, 1L).list(); + } + List<BmsTemplateRecordQueryVo> bmsTemplateRecordQueryVos = iBmsTemplateRecordService + .selectTemplateRecordList(creditCode); + enterpriseInfoTemplateVo.setTemplateRecordList(bmsTemplateRecordQueryVos); + return enterpriseInfoTemplateVo; + } + + /** + * 新增申报记录 + * + * @param openInterfaceApplyAddDto + * @return {@link int} + * @author emiya.xie + * @create 2023/9/12 14:54 + */ + @Override + public int insertOpenInterfaceApplyAddDto(OpenInterfaceApplyAddDto openInterfaceApplyAddDto) { + return iCommonService.insertOpenInterfaceApplyAddDto(openInterfaceApplyAddDto); + } + + @Override + public BmsProjectInfo getProjectInfo(Long templateRecordId) { + return iBmsProjectInfoService.getProjectInfo(templateRecordId); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JMemorandumController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JMemorandumController.java index bc8b999..b951325 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JMemorandumController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JMemorandumController.java @@ -10,12 +10,19 @@ import com.ruoyi.jjh.ent.entity.request.JMemorandumRequest; import com.ruoyi.jjh.ent.service.JMemorandumService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.io.Serializable; import java.util.Date; -import java.util.List; /** * 备忘录(JMemorandum)表控制层 @@ -36,14 +43,14 @@ public class JMemorandumController extends BaseController { /** * 分页查询所有数据 * - * @param page 分页对象 + * @param page 分页对象 * @param jMemorandumRequest 查询实体 * @return 所有数据 */ @ApiOperation(value = "分页查询所有数据", response = JMemorandum.class) @GetMapping public AjaxResult selectAll(Page<JMemorandum> page, JMemorandumRequest jMemorandumRequest) { - return success(jMemorandumService.page(page,jMemorandumRequest)); + return success(jMemorandumService.page(page, jMemorandumRequest)); } /** @@ -55,7 +62,7 @@ public class JMemorandumController extends BaseController { @ApiOperation(value = "根据关联项目库ID查询该ID下的备忘录", response = JMemorandum.class) @GetMapping("/getIdToList") public AjaxResult selectIdToAll(JMemorandumRequest jMemorandumRequest) { - if(jMemorandumRequest.getProjectId() == null){ + if (jMemorandumRequest.getProjectId() == null) { throw new ServiceException("项目库ID不能为空"); } return success(jMemorandumService.selectIdToAll(jMemorandumRequest)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JProjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JProjectController.java index 5d67792..c2ece79 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JProjectController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/jjh/ent/controller/JProjectController.java @@ -4,9 +4,7 @@ package com.ruoyi.jjh.ent.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ProjectExcelUtil; import com.ruoyi.common.utils.poi.ProjectValueUtil; @@ -17,11 +15,19 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.Serializable; import java.util.List; @@ -52,7 +58,7 @@ public class JProjectController extends BaseController { @ApiOperation(value = "分页查询项目", response = JProject.class) @GetMapping public AjaxResult selectAll(Page<JProject> page, JProject jProject) { - return success(jProjectService.page(page,jProject)); + return success(jProjectService.page(page, jProject)); } /** @@ -105,17 +111,16 @@ public class JProjectController extends BaseController { /** * 导入已有的excel项目数据 - * */ @ApiOperation(value = "导入已有的excel项目数据") - @PostMapping(value = "/export",consumes ="multipart/form-data") + @PostMapping(value = "/export", consumes = "multipart/form-data") public AjaxResult export(@RequestPart("file") MultipartFile file) throws Exception { ProjectExcelUtil<JProject> util = new ProjectExcelUtil<>(JProject.class); List<JProject> proList = util.importExcel(file.getInputStream()); StringBuilder successMsg = new StringBuilder(); - if(proList == null && proList.isEmpty()){ + if (proList == null && proList.isEmpty()) { throw new ServiceException("项目导入数据不能为空"); - }else { + } else { jProjectService.saveBatch(proList); successMsg.append("导入成功"); } @@ -124,23 +129,22 @@ public class JProjectController extends BaseController { /** * 导入下载的excel模板和参数项目数据 - * */ @ApiOperation(value = "导入下载的excel模板和参数项目数据") @ApiImplicitParams({ - @ApiImplicitParam(name="projectClassify",value="项目分类",required=true), - @ApiImplicitParam(name="projectYear",value="年份",required=true), + @ApiImplicitParam(name = "projectClassify", value = "项目分类", required = true), + @ApiImplicitParam(name = "projectYear", value = "年份", required = true), }) - @PostMapping(value = "/importTemplateProject",consumes ="multipart/form-data") + @PostMapping(value = "/importTemplateProject", consumes = "multipart/form-data") public AjaxResult importTemplateProject(@RequestPart("file") MultipartFile file, - @RequestParam("projectClassify")String projectClassify + @RequestParam("projectClassify") String projectClassify ) throws Exception { ProjectValueUtil<JProject> util = new ProjectValueUtil<>(JProject.class); - List<JProject> proList = util.importExcel(file.getInputStream(),projectClassify); + List<JProject> proList = util.importExcel(file.getInputStream(), projectClassify); StringBuilder successMsg = new StringBuilder(); - if(proList == null && proList.isEmpty()){ + if (proList == null && proList.isEmpty()) { throw new ServiceException("项目导入数据不能为空"); - }else { + } else { jProjectService.saveBatch(proList); successMsg.append("导入成功"); } @@ -149,12 +153,10 @@ public class JProjectController extends BaseController { /** * 下载项目模板 - * */ @ApiOperation(value = "下载项目模板") @PostMapping("/updateProjectTemplate") - public void updateProjectTemplate(HttpServletResponse response) - { + public void updateProjectTemplate(HttpServletResponse response) { ExcelUtil<JProjectExcel> util = new ExcelUtil<>(JProjectExcel.class); util.importTemplateExcel(response, "项目模板"); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java index 789381f..e7cba8f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -1,23 +1,5 @@ package com.ruoyi.web.controller.common; -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.jjh.ent.entity.JMemorandum; -import com.ruoyi.jjh.ent.entity.request.JProjectExcel; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; @@ -25,38 +7,48 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUtils; import com.ruoyi.framework.config.ServerConfig; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; /** * 通用请求处理 - * + * * @author ruoyi */ @RestController @Api(tags = "上传下载") @RequestMapping("/common") -public class CommonController -{ +public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); - + private static final String FILE_DELIMETER = ","; @Autowired private ServerConfig serverConfig; - private static final String FILE_DELIMETER = ","; - /** * 通用下载请求 - * + * * @param fileName 文件名称 - * @param delete 是否删除 + * @param delete 是否删除 */ @GetMapping("/download") @ApiOperation(value = "通用下载请求") - public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) - { - try - { - if (!FileUtils.checkAllowDownload(fileName)) - { + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { + try { + if (!FileUtils.checkAllowDownload(fileName)) { throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); } String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); @@ -65,13 +57,10 @@ public class CommonController response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, realFileName); FileUtils.writeBytes(filePath, response.getOutputStream()); - if (delete) - { + if (delete) { FileUtils.deleteFile(filePath); } - } - catch (Exception e) - { + } catch (Exception e) { log.error("下载文件失败", e); } } @@ -81,10 +70,8 @@ public class CommonController */ @ApiOperation(value = "通用上传请求(单个)") @PostMapping("/upload") - public AjaxResult uploadFile(MultipartFile file) throws Exception - { - try - { + public AjaxResult uploadFile(MultipartFile file) throws Exception { + try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); // 上传并返回新文件名称 @@ -96,9 +83,7 @@ public class CommonController ajax.put("newFileName", FileUtils.getName(fileName)); ajax.put("originalFilename", file.getOriginalFilename()); return ajax; - } - catch (Exception e) - { + } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } @@ -108,18 +93,15 @@ public class CommonController */ @ApiOperation(value = "通用上传请求(多个)") @PostMapping("/uploads") - public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception - { - try - { + public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception { + try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); List<String> urls = new ArrayList<String>(); List<String> fileNames = new ArrayList<String>(); List<String> newFileNames = new ArrayList<String>(); List<String> originalFilenames = new ArrayList<String>(); - for (MultipartFile file : files) - { + for (MultipartFile file : files) { // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; @@ -134,9 +116,7 @@ public class CommonController ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); return ajax; - } - catch (Exception e) - { + } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } @@ -147,12 +127,9 @@ public class CommonController @ApiOperation(value = "本地资源通用下载") @GetMapping("/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) - throws Exception - { - try - { - if (!FileUtils.checkAllowDownload(resource)) - { + throws Exception { + try { + if (!FileUtils.checkAllowDownload(resource)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource)); } // 本地资源路径 @@ -164,9 +141,7 @@ public class CommonController response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(downloadPath, response.getOutputStream()); - } - catch (Exception e) - { + } catch (Exception e) { log.error("下载文件失败", e); } } diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index b7cb28d..ff9bd1e 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -100,9 +100,9 @@ token: # mybatis-plus配置 mybatis-plus: # 搜索指定包别名 - typeAliasesPackage: com.ruoyi.**.domain + typeAliasesPackage: com.ruoyi.jjh.**.domain,com.ruoyi.jjh.**.entity,com.ruoyi.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 - mapperLocations: classpath*:mapper/**/*Mapper.xml + mapperLocations: classpath*:mapper/jjh/**/*Mapper.xml,classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsApprovalInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsApprovalInfoMapper.xml new file mode 100644 index 0000000..43e4654 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsApprovalInfoMapper.xml @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsApprovalInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsApprovalInfo" id="BmsApprovalInfoResult"> + <result property="id" column="id"/> + <result property="processId" column="process_id"/> + <result property="declarationRecordsId" column="declaration_records_id"/> + <result property="approvalStatus" column="approval_status"/> + <result property="approvalOpinions" column="approval_opinions"/> + <result property="approvalAttachment" column="approval_attachment"/> + <result property="approvalTime" column="approval_time"/> + <result property="isReview" column="is_review"/> + <result property="isBeforeData" column="is_before_data"/> + <result property="sort" column="sort"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsApprovalInfoVo"> + select id, + process_id, + declaration_records_id, + approval_status, + approval_opinions, + approval_attachment, + approval_time, + is_review, + sort, + is_before_data, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_approval_info + </sql> + + <select id="selectBmsApprovalInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsApprovalInfo" + resultMap="BmsApprovalInfoResult"> + <include refid="selectBmsApprovalInfoVo"/> + <where> + <if test="processId != null ">and process_id = #{processId}</if> + <if test="declarationRecordsId != null and declarationRecordsId != ''">and declaration_records_id = + #{declarationRecordsId} + </if> + <if test="approvalStatus != null ">and approval_status = #{approvalStatus}</if> + <if test="approvalOpinions != null and approvalOpinions != ''">and approval_opinions = + #{approvalOpinions} + </if> + <if test="approvalAttachment != null and approvalAttachment != ''">and approval_attachment = + #{approvalAttachment} + </if> + <if test="approvalTime != null and approvalTime != ''">and approval_time = #{approvalTime}</if> + <if test="isReview != null and isReview != ''">and is_review = #{isReview}</if> + <if test="isBeforeData != null and isBeforeData != ''">and is_before_data = #{isBeforeData}</if> + <if test="sort != null ">and sort = #{sort}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsApprovalInfoById" parameterType="Long" resultMap="BmsApprovalInfoResult"> + <include refid="selectBmsApprovalInfoVo"/> + where id = #{id} + </select> + <select id="getApprovalInfoList" resultType="com.ruoyi.jjh.declaration.entity.vo.BmsApprovalInfoQueryVo"> + SELECT + a.id, + a.approval_by_id, + b.nick_name AS approvalByName, + a.approval_status, + a.approval_opinions, + a.approval_attachment, + a.approval_time, + a.is_before_data, + a.sort + FROM + bms_approval_info a + INNER JOIN sys_user b ON a.approval_by_id = b.user_id + <where> + a.declaration_records_id=#{declarationRecordsId} + </where> + order by a.sort asc + </select> + + <insert id="insertBmsApprovalInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsApprovalInfo" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_approval_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="processId != null">process_id,</if> + <if test="declarationRecordsId != null">declaration_records_id,</if> + <if test="approvalStatus != null">approval_status,</if> + <if test="approvalOpinions != null">approval_opinions,</if> + <if test="approvalAttachment != null">approval_attachment,</if> + <if test="approvalTime != null">approval_time,</if> + <if test="isReview != null">is_review,</if> + <if test="isBeforeData != null">is_before_data,</if> + <if test="sort != null">sort,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="processId != null">#{processId},</if> + <if test="declarationRecordsId != null">#{declarationRecordsId},</if> + <if test="approvalStatus != null">#{approvalStatus},</if> + <if test="approvalOpinions != null">#{approvalOpinions},</if> + <if test="approvalAttachment != null">#{approvalAttachment},</if> + <if test="approvalTime != null">#{approvalTime},</if> + <if test="isReview != null">#{isReview},</if> + <if test="isBeforeData != null">#{isBeforeData},</if> + <if test="sort != null">#{sort},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsApprovalInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsApprovalInfo"> + update bms_approval_info + <trim prefix="SET" suffixOverrides=","> + <if test="processId != null">process_id = #{processId},</if> + <if test="declarationRecordsId != null">declaration_records_id = #{declarationRecordsId},</if> + <if test="approvalStatus != null">approval_status = #{approvalStatus},</if> + <if test="approvalOpinions != null">approval_opinions = #{approvalOpinions},</if> + <if test="approvalAttachment != null">approval_attachment = #{approvalAttachment},</if> + <if test="approvalTime != null">approval_time = #{approvalTime},</if> + <if test="isReview != null">is_review = #{isReview},</if> + <if test="isBeforeData != null">is_before_data = #{isBeforeData},</if> + <if test="sort != null">sort = #{sort},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + <update id="updateApproval"> + update bms_approval_info + set is_before_data = 1 + where declaration_records_id = #{declarationRecordsId} + </update> + <update id="updateApprovalList"> + <foreach collection="list" item="item" separator=";"> + update bms_approval_info set is_before_data = 1 where declaration_records_id = #{item} + </foreach> + </update> + + <delete id="deleteBmsApprovalInfoById" parameterType="Long"> + delete + from bms_approval_info + where id = #{id} + </delete> + + <delete id="deleteBmsApprovalInfoByIds" parameterType="String"> + delete from bms_approval_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBigStrongAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBigStrongAwardMapper.xml new file mode 100644 index 0000000..f15720d --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBigStrongAwardMapper.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsBigStrongAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.vo.BmsBigStrongAwardQueryVo" id="BmsBigStrongAwardResult"> + <result property="id" column="id" /> + <result property="enterpriseId" column="enterprise_id" /> + <result property="isGainRewards" column="is_gain_rewards" /> + <result property="rewardDescription" column="reward_description" /> + <result property="establishTime" column="establish_time" /> + <result property="developmentPlan" column="development_plan" /> + <result property="isDeleted" column="is_deleted" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + <result property="remark" column="remark" /> + </resultMap> + + <sql id="selectBmsBigStrongAwardVo"> + select id, enterprise_id, is_gain_rewards,reward_description, establish_time, development_plan, is_deleted, create_by, create_time, update_by, update_time, remark from bms_big_strong_award + </sql> + + <select id="selectBmsBigStrongAwardList" parameterType="com.ruoyi.jjh.declaration.entity.BmsBigStrongAward" resultMap="BmsBigStrongAwardResult"> + <include refid="selectBmsBigStrongAwardVo"/> + <where> + <if test="enterpriseId != null "> and enterprise_id = #{enterpriseId}</if> + <if test="isGainRewards != null "> and is_gain_rewards = #{isGainRewards}</if> + <if test="establishTime != null "> and establish_time = #{establishTime}</if> + <if test="developmentPlan != null and developmentPlan != ''"> and development_plan = #{developmentPlan}</if> + <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsBigStrongAwardById" parameterType="Long" resultMap="BmsBigStrongAwardResult"> + <include refid="selectBmsBigStrongAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsBigStrongAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsBigStrongAward"> + insert into bms_big_strong_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="isGainRewards != null">is_gain_rewards,</if> + <if test="rewardDescription != null">reward_description,</if> + <if test="establishTime != null">establish_time,</if> + <if test="developmentPlan != null">development_plan,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="isGainRewards != null">#{isGainRewards},</if> + <if test="rewardDescription != null">#{rewardDescription},</if> + <if test="establishTime != null">#{establishTime},</if> + <if test="developmentPlan != null">#{developmentPlan},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsBigStrongAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsBigStrongAward"> + update bms_big_strong_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="isGainRewards != null">is_gain_rewards = #{isGainRewards},</if> + <if test="rewardDescription != null">reward_description = #{rewardDescription},</if> + <if test="establishTime != null">establish_time = #{establishTime},</if> + <if test="developmentPlan != null">development_plan = #{developmentPlan},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsBigStrongAwardById" parameterType="Long"> + delete + from bms_big_strong_award + where id = #{id} + </delete> + + <delete id="deleteBmsBigStrongAwardByIds" parameterType="String"> + delete from bms_big_strong_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBrandingAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBrandingAwardMapper.xml new file mode 100644 index 0000000..eaf6d2f --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsBrandingAwardMapper.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsBrandingAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsBrandingAward" id="BmsBrandingAwardResult"> + <result property="id" column="id" /> + <result property="enterpriseId" column="enterprise_id" /> + <result property="honorsReceived" column="honors_received" /> + <result property="level" column="level" /> + <result property="evidence" column="evidence" /> + <result property="isDeleted" column="is_deleted" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + <result property="remark" column="remark" /> + </resultMap> + + <sql id="selectBmsBrandingAwardVo"> + select id, enterprise_id, honors_received, level, evidence, is_deleted, create_by, create_time, update_by, update_time, remark from bms_branding_award + </sql> + + <select id="selectBmsBrandingAwardList" parameterType="com.ruoyi.jjh.declaration.entity.BmsBrandingAward" resultMap="BmsBrandingAwardResult"> + <include refid="selectBmsBrandingAwardVo"/> + <where> + <if test="enterpriseId != null "> and enterprise_id = #{enterpriseId}</if> + <if test="honorsReceived != null and honorsReceived != ''"> and honors_received = #{honorsReceived}</if> + <if test="level != null "> and level = #{level}</if> + <if test="evidence != null and evidence != ''"> and evidence = #{evidence}</if> + <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsBrandingAwardById" parameterType="Long" resultMap="BmsBrandingAwardResult"> + <include refid="selectBmsBrandingAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsBrandingAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsBrandingAward"> + insert into bms_branding_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="honorsReceived != null">honors_received,</if> + <if test="level != null">level,</if> + <if test="evidence != null">evidence,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="honorsReceived != null">#{honorsReceived},</if> + <if test="level != null">#{level},</if> + <if test="evidence != null">#{evidence},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsBrandingAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsBrandingAward"> + update bms_branding_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="honorsReceived != null">honors_received = #{honorsReceived},</if> + <if test="level != null">level = #{level},</if> + <if test="evidence != null">evidence = #{evidence},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsBrandingAwardById" parameterType="Long"> + delete from bms_branding_award where id = #{id} + </delete> + + <delete id="deleteBmsBrandingAwardByIds" parameterType="String"> + delete from bms_branding_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCarrierConstructionAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCarrierConstructionAwardMapper.xml new file mode 100644 index 0000000..a736ee7 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCarrierConstructionAwardMapper.xml @@ -0,0 +1,151 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsCarrierConstructionAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward" + id="BmsCarrierConstructionAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="projectName" column="project_name"/> + <result property="quantityProportion" column="quantity_proportion"/> + <result property="revenueProportion" column="revenue_proportion"/> + <result property="personnelProportion" column="personnel_proportion"/> + <result property="supportingMaterials" column="supporting_materials"/> + <result property="businessLicense" column="business_license"/> + <result property="fireReport" column="fire_report"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsCarrierConstructionAwardVo"> + select id, + enterprise_id, + project_name, + quantity_proportion, + revenue_proportion, + personnel_proportion, + supporting_materials, + business_license, + fire_report, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_carrier_construction_award + </sql> + + <select id="selectBmsCarrierConstructionAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward" + resultMap="BmsCarrierConstructionAwardResult"> + <include refid="selectBmsCarrierConstructionAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="projectName != null and projectName != ''">and project_name like concat('%', #{projectName}, + '%') + </if> + <if test="quantityProportion != null and quantityProportion != ''">and quantity_proportion = + #{quantityProportion} + </if> + <if test="revenueProportion != null and revenueProportion != ''">and revenue_proportion = + #{revenueProportion} + </if> + <if test="personnelProportion != null and personnelProportion != ''">and personnel_proportion = + #{personnelProportion} + </if> + <if test="supportingMaterials != null and supportingMaterials != ''">and supporting_materials = + #{supportingMaterials} + </if> + <if test="businessLicense != null and businessLicense != ''">and business_license = #{businessLicense}</if> + <if test="fireReport != null and fireReport != ''">and fire_report = #{fireReport}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsCarrierConstructionAwardById" parameterType="Long" + resultMap="BmsCarrierConstructionAwardResult"> + <include refid="selectBmsCarrierConstructionAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsCarrierConstructionAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward"> + insert into bms_carrier_construction_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="projectName != null">project_name,</if> + <if test="quantityProportion != null">quantity_proportion,</if> + <if test="revenueProportion != null">revenue_proportion,</if> + <if test="personnelProportion != null">personnel_proportion,</if> + <if test="supportingMaterials != null">supporting_materials,</if> + <if test="businessLicense != null">business_license,</if> + <if test="fireReport != null">fire_report,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="projectName != null">#{projectName},</if> + <if test="quantityProportion != null">#{quantityProportion},</if> + <if test="revenueProportion != null">#{revenueProportion},</if> + <if test="personnelProportion != null">#{personnelProportion},</if> + <if test="supportingMaterials != null">#{supportingMaterials},</if> + <if test="businessLicense != null">#{businessLicense},</if> + <if test="fireReport != null">#{fireReport},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsCarrierConstructionAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsCarrierConstructionAward"> + update bms_carrier_construction_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="projectName != null">project_name = #{projectName},</if> + <if test="quantityProportion != null">quantity_proportion = #{quantityProportion},</if> + <if test="revenueProportion != null">revenue_proportion = #{revenueProportion},</if> + <if test="personnelProportion != null">personnel_proportion = #{personnelProportion},</if> + <if test="supportingMaterials != null">supporting_materials = #{supportingMaterials},</if> + <if test="businessLicense != null">business_license = #{businessLicense},</if> + <if test="fireReport != null">fire_report = #{fireReport},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsCarrierConstructionAwardById" parameterType="Long"> + delete + from bms_carrier_construction_award + where id = #{id} + </delete> + + <delete id="deleteBmsCarrierConstructionAwardByIds" parameterType="String"> + delete from bms_carrier_construction_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCreditManagementMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCreditManagementMapper.xml new file mode 100644 index 0000000..e2b544b --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsCreditManagementMapper.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsCreditManagementMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsCreditManagement" id="BmsCreditManagementResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="projectPlan" column="project_plan"/> + <result property="usesFunds" column="uses_funds"/> + <result property="auditReport" column="audit_report"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsCreditManagementVo"> + select id, + enterprise_id, + project_plan, + uses_funds, + audit_report, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_credit_management + </sql> + + <select id="selectBmsCreditManagementList" parameterType="com.ruoyi.jjh.declaration.entity.BmsCreditManagement" + resultMap="BmsCreditManagementResult"> + <include refid="selectBmsCreditManagementVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="projectPlan != null and projectPlan != ''">and project_plan = #{projectPlan}</if> + <if test="usesFunds != null and usesFunds != ''">and uses_funds = #{usesFunds}</if> + <if test="auditReport != null and auditReport != ''">and audit_report = #{auditReport}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsCreditManagementById" parameterType="Long" resultMap="BmsCreditManagementResult"> + <include refid="selectBmsCreditManagementVo"/> + where id = #{id} + </select> + + <insert id="insertBmsCreditManagement" parameterType="com.ruoyi.jjh.declaration.entity.BmsCreditManagement" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_credit_management + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="projectPlan != null">project_plan,</if> + <if test="usesFunds != null">uses_funds,</if> + <if test="auditReport != null">audit_report,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="projectPlan != null">#{projectPlan},</if> + <if test="usesFunds != null">#{usesFunds},</if> + <if test="auditReport != null">#{auditReport},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsCreditManagement" parameterType="com.ruoyi.jjh.declaration.entity.BmsCreditManagement"> + update bms_credit_management + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="projectPlan != null">project_plan = #{projectPlan},</if> + <if test="usesFunds != null">uses_funds = #{usesFunds},</if> + <if test="auditReport != null">audit_report = #{auditReport},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsCreditManagementById" parameterType="Long"> + delete + from bms_credit_management + where id = #{id} + </delete> + + <delete id="deleteBmsCreditManagementByIds" parameterType="String"> + delete from bms_credit_management where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsDeclarationRecordsMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsDeclarationRecordsMapper.xml new file mode 100644 index 0000000..fd40213 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsDeclarationRecordsMapper.xml @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsDeclarationRecordsMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords" id="BmsDeclarationRecordsResult"> + <result property="id" column="id"/> + <result property="projectName" column="project_name"/> + <result property="projectId" column="project_id"/> + <result property="matter" column="matter"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="year" column="year"/> + <result property="declarationTemplateType" column="declaration_template_type"/> + <result property="templateRecordId" column="template_record_id"/> + <result property="detailId" column="detail_id"/> + <result property="status" column="status"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <resultMap type="com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo" + id="BmsDeclarationRecordsVoResult"> + <result property="id" column="id"/> + <result property="projectName" column="project_name"/> + <result property="projectId" column="project_id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="level" column="level"/> + <result property="year" column="year"/> + <result property="type" column="type"/> + <result property="road" column="road"/> + <result property="responsibilityUnit" column="responsibility_unit"/> + <result property="declarationTemplateType" column="declaration_template_type"/> + <result property="templateRecordId" column="template_record_id"/> + <result property="detailId" column="detail_id"/> + <result property="status" column="status"/> + <result property="createTime" column="create_time"/> + <result property="updateTime" column="update_time"/> + <result property="enterpriseName" column="enterprise_name"/> + </resultMap> + + <sql id="selectBmsDeclarationRecordsVo"> + select id, + project_name, + project_id, + matter, + enterprise_id, year, template_record_id, declaration_template_type, detail_id, status, is_deleted, create_by, create_time, update_by, update_time, remark + from bms_declaration_records + </sql> + + <select id="selectBmsDeclarationRecordsList" parameterType="com.ruoyi.jjh.declaration.entity.dto.BmsDeclarationRecordsDto" + resultMap="BmsDeclarationRecordsVoResult"> + SELECT + a.id, + d.project_name, + a.project_id, + a.enterprise_id, + c.LEVEL, + a.YEAR, + c.type, + a.template_record_id, + c.id as template_id, + c.responsibility_unit, + a.declaration_template_type, + a.detail_id, + a.STATUS, + a.is_deleted, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.remark, + b.enterprise_name, + f.road + FROM + bms_declaration_records AS a + inner join bms_template_record f on a.template_record_id = f.id + LEFT JOIN bms_enterprise_basic_info b ON a.enterprise_id = b.id + LEFT JOIN bms_template_info c on a.declaration_template_type = c.id + LEFT JOIN bms_project_info d on a.project_id = d.id + left join sys_dict_data e on a.status = e.dict_value and e.dict_type='bms_approval_status' + + <where> + <if test="projectName != null and projectName != ''">and a.project_name like concat('%', #{projectName}, + '%') + </if> + <if test="templateName != null and templateName != ''">and c.template_name like concat('%', + #{templateName}, '%') + </if> + <if test="enterpriseId != null ">and a.enterprise_id = #{enterpriseId}</if> + <if test="level != null ">and c.level = #{level}</if> + <if test="year != null and year != ''">and year = #{year}</if> + <if test="type != null ">and c.type = #{type}</if> + <if test="responsibilityUnit != null ">and c.responsibility_unit = #{responsibilityUnit}</if> + <if test="declarationTemplateType != null ">and a.declaration_template_type = #{declarationTemplateType} + </if> + <if test="status != null ">and a.status = #{status}</if> + <if test="statusStr != null and statusStr.size>0"> + and a.status in + <foreach collection="statusStr" item="item" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="isDeleted != null ">and a.is_deleted = #{isDeleted}</if> + </where> + order by e.dict_sort desc,a.update_time desc,a.create_time desc + </select> + + <select id="selectBmsDeclarationRecordsById" parameterType="Long" resultMap="BmsDeclarationRecordsResult"> + <include refid="selectBmsDeclarationRecordsVo"/> + where id = #{id} + </select> + <select id="approvalList" parameterType="com.ruoyi.jjh.declaration.entity.dto.ApprovalDeclarationRecordsQueryDto" + resultType="com.ruoyi.jjh.declaration.entity.vo.ApprovalDeclarationRecordsQueryVo"> + SELECT + d.approval_status, + a.matter, + b.project_name, + b.product_area, + c.enterprise_name, + b.support_methods, + b.start_time, + b.end_time, + a.create_time, + a.`status`, + a.template_record_id, + a.detail_id, + a.id as declarationRecordsId, + e.template_id, + d.approval_time + FROM + bms_declaration_records a + INNER JOIN bms_project_info b ON a.project_id = b.id + INNER JOIN bms_enterprise_basic_info c ON a.enterprise_id = c.id + INNER JOIN bms_template_record e on a.template_record_id = e.id + INNER JOIN bms_approval_info d on a.id=d.declaration_records_id and is_before_data = 0 + <where> + <if test="projectName != null and projectName != ''">and b.project_name like concat('%', #{projectName}, + '%') + </if> + <if test="enterpriseName != null and enterpriseName != ''">and c.enterprise_name like concat('%', + #{enterpriseName}, '%') + </if> + <if test="matter != null and matter != ''">and a.matter like concat('%', #{matter}, '%')</if> + <if test="status != null ">and a.status = #{status}</if> + <if test="approvalById != null"> + and d.approval_by_id = #{approvalById} + </if> + <if test="startTime != null "> + and date_format(a.create_time ,'%y%m%d') >= date_format(#{startTime},'%y%m%d') + </if> + <if test="endTime != null "> + and date_format(a.create_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') + </if> + <if test="userIds != null and userIds.size>0"> + and a.id in (select declaration_records_id from bms_approval_info d + inner join bms_process_info e on d.process_id = e.id + where is_before_data = 0 and approval_by_id in + <foreach collection="userIds" item="userId" open="(" close=")" separator=","> + #{userId} + </foreach> + ) + </if> + <if test="approvalStatusStr != null and approvalStatusStr.size >0"> + and d.approval_status in + <foreach collection="approvalStatusStr" item="approvalStatus" separator="," open="(" close=")"> + #{approvalStatus} + </foreach> + </if> + </where> + ORDER BY + d.approval_time DESC,a.create_time desc + </select> + <select id="selectBmsDeclarationRecordsZwList" + resultType="com.ruoyi.jjh.declaration.entity.vo.BmsDeclarationRecordsQueryVo"> + SELECT + a.id, + d.project_name, + a.project_id, + a.enterprise_id, + c.LEVEL, + a.YEAR, + c.type, + a.template_record_id, + c.id as template_id, + c.responsibility_unit, + a.declaration_template_type, + a.detail_id, + a.STATUS, + a.is_deleted, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.remark, + b.enterprise_name, + f.road + FROM + bms_declaration_records AS a + inner join bms_template_record f on a.template_record_id = f.id + LEFT JOIN bms_enterprise_basic_info b ON a.enterprise_id = b.id + LEFT JOIN bms_template_info c on a.declaration_template_type = c.id + LEFT JOIN bms_project_info d on a.project_id = d.id + left join sys_dict_data e on a.status = e.dict_value and e.dict_type='bms_approval_status' + <where> + and a.status != 0 + <if test="projectName != null and projectName != ''">and a.project_name like concat('%', #{projectName}, + '%') + </if> + <if test="templateName != null and templateName != ''">and c.template_name like concat('%', + #{templateName}, '%') + </if> + <if test="enterpriseId != null ">and a.enterprise_id = #{enterpriseId}</if> + <if test="level != null ">and c.level = #{level}</if> + <if test="year != null and year != ''">and year = #{year}</if> + <if test="type != null ">and c.type = #{type}</if> + <if test="responsibilityUnit != null ">and c.responsibility_unit = #{responsibilityUnit}</if> + <if test="declarationTemplateType != null ">and a.declaration_template_type = #{declarationTemplateType} + </if> + <if test="statusStr != null and statusStr.size>0"> + and a.status in + <foreach collection="statusStr" item="item" separator="," open="(" close=")"> + #{item} + </foreach> + </if> + <if test="isDeleted != null ">and a.is_deleted = #{isDeleted}</if> + </where> + order by e.dict_sort desc,a.update_time desc,a.create_time desc + </select> + <select id="selectMunicipalBureauReviewList" + resultType="com.ruoyi.jjh.declaration.entity.vo.BmsMunicipalBureauReviewQueryVo"> + SELECT a.id, + b.credit_code, + b.enterprise_name, + a.project_name, + a.YEAR, + '' as result, + '' as opinion + FROM bms_declaration_records a + INNER JOIN bms_enterprise_basic_info b ON a.enterprise_id = b.id + WHERE a.`status` = 4 + </select> + + <insert id="insertBmsDeclarationRecords" parameterType="com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_declaration_records + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="projectName != null">project_name,</if> + <if test="projectId != null">project_id,</if> + <if test="matter != null">matter,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="templateRecordId != null">template_record_id,</if> + <if test="year != null">year,</if> + <if test="detailId != null">detail_id,</if> + <if test="declarationTemplateType != null">declaration_template_type,</if> + <if test="status != null">status,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="projectName != null">#{projectName},</if> + <if test="projectId != null">#{projectId},</if> + <if test="matter != null">#{matter},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="templateRecordId != null">#{templateRecordId},</if> + <if test="year != null">#{year},</if> + <if test="detailId != null">#{detailId},</if> + <if test="declarationTemplateType != null">#{declarationTemplateType},</if> + <if test="status != null">#{status},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsDeclarationRecords" parameterType="com.ruoyi.jjh.declaration.entity.BmsDeclarationRecords"> + update bms_declaration_records + <trim prefix="SET" suffixOverrides=","> + <if test="projectName != null">project_name = #{projectName},</if> + <if test="projectId != null">project_id = #{projectId},</if> + <if test="matter != null">matter = #{matter},</if> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="templateRecordId != null">template_record_id = #{templateRecordId},</if> + <if test="year != null">year = #{year},</if> + <if test="detailId != null">detail_id = #{detailId},</if> + <if test="declarationTemplateType != null">declaration_template_type = #{declarationTemplateType},</if> + <if test="status != null">status = #{status},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsDeclarationRecordsById" parameterType="Long"> + delete + from bms_declaration_records + where id = #{id} + </delete> + + <delete id="deleteBmsDeclarationRecordsByIds" parameterType="String"> + delete from bms_declaration_records where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + + <update id="updateProjectNameById"> + update bms_declaration_records + set project_name= #{projectName}, + project_id = #{projectId} + where detail_id = #{id} + </update> + +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseBasicInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseBasicInfoMapper.xml new file mode 100644 index 0000000..012876c --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseBasicInfoMapper.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsEnterpriseBasicInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo" id="BmsEnterpriseBasicInfoResult"> + <result property="id" column="id" /> + <result property="enterpriseName" column="enterprise_name" /> + <result property="creditCode" column="credit_code" /> + <result property="contacts" column="contacts" /> + <result property="contactsNumber" column="contacts_number" /> + <result property="address" column="address" /> + <result property="isDeleted" column="is_deleted" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + <result property="remark" column="remark" /> + </resultMap> + + <sql id="selectBmsEnterpriseBasicInfoVo"> + select id, enterprise_name, credit_code, contacts, contacts_number, address, is_deleted, create_by, create_time, update_by, update_time, remark from bms_enterprise_basic_info + </sql> + + <select id="selectBmsEnterpriseBasicInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo" resultMap="BmsEnterpriseBasicInfoResult"> + <include refid="selectBmsEnterpriseBasicInfoVo"/> + <where> + <if test="enterpriseName != null and enterpriseName != ''"> and enterprise_name like concat('%', #{enterpriseName}, '%')</if> + <if test="creditCode != null and creditCode != ''"> and credit_code = #{creditCode}</if> + <if test="contacts != null and contacts != ''"> and contacts = #{contacts}</if> + <if test="contactsNumber != null and contactsNumber != ''"> and contacts_number = #{contactsNumber}</if> + <if test="address != null and address != ''"> and address = #{address}</if> + <if test="isDeleted != null "> and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsEnterpriseBasicInfoById" parameterType="Long" resultMap="BmsEnterpriseBasicInfoResult"> + <include refid="selectBmsEnterpriseBasicInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBmsEnterpriseBasicInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo"> + insert into bms_enterprise_basic_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseName != null">enterprise_name,</if> + <if test="creditCode != null">credit_code,</if> + <if test="contacts != null">contacts,</if> + <if test="contactsNumber != null">contacts_number,</if> + <if test="address != null">address,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseName != null">#{enterpriseName},</if> + <if test="creditCode != null">#{creditCode},</if> + <if test="contacts != null">#{contacts},</if> + <if test="contactsNumber != null">#{contactsNumber},</if> + <if test="address != null">#{address},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsEnterpriseBasicInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseBasicInfo"> + update bms_enterprise_basic_info + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseName != null">enterprise_name = #{enterpriseName},</if> + <if test="creditCode != null">credit_code = #{creditCode},</if> + <if test="contacts != null">contacts = #{contacts},</if> + <if test="contactsNumber != null">contacts_number = #{contactsNumber},</if> + <if test="address != null">address = #{address},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsEnterpriseBasicInfoById" parameterType="Long"> + delete + from bms_enterprise_basic_info + where id = #{id} + </delete> + + <delete id="deleteBmsEnterpriseBasicInfoByIds" parameterType="String"> + delete from bms_enterprise_basic_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseDirectoryMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseDirectoryMapper.xml new file mode 100644 index 0000000..9903af7 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsEnterpriseDirectoryMapper.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsEnterpriseDirectoryMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory" id="BmsEnterpriseDirectoryResult"> + <result property="id" column="id" /> + <result property="templateRecordId" column="template_record_id" /> + <result property="enterpriseName" column="enterprise_name" /> + <result property="creditCode" column="credit_code" /> + <result property="createBy" column="create_by" /> + <result property="createTime" column="create_time" /> + <result property="updateBy" column="update_by" /> + <result property="updateTime" column="update_time" /> + <result property="remark" column="remark" /> + </resultMap> + + <sql id="selectBmsEnterpriseDirectoryVo"> + select id, + template_record_id, + enterprise_name, + credit_code, + create_by, + create_time, + update_by, + update_time, + remark + from bms_enterprise_directory + </sql> + + <select id="selectBmsEnterpriseDirectoryList" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory" resultMap="BmsEnterpriseDirectoryResult"> + <include refid="selectBmsEnterpriseDirectoryVo"/> + <where> + <if test="templateRecordId != null "> and template_record_id = #{templateRecordId}</if> + <if test="enterpriseName != null and enterpriseName != ''"> and enterprise_name like concat('%', #{enterpriseName}, '%')</if> + <if test="creditCode != null and creditCode != ''"> and credit_code = #{creditCode}</if> + </where> + </select> + + <select id="selectBmsEnterpriseDirectoryById" parameterType="Long" resultMap="BmsEnterpriseDirectoryResult"> + <include refid="selectBmsEnterpriseDirectoryVo"/> + where id = #{id} + </select> + + <insert id="insertBmsEnterpriseDirectory" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory" useGeneratedKeys="true" keyProperty="id"> + insert into bms_enterprise_directory + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="templateRecordId != null">template_record_id,</if> + <if test="enterpriseName != null">enterprise_name,</if> + <if test="creditCode != null">credit_code,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="templateRecordId != null">#{templateRecordId},</if> + <if test="enterpriseName != null">#{enterpriseName},</if> + <if test="creditCode != null">#{creditCode},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsEnterpriseDirectory" parameterType="com.ruoyi.jjh.declaration.entity.BmsEnterpriseDirectory"> + update bms_enterprise_directory + <trim prefix="SET" suffixOverrides=","> + <if test="templateRecordId != null">template_record_id = #{templateId},</if> + <if test="enterpriseName != null">enterprise_name = #{enterpriseName},</if> + <if test="creditCode != null">credit_code = #{creditCode},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsEnterpriseDirectoryById" parameterType="Long"> + delete + from bms_enterprise_directory + where id = #{id} + </delete> + + <delete id="deleteBmsEnterpriseDirectoryByIds" parameterType="String"> + delete from bms_enterprise_directory where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFieldInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFieldInfoMapper.xml new file mode 100644 index 0000000..a6fbf00 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFieldInfoMapper.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsFieldInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsFieldInfo" id="BmsFieldInfoResult"> + <result property="id" column="id"/> + <result property="detailId" column="detail_id"/> + <result property="fieldName" column="field_name"/> + <result property="fieldResult" column="field_result"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsFieldInfoVo"> + select id, + detail_id, + field_name, + field_result, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_field_info + </sql> + + <select id="selectBmsFieldInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsFieldInfo" + resultMap="BmsFieldInfoResult"> + <include refid="selectBmsFieldInfoVo"/> + <where> + <if test="detailId != null ">and detail_id = #{detailId}</if> + <if test="fieldName != null and fieldName != ''">and field_name like concat('%', #{fieldName}, '%')</if> + <if test="fieldResult != null and fieldResult != ''">and field_result = #{fieldResult}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsFieldInfoById" parameterType="Long" resultMap="BmsFieldInfoResult"> + <include refid="selectBmsFieldInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBmsFieldInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsFieldInfo" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_field_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="detailId != null">detail_id,</if> + <if test="fieldName != null">field_name,</if> + <if test="fieldResult != null">field_result,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="detailId != null">#{detailId},</if> + <if test="fieldName != null">#{fieldName},</if> + <if test="fieldResult != null">#{fieldResult},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsFieldInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsFieldInfo"> + update bms_field_info + <trim prefix="SET" suffixOverrides=","> + <if test="detailId != null">detail_id = #{detailId},</if> + <if test="fieldName != null">field_name = #{fieldName},</if> + <if test="fieldResult != null">field_result = #{fieldResult},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsFieldInfoById" parameterType="Long"> + delete + from bms_field_info + where id = #{id} + </delete> + + <delete id="deleteBmsFieldInfoByIds" parameterType="String"> + delete from bms_field_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFileInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFileInfoMapper.xml new file mode 100644 index 0000000..5b544db --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFileInfoMapper.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsFileInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsFileInfo" id="BmsFileInfoResult"> + <result property="id" column="id"/> + <result property="detailId" column="detail_id"/> + <result property="fileName" column="file_name"/> + <result property="fileDescription" column="file_description"/> + <result property="fileUrl" column="file_url"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsFileInfoVo"> + select id, + detail_id, + file_name, + file_description, + file_url, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_file_info + </sql> + + <select id="selectBmsFileInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsFileInfo" + resultMap="BmsFileInfoResult"> + <include refid="selectBmsFileInfoVo"/> + <where> + <if test="detailId != null ">and detail_id = #{detailId}</if> + <if test="fileName != null and fileName != ''">and file_name like concat('%', #{fileName}, '%')</if> + <if test="fileDescription != null and fileDescription != ''">and file_description = #{fileDescription}</if> + <if test="fileUrl != null and fileUrl != ''">and file_url = #{fileUrl}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsFileInfoById" parameterType="Long" resultMap="BmsFileInfoResult"> + <include refid="selectBmsFileInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBmsFileInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsFileInfo" useGeneratedKeys="true" + keyProperty="id"> + insert into bms_file_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="detailId != null">detail_id,</if> + <if test="fileName != null">file_name,</if> + <if test="fileDescription != null">file_description,</if> + <if test="fileUrl != null">file_url,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="detailId != null">#{detailId},</if> + <if test="fileName != null">#{fileName},</if> + <if test="fileDescription != null">#{fileDescription},</if> + <if test="fileUrl != null">#{fileUrl},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsFileInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsFileInfo"> + update bms_file_info + <trim prefix="SET" suffixOverrides=","> + <if test="detailId != null">detail_id = #{detailId},</if> + <if test="fileName != null">file_name = #{fileName},</if> + <if test="fileDescription != null">file_description = #{fileDescription},</if> + <if test="fileUrl != null">file_url = #{fileUrl},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsFileInfoById" parameterType="Long"> + delete + from bms_file_info + where id = #{id} + </delete> + + <delete id="deleteBmsFileInfoByIds" parameterType="String"> + delete from bms_file_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFundingDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFundingDetailMapper.xml new file mode 100644 index 0000000..3759b29 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsFundingDetailMapper.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsFundingDetailMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsFundingDetail" id="BmsFundingDetailResult"> + <result property="id" column="id"/> + <result property="type" column="type"/> + <result property="templateRecordId" column="template_record_id"/> + <result property="detailId" column="detail_id"/> + <result property="vModel" column="v_model"/> + <result property="year" column="year"/> + <result property="illustrate" column="illustrate"/> + <result property="amount" column="amount"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsFundingDetailVo"> + select id, + type, + template_record_id, + v_model, + detail_id, + year, + illustrate, + amount, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_funding_detail + </sql> + + <select id="selectBmsFundingDetailList" parameterType="com.ruoyi.jjh.declaration.entity.BmsFundingDetail" + resultMap="BmsFundingDetailResult"> + <include refid="selectBmsFundingDetailVo"/> + <where> + <if test="type != null ">and type = #{type}</if> + <if test="templateRecordId != null ">and template_record_id = #{templateRecordId}</if> + <if test="detailId != null ">and detail_id = #{detailId}</if> + <if test="year != null and year != ''">and year = #{year}</if> + <if test="illustrate != null and illustrate != ''">and illustrate = #{illustrate}</if> + <if test="amount != null ">and amount = #{amount}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsFundingDetailById" parameterType="Long" resultMap="BmsFundingDetailResult"> + <include refid="selectBmsFundingDetailVo"/> + where id = #{id} + </select> + + <insert id="insertBmsFundingDetail" parameterType="com.ruoyi.jjh.declaration.entity.BmsFundingDetail" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_funding_detail + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="type != null">type,</if> + <if test="templateRecordId != null">template_record_id,</if> + <if test="detailId != null">detail_id,</if> + <if test="vModel != null">v_model,</if> + <if test="year != null">year,</if> + <if test="illustrate != null">illustrate,</if> + <if test="amount != null">amount,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="type != null">#{type},</if> + <if test="templateRecordId != null">#{templateRecordId},</if> + <if test="detailId != null">#{detailId},</if> + <if test="vModel != null">#{vModel},</if> + <if test="year != null">#{year},</if> + <if test="illustrate != null">#{illustrate},</if> + <if test="amount != null">#{amount},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsFundingDetail" parameterType="com.ruoyi.jjh.declaration.entity.BmsFundingDetail"> + update bms_funding_detail + <trim prefix="SET" suffixOverrides=","> + <if test="type != null">type = #{type},</if> + <if test="templateRecordId != null">template_record_id = #{templateRecordId},</if> + <if test="detailId != null">detail_id = #{detailId},</if> + <if test="vModel != null">v_model = #{vModel},</if> + <if test="year != null">year = #{year},</if> + <if test="illustrate != null">illustrate = #{illustrate},</if> + <if test="amount != null">amount = #{amount},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsFundingDetailById" parameterType="Long"> + delete + from bms_funding_detail + where id = #{id} + </delete> + + <delete id="deleteBmsFundingDetailByIds" parameterType="String"> + delete from bms_funding_detail where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIndustrialInternetAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIndustrialInternetAwardMapper.xml new file mode 100644 index 0000000..c07524c --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIndustrialInternetAwardMapper.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsIndustrialInternetAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward" id="BmsIndustrialInternetAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="honoraryName" column="honorary_name"/> + <result property="material" column="material"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsIndustrialInternetAwardVo"> + select id, + enterprise_id, + honorary_name, + material, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_industrial_internet_award + </sql> + + <select id="selectBmsIndustrialInternetAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward" + resultMap="BmsIndustrialInternetAwardResult"> + <include refid="selectBmsIndustrialInternetAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="honoraryName != null and honoraryName != ''">and honorary_name like concat('%', #{honoraryName}, + '%') + </if> + <if test="material != null and material != ''">and material = #{material}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsIndustrialInternetAwardById" parameterType="Long" resultMap="BmsIndustrialInternetAwardResult"> + <include refid="selectBmsIndustrialInternetAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsIndustrialInternetAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward"> + insert into bms_industrial_internet_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="honoraryName != null">honorary_name,</if> + <if test="material != null">material,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="honoraryName != null">#{honoraryName},</if> + <if test="material != null">#{material},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsIndustrialInternetAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIndustrialInternetAward"> + update bms_industrial_internet_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="honoraryName != null">honorary_name = #{honoraryName},</if> + <if test="material != null">material = #{material},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsIndustrialInternetAwardById" parameterType="Long"> + delete + from bms_industrial_internet_award + where id = #{id} + </delete> + + <delete id="deleteBmsIndustrialInternetAwardByIds" parameterType="String"> + delete from bms_industrial_internet_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIntegrationIndustriesMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIntegrationIndustriesMapper.xml new file mode 100644 index 0000000..cc841d7 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsIntegrationIndustriesMapper.xml @@ -0,0 +1,167 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsIntegrationIndustriesMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries" id="BmsIntegrationIndustriesResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="declarationType" column="declaration_type"/> + <result property="evidence" column="evidence"/> + <result property="businessLicense" column="business_license"/> + <result property="taxPaymentCertificate" column="tax_payment_certificate"/> + <result property="auditReport" column="audit_report"/> + <result property="equityStructureChart" column="equity_structure_chart"/> + <result property="declarationReport" column="declaration_report"/> + <result property="independentAccounting" column="independent_accounting"/> + <result property="capitalVerificationReport" column="capital_verification_report"/> + <result property="otherEvidence" column="other_evidence"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsIntegrationIndustriesVo"> + select id, + enterprise_id, + declaration_type, + evidence, + business_license, + tax_payment_certificate, + audit_report, + equity_structure_chart, + declaration_report, + independent_accounting, + capital_verification_report, + other_evidence, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_integration_industries + </sql> + + <select id="selectBmsIntegrationIndustriesList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries" + resultMap="BmsIntegrationIndustriesResult"> + <include refid="selectBmsIntegrationIndustriesVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="declarationType != null ">and declaration_type = #{declarationType}</if> + <if test="evidence != null and evidence != ''">and evidence = #{evidence}</if> + <if test="businessLicense != null and businessLicense != ''">and business_license = #{businessLicense}</if> + <if test="taxPaymentCertificate != null and taxPaymentCertificate != ''">and tax_payment_certificate = + #{taxPaymentCertificate} + </if> + <if test="auditReport != null and auditReport != ''">and audit_report = #{auditReport}</if> + <if test="equityStructureChart != null and equityStructureChart != ''">and equity_structure_chart = + #{equityStructureChart} + </if> + <if test="declarationReport != null and declarationReport != ''">and declaration_report = + #{declarationReport} + </if> + <if test="independentAccounting != null and independentAccounting != ''">and independent_accounting = + #{independentAccounting} + </if> + <if test="capitalVerificationReport != null and capitalVerificationReport != ''">and + capital_verification_report = #{capitalVerificationReport} + </if> + <if test="otherEvidence != null and otherEvidence != ''">and other_evidence = #{otherEvidence}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsIntegrationIndustriesById" parameterType="Long" resultMap="BmsIntegrationIndustriesResult"> + <include refid="selectBmsIntegrationIndustriesVo"/> + where id = #{id} + </select> + + <insert id="insertBmsIntegrationIndustries" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries" useGeneratedKeys="true" + keyProperty="id"> + insert into bms_integration_industries + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="declarationType != null">declaration_type,</if> + <if test="evidence != null">evidence,</if> + <if test="businessLicense != null">business_license,</if> + <if test="taxPaymentCertificate != null">tax_payment_certificate,</if> + <if test="auditReport != null">audit_report,</if> + <if test="equityStructureChart != null">equity_structure_chart,</if> + <if test="declarationReport != null">declaration_report,</if> + <if test="independentAccounting != null">independent_accounting,</if> + <if test="capitalVerificationReport != null">capital_verification_report,</if> + <if test="otherEvidence != null">other_evidence,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="declarationType != null">#{declarationType},</if> + <if test="evidence != null">#{evidence},</if> + <if test="businessLicense != null">#{businessLicense},</if> + <if test="taxPaymentCertificate != null">#{taxPaymentCertificate},</if> + <if test="auditReport != null">#{auditReport},</if> + <if test="equityStructureChart != null">#{equityStructureChart},</if> + <if test="declarationReport != null">#{declarationReport},</if> + <if test="independentAccounting != null">#{independentAccounting},</if> + <if test="capitalVerificationReport != null">#{capitalVerificationReport},</if> + <if test="otherEvidence != null">#{otherEvidence},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsIntegrationIndustries" + parameterType="com.ruoyi.jjh.declaration.entity.BmsIntegrationIndustries"> + update bms_integration_industries + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="declarationType != null">declaration_type = #{declarationType},</if> + <if test="evidence != null">evidence = #{evidence},</if> + <if test="businessLicense != null">business_license = #{businessLicense},</if> + <if test="taxPaymentCertificate != null">tax_payment_certificate = #{taxPaymentCertificate},</if> + <if test="auditReport != null">audit_report = #{auditReport},</if> + <if test="equityStructureChart != null">equity_structure_chart = #{equityStructureChart},</if> + <if test="declarationReport != null">declaration_report = #{declarationReport},</if> + <if test="independentAccounting != null">independent_accounting = #{independentAccounting},</if> + <if test="capitalVerificationReport != null">capital_verification_report = #{capitalVerificationReport}, + </if> + <if test="otherEvidence != null">other_evidence = #{otherEvidence},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsIntegrationIndustriesById" parameterType="Long"> + delete + from bms_integration_industries + where id = #{id} + </delete> + + <delete id="deleteBmsIntegrationIndustriesByIds" parameterType="String"> + delete from bms_integration_industries where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsLogisticsDevelopmentAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsLogisticsDevelopmentAwardMapper.xml new file mode 100644 index 0000000..c33c5e9 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsLogisticsDevelopmentAwardMapper.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsLogisticsDevelopmentAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward" + id="BmsLogisticsDevelopmentAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="honorCertificate" column="Honor_certificate"/> + <result property="platformName" column="platform_name"/> + <result property="filingNotice" column="filing_notice"/> + <result property="auditReport" column="audit_report"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsLogisticsDevelopmentAwardVo"> + select id, + enterprise_id, + Honor_certificate, + platform_name, + filing_notice, + audit_report, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_logistics_development_award + </sql> + + <select id="selectBmsLogisticsDevelopmentAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward" + resultMap="BmsLogisticsDevelopmentAwardResult"> + <include refid="selectBmsLogisticsDevelopmentAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="honorCertificate != null and honorCertificate != ''">and Honor_certificate = + #{honorCertificate} + </if> + <if test="platformName != null and platformName != ''">and platform_name like concat('%', #{platformName}, + '%') + </if> + <if test="filingNotice != null and filingNotice != ''">and filing_notice = #{filingNotice}</if> + <if test="auditReport != null and auditReport != ''">and audit_report = #{auditReport}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsLogisticsDevelopmentAwardById" parameterType="Long" + resultMap="BmsLogisticsDevelopmentAwardResult"> + <include refid="selectBmsLogisticsDevelopmentAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsLogisticsDevelopmentAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward"> + insert into bms_logistics_development_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="honorCertificate != null">Honor_certificate,</if> + <if test="platformName != null">platform_name,</if> + <if test="filingNotice != null">filing_notice,</if> + <if test="auditReport != null">audit_report,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="honorCertificate != null">#{honorCertificate},</if> + <if test="platformName != null">#{platformName},</if> + <if test="filingNotice != null">#{filingNotice},</if> + <if test="auditReport != null">#{auditReport},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsLogisticsDevelopmentAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsLogisticsDevelopmentAward"> + update bms_logistics_development_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="honorCertificate != null">Honor_certificate = #{honorCertificate},</if> + <if test="platformName != null">platform_name = #{platformName},</if> + <if test="filingNotice != null">filing_notice = #{filingNotice},</if> + <if test="auditReport != null">audit_report = #{auditReport},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsLogisticsDevelopmentAwardById" parameterType="Long"> + delete + from bms_logistics_development_award + where id = #{id} + </delete> + + <delete id="deleteBmsLogisticsDevelopmentAwardByIds" parameterType="String"> + delete from bms_logistics_development_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsManufacturingServicesAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsManufacturingServicesAwardMapper.xml new file mode 100644 index 0000000..ab17b1b --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsManufacturingServicesAwardMapper.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsManufacturingServicesAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward" + id="BmsManufacturingServicesAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="filingNotice" column="filing_notice"/> + <result property="invoice" column="invoice"/> + <result property="auditReport" column="audit_report"/> + <result property="financialStatements" column="financial_statements"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + </resultMap> + + <sql id="selectBmsManufacturingServicesAwardVo"> + select id, + enterprise_id, + filing_notice, + invoice, + audit_report, + financial_statements, + is_deleted, + create_by, + create_time, + update_by, + update_time + from bms_manufacturing_services_award + </sql> + + <select id="selectBmsManufacturingServicesAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward" + resultMap="BmsManufacturingServicesAwardResult"> + <include refid="selectBmsManufacturingServicesAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="filingNotice != null and filingNotice != ''">and filing_notice = #{filingNotice}</if> + <if test="invoice != null and invoice != ''">and invoice = #{invoice}</if> + <if test="auditReport != null and auditReport != ''">and audit_report = #{auditReport}</if> + <if test="financialStatements != null and financialStatements != ''">and financial_statements = + #{financialStatements} + </if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsManufacturingServicesAwardById" parameterType="Long" + resultMap="BmsManufacturingServicesAwardResult"> + <include refid="selectBmsManufacturingServicesAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsManufacturingServicesAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward"> + insert into bms_manufacturing_services_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="filingNotice != null">filing_notice,</if> + <if test="invoice != null">invoice,</if> + <if test="auditReport != null">audit_report,</if> + <if test="financialStatements != null">financial_statements,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="filingNotice != null">#{filingNotice},</if> + <if test="invoice != null">#{invoice},</if> + <if test="auditReport != null">#{auditReport},</if> + <if test="financialStatements != null">#{financialStatements},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + </trim> + </insert> + + <update id="updateBmsManufacturingServicesAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsManufacturingServicesAward"> + update bms_manufacturing_services_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="filingNotice != null">filing_notice = #{filingNotice},</if> + <if test="invoice != null">invoice = #{invoice},</if> + <if test="auditReport != null">audit_report = #{auditReport},</if> + <if test="financialStatements != null">financial_statements = #{financialStatements},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsManufacturingServicesAwardById" parameterType="Long"> + delete + from bms_manufacturing_services_award + where id = #{id} + </delete> + + <delete id="deleteBmsManufacturingServicesAwardByIds" parameterType="String"> + delete from bms_manufacturing_services_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsPlatformConstructionAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsPlatformConstructionAwardMapper.xml new file mode 100644 index 0000000..d8d2f5e --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsPlatformConstructionAwardMapper.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsPlatformConstructionAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward" + id="BmsPlatformConstructionAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="platformName" column="platform_name"/> + <result property="agreement" column="agreement"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsPlatformConstructionAwardVo"> + select id, + enterprise_id, + platform_name, + agreement, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_platform_construction_award + </sql> + + <select id="selectBmsPlatformConstructionAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward" + resultMap="BmsPlatformConstructionAwardResult"> + <include refid="selectBmsPlatformConstructionAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="platformName != null and platformName != ''">and platform_name like concat('%', #{platformName}, + '%') + </if> + <if test="agreement != null and agreement != ''">and agreement = #{agreement}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsPlatformConstructionAwardById" parameterType="Long" + resultMap="BmsPlatformConstructionAwardResult"> + <include refid="selectBmsPlatformConstructionAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsPlatformConstructionAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward"> + insert into bms_platform_construction_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="platformName != null">platform_name,</if> + <if test="agreement != null">agreement,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="platformName != null">#{platformName},</if> + <if test="agreement != null">#{agreement},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsPlatformConstructionAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsPlatformConstructionAward"> + update bms_platform_construction_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="platformName != null">platform_name = #{platformName},</if> + <if test="agreement != null">agreement = #{agreement},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsPlatformConstructionAwardById" parameterType="Long"> + delete + from bms_platform_construction_award + where id = #{id} + </delete> + + <delete id="deleteBmsPlatformConstructionAwardByIds" parameterType="String"> + delete from bms_platform_construction_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProcessInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProcessInfoMapper.xml new file mode 100644 index 0000000..ea6c171 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProcessInfoMapper.xml @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsProcessInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsProcessInfo" id="BmsProcessInfoResult"> + <result property="id" column="id"/> + <result property="approvalType" column="approval_type"/> + <result property="approvalLevel" column="approval_level"/> + <result property="approvalDept" column="approval_dept"/> + <result property="approvalById" column="approval_by_id"/> + <result property="approvalByIds" column="approval_by_ids"/> + <result property="nextProcessId" column="next_process_id"/> + <result property="sort" column="sort"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsProcessInfoVo"> + select id, + approval_type, + approval_level, + approval_dept, + approval_by_id, + approval_by_ids, + next_process_id, + sort, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_process_info + </sql> + + <select id="selectBmsProcessInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsProcessInfo" + resultMap="BmsProcessInfoResult"> + <include refid="selectBmsProcessInfoVo"/> + <where> + <if test="approvalType != null ">and approval_type = #{approvalType}</if> + <if test="approvalLevel != null ">and approval_level = #{approvalLevel}</if> + <if test="approvalById != null ">and approval_by_id = #{approvalById}</if> + <if test="approvalByIds != null ">and approval_by_ids = #{approvalByIds}</if> + <if test="nextProcessId != null ">and next_process_id = #{nextProcessId}</if> + <if test="sort != null ">and sort = #{sort}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsProcessInfoById" parameterType="Long" resultMap="BmsProcessInfoResult"> + <include refid="selectBmsProcessInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBmsProcessInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsProcessInfo" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_process_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="approvalType != null">approval_type,</if> + <if test="approvalLevel != null">approval_level,</if> + <if test="approvalDept != null">approval_dept,</if> + <if test="approvalById != null">approval_by_id,</if> + <if test="approvalByIds != null">approval_by_ids,</if> + <if test="nextProcessId != null">next_process_id,</if> + <if test="sort != null">sort,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="approvalType != null">#{approvalType},</if> + <if test="approvalLevel != null">#{approvalLevel},</if> + <if test="approvalDept != null">#{approvalDept},</if> + <if test="approvalById != null">#{approvalById},</if> + <if test="approvalByIds != null">#{approvalByIds},</if> + <if test="nextProcessId != null">#{nextProcessId},</if> + <if test="sort != null">#{sort},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsProcessInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsProcessInfo"> + update bms_process_info + <trim prefix="SET" suffixOverrides=","> + <if test="approvalType != null">approval_type = #{approvalType},</if> + <if test="approvalLevel != null">approval_level = #{approvalLevel},</if> + <if test="approvalDept != null">approval_dept = #{approvalDept},</if> + <if test="approvalById != null">approval_by_id = #{approvalById},</if> + <if test="approvalByIds != null">approval_by_ids = #{approvalByIds},</if> + <if test="nextProcessId != null">next_process_id = #{nextProcessId},</if> + <if test="sort != null">sort = #{sort},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsProcessInfoById" parameterType="Long"> + delete + from bms_process_info + where id = #{id} + </delete> + + <delete id="deleteBmsProcessInfoByIds" parameterType="String"> + delete from bms_process_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectInfoMapper.xml new file mode 100644 index 0000000..b780d82 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectInfoMapper.xml @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsProjectInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsProjectInfo" id="BmsProjectInfoResult"> + <result property="id" column="id"/> + <result property="declarationTemplateType" column="declaration_template_type"/> + <result property="projectName" column="project_name"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="productArea" column="product_area"/> + <result property="year" column="year"/> + <result property="startTime" column="start_time"/> + <result property="endTime" column="end_time"/> + <result property="completionTime" column="completion_time"/> + <result property="supportMethods" column="support_methods"/> + <result property="declarationTime" column="declaration_time"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsProjectInfoVo"> + select id, + declaration_template_type, + project_name, + enterprise_id, + product_area, + year, + start_time, + end_time, + completion_time, + support_methods, + declaration_time, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_project_info + </sql> + + <select id="selectBmsProjectInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectInfo" + resultMap="BmsProjectInfoResult"> + <include refid="selectBmsProjectInfoVo"/> + <where> + <if test="declarationTemplateType != null ">and declaration_template_type = #{declarationTemplateType}</if> + <if test="projectName != null and projectName != ''">and project_name like concat('%', #{projectName}, + '%') + </if> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="productArea != null ">and product_area = #{productArea}</if> + <if test="year != null and year != ''">and year = #{year}</if> + <if test="startTime != null ">and start_time = #{startTime}</if> + <if test="endTime != null ">and end_time = #{endTime}</if> + <if test="completionTime != null ">and completion_time = #{completionTime}</if> + <if test="supportMethods != null ">and support_methods = #{supportMethods}</if> + <if test="declarationTime != null ">and declaration_time = #{declarationTime}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsProjectInfoById" parameterType="Long" resultMap="BmsProjectInfoResult"> + <include refid="selectBmsProjectInfoVo"/> + where id = #{id} + </select> + <select id="getProjectInfo" resultType="com.ruoyi.jjh.declaration.entity.BmsProjectInfo"> + SELECT + c.id, + c.declaration_template_type, + c.project_name, + c.enterprise_id, + c.product_area, + c.YEAR, + c.start_time, + c.end_time, + c.completion_time, + c.support_methods, + c.declaration_time, + c.is_deleted, + c.create_by, + c.create_time, + c.update_by, + c.update_time, + c.remark + FROM + bms_template_record a + INNER JOIN bms_template_info b ON a.template_id = b.id + INNER JOIN bms_project_info c ON b.id = c.declaration_template_type + <where> + a.id = #{templateRecordId} + </where> + </select> + + <insert id="insertBmsProjectInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectInfo" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_project_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="declarationTemplateType != null">declaration_template_type,</if> + <if test="projectName != null">project_name,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="productArea != null">product_area,</if> + <if test="year != null">year,</if> + <if test="startTime != null">start_time,</if> + <if test="endTime != null">end_time,</if> + <if test="completionTime != null">completion_time,</if> + <if test="supportMethods != null">support_methods,</if> + <if test="declarationTime != null">declaration_time,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="declarationTemplateType != null">#{declarationTemplateType},</if> + <if test="projectName != null">#{projectName},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="productArea != null">#{productArea},</if> + <if test="year != null">#{year},</if> + <if test="startTime != null">#{startTime},</if> + <if test="endTime != null">#{endTime},</if> + <if test="completionTime != null">#{completionTime},</if> + <if test="supportMethods != null">#{supportMethods},</if> + <if test="declarationTime != null">#{declarationTime},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsProjectInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectInfo"> + update bms_project_info + <trim prefix="SET" suffixOverrides=","> + <if test="declarationTemplateType != null">declaration_template_type = #{declarationTemplateType},</if> + <if test="projectName != null">project_name = #{projectName},</if> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="productArea != null">product_area = #{productArea},</if> + <if test="year != null">year = #{year},</if> + <if test="startTime != null">start_time = #{startTime},</if> + <if test="endTime != null">end_time = #{endTime},</if> + <if test="completionTime != null">completion_time = #{completionTime},</if> + <if test="supportMethods != null">support_methods = #{supportMethods},</if> + <if test="declarationTime != null">declaration_time = #{declarationTime},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsProjectInfoById" parameterType="Long"> + delete + from bms_project_info + where id = #{id} + </delete> + + <delete id="deleteBmsProjectInfoByIds" parameterType="String"> + delete from bms_project_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectSettlementAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectSettlementAwardMapper.xml new file mode 100644 index 0000000..38be136 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsProjectSettlementAwardMapper.xml @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsProjectSettlementAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.vo.BmsProjectSettlementAwardQueryVo" + id="BmsProjectSettlementAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="establishTime" column="establish_time"/> + <result property="employeeNum" column="employee_num"/> + <result property="agreement" column="agreement"/> + <result property="report" column="report"/> + <result property="businessLicense" column="business_license"/> + <result property="otherMaterials" column="other_materials"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsProjectSettlementAwardVo"> + select id, + enterprise_id, + establish_time, + employee_num, + agreement, + report, + business_license, + other_materials, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_project_settlement_award + </sql> + + <select id="selectBmsProjectSettlementAwardList" + parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward" + resultMap="BmsProjectSettlementAwardResult"> + <include refid="selectBmsProjectSettlementAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="establishTime != null ">and establish_time = #{establishTime}</if> + <if test="employeeNum != null ">and employee_num = #{employeeNum}</if> + <if test="agreement != null and agreement != ''">and agreement = #{agreement}</if> + <if test="report != null and report != ''">and report = #{report}</if> + <if test="businessLicense != null and businessLicense != ''">and business_license = #{businessLicense}</if> + <if test="otherMaterials != null and otherMaterials != ''">and other_materials = #{otherMaterials}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsProjectSettlementAwardById" parameterType="Long" resultMap="BmsProjectSettlementAwardResult"> + <include refid="selectBmsProjectSettlementAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsProjectSettlementAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward"> + insert into bms_project_settlement_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="establishTime != null">establish_time,</if> + <if test="employeeNum != null">employee_num,</if> + <if test="agreement != null">agreement,</if> + <if test="report != null">report,</if> + <if test="businessLicense != null">business_license,</if> + <if test="otherMaterials != null">other_materials,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="establishTime != null">#{establishTime},</if> + <if test="employeeNum != null">#{employeeNum},</if> + <if test="agreement != null">#{agreement},</if> + <if test="report != null">#{report},</if> + <if test="businessLicense != null">#{businessLicense},</if> + <if test="otherMaterials != null">#{otherMaterials},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsProjectSettlementAward" + parameterType="com.ruoyi.jjh.declaration.entity.BmsProjectSettlementAward"> + update bms_project_settlement_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="establishTime != null">establish_time = #{establishTime},</if> + <if test="employeeNum != null">employee_num = #{employeeNum},</if> + <if test="agreement != null">agreement = #{agreement},</if> + <if test="report != null">report = #{report},</if> + <if test="businessLicense != null">business_license = #{businessLicense},</if> + <if test="otherMaterials != null">other_materials = #{otherMaterials},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsProjectSettlementAwardById" parameterType="Long"> + delete + from bms_project_settlement_award + where id = #{id} + </delete> + + <delete id="deleteBmsProjectSettlementAwardByIds" parameterType="String"> + delete from bms_project_settlement_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsSceneOpeningAwardMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsSceneOpeningAwardMapper.xml new file mode 100644 index 0000000..f83822e --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsSceneOpeningAwardMapper.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsSceneOpeningAwardMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward" id="BmsSceneOpeningAwardResult"> + <result property="id" column="id"/> + <result property="enterpriseId" column="enterprise_id"/> + <result property="projectName" column="project_name"/> + <result property="type" column="type"/> + <result property="material" column="material"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsSceneOpeningAwardVo"> + select id, + enterprise_id, + project_name, + type, + material, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_scene_opening_award + </sql> + + <select id="selectBmsSceneOpeningAwardList" parameterType="com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward" + resultMap="BmsSceneOpeningAwardResult"> + <include refid="selectBmsSceneOpeningAwardVo"/> + <where> + <if test="enterpriseId != null ">and enterprise_id = #{enterpriseId}</if> + <if test="projectName != null and projectName != ''">and project_name like concat('%', #{projectName}, + '%') + </if> + <if test="type != null ">and type = #{type}</if> + <if test="material != null and material != ''">and material = #{material}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsSceneOpeningAwardById" parameterType="Long" resultMap="BmsSceneOpeningAwardResult"> + <include refid="selectBmsSceneOpeningAwardVo"/> + where id = #{id} + </select> + + <insert id="insertBmsSceneOpeningAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward"> + insert into bms_scene_opening_award + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="enterpriseId != null">enterprise_id,</if> + <if test="projectName != null">project_name,</if> + <if test="type != null">type,</if> + <if test="material != null">material,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="enterpriseId != null">#{enterpriseId},</if> + <if test="projectName != null">#{projectName},</if> + <if test="type != null">#{type},</if> + <if test="material != null">#{material},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsSceneOpeningAward" parameterType="com.ruoyi.jjh.declaration.entity.BmsSceneOpeningAward"> + update bms_scene_opening_award + <trim prefix="SET" suffixOverrides=","> + <if test="enterpriseId != null">enterprise_id = #{enterpriseId},</if> + <if test="projectName != null">project_name = #{projectName},</if> + <if test="type != null">type = #{type},</if> + <if test="material != null">material = #{material},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsSceneOpeningAwardById" parameterType="Long"> + delete + from bms_scene_opening_award + where id = #{id} + </delete> + + <delete id="deleteBmsSceneOpeningAwardByIds" parameterType="String"> + delete from bms_scene_opening_award where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateInfoMapper.xml new file mode 100644 index 0000000..9e030d8 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateInfoMapper.xml @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsTemplateInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsTemplateInfo" id="BmsTemplateInfoResult"> + <result property="id" column="id"/> + <result property="templateName" column="template_name"/> + <result property="level" column="level"/> + <result property="productArea" column="product_area"/> + <result property="type" column="type"/> + <result property="notes" column="notes"/> + <result property="responsibilityUnit" column="responsibility_unit"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsTemplateInfoVo"> + select id, + template_name, + level, + product_area, + type, + notes, + responsibility_unit, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bms_template_info + </sql> + + <select id="selectBmsTemplateInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateInfo" + resultMap="BmsTemplateInfoResult"> + <include refid="selectBmsTemplateInfoVo"/> + <where> + <if test="templateName != null and templateName != ''">and template_name like concat('%', #{templateName}, + '%') + </if> + <if test="level != null ">and level = #{level}</if> + <if test="productArea != null ">and product_area = #{productArea}</if> + <if test="type != null ">and type = #{type}</if> + <if test="notes != null and notes != ''">and notes = #{notes}</if> + <if test="responsibilityUnit != null ">and responsibility_unit = #{responsibilityUnit}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="templateInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateInfo" + resultType="com.ruoyi.jjh.declaration.entity.vo.BmsTemplateInfoQueryVo"> + SELECT + a.*, + b.nick_name as createByName + FROM + bms_template_info a + INNER JOIN sys_user b ON a.create_by = b.user_id + <where> + <if test="templateName != null and templateName != ''">and a.template_name like concat('%', + #{templateName}, '%') + </if> + <if test="level != null ">and a.level = #{level}</if> + <if test="productArea != null ">and a.product_area = #{productArea}</if> + <if test="type != null ">and a.type = #{type}</if> + <if test="notes != null and notes != ''">and a.notes = #{notes}</if> + <if test="responsibilityUnit != null ">and a.responsibility_unit = #{responsibilityUnit}</if> + <if test="isDeleted != null ">and a.is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBmsTemplateInfoById" parameterType="Long" resultMap="BmsTemplateInfoResult"> + <include refid="selectBmsTemplateInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBmsTemplateInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateInfo"> + insert into bms_template_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="templateName != null">template_name,</if> + <if test="level != null">level,</if> + <if test="productArea != null">product_area,</if> + <if test="type != null">type,</if> + <if test="notes != null">notes,</if> + <if test="responsibilityUnit != null">responsibility_unit,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="templateName != null">#{templateName},</if> + <if test="level != null">#{level},</if> + <if test="productArea != null">#{productArea},</if> + <if test="type != null">#{type},</if> + <if test="notes != null">#{notes},</if> + <if test="responsibilityUnit != null">#{responsibilityUnit},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsTemplateInfo" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateInfo"> + update bms_template_info + <trim prefix="SET" suffixOverrides=","> + <if test="templateName != null">template_name = #{templateName},</if> + <if test="level != null">level = #{level},</if> + <if test="productArea != null">product_area = #{productArea},</if> + <if test="type != null">type = #{type},</if> + <if test="notes != null">notes = #{notes},</if> + <if test="responsibilityUnit != null">responsibility_unit = #{responsibilityUnit},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsTemplateInfoById" parameterType="Long"> + delete + from bms_template_info + where id = #{id} + </delete> + + <delete id="deleteBmsTemplateInfoByIds" parameterType="String"> + delete from bms_template_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateRecordMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateRecordMapper.xml new file mode 100644 index 0000000..7e7ecf3 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BmsTemplateRecordMapper.xml @@ -0,0 +1,220 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BmsTemplateRecordMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BmsTemplateRecord" id="BmsTemplateRecordResult"> + <result property="id" column="id"/> + <result property="templateId" column="template_id"/> + <result property="enterpriseDirectory" column="enterprise_directory"/> + <result property="startTime" column="start_time"/> + <result property="endTime" column="end_time"/> + <result property="fileName" column="file_name"/> + <result property="road" column="road"/> + <result property="notes" column="notes"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBmsTemplateRecordVo"> + select id, + template_id, + enterprise_directory, + start_time, + end_time, + file_name, + road, + notes, + create_by, + create_time, + update_by, + update_time, + remark + from bms_template_record + </sql> + + <select id="selectBmsTemplateRecordList" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateRecord" + resultMap="BmsTemplateRecordResult"> + <include refid="selectBmsTemplateRecordVo"/> + <where> + <if test="templateId != null ">and template_id = #{templateId}</if> + <if test="enterpriseDirectory != null and enterpriseDirectory != ''">and enterprise_directory = + #{enterpriseDirectory} + </if> + <if test="startTime != null ">and start_time = #{startTime}</if> + <if test="endTime != null ">and end_time = #{endTime}</if> + <if test="road != null ">and road = #{road}</if> + <if test="fileName != null ">and file_name = #{fileName}</if> + <if test="notes != null and notes != ''">and notes = #{notes}</if> + </where> + </select> + + <select id="selectBmsTemplateRecordById" parameterType="Long" resultMap="BmsTemplateRecordResult"> + <include refid="selectBmsTemplateRecordVo"/> + where id = #{id} + </select> + + <insert id="insertBmsTemplateRecord" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateRecord" + useGeneratedKeys="true" keyProperty="id"> + insert into bms_template_record + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="templateId != null">template_id,</if> + <if test="enterpriseDirectory != null">enterprise_directory,</if> + <if test="startTime != null">start_time,</if> + <if test="endTime != null">end_time,</if> + <if test="road != null">road,</if> + <if test="fileName != null">file_name,</if> + <if test="notes != null">notes,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="templateId != null">#{templateId},</if> + <if test="enterpriseDirectory != null">#{enterpriseDirectory},</if> + <if test="startTime != null">#{startTime},</if> + <if test="endTime != null">#{endTime},</if> + <if test="road != null">#{road},</if> + <if test="fileName != null">#{fileName},</if> + <if test="notes != null">#{notes},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBmsTemplateRecord" parameterType="com.ruoyi.jjh.declaration.entity.BmsTemplateRecord"> + update bms_template_record + <trim prefix="SET" suffixOverrides=","> + <if test="templateId != null">template_id = #{templateId},</if> + <if test="enterpriseDirectory != null">enterprise_directory = #{enterpriseDirectory},</if> + <if test="startTime != null">start_time = #{startTime},</if> + <if test="endTime != null">end_time = #{endTime},</if> + <if test="road != null">road = #{road},</if> + <if test="fileName != null">file_name = #{fileName},</if> + <if test="notes != null">notes = #{notes},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBmsTemplateRecordById" parameterType="Long"> + delete + from bms_template_record + where id = #{id} + </delete> + + <delete id="deleteBmsTemplateRecordByIds" parameterType="String"> + delete from bms_template_record where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + + <select id="selectTemplateRecordVo" parameterType="com.ruoyi.jjh.declaration.entity.dto.BmsTemplateRecordQueryDto" + resultType="com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo"> + SELECT + a.id as templateRecordId, + a.enterprise_directory, + b.id as templateId, + b.template_name, + b.LEVEL, + a.road, + a.file_name, + a.start_time, + a.end_time, + a.notes, + b.responsibility_unit, + a.create_time, + c.nick_name as createByName + FROM + bms_template_record a + INNER JOIN bms_template_info b ON a.template_id = b.id + INNER JOIN sys_user c ON b.create_by = c.user_id + <where> + <if test="enterpriseDirectory != null and enterpriseDirectory != ''">and a.enterprise_directory like + concat('%', #{enterpriseDirectory}, '%') + </if> + <if test="templateId != null ">and b.id = #{templateId}</if> + <if test="startTime != null "> + and date_format(a.create_time ,'%y%m%d') >= date_format(#{startTime},'%y%m%d') + </if> + <if test="endTime != null "> + and date_format(a.create_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') + </if> + <if test="road != null ">and a.road = #{road}</if> + <if test="level != null ">and b.level = #{level}</if> + <if test="responsibilityUnit != null ">and b.responsibility_unit = #{responsibilityUnit}</if> + <if test="templateName != null and templateName != ''">and b.template_name like concat('%', + #{templateName}, '%') + </if> + </where> + order by a.create_time desc + </select> + <select id="selectBmsTemplateRecordVoById" resultType="com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordVo"> + SELECT a.id, + a.template_id, + a.enterprise_directory, + a.start_time, + a.end_time, + a.file_name, + a.road, + a.notes, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.remark, + b.responsibility_unit + FROM bms_template_record a + INNER JOIN bms_template_info b ON a.template_id = b.id + where a.id = #{id} + </select> + <select id="selectBmsTemplateNameList" parameterType="com.ruoyi.jjh.declaration.entity.dto.BmsTemplateQueryDto" + resultType="com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo"> + SELECT a.template_record_id, + b.template_id, + c.template_name, + c.notes + FROM bms_enterprise_directory a + INNER JOIN bms_template_record b ON a.template_record_id = b.id + INNER JOIN bms_template_info c ON b.template_id = c.id + WHERE b.start_time <= NOW() + AND b.end_time >= NOW() + AND a.credit_code = #{creditCode} + AND c.responsibility_unit = #{responsibilityUnit} + and b.road = 0 + </select> + <select id="selectTemplateRecordList" resultType="com.ruoyi.jjh.declaration.entity.vo.BmsTemplateRecordQueryVo"> + SELECT a.id AS templateRecordId, + b.template_name, + a.template_id, + b.`level`, + a.road, + a.file_name, + a.start_time, + a.end_time, + a.notes, + b.responsibility_unit + FROM bms_template_record a + LEFT JOIN bms_template_info b on a.template_id = b.id + WHERE a.id IN (SELECT template_record_id FROM bms_enterprise_directory WHERE credit_code = #{creditCode}) + AND road = 1 + AND start_time <= NOW() + AND end_time >= NOW() + order by a.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BsmFundingInfoMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BsmFundingInfoMapper.xml new file mode 100644 index 0000000..c044d1d --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/jjh/declaration/BsmFundingInfoMapper.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.jjh.declaration.mapper.BsmFundingInfoMapper"> + + <resultMap type="com.ruoyi.jjh.declaration.entity.BsmFundingInfo" id="BsmFundingInfoResult"> + <result property="id" column="id"/> + <result property="type" column="type"/> + <result property="templateId" column="template_id"/> + <result property="detailId" column="detail_id"/> + <result property="revenueYear" column="revenue_year"/> + <result property="revenue" column="revenue"/> + <result property="taxationYear" column="taxation_year"/> + <result property="taxation" column="taxation"/> + <result property="expectedRevenueYear" column="expected_revenue_year"/> + <result property="expectedRevenue" column="expected_revenue"/> + <result property="expectedTaxationYear" column="expected_taxation_year"/> + <result property="expectedTaxation" column="expected_taxation"/> + <result property="isDeleted" column="is_deleted"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectBsmFundingInfoVo"> + select id, + type, + template_id, + detail_id, + revenue_year, + revenue, + taxation_year, + taxation, + expected_revenue_year, + expected_revenue, + expected_taxation_year, + expected_taxation, + is_deleted, + create_by, + create_time, + update_by, + update_time, + remark + from bsm_funding_info + </sql> + + <select id="selectBsmFundingInfoList" parameterType="com.ruoyi.jjh.declaration.entity.BsmFundingInfo" + resultMap="BsmFundingInfoResult"> + <include refid="selectBsmFundingInfoVo"/> + <where> + <if test="type != null ">and type = #{type}</if> + <if test="templateId != null ">and template_id = #{templateId}</if> + <if test="detailId != null ">and detail_id = #{detailId}</if> + <if test="revenueYear != null ">and revenue_year = #{revenueYear}</if> + <if test="revenue != null ">and revenue = #{revenue}</if> + <if test="taxationYear != null ">and taxation_year = #{taxationYear}</if> + <if test="taxation != null ">and taxation = #{taxation}</if> + <if test="expectedRevenueYear != null ">and expected_revenue_year = #{expectedRevenueYear}</if> + <if test="expectedRevenue != null ">and expected_revenue = #{expectedRevenue}</if> + <if test="expectedTaxationYear != null ">and expected_taxation_year = #{expectedTaxationYear}</if> + <if test="expectedTaxation != null ">and expected_taxation = #{expectedTaxation}</if> + <if test="isDeleted != null ">and is_deleted = #{isDeleted}</if> + </where> + </select> + + <select id="selectBsmFundingInfoById" parameterType="Long" resultMap="BsmFundingInfoResult"> + <include refid="selectBsmFundingInfoVo"/> + where id = #{id} + </select> + + <insert id="insertBsmFundingInfo" parameterType="com.ruoyi.jjh.declaration.entity.BsmFundingInfo"> + insert into bsm_funding_info + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="id != null">id,</if> + <if test="type != null">type,</if> + <if test="templateId != null">template_id,</if> + <if test="detailId != null">detail_id,</if> + <if test="revenueYear != null">revenue_year,</if> + <if test="revenue != null">revenue,</if> + <if test="taxationYear != null">taxation_year,</if> + <if test="taxation != null">taxation,</if> + <if test="expectedRevenueYear != null">expected_revenue_year,</if> + <if test="expectedRevenue != null">expected_revenue,</if> + <if test="expectedTaxationYear != null">expected_taxation_year,</if> + <if test="expectedTaxation != null">expected_taxation,</if> + <if test="isDeleted != null">is_deleted,</if> + <if test="createBy != null">create_by,</if> + <if test="createTime != null">create_time,</if> + <if test="updateBy != null">update_by,</if> + <if test="updateTime != null">update_time,</if> + <if test="remark != null">remark,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="id != null">#{id},</if> + <if test="type != null">#{type},</if> + <if test="templateId != null">#{templateId},</if> + <if test="detailId != null">#{detailId},</if> + <if test="revenueYear != null">#{revenueYear},</if> + <if test="revenue != null">#{revenue},</if> + <if test="taxationYear != null">#{taxationYear},</if> + <if test="taxation != null">#{taxation},</if> + <if test="expectedRevenueYear != null">#{expectedRevenueYear},</if> + <if test="expectedRevenue != null">#{expectedRevenue},</if> + <if test="expectedTaxationYear != null">#{expectedTaxationYear},</if> + <if test="expectedTaxation != null">#{expectedTaxation},</if> + <if test="isDeleted != null">#{isDeleted},</if> + <if test="createBy != null">#{createBy},</if> + <if test="createTime != null">#{createTime},</if> + <if test="updateBy != null">#{updateBy},</if> + <if test="updateTime != null">#{updateTime},</if> + <if test="remark != null">#{remark},</if> + </trim> + </insert> + + <update id="updateBsmFundingInfo" parameterType="com.ruoyi.jjh.declaration.entity.BsmFundingInfo"> + update bsm_funding_info + <trim prefix="SET" suffixOverrides=","> + <if test="type != null">type = #{type},</if> + <if test="templateId != null">template_id = #{templateId},</if> + <if test="detailId != null">detail_id = #{detailId},</if> + <if test="revenueYear != null">revenue_year = #{revenueYear},</if> + <if test="revenue != null">revenue = #{revenue},</if> + <if test="taxationYear != null">taxation_year = #{taxationYear},</if> + <if test="taxation != null">taxation = #{taxation},</if> + <if test="expectedRevenueYear != null">expected_revenue_year = #{expectedRevenueYear},</if> + <if test="expectedRevenue != null">expected_revenue = #{expectedRevenue},</if> + <if test="expectedTaxationYear != null">expected_taxation_year = #{expectedTaxationYear},</if> + <if test="expectedTaxation != null">expected_taxation = #{expectedTaxation},</if> + <if test="isDeleted != null">is_deleted = #{isDeleted},</if> + <if test="createBy != null">create_by = #{createBy},</if> + <if test="createTime != null">create_time = #{createTime},</if> + <if test="updateBy != null">update_by = #{updateBy},</if> + <if test="updateTime != null">update_time = #{updateTime},</if> + <if test="remark != null">remark = #{remark},</if> + </trim> + where id = #{id} + </update> + + <delete id="deleteBsmFundingInfoById" parameterType="Long"> + delete + from bsm_funding_info + where id = #{id} + </delete> + + <delete id="deleteBsmFundingInfoByIds" parameterType="String"> + delete from bsm_funding_info where id in + <foreach item="id" collection="array" open="(" separator="," close=")"> + #{id} + </foreach> + </delete> + + +</mapper> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/JMemorandumMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/ent/JMemorandumMapper.xml similarity index 100% rename from ruoyi-admin/src/main/resources/mapper/jjh/JMemorandumMapper.xml rename to ruoyi-admin/src/main/resources/mapper/jjh/ent/JMemorandumMapper.xml diff --git a/ruoyi-admin/src/main/resources/mapper/jjh/JProjectMapper.xml b/ruoyi-admin/src/main/resources/mapper/jjh/ent/JProjectMapper.xml similarity index 100% rename from ruoyi-admin/src/main/resources/mapper/jjh/JProjectMapper.xml rename to ruoyi-admin/src/main/resources/mapper/jjh/ent/JProjectMapper.xml diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 1c939ed..b742b50 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -8,7 +8,9 @@ <version>3.8.7</version> </parent> <modelVersion>4.0.0</modelVersion> - + <properties> + <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version> + </properties> <artifactId>ruoyi-common</artifactId> <description> @@ -16,6 +18,12 @@ </description> <dependencies> + <!-- 线程传递值 --> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>transmittable-thread-local</artifactId> + <version>${transmittable-thread-local.version}</version> + </dependency> <dependency> <groupId>com.baomidou</groupId> @@ -58,19 +66,19 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> - + <!-- JSON工具类 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> - + <!-- 动态数据源 --> - <dependency> - <groupId>com.baomidou</groupId> - <artifactId>dynamic-datasource-spring-boot-starter</artifactId> - <version>3.5.2</version> - </dependency> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>dynamic-datasource-spring-boot-starter</artifactId> + <version>3.5.2</version> + </dependency> <!-- 阿里JSON解析器 --> <dependency> diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/SecurityConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/SecurityConstants.java new file mode 100644 index 0000000..af79f0a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/SecurityConstants.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.constant; + +/** + * 权限相关通用常量 + * + * @author ruoyi + */ +public class SecurityConstants { + /** + * 用户ID字段 + */ + public static final String DETAILS_USER_ID = "user_id"; + + /** + * 用户名字段 + */ + public static final String DETAILS_USERNAME = "username"; + + /** + * 授权信息字段 + */ + public static final String AUTHORIZATION_HEADER = "authorization"; + + /** + * 请求来源 + */ + public static final String FROM_SOURCE = "from-source"; + + /** + * 内部请求 + */ + public static final String INNER = "inner"; + + /** + * 用户标识 + */ + public static final String USER_KEY = "user_key"; + + /** + * 登录用户 + */ + public static final String LOGIN_USER = "login_user"; + + /** + * 角色权限 + */ + public static final String ROLE_PERMISSION = "role_permission"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/context/SecurityContextHolder.java b/ruoyi-common/src/main/java/com/ruoyi/common/context/SecurityContextHolder.java new file mode 100644 index 0000000..a547ff6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/context/SecurityContextHolder.java @@ -0,0 +1,84 @@ +package com.ruoyi.common.context; + + +import com.alibaba.ttl.TransmittableThreadLocal; +import com.ruoyi.common.constant.SecurityConstants; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.StringUtils; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 获取当前线程变量中的 用户id、用户名称、Token等信息 + * 注意: 必须在网关通过请求头的方法传入,同时在HeaderInterceptor拦截器设置值。 否则这里无法获取 + * + * @author ruoyi + */ +public class SecurityContextHolder { + private static final TransmittableThreadLocal<Map<String, Object>> THREAD_LOCAL = new TransmittableThreadLocal<>(); + + public static void set(String key, Object value) { + Map<String, Object> map = getLocalMap(); + map.put(key, value == null ? StringUtils.EMPTY : value); + } + + public static String get(String key) { + Map<String, Object> map = getLocalMap(); + return Convert.toStr(map.getOrDefault(key, StringUtils.EMPTY)); + } + + public static <T> T get(String key, Class<T> clazz) { + Map<String, Object> map = getLocalMap(); + return StringUtils.cast(map.getOrDefault(key, null)); + } + + public static Map<String, Object> getLocalMap() { + Map<String, Object> map = THREAD_LOCAL.get(); + if (map == null) { + map = new ConcurrentHashMap<String, Object>(); + THREAD_LOCAL.set(map); + } + return map; + } + + public static void setLocalMap(Map<String, Object> threadLocalMap) { + THREAD_LOCAL.set(threadLocalMap); + } + + public static Long getUserId() { + return Convert.toLong(get(SecurityConstants.DETAILS_USER_ID), 0L); + } + + public static void setUserId(String account) { + set(SecurityConstants.DETAILS_USER_ID, account); + } + + public static String getUserName() { + return get(SecurityConstants.DETAILS_USERNAME); + } + + public static void setUserName(String username) { + set(SecurityConstants.DETAILS_USERNAME, username); + } + + public static String getUserKey() { + return get(SecurityConstants.USER_KEY); + } + + public static void setUserKey(String userKey) { + set(SecurityConstants.USER_KEY, userKey); + } + + public static String getPermission() { + return get(SecurityConstants.ROLE_PERMISSION); + } + + public static void setPermission(String permissions) { + set(SecurityConstants.ROLE_PERMISSION, permissions); + } + + public static void remove() { + THREAD_LOCAL.remove(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java index bd835db..39cd358 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java @@ -1,77 +1,74 @@ package com.ruoyi.common.core.domain; -import java.io.Serializable; -import java.util.List; -import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonInclude; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysMenu; +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + /** * Treeselect树结构实体类 - * + * * @author ruoyi */ -public class TreeSelect implements Serializable -{ +public class TreeSelect implements Serializable { private static final long serialVersionUID = 1L; - /** 节点ID */ + /** + * 节点ID + */ private Long id; - /** 节点名称 */ + /** + * 节点名称 + */ private String label; - /** 子节点 */ + /** + * 子节点 + */ @JsonInclude(JsonInclude.Include.NON_EMPTY) private List<TreeSelect> children; - public TreeSelect() - { + public TreeSelect() { } - public TreeSelect(SysDept dept) - { + public TreeSelect(SysDept dept) { this.id = dept.getDeptId(); this.label = dept.getDeptName(); this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); } - public TreeSelect(SysMenu menu) - { + public TreeSelect(SysMenu menu) { this.id = menu.getMenuId(); this.label = menu.getMenuName(); this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); } - public Long getId() - { + public Long getId() { return id; } - public void setId(Long id) - { + public void setId(Long id) { this.id = id; } - public String getLabel() - { + public String getLabel() { return label; } - public void setLabel(String label) - { + public void setLabel(String label) { this.label = label; } - public List<TreeSelect> getChildren() - { + public List<TreeSelect> getChildren() { return children; } - public void setChildren(List<TreeSelect> children) - { + public void setChildren(List<TreeSelect> children) { this.children = children; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java index fb18c5c..98ea901 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java @@ -1,203 +1,203 @@ package com.ruoyi.common.core.domain.entity; -import java.util.ArrayList; -import java.util.List; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.ruoyi.common.core.domain.BaseEntity; +import java.util.ArrayList; +import java.util.List; /** * 部门表 sys_dept - * + * * @author ruoyi */ -public class SysDept extends BaseEntity -{ +public class SysDept extends BaseEntity { private static final long serialVersionUID = 1L; - /** 部门ID */ + /** + * 部门ID + */ private Long deptId; - /** 父部门ID */ + /** + * 父部门ID + */ private Long parentId; - /** 祖级列表 */ + /** + * 祖级列表 + */ private String ancestors; - /** 部门名称 */ + /** + * 部门名称 + */ private String deptName; - /** 显示顺序 */ + /** + * 显示顺序 + */ private Integer orderNum; - /** 负责人 */ + /** + * 负责人 + */ private String leader; - /** 联系电话 */ + /** + * 联系电话 + */ private String phone; - /** 邮箱 */ + /** + * 邮箱 + */ private String email; - /** 部门状态:0正常,1停用 */ + /** + * 部门状态:0正常,1停用 + */ private String status; - /** 删除标志(0代表存在 2代表删除) */ + /** + * 删除标志(0代表存在 2代表删除) + */ private String delFlag; - /** 父部门名称 */ + /** + * 父部门名称 + */ private String parentName; - - /** 子部门 */ + + /** + * 子部门 + */ private List<SysDept> children = new ArrayList<SysDept>(); - public Long getDeptId() - { + public Long getDeptId() { return deptId; } - public void setDeptId(Long deptId) - { + public void setDeptId(Long deptId) { this.deptId = deptId; } - public Long getParentId() - { + public Long getParentId() { return parentId; } - public void setParentId(Long parentId) - { + public void setParentId(Long parentId) { this.parentId = parentId; } - public String getAncestors() - { + public String getAncestors() { return ancestors; } - public void setAncestors(String ancestors) - { + public void setAncestors(String ancestors) { this.ancestors = ancestors; } @NotBlank(message = "部门名称不能为空") @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") - public String getDeptName() - { + public String getDeptName() { return deptName; } - public void setDeptName(String deptName) - { + public void setDeptName(String deptName) { this.deptName = deptName; } @NotNull(message = "显示顺序不能为空") - public Integer getOrderNum() - { + public Integer getOrderNum() { return orderNum; } - public void setOrderNum(Integer orderNum) - { + public void setOrderNum(Integer orderNum) { this.orderNum = orderNum; } - public String getLeader() - { + public String getLeader() { return leader; } - public void setLeader(String leader) - { + public void setLeader(String leader) { this.leader = leader; } @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") - public String getPhone() - { + public String getPhone() { return phone; } - public void setPhone(String phone) - { + public void setPhone(String phone) { this.phone = phone; } @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") - public String getEmail() - { + public String getEmail() { return email; } - public void setEmail(String email) - { + public void setEmail(String email) { this.email = email; } - public String getStatus() - { + public String getStatus() { return status; } - public void setStatus(String status) - { + public void setStatus(String status) { this.status = status; } - public String getDelFlag() - { + public String getDelFlag() { return delFlag; } - public void setDelFlag(String delFlag) - { + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } - public String getParentName() - { + public String getParentName() { return parentName; } - public void setParentName(String parentName) - { + public void setParentName(String parentName) { this.parentName = parentName; } - public List<SysDept> getChildren() - { + public List<SysDept> getChildren() { return children; } - public void setChildren(List<SysDept> children) - { + public void setChildren(List<SysDept> children) { this.children = children; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("deptId", getDeptId()) - .append("parentId", getParentId()) - .append("ancestors", getAncestors()) - .append("deptName", getDeptName()) - .append("orderNum", getOrderNum()) - .append("leader", getLeader()) - .append("phone", getPhone()) - .append("email", getEmail()) - .append("status", getStatus()) - .append("delFlag", getDelFlag()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index 488d49c..6dd6528 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -1,241 +1,237 @@ package com.ruoyi.common.core.domain.entity; -import java.util.Set; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Set; /** * 角色表 sys_role - * + * * @author ruoyi */ -public class SysRole extends BaseEntity -{ +public class SysRole extends BaseEntity { private static final long serialVersionUID = 1L; - /** 角色ID */ + /** + * 角色ID + */ @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) private Long roleId; - /** 角色名称 */ + /** + * 角色名称 + */ @Excel(name = "角色名称") private String roleName; - /** 角色权限 */ + /** + * 角色权限 + */ @Excel(name = "角色权限") private String roleKey; - /** 角色排序 */ + /** + * 角色排序 + */ @Excel(name = "角色排序") private Integer roleSort; - /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) + */ @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") private String dataScope; - /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + /** + * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) + */ private boolean menuCheckStrictly; - /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + /** + * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) + */ private boolean deptCheckStrictly; - /** 角色状态(0正常 1停用) */ + /** + * 角色状态(0正常 1停用) + */ @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") private String status; - /** 删除标志(0代表存在 2代表删除) */ + /** + * 删除标志(0代表存在 2代表删除) + */ private String delFlag; - /** 用户是否存在此角色标识 默认不存在 */ + /** + * 用户是否存在此角色标识 默认不存在 + */ private boolean flag = false; - /** 菜单组 */ + /** + * 菜单组 + */ private Long[] menuIds; - /** 部门组(数据权限) */ + /** + * 部门组(数据权限) + */ private Long[] deptIds; - /** 角色菜单权限 */ + /** + * 角色菜单权限 + */ private Set<String> permissions; - public SysRole() - { + public SysRole() { } - public SysRole(Long roleId) - { + public SysRole(Long roleId) { this.roleId = roleId; } - public Long getRoleId() - { + public static boolean isAdmin(Long roleId) { + return roleId != null && 1L == roleId; + } + + public Long getRoleId() { return roleId; } - public void setRoleId(Long roleId) - { + public void setRoleId(Long roleId) { this.roleId = roleId; } - public boolean isAdmin() - { + public boolean isAdmin() { return isAdmin(this.roleId); } - public static boolean isAdmin(Long roleId) - { - return roleId != null && 1L == roleId; - } - @NotBlank(message = "角色名称不能为空") @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") - public String getRoleName() - { + public String getRoleName() { return roleName; } - public void setRoleName(String roleName) - { + public void setRoleName(String roleName) { this.roleName = roleName; } @NotBlank(message = "权限字符不能为空") @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") - public String getRoleKey() - { + public String getRoleKey() { return roleKey; } - public void setRoleKey(String roleKey) - { + public void setRoleKey(String roleKey) { this.roleKey = roleKey; } @NotNull(message = "显示顺序不能为空") - public Integer getRoleSort() - { + public Integer getRoleSort() { return roleSort; } - public void setRoleSort(Integer roleSort) - { + public void setRoleSort(Integer roleSort) { this.roleSort = roleSort; } - public String getDataScope() - { + public String getDataScope() { return dataScope; } - public void setDataScope(String dataScope) - { + public void setDataScope(String dataScope) { this.dataScope = dataScope; } - public boolean isMenuCheckStrictly() - { + public boolean isMenuCheckStrictly() { return menuCheckStrictly; } - public void setMenuCheckStrictly(boolean menuCheckStrictly) - { + public void setMenuCheckStrictly(boolean menuCheckStrictly) { this.menuCheckStrictly = menuCheckStrictly; } - public boolean isDeptCheckStrictly() - { + public boolean isDeptCheckStrictly() { return deptCheckStrictly; } - public void setDeptCheckStrictly(boolean deptCheckStrictly) - { + public void setDeptCheckStrictly(boolean deptCheckStrictly) { this.deptCheckStrictly = deptCheckStrictly; } - public String getStatus() - { + public String getStatus() { return status; } - public void setStatus(String status) - { + public void setStatus(String status) { this.status = status; } - public String getDelFlag() - { + public String getDelFlag() { return delFlag; } - public void setDelFlag(String delFlag) - { + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } - public boolean isFlag() - { + public boolean isFlag() { return flag; } - public void setFlag(boolean flag) - { + public void setFlag(boolean flag) { this.flag = flag; } - public Long[] getMenuIds() - { + public Long[] getMenuIds() { return menuIds; } - public void setMenuIds(Long[] menuIds) - { + public void setMenuIds(Long[] menuIds) { this.menuIds = menuIds; } - public Long[] getDeptIds() - { + public Long[] getDeptIds() { return deptIds; } - public void setDeptIds(Long[] deptIds) - { + public void setDeptIds(Long[] deptIds) { this.deptIds = deptIds; } - public Set<String> getPermissions() - { + public Set<String> getPermissions() { return permissions; } - public void setPermissions(Set<String> permissions) - { + public void setPermissions(Set<String> permissions) { this.permissions = permissions; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("roleId", getRoleId()) - .append("roleName", getRoleName()) - .append("roleKey", getRoleKey()) - .append("roleSort", getRoleSort()) - .append("dataScope", getDataScope()) - .append("menuCheckStrictly", isMenuCheckStrictly()) - .append("deptCheckStrictly", isDeptCheckStrictly()) - .append("status", getStatus()) - .append("delFlag", getDelFlag()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 53ad695..ac171ed 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -1,324 +1,322 @@ package com.ruoyi.common.core.domain.entity; -import java.util.Date; -import java.util.List; -import javax.validation.constraints.*; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.annotation.Excel.Type; import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.xss.Xss; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; /** * 用户对象 sys_user - * + * * @author ruoyi */ -public class SysUser extends BaseEntity -{ +public class SysUser extends BaseEntity { private static final long serialVersionUID = 1L; - /** 用户ID */ + /** + * 用户ID + */ @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") private Long userId; - /** 部门ID */ + /** + * 部门ID + */ @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; - /** 用户账号 */ + /** + * 用户账号 + */ @Excel(name = "登录名称") private String userName; - /** 用户昵称 */ + /** + * 用户昵称 + */ @Excel(name = "用户名称") private String nickName; - /** 用户邮箱 */ + /** + * 用户邮箱 + */ @Excel(name = "用户邮箱") private String email; - /** 手机号码 */ + /** + * 手机号码 + */ @Excel(name = "手机号码") private String phonenumber; - /** 用户性别 */ + /** + * 用户性别 + */ @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") private String sex; - /** 用户头像 */ + /** + * 用户头像 + */ private String avatar; - /** 密码 */ + /** + * 密码 + */ private String password; - /** 帐号状态(0正常 1停用) */ + /** + * 帐号状态(0正常 1停用) + */ @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") private String status; - /** 删除标志(0代表存在 2代表删除) */ + /** + * 删除标志(0代表存在 2代表删除) + */ private String delFlag; - /** 最后登录IP */ + /** + * 最后登录IP + */ @Excel(name = "最后登录IP", type = Type.EXPORT) private String loginIp; - /** 最后登录时间 */ + /** + * 最后登录时间 + */ @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) private Date loginDate; - /** 部门对象 */ + /** + * 部门对象 + */ @Excels({ - @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), - @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) + @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) }) private SysDept dept; - /** 角色对象 */ + /** + * 角色对象 + */ private List<SysRole> roles; - /** 角色组 */ + /** + * 角色组 + */ private Long[] roleIds; - /** 岗位组 */ + /** + * 岗位组 + */ private Long[] postIds; - /** 角色ID */ + /** + * 角色ID + */ private Long roleId; - public SysUser() - { + public SysUser() { } - public SysUser(Long userId) - { + public SysUser(Long userId) { this.userId = userId; } - public Long getUserId() - { + public static boolean isAdmin(Long userId) { + return userId != null && 1L == userId; + } + + public Long getUserId() { return userId; } - public void setUserId(Long userId) - { + public void setUserId(Long userId) { this.userId = userId; } - public boolean isAdmin() - { + public boolean isAdmin() { return isAdmin(this.userId); } - public static boolean isAdmin(Long userId) - { - return userId != null && 1L == userId; - } - - public Long getDeptId() - { + public Long getDeptId() { return deptId; } - public void setDeptId(Long deptId) - { + public void setDeptId(Long deptId) { this.deptId = deptId; } @Xss(message = "用户昵称不能包含脚本字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") - public String getNickName() - { + public String getNickName() { return nickName; } - public void setNickName(String nickName) - { + public void setNickName(String nickName) { this.nickName = nickName; } @Xss(message = "用户账号不能包含脚本字符") @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") - public String getUserName() - { + public String getUserName() { return userName; } - public void setUserName(String userName) - { + public void setUserName(String userName) { this.userName = userName; } @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") - public String getEmail() - { + public String getEmail() { return email; } - public void setEmail(String email) - { + public void setEmail(String email) { this.email = email; } @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") - public String getPhonenumber() - { + public String getPhonenumber() { return phonenumber; } - public void setPhonenumber(String phonenumber) - { + public void setPhonenumber(String phonenumber) { this.phonenumber = phonenumber; } - public String getSex() - { + public String getSex() { return sex; } - public void setSex(String sex) - { + public void setSex(String sex) { this.sex = sex; } - public String getAvatar() - { + public String getAvatar() { return avatar; } - public void setAvatar(String avatar) - { + public void setAvatar(String avatar) { this.avatar = avatar; } - public String getPassword() - { + public String getPassword() { return password; } - public void setPassword(String password) - { + public void setPassword(String password) { this.password = password; } - public String getStatus() - { + public String getStatus() { return status; } - public void setStatus(String status) - { + public void setStatus(String status) { this.status = status; } - public String getDelFlag() - { + public String getDelFlag() { return delFlag; } - public void setDelFlag(String delFlag) - { + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } - public String getLoginIp() - { + public String getLoginIp() { return loginIp; } - public void setLoginIp(String loginIp) - { + public void setLoginIp(String loginIp) { this.loginIp = loginIp; } - public Date getLoginDate() - { + public Date getLoginDate() { return loginDate; } - public void setLoginDate(Date loginDate) - { + public void setLoginDate(Date loginDate) { this.loginDate = loginDate; } - public SysDept getDept() - { + public SysDept getDept() { return dept; } - public void setDept(SysDept dept) - { + public void setDept(SysDept dept) { this.dept = dept; } - public List<SysRole> getRoles() - { + public List<SysRole> getRoles() { return roles; } - public void setRoles(List<SysRole> roles) - { + public void setRoles(List<SysRole> roles) { this.roles = roles; } - public Long[] getRoleIds() - { + public Long[] getRoleIds() { return roleIds; } - public void setRoleIds(Long[] roleIds) - { + public void setRoleIds(Long[] roleIds) { this.roleIds = roleIds; } - public Long[] getPostIds() - { + public Long[] getPostIds() { return postIds; } - public void setPostIds(Long[] postIds) - { + public void setPostIds(Long[] postIds) { this.postIds = postIds; } - public Long getRoleId() - { + public Long getRoleId() { return roleId; } - public void setRoleId(Long roleId) - { + public void setRoleId(Long roleId) { this.roleId = roleId; } @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("userId", getUserId()) - .append("deptId", getDeptId()) - .append("userName", getUserName()) - .append("nickName", getNickName()) - .append("email", getEmail()) - .append("phonenumber", getPhonenumber()) - .append("sex", getSex()) - .append("avatar", getAvatar()) - .append("password", getPassword()) - .append("status", getStatus()) - .append("delFlag", getDelFlag()) - .append("loginIp", getLoginIp()) - .append("loginDate", getLoginDate()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .append("dept", getDept()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index ed4cbc9..0d63c12 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -1,5 +1,15 @@ package com.ruoyi.common.utils.file; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -9,56 +19,38 @@ import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ArrayUtils; -import com.ruoyi.common.config.RuoYiConfig; -import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.uuid.IdUtils; -import org.apache.commons.io.FilenameUtils; /** * 文件处理工具类 - * + * * @author ruoyi */ -public class FileUtils -{ +public class FileUtils { public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; /** * 输出指定文件的byte数组 - * + * * @param filePath 文件路径 - * @param os 输出流 + * @param os 输出流 * @return */ - public static void writeBytes(String filePath, OutputStream os) throws IOException - { + public static void writeBytes(String filePath, OutputStream os) throws IOException { FileInputStream fis = null; - try - { + try { File file = new File(filePath); - if (!file.exists()) - { + if (!file.exists()) { throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; - while ((length = fis.read(b)) > 0) - { + while ((length = fis.read(b)) > 0) { os.write(b, 0, length); } - } - catch (IOException e) - { + } catch (IOException e) { throw e; - } - finally - { + } finally { IOUtils.close(os); IOUtils.close(fis); } @@ -71,33 +63,28 @@ public class FileUtils * @return 目标文件 * @throws IOException IO异常 */ - public static String writeImportBytes(byte[] data) throws IOException - { + public static String writeImportBytes(byte[] data) throws IOException { return writeBytes(data, RuoYiConfig.getImportPath()); } /** * 写数据到文件中 * - * @param data 数据 + * @param data 数据 * @param uploadDir 目标文件 * @return 目标文件 * @throws IOException IO异常 */ - public static String writeBytes(byte[] data, String uploadDir) throws IOException - { + public static String writeBytes(byte[] data, String uploadDir) throws IOException { FileOutputStream fos = null; String pathName = ""; - try - { + try { String extension = getFileExtendName(data); pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); fos = new FileOutputStream(file); fos.write(data); - } - finally - { + } finally { IOUtils.close(fos); } return FileUploadUtils.getPathFileName(uploadDir, pathName); @@ -105,17 +92,15 @@ public class FileUtils /** * 删除文件 - * + * * @param filePath 文件 * @return */ - public static boolean deleteFile(String filePath) - { + public static boolean deleteFile(String filePath) { boolean flag = false; File file = new File(filePath); // 路径为文件且不为空则进行删除 - if (file.isFile() && file.exists()) - { + if (file.isFile() && file.exists()) { flag = file.delete(); } return flag; @@ -123,32 +108,28 @@ public class FileUtils /** * 文件名称验证 - * + * * @param filename 文件名称 * @return true 正常 false 非法 */ - public static boolean isValidFilename(String filename) - { + public static boolean isValidFilename(String filename) { return filename.matches(FILENAME_PATTERN); } /** * 检查文件是否可下载 - * + * * @param resource 需要下载的文件 * @return true 正常 false 非法 */ - public static boolean checkAllowDownload(String resource) - { + public static boolean checkAllowDownload(String resource) { // 禁止目录上跳级别 - if (StringUtils.contains(resource, "..")) - { + if (StringUtils.contains(resource, "..")) { return false; } // 检查允许下载的文件规则 - if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) - { + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) { return true; } @@ -158,33 +139,25 @@ public class FileUtils /** * 下载文件名重新编码 - * - * @param request 请求对象 + * + * @param request 请求对象 * @param fileName 文件名 * @return 编码后的文件名 */ - public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException - { + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; - if (agent.contains("MSIE")) - { + if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); - } - else if (agent.contains("Firefox")) - { + } else if (agent.contains("Firefox")) { // 火狐浏览器 filename = new String(fileName.getBytes(), "ISO8859-1"); - } - else if (agent.contains("Chrome")) - { + } else if (agent.contains("Chrome")) { // google浏览器 filename = URLEncoder.encode(filename, "utf-8"); - } - else - { + } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } @@ -194,11 +167,10 @@ public class FileUtils /** * 下载文件名重新编码 * - * @param response 响应对象 + * @param response 响应对象 * @param realFileName 真实文件名 */ - public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException - { + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { String percentEncodedFileName = percentEncode(realFileName); StringBuilder contentDispositionValue = new StringBuilder(); @@ -220,36 +192,27 @@ public class FileUtils * @param s 需要百分号编码的字符串 * @return 百分号编码后的字符串 */ - public static String percentEncode(String s) throws UnsupportedEncodingException - { + public static String percentEncode(String s) throws UnsupportedEncodingException { String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); return encode.replaceAll("\\+", "%20"); } /** * 获取图像后缀 - * + * * @param photoByte 图像数据 * @return 后缀名 */ - public static String getFileExtendName(byte[] photoByte) - { + public static String getFileExtendName(byte[] photoByte) { String strFileExtendName = "jpg"; if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) - && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) - { + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) { strFileExtendName = "gif"; - } - else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) - { + } else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) { strFileExtendName = "jpg"; - } - else if ((photoByte[0] == 66) && (photoByte[1] == 77)) - { + } else if ((photoByte[0] == 66) && (photoByte[1] == 77)) { strFileExtendName = "bmp"; - } - else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) - { + } else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) { strFileExtendName = "png"; } return strFileExtendName; @@ -257,14 +220,12 @@ public class FileUtils /** * 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png - * + * * @param fileName 路径名称 * @return 没有文件路径的名称 */ - public static String getName(String fileName) - { - if (fileName == null) - { + public static String getName(String fileName) { + if (fileName == null) { return null; } int lastUnixPos = fileName.lastIndexOf('/'); @@ -275,17 +236,64 @@ public class FileUtils /** * 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi - * + * * @param fileName 路径名称 * @return 没有文件路径和后缀的名称 */ - public static String getNameNotSuffix(String fileName) - { - if (fileName == null) - { + public static String getNameNotSuffix(String fileName) { + if (fileName == null) { return null; } - String baseName = FilenameUtils.getBaseName(fileName); - return baseName; + return FilenameUtils.getBaseName(fileName); + } + + /** + * 下载文件 + * + * @param response + * @param request + * @param filename + * @param fileData + * @return {@link boolean} + * @author emiya.xie + * @create 2023/8/31 10:49 + */ + public static boolean downloadFile(HttpServletResponse response, + HttpServletRequest request, String filename, byte[] fileData) { + try { + OutputStream myout = null; + // 检查时候获取到数据 + if (fileData == null) { + response.sendError(404); + return false; + } + try { + if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + filename = new String(filename.getBytes("GBK"), "iso-8859-1"); + } else { + filename = URLEncoder.encode(filename, "utf-8"); + } + response.setContentType("multipart/form-data"); + /*response.setContentType("multipart/form-data;charset=utf-8");*/ + response.setHeader("content-disposition", "attachment;filename=" + filename); + // 写明要下载的文件的大小 + response.setContentLength(fileData.length); + // 从response对象中得到输出流,准备下载 + myout = response.getOutputStream(); + myout.write(fileData); + myout.flush(); + } catch (Exception ignored) { + } finally { + if (myout != null) { + try { + myout.close(); + } catch (Exception ignored) { + } + } + } + } catch (IOException e) { + return false; + } + return true; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectExcelUtil.java index 6dea51e..43bb75a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectExcelUtil.java @@ -19,20 +19,55 @@ import com.ruoyi.common.utils.reflect.ReflectUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.reflect.FieldUtils; -import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFPictureData; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ooxml.POIXMLDocumentPart; -import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Name; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; @@ -40,7 +75,18 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -49,114 +95,238 @@ import java.util.stream.Collectors; * @author ruoyi */ public class ProjectExcelUtil<T> { - private static final Logger log = LoggerFactory.getLogger(ProjectExcelUtil.class); - public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; - public static final String[] FORMULA_STR = {"=", "-", "+", "@"}; - + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + private static final Logger log = LoggerFactory.getLogger(ProjectExcelUtil.class); + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); /** * 用于dictType属性数据存储,避免重复查缓存 */ public Map<String, String> sysDictMap = new HashMap<String, String>(); - /** - * Excel sheet最大行数,默认65536 + * 实体对象 */ - public static final int sheetSize = 65536; - + public Class<T> clazz; + /** + * 需要排除列属性 + */ + public String[] excludeFields; /** * 工作表名称 */ private String sheetName; - /** * 导出类型(EXPORT:导出数据;IMPORT:导入模板) */ private Type type; - /** * 工作薄对象 */ private Workbook wb; - /** * 工作表对象 */ private Sheet sheet; - /** * 样式列表 */ private Map<String, CellStyle> styles; - /** * 导入导出数据列表 */ private List<T> list; - /** * 注解列表 */ private List<Object[]> fields; - /** * 当前行号 */ private int rownum; - /** * 标题 */ private String title; - /** * 最大高度 */ private short maxHeight; - /** * 合并后最后行数 */ private int subMergedLastRowNum = 0; - /** * 合并后开始行数 */ private int subMergedFirstRowNum = 1; - /** * 对象的子列表方法 */ private Method subMethod; - /** * 对象的子列表属性 */ private List<Field> subFields; - /** * 统计列表 */ private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); + public ProjectExcelUtil(Class<T> clazz) { + this.clazz = clazz; + } + /** - * 数字格式 + * 获取画布 */ - private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + public static Drawing<?> getDrawingPatriarch(Sheet sheet) { + if (sheet.getDrawingPatriarch() == null) { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } /** - * 实体对象 + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 */ - public Class<T> clazz; + public static String convertByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[0].equals(value)) { + propertyString.append(itemArray[1] + separator); + break; + } + } + } else { + if (itemArray[0].equals(propertyValue)) { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } /** - * 需要排除列属性 + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 */ - public String[] excludeFields; + public static String reverseByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[1].equals(value)) { + propertyString.append(itemArray[0] + separator); + break; + } + } + } else { + if (itemArray[1].equals(propertyValue)) { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } - public ProjectExcelUtil(Class<T> clazz) { - this.clazz = clazz; + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 获取Excel2003图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) { + Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); + List<HSSFPictureData> pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } else { + return sheetIndexPicMap; + } + } + + /** + * 获取Excel2007图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) { + Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); + for (POIXMLDocumentPart dr : sheet.getRelations()) { + if (dr instanceof XSSFDrawing) { + XSSFDrawing drawing = (XSSFDrawing) dr; + List<XSSFShape> shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) { + if (shape instanceof XSSFPicture) { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; } /** @@ -388,7 +558,7 @@ public class ProjectExcelUtil<T> { ReflectUtils.invokeSetter(entity, "status", 5); cellMap.entrySet().removeIf(entry -> hasStr.contains(entry.getKey())); StringBuilder str = new StringBuilder(); - Map<String,String> sortHash = new HashMap<>(); + Map<String, String> sortHash = new HashMap<>(); str.append("{"); for (Map.Entry<String, Integer> entry : cellMap.entrySet()) { String key1 = entry.getKey(); @@ -430,7 +600,6 @@ public class ProjectExcelUtil<T> { return list; } - /** * 对list数据源将其里面的数据导入到excel表单 * @@ -827,16 +996,6 @@ public class ProjectExcelUtil<T> { } } - /** - * 获取画布 - */ - public static Drawing<?> getDrawingPatriarch(Sheet sheet) { - if (sheet.getDrawingPatriarch() == null) { - sheet.createDrawingPatriarch(); - } - return sheet.getDrawingPatriarch(); - } - /** * 获取图片类型,设置图片插入类型 */ @@ -999,88 +1158,6 @@ public class ProjectExcelUtil<T> { wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); } - /** - * 解析导出值 0=男,1=女,2=未知 - * - * @param propertyValue 参数值 - * @param converterExp 翻译注解 - * @param separator 分隔符 - * @return 解析后值 - */ - public static String convertByExp(String propertyValue, String converterExp, String separator) { - StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); - for (String item : convertSource) { - String[] itemArray = item.split("="); - if (StringUtils.containsAny(propertyValue, separator)) { - for (String value : propertyValue.split(separator)) { - if (itemArray[0].equals(value)) { - propertyString.append(itemArray[1] + separator); - break; - } - } - } else { - if (itemArray[0].equals(propertyValue)) { - return itemArray[1]; - } - } - } - return StringUtils.stripEnd(propertyString.toString(), separator); - } - - /** - * 反向解析值 男=0,女=1,未知=2 - * - * @param propertyValue 参数值 - * @param converterExp 翻译注解 - * @param separator 分隔符 - * @return 解析后值 - */ - public static String reverseByExp(String propertyValue, String converterExp, String separator) { - StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); - for (String item : convertSource) { - String[] itemArray = item.split("="); - if (StringUtils.containsAny(propertyValue, separator)) { - for (String value : propertyValue.split(separator)) { - if (itemArray[1].equals(value)) { - propertyString.append(itemArray[0] + separator); - break; - } - } - } else { - if (itemArray[1].equals(propertyValue)) { - return itemArray[0]; - } - } - } - return StringUtils.stripEnd(propertyString.toString(), separator); - } - - /** - * 解析字典值 - * - * @param dictValue 字典值 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典标签 - */ - public static String convertDictByExp(String dictValue, String dictType, String separator) { - return DictUtils.getDictLabel(dictType, dictValue, separator); - } - - /** - * 反向解析值字典值 - * - * @param dictLabel 字典标签 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典值 - */ - public static String reverseDictByExp(String dictLabel, String dictType, String separator) { - return DictUtils.getDictValue(dictType, dictLabel, separator); - } - /** * 数据处理器 * @@ -1349,60 +1426,6 @@ public class ProjectExcelUtil<T> { return true; } - /** - * 获取Excel2003图片 - * - * @param sheet 当前sheet对象 - * @param workbook 工作簿对象 - * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData - */ - public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) { - Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); - List<HSSFPictureData> pictures = workbook.getAllPictures(); - if (!pictures.isEmpty()) { - for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { - HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); - if (shape instanceof HSSFPicture) { - HSSFPicture pic = (HSSFPicture) shape; - int pictureIndex = pic.getPictureIndex() - 1; - HSSFPictureData picData = pictures.get(pictureIndex); - String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); - sheetIndexPicMap.put(picIndex, picData); - } - } - return sheetIndexPicMap; - } else { - return sheetIndexPicMap; - } - } - - /** - * 获取Excel2007图片 - * - * @param sheet 当前sheet对象 - * @param workbook 工作簿对象 - * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData - */ - public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) { - Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); - for (POIXMLDocumentPart dr : sheet.getRelations()) { - if (dr instanceof XSSFDrawing) { - XSSFDrawing drawing = (XSSFDrawing) dr; - List<XSSFShape> shapes = drawing.getShapes(); - for (XSSFShape shape : shapes) { - if (shape instanceof XSSFPicture) { - XSSFPicture pic = (XSSFPicture) shape; - XSSFClientAnchor anchor = pic.getPreferredSize(); - CTMarker ctMarker = anchor.getFrom(); - String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); - sheetIndexPicMap.put(picIndex, pic.getPictureData()); - } - } - } - } - return sheetIndexPicMap; - } - /** * 格式化不同类型的日期对象 * diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectValueUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectValueUtil.java index 40f494b..b798d82 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectValueUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ProjectValueUtil.java @@ -7,7 +7,6 @@ import com.ruoyi.common.annotation.Excels; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.text.Convert; -import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.UtilException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DictUtils; @@ -19,20 +18,55 @@ import com.ruoyi.common.utils.reflect.ReflectUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.reflect.FieldUtils; -import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.hssf.usermodel.HSSFClientAnchor; +import org.apache.poi.hssf.usermodel.HSSFPicture; +import org.apache.poi.hssf.usermodel.HSSFPictureData; +import org.apache.poi.hssf.usermodel.HSSFShape; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ooxml.POIXMLDocumentPart; -import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.usermodel.BorderStyle; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.ClientAnchor; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.usermodel.DataValidationHelper; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.FillPatternType; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.Name; +import org.apache.poi.ss.usermodel.PictureData; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.VerticalAlignment; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFPicture; +import org.apache.poi.xssf.usermodel.XSSFShape; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; @@ -40,7 +74,18 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -49,114 +94,238 @@ import java.util.stream.Collectors; * @author ruoyi */ public class ProjectValueUtil<T> { - private static final Logger log = LoggerFactory.getLogger(ProjectValueUtil.class); - public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; - public static final String[] FORMULA_STR = {"=", "-", "+", "@"}; - + /** + * Excel sheet最大行数,默认65536 + */ + public static final int sheetSize = 65536; + private static final Logger log = LoggerFactory.getLogger(ProjectValueUtil.class); + /** + * 数字格式 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); /** * 用于dictType属性数据存储,避免重复查缓存 */ public Map<String, String> sysDictMap = new HashMap<String, String>(); - /** - * Excel sheet最大行数,默认65536 + * 实体对象 */ - public static final int sheetSize = 65536; - + public Class<T> clazz; + /** + * 需要排除列属性 + */ + public String[] excludeFields; /** * 工作表名称 */ private String sheetName; - /** * 导出类型(EXPORT:导出数据;IMPORT:导入模板) */ private Type type; - /** * 工作薄对象 */ private Workbook wb; - /** * 工作表对象 */ private Sheet sheet; - /** * 样式列表 */ private Map<String, CellStyle> styles; - /** * 导入导出数据列表 */ private List<T> list; - /** * 注解列表 */ private List<Object[]> fields; - /** * 当前行号 */ private int rownum; - /** * 标题 */ private String title; - /** * 最大高度 */ private short maxHeight; - /** * 合并后最后行数 */ private int subMergedLastRowNum = 0; - /** * 合并后开始行数 */ private int subMergedFirstRowNum = 1; - /** * 对象的子列表方法 */ private Method subMethod; - /** * 对象的子列表属性 */ private List<Field> subFields; - /** * 统计列表 */ private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); + public ProjectValueUtil(Class<T> clazz) { + this.clazz = clazz; + } + /** - * 数字格式 + * 获取画布 */ - private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + public static Drawing<?> getDrawingPatriarch(Sheet sheet) { + if (sheet.getDrawingPatriarch() == null) { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } /** - * 实体对象 + * 解析导出值 0=男,1=女,2=未知 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 */ - public Class<T> clazz; + public static String convertByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[0].equals(value)) { + propertyString.append(itemArray[1] + separator); + break; + } + } + } else { + if (itemArray[0].equals(propertyValue)) { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } /** - * 需要排除列属性 + * 反向解析值 男=0,女=1,未知=2 + * + * @param propertyValue 参数值 + * @param converterExp 翻译注解 + * @param separator 分隔符 + * @return 解析后值 */ - public String[] excludeFields; + public static String reverseByExp(String propertyValue, String converterExp, String separator) { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) { + for (String value : propertyValue.split(separator)) { + if (itemArray[1].equals(value)) { + propertyString.append(itemArray[0] + separator); + break; + } + } + } else { + if (itemArray[1].equals(propertyValue)) { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } - public ProjectValueUtil(Class<T> clazz) { - this.clazz = clazz; + /** + * 解析字典值 + * + * @param dictValue 字典值 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典标签 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 反向解析值字典值 + * + * @param dictLabel 字典标签 + * @param dictType 字典类型 + * @param separator 分隔符 + * @return 字典值 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 获取Excel2003图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) { + Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); + List<HSSFPictureData> pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } else { + return sheetIndexPicMap; + } + } + + /** + * 获取Excel2007图片 + * + * @param sheet 当前sheet对象 + * @param workbook 工作簿对象 + * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData + */ + public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) { + Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); + for (POIXMLDocumentPart dr : sheet.getRelations()) { + if (dr instanceof XSSFDrawing) { + XSSFDrawing drawing = (XSSFDrawing) dr; + List<XSSFShape> shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) { + if (shape instanceof XSSFPicture) { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; } /** @@ -234,10 +403,10 @@ public class ProjectValueUtil<T> { * @param is 输入流 * @return 转换后集合 */ - public List<T> importExcel(InputStream is,String projectClassify) { + public List<T> importExcel(InputStream is, String projectClassify) { List<T> list = null; try { - list = importExcel(is, 0,projectClassify); + list = importExcel(is, 0, projectClassify); } catch (Exception e) { log.error("导入Excel异常{}", e.getMessage()); throw new UtilException(e.getMessage()); @@ -254,8 +423,8 @@ public class ProjectValueUtil<T> { * @param titleNum 标题占用行数 * @return 转换后集合 */ - public List<T> importExcel(InputStream is, int titleNum,String projectClassify) throws Exception { - return importExcel(StringUtils.EMPTY, is, titleNum,projectClassify); + public List<T> importExcel(InputStream is, int titleNum, String projectClassify) throws Exception { + return importExcel(StringUtils.EMPTY, is, titleNum, projectClassify); } /** @@ -266,7 +435,7 @@ public class ProjectValueUtil<T> { * @param is 输入流 * @return 转换后集合 */ - public List<T> importExcel(String sheetName, InputStream is, int titleNum,String projectClassify) throws Exception { + public List<T> importExcel(String sheetName, InputStream is, int titleNum, String projectClassify) throws Exception { this.type = Type.IMPORT; this.wb = WorkbookFactory.create(is); List<T> list = new ArrayList<T>(); @@ -386,7 +555,7 @@ public class ProjectValueUtil<T> { ReflectUtils.invokeSetter(entity, "status", 5); cellMap.entrySet().removeIf(entry -> hasStr.contains(entry.getKey())); StringBuilder str = new StringBuilder(); - Map<String,String> sortHash = new HashMap<>(); + Map<String, String> sortHash = new HashMap<>(); str.append("{"); for (Map.Entry<String, Integer> entry : cellMap.entrySet()) { String key1 = entry.getKey(); @@ -428,7 +597,6 @@ public class ProjectValueUtil<T> { return list; } - /** * 对list数据源将其里面的数据导入到excel表单 * @@ -825,16 +993,6 @@ public class ProjectValueUtil<T> { } } - /** - * 获取画布 - */ - public static Drawing<?> getDrawingPatriarch(Sheet sheet) { - if (sheet.getDrawingPatriarch() == null) { - sheet.createDrawingPatriarch(); - } - return sheet.getDrawingPatriarch(); - } - /** * 获取图片类型,设置图片插入类型 */ @@ -997,88 +1155,6 @@ public class ProjectValueUtil<T> { wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); } - /** - * 解析导出值 0=男,1=女,2=未知 - * - * @param propertyValue 参数值 - * @param converterExp 翻译注解 - * @param separator 分隔符 - * @return 解析后值 - */ - public static String convertByExp(String propertyValue, String converterExp, String separator) { - StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); - for (String item : convertSource) { - String[] itemArray = item.split("="); - if (StringUtils.containsAny(propertyValue, separator)) { - for (String value : propertyValue.split(separator)) { - if (itemArray[0].equals(value)) { - propertyString.append(itemArray[1] + separator); - break; - } - } - } else { - if (itemArray[0].equals(propertyValue)) { - return itemArray[1]; - } - } - } - return StringUtils.stripEnd(propertyString.toString(), separator); - } - - /** - * 反向解析值 男=0,女=1,未知=2 - * - * @param propertyValue 参数值 - * @param converterExp 翻译注解 - * @param separator 分隔符 - * @return 解析后值 - */ - public static String reverseByExp(String propertyValue, String converterExp, String separator) { - StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); - for (String item : convertSource) { - String[] itemArray = item.split("="); - if (StringUtils.containsAny(propertyValue, separator)) { - for (String value : propertyValue.split(separator)) { - if (itemArray[1].equals(value)) { - propertyString.append(itemArray[0] + separator); - break; - } - } - } else { - if (itemArray[1].equals(propertyValue)) { - return itemArray[0]; - } - } - } - return StringUtils.stripEnd(propertyString.toString(), separator); - } - - /** - * 解析字典值 - * - * @param dictValue 字典值 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典标签 - */ - public static String convertDictByExp(String dictValue, String dictType, String separator) { - return DictUtils.getDictLabel(dictType, dictValue, separator); - } - - /** - * 反向解析值字典值 - * - * @param dictLabel 字典标签 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典值 - */ - public static String reverseDictByExp(String dictLabel, String dictType, String separator) { - return DictUtils.getDictValue(dictType, dictLabel, separator); - } - /** * 数据处理器 * @@ -1347,60 +1423,6 @@ public class ProjectValueUtil<T> { return true; } - /** - * 获取Excel2003图片 - * - * @param sheet 当前sheet对象 - * @param workbook 工作簿对象 - * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData - */ - public static Map<String, PictureData> getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) { - Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); - List<HSSFPictureData> pictures = workbook.getAllPictures(); - if (!pictures.isEmpty()) { - for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) { - HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); - if (shape instanceof HSSFPicture) { - HSSFPicture pic = (HSSFPicture) shape; - int pictureIndex = pic.getPictureIndex() - 1; - HSSFPictureData picData = pictures.get(pictureIndex); - String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); - sheetIndexPicMap.put(picIndex, picData); - } - } - return sheetIndexPicMap; - } else { - return sheetIndexPicMap; - } - } - - /** - * 获取Excel2007图片 - * - * @param sheet 当前sheet对象 - * @param workbook 工作簿对象 - * @return Map key:图片单元格索引(1_1)String,value:图片流PictureData - */ - public static Map<String, PictureData> getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) { - Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>(); - for (POIXMLDocumentPart dr : sheet.getRelations()) { - if (dr instanceof XSSFDrawing) { - XSSFDrawing drawing = (XSSFDrawing) dr; - List<XSSFShape> shapes = drawing.getShapes(); - for (XSSFShape shape : shapes) { - if (shape instanceof XSSFPicture) { - XSSFPicture pic = (XSSFPicture) shape; - XSSFClientAnchor anchor = pic.getPreferredSize(); - CTMarker ctMarker = anchor.getFrom(); - String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); - sheetIndexPicMap.put(picIndex, pic.getPictureData()); - } - } - } - } - return sheetIndexPicMap; - } - /** * 格式化不同类型的日期对象 * diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java index 43e78ae..f748af7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java @@ -1,23 +1,36 @@ package com.ruoyi.framework.config; -import java.util.Properties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; -import static com.google.code.kaptcha.Constants.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +import static com.google.code.kaptcha.Constants.KAPTCHA_BORDER; +import static com.google.code.kaptcha.Constants.KAPTCHA_BORDER_COLOR; +import static com.google.code.kaptcha.Constants.KAPTCHA_IMAGE_HEIGHT; +import static com.google.code.kaptcha.Constants.KAPTCHA_IMAGE_WIDTH; +import static com.google.code.kaptcha.Constants.KAPTCHA_NOISE_COLOR; +import static com.google.code.kaptcha.Constants.KAPTCHA_NOISE_IMPL; +import static com.google.code.kaptcha.Constants.KAPTCHA_OBSCURIFICATOR_IMPL; +import static com.google.code.kaptcha.Constants.KAPTCHA_SESSION_CONFIG_KEY; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE; +import static com.google.code.kaptcha.Constants.KAPTCHA_TEXTPRODUCER_IMPL; /** * 验证码配置 - * + * * @author ruoyi */ @Configuration -public class CaptchaConfig -{ +public class CaptchaConfig { @Bean(name = "captchaProducer") - public DefaultKaptcha getKaptchaBean() - { + public DefaultKaptcha getKaptchaBean() { DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); Properties properties = new Properties(); // 是否有边框 默认为true 我们可以自己设置yes,no @@ -44,8 +57,7 @@ public class CaptchaConfig } @Bean(name = "captchaProducerMath") - public DefaultKaptcha getKaptchaBeanMath() - { + public DefaultKaptcha getKaptchaBeanMath() { DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); Properties properties = new Properties(); // 是否有边框 默认为true 我们可以自己设置yes,no diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index c54678c..21861e8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -1,111 +1,111 @@ package com.ruoyi.system.domain; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; /** * 参数配置表 sys_config - * + * * @author ruoyi */ -public class SysConfig extends BaseEntity -{ +public class SysConfig extends BaseEntity { private static final long serialVersionUID = 1L; - /** 参数主键 */ + /** + * 参数主键 + */ @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) private Long configId; - /** 参数名称 */ + /** + * 参数名称 + */ @Excel(name = "参数名称") private String configName; - /** 参数键名 */ + /** + * 参数键名 + */ @Excel(name = "参数键名") private String configKey; - /** 参数键值 */ + /** + * 参数键值 + */ @Excel(name = "参数键值") private String configValue; - /** 系统内置(Y是 N否) */ + /** + * 系统内置(Y是 N否) + */ @Excel(name = "系统内置", readConverterExp = "Y=是,N=否") private String configType; - public Long getConfigId() - { + public Long getConfigId() { return configId; } - public void setConfigId(Long configId) - { + public void setConfigId(Long configId) { this.configId = configId; } @NotBlank(message = "参数名称不能为空") @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") - public String getConfigName() - { + public String getConfigName() { return configName; } - public void setConfigName(String configName) - { + public void setConfigName(String configName) { this.configName = configName; } @NotBlank(message = "参数键名长度不能为空") @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") - public String getConfigKey() - { + public String getConfigKey() { return configKey; } - public void setConfigKey(String configKey) - { + public void setConfigKey(String configKey) { this.configKey = configKey; } @NotBlank(message = "参数键值不能为空") @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") - public String getConfigValue() - { + public String getConfigValue() { return configValue; } - public void setConfigValue(String configValue) - { + public void setConfigValue(String configValue) { this.configValue = configValue; } - public String getConfigType() - { + public String getConfigType() { return configType; } - public void setConfigType(String configType) - { + public void setConfigType(String configType) { this.configType = configType; } - + @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("configId", getConfigId()) - .append("configName", getConfigName()) - .append("configKey", getConfigKey()) - .append("configValue", getConfigValue()) - .append("configType", getConfigType()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .toString(); + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index 7fdea30..0265f5d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -1,144 +1,144 @@ package com.ruoyi.system.domain; -import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel.ColumnType; import com.ruoyi.common.core.domain.BaseEntity; +import java.util.Date; + /** * 系统访问记录表 sys_logininfor - * + * * @author ruoyi */ -public class SysLogininfor extends BaseEntity -{ +public class SysLogininfor extends BaseEntity { private static final long serialVersionUID = 1L; - /** ID */ + /** + * ID + */ @Excel(name = "序号", cellType = ColumnType.NUMERIC) private Long infoId; - /** 用户账号 */ + /** + * 用户账号 + */ @Excel(name = "用户账号") private String userName; - /** 登录状态 0成功 1失败 */ + /** + * 登录状态 0成功 1失败 + */ @Excel(name = "登录状态", readConverterExp = "0=成功,1=失败") private String status; - /** 登录IP地址 */ + /** + * 登录IP地址 + */ @Excel(name = "登录地址") private String ipaddr; - /** 登录地点 */ + /** + * 登录地点 + */ @Excel(name = "登录地点") private String loginLocation; - /** 浏览器类型 */ + /** + * 浏览器类型 + */ @Excel(name = "浏览器") private String browser; - /** 操作系统 */ + /** + * 操作系统 + */ @Excel(name = "操作系统") private String os; - /** 提示消息 */ + /** + * 提示消息 + */ @Excel(name = "提示消息") private String msg; - /** 访问时间 */ + /** + * 访问时间 + */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date loginTime; - public Long getInfoId() - { + public Long getInfoId() { return infoId; } - public void setInfoId(Long infoId) - { + public void setInfoId(Long infoId) { this.infoId = infoId; } - public String getUserName() - { + public String getUserName() { return userName; } - public void setUserName(String userName) - { + public void setUserName(String userName) { this.userName = userName; } - public String getStatus() - { + public String getStatus() { return status; } - public void setStatus(String status) - { + public void setStatus(String status) { this.status = status; } - public String getIpaddr() - { + public String getIpaddr() { return ipaddr; } - public void setIpaddr(String ipaddr) - { + public void setIpaddr(String ipaddr) { this.ipaddr = ipaddr; } - public String getLoginLocation() - { + public String getLoginLocation() { return loginLocation; } - public void setLoginLocation(String loginLocation) - { + public void setLoginLocation(String loginLocation) { this.loginLocation = loginLocation; } - public String getBrowser() - { + public String getBrowser() { return browser; } - public void setBrowser(String browser) - { + public void setBrowser(String browser) { this.browser = browser; } - public String getOs() - { + public String getOs() { return os; } - public void setOs(String os) - { + public void setOs(String os) { this.os = os; } - public String getMsg() - { + public String getMsg() { return msg; } - public void setMsg(String msg) - { + public void setMsg(String msg) { this.msg = msg; } - public Date getLoginTime() - { + public Date getLoginTime() { return loginTime; } - public void setLoginTime(Date loginTime) - { + public void setLoginTime(Date loginTime) { this.loginTime = loginTime; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java index afff8c9..11f5071 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java @@ -1,16 +1,16 @@ package com.ruoyi.system.domain.vo; import com.fasterxml.jackson.annotation.JsonInclude; + import java.util.List; /** * 路由配置信息 - * + * * @author ruoyi */ @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class RouterVo -{ +public class RouterVo { /** * 路由名字 */ @@ -56,93 +56,75 @@ public class RouterVo */ private List<RouterVo> children; - public String getName() - { + public String getName() { return name; } - public void setName(String name) - { + public void setName(String name) { this.name = name; } - public String getPath() - { + public String getPath() { return path; } - public void setPath(String path) - { + public void setPath(String path) { this.path = path; } - public boolean getHidden() - { + public boolean getHidden() { return hidden; } - public void setHidden(boolean hidden) - { + public void setHidden(boolean hidden) { this.hidden = hidden; } - public String getRedirect() - { + public String getRedirect() { return redirect; } - public void setRedirect(String redirect) - { + public void setRedirect(String redirect) { this.redirect = redirect; } - public String getComponent() - { + public String getComponent() { return component; } - public void setComponent(String component) - { + public void setComponent(String component) { this.component = component; } - public String getQuery() - { + public String getQuery() { return query; } - public void setQuery(String query) - { + public void setQuery(String query) { this.query = query; } - public Boolean getAlwaysShow() - { + public Boolean getAlwaysShow() { return alwaysShow; } - public void setAlwaysShow(Boolean alwaysShow) - { + public void setAlwaysShow(Boolean alwaysShow) { this.alwaysShow = alwaysShow; } - public MetaVo getMeta() - { + public MetaVo getMeta() { return meta; } - public void setMeta(MetaVo meta) - { + public void setMeta(MetaVo meta) { this.meta = meta; } - public List<RouterVo> getChildren() - { + public List<RouterVo> getChildren() { return children; } - public void setChildren(List<RouterVo> children) - { + public void setChildren(List<RouterVo> children) { this.children = children; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java index 13d49d6..091b20f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -1,18 +1,18 @@ package com.ruoyi.system.mapper; -import java.util.List; import com.ruoyi.system.domain.SysConfig; +import java.util.List; + /** * 参数配置 数据层 - * + * * @author ruoyi */ -public interface SysConfigMapper -{ +public interface SysConfigMapper { /** * 查询参数配置信息 - * + * * @param config 参数配置信息 * @return 参数配置信息 */ @@ -20,7 +20,7 @@ public interface SysConfigMapper /** * 通过ID查询配置 - * + * * @param configId 参数ID * @return 参数配置信息 */ @@ -28,7 +28,7 @@ public interface SysConfigMapper /** * 查询参数配置列表 - * + * * @param config 参数配置信息 * @return 参数配置集合 */ @@ -36,7 +36,7 @@ public interface SysConfigMapper /** * 根据键名查询参数配置信息 - * + * * @param configKey 参数键名 * @return 参数配置信息 */ @@ -44,7 +44,7 @@ public interface SysConfigMapper /** * 新增参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ @@ -52,7 +52,7 @@ public interface SysConfigMapper /** * 修改参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ @@ -60,7 +60,7 @@ public interface SysConfigMapper /** * 删除参数配置 - * + * * @param configId 参数ID * @return 结果 */ @@ -68,7 +68,7 @@ public interface SysConfigMapper /** * 批量删除参数信息 - * + * * @param configIds 需要删除的参数ID * @return 结果 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index 7d60696..be117a6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -1,21 +1,21 @@ package com.ruoyi.system.service; -import java.util.List; -import java.util.Set; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.domain.vo.RouterVo; +import java.util.List; +import java.util.Set; + /** * 菜单 业务层 - * + * * @author ruoyi */ -public interface ISysMenuService -{ +public interface ISysMenuService { /** * 根据用户查询系统菜单列表 - * + * * @param userId 用户ID * @return 菜单列表 */ @@ -23,8 +23,8 @@ public interface ISysMenuService /** * 根据用户查询系统菜单列表 - * - * @param menu 菜单信息 + * + * @param menu 菜单信息 * @param userId 用户ID * @return 菜单列表 */ @@ -32,7 +32,7 @@ public interface ISysMenuService /** * 根据用户ID查询权限 - * + * * @param userId 用户ID * @return 权限列表 */ @@ -40,7 +40,7 @@ public interface ISysMenuService /** * 根据角色ID查询权限 - * + * * @param roleId 角色ID * @return 权限列表 */ @@ -48,7 +48,7 @@ public interface ISysMenuService /** * 根据用户ID查询菜单树信息 - * + * * @param userId 用户ID * @return 菜单列表 */ @@ -56,7 +56,7 @@ public interface ISysMenuService /** * 根据角色ID查询菜单树信息 - * + * * @param roleId 角色ID * @return 选中菜单列表 */ @@ -64,7 +64,7 @@ public interface ISysMenuService /** * 构建前端路由所需要的菜单 - * + * * @param menus 菜单列表 * @return 路由列表 */ @@ -72,7 +72,7 @@ public interface ISysMenuService /** * 构建前端所需要树结构 - * + * * @param menus 菜单列表 * @return 树结构列表 */ @@ -80,7 +80,7 @@ public interface ISysMenuService /** * 构建前端所需要下拉树结构 - * + * * @param menus 菜单列表 * @return 下拉树结构列表 */ @@ -88,7 +88,7 @@ public interface ISysMenuService /** * 根据菜单ID查询信息 - * + * * @param menuId 菜单ID * @return 菜单信息 */ @@ -96,7 +96,7 @@ public interface ISysMenuService /** * 是否存在菜单子节点 - * + * * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ @@ -104,7 +104,7 @@ public interface ISysMenuService /** * 查询菜单是否存在角色 - * + * * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ @@ -112,7 +112,7 @@ public interface ISysMenuService /** * 新增保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -120,7 +120,7 @@ public interface ISysMenuService /** * 修改保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -128,7 +128,7 @@ public interface ISysMenuService /** * 删除菜单管理信息 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -136,7 +136,7 @@ public interface ISysMenuService /** * 校验菜单名称是否唯一 - * + * * @param menu 菜单信息 * @return 结果 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 4d29b22..a7bb482 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -1,10 +1,5 @@ package com.ruoyi.system.service.impl; -import java.util.Collection; -import java.util.List; -import javax.annotation.PostConstruct; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.UserConstants; @@ -16,15 +11,20 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Collection; +import java.util.List; /** * 参数配置 服务层实现 - * + * * @author ruoyi */ @Service -public class SysConfigServiceImpl implements ISysConfigService -{ +public class SysConfigServiceImpl implements ISysConfigService { @Autowired private SysConfigMapper configMapper; @@ -35,21 +35,19 @@ public class SysConfigServiceImpl implements ISysConfigService * 项目启动时,初始化参数到缓存 */ @PostConstruct - public void init() - { + public void init() { loadingConfigCache(); } /** * 查询参数配置信息 - * + * * @param configId 参数配置ID * @return 参数配置信息 */ @Override @DataSource(DataSourceType.MASTER) - public SysConfig selectConfigById(Long configId) - { + public SysConfig selectConfigById(Long configId) { SysConfig config = new SysConfig(); config.setConfigId(configId); return configMapper.selectConfig(config); @@ -57,23 +55,20 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 根据键名查询参数配置信息 - * + * * @param configKey 参数key * @return 参数键值 */ @Override - public String selectConfigByKey(String configKey) - { + public String selectConfigByKey(String configKey) { String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey))); - if (StringUtils.isNotEmpty(configValue)) - { + if (StringUtils.isNotEmpty(configValue)) { return configValue; } SysConfig config = new SysConfig(); config.setConfigKey(configKey); SysConfig retConfig = configMapper.selectConfig(config); - if (StringUtils.isNotNull(retConfig)) - { + if (StringUtils.isNotNull(retConfig)) { redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); return retConfig.getConfigValue(); } @@ -82,15 +77,13 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 获取验证码开关 - * + * * @return true开启,false关闭 */ @Override - public boolean selectCaptchaEnabled() - { + public boolean selectCaptchaEnabled() { String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled"); - if (StringUtils.isEmpty(captchaEnabled)) - { + if (StringUtils.isEmpty(captchaEnabled)) { return true; } return Convert.toBool(captchaEnabled); @@ -98,28 +91,25 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 查询参数配置列表 - * + * * @param config 参数配置信息 * @return 参数配置集合 */ @Override - public List<SysConfig> selectConfigList(SysConfig config) - { + public List<SysConfig> selectConfigList(SysConfig config) { return configMapper.selectConfigList(config); } /** * 新增参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ @Override - public int insertConfig(SysConfig config) - { + public int insertConfig(SysConfig config) { int row = configMapper.insertConfig(config); - if (row > 0) - { + if (row > 0) { redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); } return row; @@ -127,22 +117,19 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 修改参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ @Override - public int updateConfig(SysConfig config) - { + public int updateConfig(SysConfig config) { SysConfig temp = configMapper.selectConfigById(config.getConfigId()); - if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey())) - { + if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey())) { redisCache.deleteObject(getCacheKey(temp.getConfigKey())); } int row = configMapper.updateConfig(config); - if (row > 0) - { + if (row > 0) { redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); } return row; @@ -150,17 +137,14 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 批量删除参数信息 - * + * * @param configIds 需要删除的参数ID */ @Override - public void deleteConfigByIds(Long[] configIds) - { - for (Long configId : configIds) - { + public void deleteConfigByIds(Long[] configIds) { + for (Long configId : configIds) { SysConfig config = selectConfigById(configId); - if (StringUtils.equals(UserConstants.YES, config.getConfigType())) - { + if (StringUtils.equals(UserConstants.YES, config.getConfigType())) { throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); } configMapper.deleteConfigById(configId); @@ -172,11 +156,9 @@ public class SysConfigServiceImpl implements ISysConfigService * 加载参数缓存数据 */ @Override - public void loadingConfigCache() - { + public void loadingConfigCache() { List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig()); - for (SysConfig config : configsList) - { + for (SysConfig config : configsList) { redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); } } @@ -185,8 +167,7 @@ public class SysConfigServiceImpl implements ISysConfigService * 清空参数缓存数据 */ @Override - public void clearConfigCache() - { + public void clearConfigCache() { Collection<String> keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*"); redisCache.deleteObject(keys); } @@ -195,25 +176,22 @@ public class SysConfigServiceImpl implements ISysConfigService * 重置参数缓存数据 */ @Override - public void resetConfigCache() - { + public void resetConfigCache() { clearConfigCache(); loadingConfigCache(); } /** * 校验参数键名是否唯一 - * + * * @param config 参数配置信息 * @return 结果 */ @Override - public boolean checkConfigKeyUnique(SysConfig config) - { + public boolean checkConfigKeyUnique(SysConfig config) { Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey()); - if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -221,12 +199,11 @@ public class SysConfigServiceImpl implements ISysConfigService /** * 设置cache key - * + * * @param configKey 参数键 * @return 缓存键key */ - private String getCacheKey(String configKey) - { + private String getCacheKey(String configKey) { return CacheConstants.SYS_CONFIG_KEY + configKey; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index 25dd14b..ca8648f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -1,15 +1,5 @@ package com.ruoyi.system.service.impl; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.TreeSelect; @@ -24,15 +14,25 @@ import com.ruoyi.system.mapper.SysMenuMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysRoleMenuMapper; import com.ruoyi.system.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 菜单 业务层处理 - * + * * @author ruoyi */ @Service -public class SysMenuServiceImpl implements ISysMenuService -{ +public class SysMenuServiceImpl implements ISysMenuService { public static final String PREMISSION_STRING = "perms[\"{0}\"]"; @Autowired @@ -46,33 +46,28 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户查询系统菜单列表 - * + * * @param userId 用户ID * @return 菜单列表 */ @Override - public List<SysMenu> selectMenuList(Long userId) - { + public List<SysMenu> selectMenuList(Long userId) { return selectMenuList(new SysMenu(), userId); } /** * 查询系统菜单列表 - * + * * @param menu 菜单信息 * @return 菜单列表 */ @Override - public List<SysMenu> selectMenuList(SysMenu menu, Long userId) - { + public List<SysMenu> selectMenuList(SysMenu menu, Long userId) { List<SysMenu> menuList = null; // 管理员显示所有菜单信息 - if (SysUser.isAdmin(userId)) - { + if (SysUser.isAdmin(userId)) { menuList = menuMapper.selectMenuList(menu); - } - else - { + } else { menu.getParams().put("userId", userId); menuList = menuMapper.selectMenuListByUserId(menu); } @@ -81,19 +76,16 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询权限 - * + * * @param userId 用户ID * @return 权限列表 */ @Override - public Set<String> selectMenuPermsByUserId(Long userId) - { + public Set<String> selectMenuPermsByUserId(Long userId) { List<String> perms = menuMapper.selectMenuPermsByUserId(userId); Set<String> permsSet = new HashSet<>(); - for (String perm : perms) - { - if (StringUtils.isNotEmpty(perm)) - { + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { permsSet.addAll(Arrays.asList(perm.trim().split(","))); } } @@ -102,19 +94,16 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据角色ID查询权限 - * + * * @param roleId 角色ID * @return 权限列表 */ @Override - public Set<String> selectMenuPermsByRoleId(Long roleId) - { + public Set<String> selectMenuPermsByRoleId(Long roleId) { List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId); Set<String> permsSet = new HashSet<>(); - for (String perm : perms) - { - if (StringUtils.isNotEmpty(perm)) - { + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { permsSet.addAll(Arrays.asList(perm.trim().split(","))); } } @@ -123,20 +112,16 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询菜单 - * + * * @param userId 用户名称 * @return 菜单列表 */ @Override - public List<SysMenu> selectMenuTreeByUserId(Long userId) - { + public List<SysMenu> selectMenuTreeByUserId(Long userId) { List<SysMenu> menus = null; - if (SecurityUtils.isAdmin(userId)) - { + if (SecurityUtils.isAdmin(userId)) { menus = menuMapper.selectMenuTreeAll(); - } - else - { + } else { menus = menuMapper.selectMenuTreeByUserId(userId); } return getChildPerms(menus, 0); @@ -144,29 +129,26 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据角色ID查询菜单树信息 - * + * * @param roleId 角色ID * @return 选中菜单列表 */ @Override - public List<Long> selectMenuListByRoleId(Long roleId) - { + public List<Long> selectMenuListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } /** * 构建前端路由所需要的菜单 - * + * * @param menus 菜单列表 * @return 路由列表 */ @Override - public List<RouterVo> buildMenus(List<SysMenu> menus) - { + public List<RouterVo> buildMenus(List<SysMenu> menus) { List<RouterVo> routers = new LinkedList<RouterVo>(); - for (SysMenu menu : menus) - { + for (SysMenu menu : menus) { RouterVo router = new RouterVo(); router.setHidden("1".equals(menu.getVisible())); router.setName(getRouteName(menu)); @@ -175,14 +157,11 @@ public class SysMenuServiceImpl implements ISysMenuService router.setQuery(menu.getQuery()); router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); List<SysMenu> cMenus = menu.getChildren(); - if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) - { + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { router.setAlwaysShow(true); router.setRedirect("noRedirect"); router.setChildren(buildMenus(cMenus)); - } - else if (isMenuFrame(menu)) - { + } else if (isMenuFrame(menu)) { router.setMeta(null); List<RouterVo> childrenList = new ArrayList<RouterVo>(); RouterVo children = new RouterVo(); @@ -193,9 +172,7 @@ public class SysMenuServiceImpl implements ISysMenuService children.setQuery(menu.getQuery()); childrenList.add(children); router.setChildren(childrenList); - } - else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) - { + } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); router.setPath("/"); List<RouterVo> childrenList = new ArrayList<RouterVo>(); @@ -215,27 +192,23 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 构建前端所需要树结构 - * + * * @param menus 菜单列表 * @return 树结构列表 */ @Override - public List<SysMenu> buildMenuTree(List<SysMenu> menus) - { + public List<SysMenu> buildMenuTree(List<SysMenu> menus) { List<SysMenu> returnList = new ArrayList<SysMenu>(); List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); - for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();) - { + for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) { SysMenu menu = (SysMenu) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(menu.getParentId())) - { + if (!tempList.contains(menu.getParentId())) { recursionFn(menus, menu); returnList.add(menu); } } - if (returnList.isEmpty()) - { + if (returnList.isEmpty()) { returnList = menus; } return returnList; @@ -243,104 +216,95 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 构建前端所需要下拉树结构 - * + * * @param menus 菜单列表 * @return 下拉树结构列表 */ @Override - public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) - { + public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) { List<SysMenu> menuTrees = buildMenuTree(menus); return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } /** * 根据菜单ID查询信息 - * + * * @param menuId 菜单ID * @return 菜单信息 */ @Override - public SysMenu selectMenuById(Long menuId) - { + public SysMenu selectMenuById(Long menuId) { return menuMapper.selectMenuById(menuId); } /** * 是否存在菜单子节点 - * + * * @param menuId 菜单ID * @return 结果 */ @Override - public boolean hasChildByMenuId(Long menuId) - { + public boolean hasChildByMenuId(Long menuId) { int result = menuMapper.hasChildByMenuId(menuId); return result > 0; } /** * 查询菜单使用数量 - * + * * @param menuId 菜单ID * @return 结果 */ @Override - public boolean checkMenuExistRole(Long menuId) - { + public boolean checkMenuExistRole(Long menuId) { int result = roleMenuMapper.checkMenuExistRole(menuId); return result > 0; } /** * 新增保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @Override - public int insertMenu(SysMenu menu) - { + public int insertMenu(SysMenu menu) { return menuMapper.insertMenu(menu); } /** * 修改保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @Override - public int updateMenu(SysMenu menu) - { + public int updateMenu(SysMenu menu) { return menuMapper.updateMenu(menu); } /** * 删除菜单管理信息 - * + * * @param menuId 菜单ID * @return 结果 */ @Override - public int deleteMenuById(Long menuId) - { + public int deleteMenuById(Long menuId) { return menuMapper.deleteMenuById(menuId); } /** * 校验菜单名称是否唯一 - * + * * @param menu 菜单信息 * @return 结果 */ @Override - public boolean checkMenuNameUnique(SysMenu menu) - { + public boolean checkMenuNameUnique(SysMenu menu) { Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); - if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) - { + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -348,16 +312,14 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取路由名称 - * + * * @param menu 菜单信息 * @return 路由名称 */ - public String getRouteName(SysMenu menu) - { + public String getRouteName(SysMenu menu) { String routerName = StringUtils.capitalize(menu.getPath()); // 非外链并且是一级目录(类型为目录) - if (isMenuFrame(menu)) - { + if (isMenuFrame(menu)) { routerName = StringUtils.EMPTY; } return routerName; @@ -365,27 +327,22 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取路由地址 - * + * * @param menu 菜单信息 * @return 路由地址 */ - public String getRouterPath(SysMenu menu) - { + public String getRouterPath(SysMenu menu) { String routerPath = menu.getPath(); // 内链打开外网方式 - if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) - { + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { routerPath = innerLinkReplaceEach(routerPath); } // 非外链并且是一级目录(类型为目录) - if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) - && UserConstants.NO_FRAME.equals(menu.getIsFrame())) - { + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { routerPath = "/" + menu.getPath(); } // 非外链并且是一级目录(类型为菜单) - else if (isMenuFrame(menu)) - { + else if (isMenuFrame(menu)) { routerPath = "/"; } return routerPath; @@ -393,23 +350,17 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 获取组件信息 - * + * * @param menu 菜单信息 * @return 组件信息 */ - public String getComponent(SysMenu menu) - { + public String getComponent(SysMenu menu) { String component = UserConstants.LAYOUT; - if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) - { + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { component = menu.getComponent(); - } - else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) - { + } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) { component = UserConstants.INNER_LINK; - } - else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) - { + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { component = UserConstants.PARENT_VIEW; } return component; @@ -417,54 +368,47 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否为菜单内部跳转 - * + * * @param menu 菜单信息 * @return 结果 */ - public boolean isMenuFrame(SysMenu menu) - { - return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) - && menu.getIsFrame().equals(UserConstants.NO_FRAME); + public boolean isMenuFrame(SysMenu menu) { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) && menu.getIsFrame().equals(UserConstants.NO_FRAME); } /** * 是否为内链组件 - * + * * @param menu 菜单信息 * @return 结果 */ - public boolean isInnerLink(SysMenu menu) - { + public boolean isInnerLink(SysMenu menu) { return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); } /** * 是否为parent_view组件 - * + * * @param menu 菜单信息 * @return 结果 */ - public boolean isParentView(SysMenu menu) - { + public boolean isParentView(SysMenu menu) { return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); } /** * 根据父节点的ID获取所有子节点 - * - * @param list 分类表 + * + * @param list 分类表 * @param parentId 传入的父节点ID * @return String */ - public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) - { + public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) { List<SysMenu> returnList = new ArrayList<SysMenu>(); - for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();) - { + for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) { SysMenu t = (SysMenu) iterator.next(); // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 - if (t.getParentId() == parentId) - { + if (t.getParentId() == parentId) { recursionFn(list, t); returnList.add(t); } @@ -474,19 +418,16 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 递归列表 - * + * * @param list 分类表 - * @param t 子节点 + * @param t 子节点 */ - private void recursionFn(List<SysMenu> list, SysMenu t) - { + private void recursionFn(List<SysMenu> list, SysMenu t) { // 得到子节点列表 List<SysMenu> childList = getChildList(list, t); t.setChildren(childList); - for (SysMenu tChild : childList) - { - if (hasChild(list, tChild)) - { + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { recursionFn(list, tChild); } } @@ -495,15 +436,12 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 得到子节点列表 */ - private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) - { + private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) { List<SysMenu> tlist = new ArrayList<SysMenu>(); Iterator<SysMenu> it = list.iterator(); - while (it.hasNext()) - { + while (it.hasNext()) { SysMenu n = (SysMenu) it.next(); - if (n.getParentId().longValue() == t.getMenuId().longValue()) - { + if (n.getParentId().longValue() == t.getMenuId().longValue()) { tlist.add(n); } } @@ -513,19 +451,16 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 判断是否有子节点 */ - private boolean hasChild(List<SysMenu> list, SysMenu t) - { + private boolean hasChild(List<SysMenu> list, SysMenu t) { return getChildList(list, t).size() > 0; } /** * 内链域名特殊字符替换 - * + * * @return 替换后的内链域名 */ - public String innerLinkReplaceEach(String path) - { - return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" }, - new String[] { "", "", "", "/", "/" }); + public String innerLinkReplaceEach(String path) { + return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, new String[]{"", "", "", "/", "/"}); } } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml index ca39f47..a1a876a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -1,96 +1,105 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysConfigMapper"> - - <resultMap type="SysConfig" id="SysConfigResult"> - <id property="configId" column="config_id" /> - <result property="configName" column="config_name" /> - <result property="configKey" column="config_key" /> - <result property="configValue" column="config_value" /> - <result property="configType" column="config_type" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> + + <resultMap type="com.ruoyi.system.domain.SysConfig" id="SysConfigResult"> + <id property="configId" column="config_id"/> + <result property="configName" column="config_name"/> + <result property="configKey" column="config_key"/> + <result property="configValue" column="config_value"/> + <result property="configType" column="config_type"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> </resultMap> - + <sql id="selectConfigVo"> - select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark - from sys_config + select config_id, + config_name, + config_key, + config_value, + config_type, + create_by, + create_time, + update_by, + update_time, + remark + from sys_config </sql> - + <!-- 查询条件 --> - <sql id="sqlwhereSearch"> - <where> - <if test="configId !=null"> - and config_id = #{configId} - </if> - <if test="configKey !=null and configKey != ''"> - and config_key = #{configKey} - </if> - </where> - </sql> - - <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult"> + <sql id="sqlwhereSearch"> + <where> + <if test="configId !=null"> + and config_id = #{configId} + </if> + <if test="configKey !=null and configKey != ''"> + and config_key = #{configKey} + </if> + </where> + </sql> + + <select id="selectConfig" parameterType="com.ruoyi.system.domain.SysConfig" resultMap="SysConfigResult"> <include refid="selectConfigVo"/> <include refid="sqlwhereSearch"/> </select> - - <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult"> + + <select id="selectConfigList" parameterType="com.ruoyi.system.domain.SysConfig" resultMap="SysConfigResult"> <include refid="selectConfigVo"/> <where> - <if test="configName != null and configName != ''"> - AND config_name like concat('%', #{configName}, '%') - </if> - <if test="configType != null and configType != ''"> - AND config_type = #{configType} - </if> - <if test="configKey != null and configKey != ''"> - AND config_key like concat('%', #{configKey}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - </if> - </where> + <if test="configName != null and configName != ''"> + AND config_name like concat('%', #{configName}, '%') + </if> + <if test="configType != null and configType != ''"> + AND config_type = #{configType} + </if> + <if test="configKey != null and configKey != ''"> + AND config_key like concat('%', #{configKey}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + </if> + </where> </select> - + <select id="selectConfigById" parameterType="Long" resultMap="SysConfigResult"> <include refid="selectConfigVo"/> where config_id = #{configId} </select> - + <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult"> <include refid="selectConfigVo"/> where config_key = #{configKey} limit 1 </select> - - <insert id="insertConfig" parameterType="SysConfig"> + + <insert id="insertConfig" parameterType="com.ruoyi.system.domain.SysConfig"> insert into sys_config ( - <if test="configName != null and configName != '' ">config_name,</if> - <if test="configKey != null and configKey != '' ">config_key,</if> - <if test="configValue != null and configValue != '' ">config_value,</if> - <if test="configType != null and configType != '' ">config_type,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - <if test="remark != null and remark != ''">remark,</if> - create_time + <if test="configName != null and configName != '' ">config_name,</if> + <if test="configKey != null and configKey != '' ">config_key,</if> + <if test="configValue != null and configValue != '' ">config_value,</if> + <if test="configType != null and configType != '' ">config_type,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + <if test="remark != null and remark != ''">remark,</if> + create_time )values( - <if test="configName != null and configName != ''">#{configName},</if> - <if test="configKey != null and configKey != ''">#{configKey},</if> - <if test="configValue != null and configValue != ''">#{configValue},</if> - <if test="configType != null and configType != ''">#{configType},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - <if test="remark != null and remark != ''">#{remark},</if> - sysdate() - ) + <if test="configName != null and configName != ''">#{configName},</if> + <if test="configKey != null and configKey != ''">#{configKey},</if> + <if test="configValue != null and configValue != ''">#{configValue},</if> + <if test="configType != null and configType != ''">#{configType},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + <if test="remark != null and remark != ''">#{remark},</if> + sysdate() + ) </insert> - - <update id="updateConfig" parameterType="SysConfig"> - update sys_config + + <update id="updateConfig" parameterType="com.ruoyi.system.domain.SysConfig"> + update sys_config <set> <if test="configName != null and configName != ''">config_name = #{configName},</if> <if test="configKey != null and configKey != ''">config_key = #{configKey},</if> @@ -98,20 +107,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="configType != null and configType != ''">config_type = #{configType},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="remark != null">remark = #{remark},</if> - update_time = sysdate() + update_time = sysdate() </set> where config_id = #{configId} </update> - + <delete id="deleteConfigById" parameterType="Long"> - delete from sys_config where config_id = #{configId} + delete + from sys_config + where config_id = #{configId} </delete> - + <delete id="deleteConfigByIds" parameterType="Long"> - delete from sys_config where config_id in + delete from sys_config where config_id in <foreach item="configId" collection="array" open="(" separator="," close=")"> - #{configId} + #{configId} </foreach> </delete> - + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index cf439f6..87575be 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -1,159 +1,193 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysDeptMapper"> - <resultMap type="SysDept" id="SysDeptResult"> - <id property="deptId" column="dept_id" /> - <result property="parentId" column="parent_id" /> - <result property="ancestors" column="ancestors" /> - <result property="deptName" column="dept_name" /> - <result property="orderNum" column="order_num" /> - <result property="leader" column="leader" /> - <result property="phone" column="phone" /> - <result property="email" column="email" /> - <result property="status" column="status" /> - <result property="delFlag" column="del_flag" /> - <result property="parentName" column="parent_name" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - </resultMap> - - <sql id="selectDeptVo"> - select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time + <resultMap type="com.ruoyi.common.core.domain.entity.SysDept" id="SysDeptResult"> + <id property="deptId" column="dept_id"/> + <result property="parentId" column="parent_id"/> + <result property="ancestors" column="ancestors"/> + <result property="deptName" column="dept_name"/> + <result property="orderNum" column="order_num"/> + <result property="leader" column="leader"/> + <result property="phone" column="phone"/> + <result property="email" column="email"/> + <result property="status" column="status"/> + <result property="delFlag" column="del_flag"/> + <result property="parentName" column="parent_name"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + </resultMap> + + <sql id="selectDeptVo"> + select d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.phone, + d.email, + d.status, + d.del_flag, + d.create_by, + d.create_time from sys_dept d </sql> - - <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult"> + + <select id="selectDeptList" parameterType="com.ruoyi.common.core.domain.entity.SysDept" resultMap="SysDeptResult"> <include refid="selectDeptVo"/> where d.del_flag = '0' - <if test="deptId != null and deptId != 0"> - AND dept_id = #{deptId} - </if> + <if test="deptId != null and deptId != 0"> + AND dept_id = #{deptId} + </if> <if test="parentId != null and parentId != 0"> - AND parent_id = #{parentId} - </if> - <if test="deptName != null and deptName != ''"> - AND dept_name like concat('%', #{deptName}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - <!-- 数据范围过滤 --> - ${params.dataScope} - order by d.parent_id, d.order_num + AND parent_id = #{parentId} + </if> + <if test="deptName != null and deptName != ''"> + AND dept_name like concat('%', #{deptName}, '%') + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + <!-- 数据范围过滤 --> + ${params.dataScope} + order by d.parent_id, d.order_num </select> - + <select id="selectDeptListByRoleId" resultType="Long"> - select d.dept_id - from sys_dept d - left join sys_role_dept rd on d.dept_id = rd.dept_id + select d.dept_id + from sys_dept d + left join sys_role_dept rd on d.dept_id = rd.dept_id where rd.role_id = #{roleId} - <if test="deptCheckStrictly"> - and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId}) - </if> - order by d.parent_id, d.order_num - </select> - + <if test="deptCheckStrictly"> + and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = + rd.dept_id and rd.role_id = #{roleId}) + </if> + order by d.parent_id, d.order_num + </select> + <select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult"> - select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, - (select dept_name from sys_dept where dept_id = d.parent_id) parent_name - from sys_dept d - where d.dept_id = #{deptId} - </select> - + select d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.phone, + d.email, + d.status, + (select dept_name from sys_dept where dept_id = d.parent_id) parent_name + from sys_dept d + where d.dept_id = #{deptId} + </select> + <select id="checkDeptExistUser" parameterType="Long" resultType="int"> - select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0' - </select> - - <select id="hasChildByDeptId" parameterType="Long" resultType="int"> - select count(1) from sys_dept - where del_flag = '0' and parent_id = #{deptId} limit 1 - </select> - - <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult"> - select * from sys_dept where find_in_set(#{deptId}, ancestors) - </select> - - <select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int"> - select count(*) from sys_dept where status = 0 and del_flag = '0' and find_in_set(#{deptId}, ancestors) - </select> - - <select id="checkDeptNameUnique" resultMap="SysDeptResult"> - <include refid="selectDeptVo"/> - where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1 - </select> - - <insert id="insertDept" parameterType="SysDept"> - insert into sys_dept( - <if test="deptId != null and deptId != 0">dept_id,</if> - <if test="parentId != null and parentId != 0">parent_id,</if> - <if test="deptName != null and deptName != ''">dept_name,</if> - <if test="ancestors != null and ancestors != ''">ancestors,</if> - <if test="orderNum != null">order_num,</if> - <if test="leader != null and leader != ''">leader,</if> - <if test="phone != null and phone != ''">phone,</if> - <if test="email != null and email != ''">email,</if> - <if test="status != null">status,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="deptId != null and deptId != 0">#{deptId},</if> - <if test="parentId != null and parentId != 0">#{parentId},</if> - <if test="deptName != null and deptName != ''">#{deptName},</if> - <if test="ancestors != null and ancestors != ''">#{ancestors},</if> - <if test="orderNum != null">#{orderNum},</if> - <if test="leader != null and leader != ''">#{leader},</if> - <if test="phone != null and phone != ''">#{phone},</if> - <if test="email != null and email != ''">#{email},</if> - <if test="status != null">#{status},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - - <update id="updateDept" parameterType="SysDept"> - update sys_dept - <set> - <if test="parentId != null and parentId != 0">parent_id = #{parentId},</if> - <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if> - <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if> - <if test="orderNum != null">order_num = #{orderNum},</if> - <if test="leader != null">leader = #{leader},</if> - <if test="phone != null">phone = #{phone},</if> - <if test="email != null">email = #{email},</if> - <if test="status != null and status != ''">status = #{status},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where dept_id = #{deptId} - </update> - - <update id="updateDeptChildren" parameterType="java.util.List"> - update sys_dept set ancestors = - <foreach collection="depts" item="item" index="index" - separator=" " open="case dept_id" close="end"> - when #{item.deptId} then #{item.ancestors} - </foreach> - where dept_id in - <foreach collection="depts" item="item" index="index" - separator="," open="(" close=")"> - #{item.deptId} - </foreach> - </update> - - <update id="updateDeptStatusNormal" parameterType="Long"> - update sys_dept set status = '0' where dept_id in - <foreach collection="array" item="deptId" open="(" separator="," close=")"> - #{deptId} + select count(1) + from sys_user + where dept_id = #{deptId} + and del_flag = '0' + </select> + + <select id="hasChildByDeptId" parameterType="Long" resultType="int"> + select count(1) + from sys_dept + where del_flag = '0' + and parent_id = #{deptId} + limit 1 + </select> + + <select id="selectChildrenDeptById" parameterType="Long" resultMap="SysDeptResult"> + select * + from sys_dept + where find_in_set(#{deptId}, ancestors) + </select> + + <select id="selectNormalChildrenDeptById" parameterType="Long" resultType="int"> + select count(*) + from sys_dept + where status = 0 + and del_flag = '0' + and find_in_set(#{deptId}, ancestors) + </select> + + <select id="checkDeptNameUnique" resultMap="SysDeptResult"> + <include refid="selectDeptVo"/> + where dept_name=#{deptName} and parent_id = #{parentId} and del_flag = '0' limit 1 + </select> + + <insert id="insertDept" parameterType="com.ruoyi.common.core.domain.entity.SysDept"> + insert into sys_dept( + <if test="deptId != null and deptId != 0">dept_id,</if> + <if test="parentId != null and parentId != 0">parent_id,</if> + <if test="deptName != null and deptName != ''">dept_name,</if> + <if test="ancestors != null and ancestors != ''">ancestors,</if> + <if test="orderNum != null">order_num,</if> + <if test="leader != null and leader != ''">leader,</if> + <if test="phone != null and phone != ''">phone,</if> + <if test="email != null and email != ''">email,</if> + <if test="status != null">status,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="deptId != null and deptId != 0">#{deptId},</if> + <if test="parentId != null and parentId != 0">#{parentId},</if> + <if test="deptName != null and deptName != ''">#{deptName},</if> + <if test="ancestors != null and ancestors != ''">#{ancestors},</if> + <if test="orderNum != null">#{orderNum},</if> + <if test="leader != null and leader != ''">#{leader},</if> + <if test="phone != null and phone != ''">#{phone},</if> + <if test="email != null and email != ''">#{email},</if> + <if test="status != null">#{status},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> + + <update id="updateDept" parameterType="com.ruoyi.common.core.domain.entity.SysDept"> + update sys_dept + <set> + <if test="parentId != null and parentId != 0">parent_id = #{parentId},</if> + <if test="deptName != null and deptName != ''">dept_name = #{deptName},</if> + <if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if> + <if test="orderNum != null">order_num = #{orderNum},</if> + <if test="leader != null">leader = #{leader},</if> + <if test="phone != null">phone = #{phone},</if> + <if test="email != null">email = #{email},</if> + <if test="status != null and status != ''">status = #{status},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where dept_id = #{deptId} + </update> + + <update id="updateDeptChildren" parameterType="java.util.List"> + update sys_dept set ancestors = + <foreach collection="depts" item="item" index="index" + separator=" " open="case dept_id" close="end"> + when #{item.deptId} then #{item.ancestors} + </foreach> + where dept_id in + <foreach collection="depts" item="item" index="index" + separator="," open="(" close=")"> + #{item.deptId} </foreach> - </update> - - <delete id="deleteDeptById" parameterType="Long"> - update sys_dept set del_flag = '2' where dept_id = #{deptId} - </delete> + </update> + + <update id="updateDeptStatusNormal" parameterType="Long"> + update sys_dept set status = '0' where dept_id in + <foreach collection="array" item="deptId" open="(" separator="," close=")"> + #{deptId} + </foreach> + </update> + + <delete id="deleteDeptById" parameterType="Long"> + update sys_dept + set del_flag = '2' + where dept_id = #{deptId} + </delete> </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml index 8da9030..6c5689a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -1,124 +1,145 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysDictDataMapper"> - - <resultMap type="SysDictData" id="SysDictDataResult"> - <id property="dictCode" column="dict_code" /> - <result property="dictSort" column="dict_sort" /> - <result property="dictLabel" column="dict_label" /> - <result property="dictValue" column="dict_value" /> - <result property="dictType" column="dict_type" /> - <result property="cssClass" column="css_class" /> - <result property="listClass" column="list_class" /> - <result property="isDefault" column="is_default" /> - <result property="status" column="status" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - </resultMap> - - <sql id="selectDictDataVo"> - select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark - from sys_dict_data + + <resultMap type="com.ruoyi.common.core.domain.entity.SysDictData" id="SysDictDataResult"> + <id property="dictCode" column="dict_code"/> + <result property="dictSort" column="dict_sort"/> + <result property="dictLabel" column="dict_label"/> + <result property="dictValue" column="dict_value"/> + <result property="dictType" column="dict_type"/> + <result property="cssClass" column="css_class"/> + <result property="listClass" column="list_class"/> + <result property="isDefault" column="is_default"/> + <result property="status" column="status"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + </resultMap> + + <sql id="selectDictDataVo"> + select dict_code, + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + create_by, + create_time, + remark + from sys_dict_data </sql> - <select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult"> - <include refid="selectDictDataVo"/> - <where> - <if test="dictType != null and dictType != ''"> - AND dict_type = #{dictType} - </if> - <if test="dictLabel != null and dictLabel != ''"> - AND dict_label like concat('%', #{dictLabel}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - </where> - order by dict_sort asc - </select> - - <select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult"> - <include refid="selectDictDataVo"/> - where status = '0' and dict_type = #{dictType} order by dict_sort asc - </select> - - <select id="selectDictLabel" resultType="String"> - select dict_label from sys_dict_data - where dict_type = #{dictType} and dict_value = #{dictValue} - </select> - - <select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult"> - <include refid="selectDictDataVo"/> - where dict_code = #{dictCode} - </select> - - <select id="countDictDataByType" resultType="Integer"> - select count(1) from sys_dict_data where dict_type=#{dictType} - </select> - - <delete id="deleteDictDataById" parameterType="Long"> - delete from sys_dict_data where dict_code = #{dictCode} - </delete> - - <delete id="deleteDictDataByIds" parameterType="Long"> - delete from sys_dict_data where dict_code in - <foreach collection="array" item="dictCode" open="(" separator="," close=")"> - #{dictCode} - </foreach> - </delete> - - <update id="updateDictData" parameterType="SysDictData"> - update sys_dict_data - <set> - <if test="dictSort != null">dict_sort = #{dictSort},</if> - <if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if> - <if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if> - <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if> - <if test="cssClass != null">css_class = #{cssClass},</if> - <if test="listClass != null">list_class = #{listClass},</if> - <if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if> - <if test="status != null">status = #{status},</if> - <if test="remark != null">remark = #{remark},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where dict_code = #{dictCode} - </update> - - <update id="updateDictDataType" parameterType="String"> - update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} - </update> - - <insert id="insertDictData" parameterType="SysDictData"> - insert into sys_dict_data( - <if test="dictSort != null">dict_sort,</if> - <if test="dictLabel != null and dictLabel != ''">dict_label,</if> - <if test="dictValue != null and dictValue != ''">dict_value,</if> - <if test="dictType != null and dictType != ''">dict_type,</if> - <if test="cssClass != null and cssClass != ''">css_class,</if> - <if test="listClass != null and listClass != ''">list_class,</if> - <if test="isDefault != null and isDefault != ''">is_default,</if> - <if test="status != null">status,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="dictSort != null">#{dictSort},</if> - <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if> - <if test="dictValue != null and dictValue != ''">#{dictValue},</if> - <if test="dictType != null and dictType != ''">#{dictType},</if> - <if test="cssClass != null and cssClass != ''">#{cssClass},</if> - <if test="listClass != null and listClass != ''">#{listClass},</if> - <if test="isDefault != null and isDefault != ''">#{isDefault},</if> - <if test="status != null">#{status},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - + <select id="selectDictDataList" parameterType="com.ruoyi.common.core.domain.entity.SysDictData" + resultMap="SysDictDataResult"> + <include refid="selectDictDataVo"/> + <where> + <if test="dictType != null and dictType != ''"> + AND dict_type = #{dictType} + </if> + <if test="dictLabel != null and dictLabel != ''"> + AND dict_label like concat('%', #{dictLabel}, '%') + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + </where> + order by dict_sort asc + </select> + + <select id="selectDictDataByType" parameterType="com.ruoyi.common.core.domain.entity.SysDictData" + resultMap="SysDictDataResult"> + <include refid="selectDictDataVo"/> + where status = '0' and dict_type = #{dictType} order by dict_sort asc + </select> + + <select id="selectDictLabel" resultType="String"> + select dict_label + from sys_dict_data + where dict_type = #{dictType} + and dict_value = #{dictValue} + </select> + + <select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult"> + <include refid="selectDictDataVo"/> + where dict_code = #{dictCode} + </select> + + <select id="countDictDataByType" resultType="Integer"> + select count(1) + from sys_dict_data + where dict_type = #{dictType} + </select> + + <delete id="deleteDictDataById" parameterType="Long"> + delete + from sys_dict_data + where dict_code = #{dictCode} + </delete> + + <delete id="deleteDictDataByIds" parameterType="Long"> + delete from sys_dict_data where dict_code in + <foreach collection="array" item="dictCode" open="(" separator="," close=")"> + #{dictCode} + </foreach> + </delete> + + <update id="updateDictData" parameterType="com.ruoyi.common.core.domain.entity.SysDictData"> + update sys_dict_data + <set> + <if test="dictSort != null">dict_sort = #{dictSort},</if> + <if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if> + <if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if> + <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if> + <if test="cssClass != null">css_class = #{cssClass},</if> + <if test="listClass != null">list_class = #{listClass},</if> + <if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if> + <if test="status != null">status = #{status},</if> + <if test="remark != null">remark = #{remark},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where dict_code = #{dictCode} + </update> + + <update id="updateDictDataType" parameterType="String"> + update sys_dict_data + set dict_type = #{newDictType} + where dict_type = #{oldDictType} + </update> + + <insert id="insertDictData" parameterType="com.ruoyi.common.core.domain.entity.SysDictData"> + insert into sys_dict_data( + <if test="dictSort != null">dict_sort,</if> + <if test="dictLabel != null and dictLabel != ''">dict_label,</if> + <if test="dictValue != null and dictValue != ''">dict_value,</if> + <if test="dictType != null and dictType != ''">dict_type,</if> + <if test="cssClass != null and cssClass != ''">css_class,</if> + <if test="listClass != null and listClass != ''">list_class,</if> + <if test="isDefault != null and isDefault != ''">is_default,</if> + <if test="status != null">status,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="dictSort != null">#{dictSort},</if> + <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if> + <if test="dictValue != null and dictValue != ''">#{dictValue},</if> + <if test="dictType != null and dictType != ''">#{dictType},</if> + <if test="cssClass != null and cssClass != ''">#{cssClass},</if> + <if test="listClass != null and listClass != ''">#{listClass},</if> + <if test="isDefault != null and isDefault != ''">#{isDefault},</if> + <if test="status != null">#{status},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml index 55b4075..36daeed 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -1,105 +1,108 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysDictTypeMapper"> - <resultMap type="SysDictType" id="SysDictTypeResult"> - <id property="dictId" column="dict_id" /> - <result property="dictName" column="dict_name" /> - <result property="dictType" column="dict_type" /> - <result property="status" column="status" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - </resultMap> - - <sql id="selectDictTypeVo"> - select dict_id, dict_name, dict_type, status, create_by, create_time, remark - from sys_dict_type + <resultMap type="com.ruoyi.common.core.domain.entity.SysDictType" id="SysDictTypeResult"> + <id property="dictId" column="dict_id"/> + <result property="dictName" column="dict_name"/> + <result property="dictType" column="dict_type"/> + <result property="status" column="status"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + </resultMap> + + <sql id="selectDictTypeVo"> + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type </sql> - <select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult"> - <include refid="selectDictTypeVo"/> - <where> - <if test="dictName != null and dictName != ''"> - AND dict_name like concat('%', #{dictName}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - <if test="dictType != null and dictType != ''"> - AND dict_type like concat('%', #{dictType}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - </if> - </where> - </select> - - <select id="selectDictTypeAll" resultMap="SysDictTypeResult"> - <include refid="selectDictTypeVo"/> - </select> - - <select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult"> - <include refid="selectDictTypeVo"/> - where dict_id = #{dictId} - </select> - - <select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult"> - <include refid="selectDictTypeVo"/> - where dict_type = #{dictType} - </select> - - <select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult"> - <include refid="selectDictTypeVo"/> - where dict_type = #{dictType} limit 1 - </select> - - <delete id="deleteDictTypeById" parameterType="Long"> - delete from sys_dict_type where dict_id = #{dictId} - </delete> - - <delete id="deleteDictTypeByIds" parameterType="Long"> - delete from sys_dict_type where dict_id in - <foreach collection="array" item="dictId" open="(" separator="," close=")"> - #{dictId} - </foreach> - </delete> + <select id="selectDictTypeList" parameterType="com.ruoyi.common.core.domain.entity.SysDictType" + resultMap="SysDictTypeResult"> + <include refid="selectDictTypeVo"/> + <where> + <if test="dictName != null and dictName != ''"> + AND dict_name like concat('%', #{dictName}, '%') + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + <if test="dictType != null and dictType != ''"> + AND dict_type like concat('%', #{dictType}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + </if> + </where> + </select> + + <select id="selectDictTypeAll" resultMap="SysDictTypeResult"> + <include refid="selectDictTypeVo"/> + </select> + + <select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult"> + <include refid="selectDictTypeVo"/> + where dict_id = #{dictId} + </select> + + <select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult"> + <include refid="selectDictTypeVo"/> + where dict_type = #{dictType} + </select> + + <select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult"> + <include refid="selectDictTypeVo"/> + where dict_type = #{dictType} limit 1 + </select> + + <delete id="deleteDictTypeById" parameterType="Long"> + delete + from sys_dict_type + where dict_id = #{dictId} + </delete> + + <delete id="deleteDictTypeByIds" parameterType="Long"> + delete from sys_dict_type where dict_id in + <foreach collection="array" item="dictId" open="(" separator="," close=")"> + #{dictId} + </foreach> + </delete> + + <update id="updateDictType" parameterType="com.ruoyi.common.core.domain.entity.SysDictType"> + update sys_dict_type + <set> + <if test="dictName != null and dictName != ''">dict_name = #{dictName},</if> + <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if> + <if test="status != null">status = #{status},</if> + <if test="remark != null">remark = #{remark},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where dict_id = #{dictId} + </update> + + <insert id="insertDictType" parameterType="com.ruoyi.common.core.domain.entity.SysDictType"> + insert into sys_dict_type( + <if test="dictName != null and dictName != ''">dict_name,</if> + <if test="dictType != null and dictType != ''">dict_type,</if> + <if test="status != null">status,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="dictName != null and dictName != ''">#{dictName},</if> + <if test="dictType != null and dictType != ''">#{dictType},</if> + <if test="status != null">#{status},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> - <update id="updateDictType" parameterType="SysDictType"> - update sys_dict_type - <set> - <if test="dictName != null and dictName != ''">dict_name = #{dictName},</if> - <if test="dictType != null and dictType != ''">dict_type = #{dictType},</if> - <if test="status != null">status = #{status},</if> - <if test="remark != null">remark = #{remark},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where dict_id = #{dictId} - </update> - - <insert id="insertDictType" parameterType="SysDictType"> - insert into sys_dict_type( - <if test="dictName != null and dictName != ''">dict_name,</if> - <if test="dictType != null and dictType != ''">dict_type,</if> - <if test="status != null">status,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="dictName != null and dictName != ''">#{dictName},</if> - <if test="dictType != null and dictType != ''">#{dictType},</if> - <if test="status != null">#{status},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml index 822d665..6078a04 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -1,57 +1,58 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysLogininforMapper"> - <resultMap type="SysLogininfor" id="SysLogininforResult"> - <id property="infoId" column="info_id" /> - <result property="userName" column="user_name" /> - <result property="status" column="status" /> - <result property="ipaddr" column="ipaddr" /> - <result property="loginLocation" column="login_location" /> - <result property="browser" column="browser" /> - <result property="os" column="os" /> - <result property="msg" column="msg" /> - <result property="loginTime" column="login_time" /> - </resultMap> + <resultMap type="com.ruoyi.system.domain.SysLogininfor" id="SysLogininforResult"> + <id property="infoId" column="info_id"/> + <result property="userName" column="user_name"/> + <result property="status" column="status"/> + <result property="ipaddr" column="ipaddr"/> + <result property="loginLocation" column="login_location"/> + <result property="browser" column="browser"/> + <result property="os" column="os"/> + <result property="msg" column="msg"/> + <result property="loginTime" column="login_time"/> + </resultMap> + + <insert id="insertLogininfor" parameterType="com.ruoyi.system.domain.SysLogininfor"> + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + </insert> + + <select id="selectLogininforList" parameterType="com.ruoyi.system.domain.SysLogininfor" + resultMap="SysLogininforResult"> + select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor + <where> + <if test="ipaddr != null and ipaddr != ''"> + AND ipaddr like concat('%', #{ipaddr}, '%') + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + <if test="userName != null and userName != ''"> + AND user_name like concat('%', #{userName}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + AND login_time >= #{params.beginTime} + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + AND login_time <= #{params.endTime} + </if> + </where> + order by info_id desc + </select> + + <delete id="deleteLogininforByIds" parameterType="Long"> + delete from sys_logininfor where info_id in + <foreach collection="array" item="infoId" open="(" separator="," close=")"> + #{infoId} + </foreach> + </delete> - <insert id="insertLogininfor" parameterType="SysLogininfor"> - insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) - values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) - </insert> - - <select id="selectLogininforList" parameterType="SysLogininfor" resultMap="SysLogininforResult"> - select info_id, user_name, ipaddr, login_location, browser, os, status, msg, login_time from sys_logininfor - <where> - <if test="ipaddr != null and ipaddr != ''"> - AND ipaddr like concat('%', #{ipaddr}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - <if test="userName != null and userName != ''"> - AND user_name like concat('%', #{userName}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - AND login_time >= #{params.beginTime} - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - AND login_time <= #{params.endTime} - </if> - </where> - order by info_id desc - </select> - - <delete id="deleteLogininforByIds" parameterType="Long"> - delete from sys_logininfor where info_id in - <foreach collection="array" item="infoId" open="(" separator="," close=")"> - #{infoId} - </foreach> - </delete> - <update id="cleanLogininfor"> truncate table sys_logininfor </update> - + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 6762007..8ced201 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -1,202 +1,260 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper - PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysMenuMapper"> - <resultMap type="SysMenu" id="SysMenuResult"> - <id property="menuId" column="menu_id" /> - <result property="menuName" column="menu_name" /> - <result property="parentName" column="parent_name" /> - <result property="parentId" column="parent_id" /> - <result property="orderNum" column="order_num" /> - <result property="path" column="path" /> - <result property="component" column="component" /> - <result property="query" column="query" /> - <result property="isFrame" column="is_frame" /> - <result property="isCache" column="is_cache" /> - <result property="menuType" column="menu_type" /> - <result property="visible" column="visible" /> - <result property="status" column="status" /> - <result property="perms" column="perms" /> - <result property="icon" column="icon" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateTime" column="update_time" /> - <result property="updateBy" column="update_by" /> - <result property="remark" column="remark" /> - </resultMap> - - <sql id="selectMenuVo"> - select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time - from sys_menu + <resultMap type="com.ruoyi.common.core.domain.entity.SysMenu" id="SysMenuResult"> + <id property="menuId" column="menu_id"/> + <result property="menuName" column="menu_name"/> + <result property="parentName" column="parent_name"/> + <result property="parentId" column="parent_id"/> + <result property="orderNum" column="order_num"/> + <result property="path" column="path"/> + <result property="component" column="component"/> + <result property="query" column="query"/> + <result property="isFrame" column="is_frame"/> + <result property="isCache" column="is_cache"/> + <result property="menuType" column="menu_type"/> + <result property="visible" column="visible"/> + <result property="status" column="status"/> + <result property="perms" column="perms"/> + <result property="icon" column="icon"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateTime" column="update_time"/> + <result property="updateBy" column="update_by"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectMenuVo"> + select menu_id, + menu_name, + parent_id, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + ifnull(perms, '') as perms, + icon, + create_time + from sys_menu </sql> - - <select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult"> - <include refid="selectMenuVo"/> - <where> - <if test="menuName != null and menuName != ''"> - AND menu_name like concat('%', #{menuName}, '%') - </if> - <if test="visible != null and visible != ''"> - AND visible = #{visible} - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - </where> - order by parent_id, order_num - </select> - - <select id="selectMenuTreeAll" resultMap="SysMenuResult"> - select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time - from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0 - order by m.parent_id, m.order_num - </select> - - <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult"> - select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - left join sys_role ro on ur.role_id = ro.role_id - where ur.user_id = #{params.userId} - <if test="menuName != null and menuName != ''"> + + <select id="selectMenuList" parameterType="com.ruoyi.common.core.domain.entity.SysMenu" resultMap="SysMenuResult"> + <include refid="selectMenuVo"/> + <where> + <if test="menuName != null and menuName != ''"> + AND menu_name like concat('%', #{menuName}, '%') + </if> + <if test="visible != null and visible != ''"> + AND visible = #{visible} + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + </where> + order by parent_id, order_num + </select> + + <select id="selectMenuTreeAll" resultMap="SysMenuResult"> + select distinct m.menu_id, + m.parent_id, + m.menu_name, + m.path, + m.component, + m.`query`, + m.visible, + m.status, + ifnull(m.perms, '') as perms, + m.is_frame, + m.is_cache, + m.menu_type, + m.icon, + m.order_num, + m.create_time + from sys_menu m + where m.menu_type in ('M', 'C') + and m.status = 0 + order by m.parent_id, m.order_num + </select> + + <select id="selectMenuListByUserId" parameterType="com.ruoyi.common.core.domain.entity.SysMenu" + resultMap="SysMenuResult"> + select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, + ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + left join sys_user_role ur on rm.role_id = ur.role_id + left join sys_role ro on ur.role_id = ro.role_id + where ur.user_id = #{params.userId} + <if test="menuName != null and menuName != ''"> AND m.menu_name like concat('%', #{menuName}, '%') - </if> - <if test="visible != null and visible != ''"> + </if> + <if test="visible != null and visible != ''"> AND m.visible = #{visible} - </if> - <if test="status != null and status != ''"> + </if> + <if test="status != null and status != ''"> AND m.status = #{status} - </if> - order by m.parent_id, m.order_num - </select> - + </if> + order by m.parent_id, m.order_num + </select> + <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult"> - select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - left join sys_role ro on ur.role_id = ro.role_id - left join sys_user u on ur.user_id = u.user_id - where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0 - order by m.parent_id, m.order_num - </select> - - <select id="selectMenuListByRoleId" resultType="Long"> - select m.menu_id - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id + select distinct m.menu_id, + m.parent_id, + m.menu_name, + m.path, + m.component, + m.`query`, + m.visible, + m.status, + ifnull(m.perms, '') as perms, + m.is_frame, + m.is_cache, + m.menu_type, + m.icon, + m.order_num, + m.create_time + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + left join sys_user_role ur on rm.role_id = ur.role_id + left join sys_role ro on ur.role_id = ro.role_id + left join sys_user u on ur.user_id = u.user_id + where u.user_id = #{userId} + and m.menu_type in ('M', 'C') + and m.status = 0 + AND ro.status = 0 + order by m.parent_id, m.order_num + </select> + + <select id="selectMenuListByRoleId" resultType="Long"> + select m.menu_id + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id where rm.role_id = #{roleId} - <if test="menuCheckStrictly"> - and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId}) - </if> - order by m.parent_id, m.order_num - </select> - - <select id="selectMenuPerms" resultType="String"> - select distinct m.perms - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - </select> - - <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String"> - select distinct m.perms - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - left join sys_user_role ur on rm.role_id = ur.role_id - left join sys_role r on r.role_id = ur.role_id - where m.status = '0' and r.status = '0' and ur.user_id = #{userId} - </select> - - <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String"> - select distinct m.perms - from sys_menu m - left join sys_role_menu rm on m.menu_id = rm.menu_id - where m.status = '0' and rm.role_id = #{roleId} - </select> - - <select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult"> - <include refid="selectMenuVo"/> - where menu_id = #{menuId} - </select> - - <select id="hasChildByMenuId" resultType="Integer"> - select count(1) from sys_menu where parent_id = #{menuId} - </select> - - <select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult"> - <include refid="selectMenuVo"/> - where menu_name=#{menuName} and parent_id = #{parentId} limit 1 - </select> - - <update id="updateMenu" parameterType="SysMenu"> - update sys_menu - <set> - <if test="menuName != null and menuName != ''">menu_name = #{menuName},</if> - <if test="parentId != null">parent_id = #{parentId},</if> - <if test="orderNum != null">order_num = #{orderNum},</if> - <if test="path != null and path != ''">path = #{path},</if> - <if test="component != null">component = #{component},</if> - <if test="query != null">`query` = #{query},</if> - <if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if> - <if test="isCache != null and isCache != ''">is_cache = #{isCache},</if> - <if test="menuType != null and menuType != ''">menu_type = #{menuType},</if> - <if test="visible != null">visible = #{visible},</if> - <if test="status != null">status = #{status},</if> - <if test="perms !=null">perms = #{perms},</if> - <if test="icon !=null and icon != ''">icon = #{icon},</if> - <if test="remark != null and remark != ''">remark = #{remark},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where menu_id = #{menuId} - </update> - - <insert id="insertMenu" parameterType="SysMenu"> - insert into sys_menu( - <if test="menuId != null and menuId != 0">menu_id,</if> - <if test="parentId != null and parentId != 0">parent_id,</if> - <if test="menuName != null and menuName != ''">menu_name,</if> - <if test="orderNum != null">order_num,</if> - <if test="path != null and path != ''">path,</if> - <if test="component != null and component != ''">component,</if> - <if test="query != null and query != ''">`query`,</if> - <if test="isFrame != null and isFrame != ''">is_frame,</if> - <if test="isCache != null and isCache != ''">is_cache,</if> - <if test="menuType != null and menuType != ''">menu_type,</if> - <if test="visible != null">visible,</if> - <if test="status != null">status,</if> - <if test="perms !=null and perms != ''">perms,</if> - <if test="icon != null and icon != ''">icon,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="menuId != null and menuId != 0">#{menuId},</if> - <if test="parentId != null and parentId != 0">#{parentId},</if> - <if test="menuName != null and menuName != ''">#{menuName},</if> - <if test="orderNum != null">#{orderNum},</if> - <if test="path != null and path != ''">#{path},</if> - <if test="component != null and component != ''">#{component},</if> - <if test="query != null and query != ''">#{query},</if> - <if test="isFrame != null and isFrame != ''">#{isFrame},</if> - <if test="isCache != null and isCache != ''">#{isCache},</if> - <if test="menuType != null and menuType != ''">#{menuType},</if> - <if test="visible != null">#{visible},</if> - <if test="status != null">#{status},</if> - <if test="perms !=null and perms != ''">#{perms},</if> - <if test="icon != null and icon != ''">#{icon},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - - <delete id="deleteMenuById" parameterType="Long"> - delete from sys_menu where menu_id = #{menuId} - </delete> + <if test="menuCheckStrictly"> + and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id = + rm.menu_id and rm.role_id = #{roleId}) + </if> + order by m.parent_id, m.order_num + </select> + + <select id="selectMenuPerms" resultType="String"> + select distinct m.perms + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + left join sys_user_role ur on rm.role_id = ur.role_id + </select> + + <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String"> + select distinct m.perms + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + left join sys_user_role ur on rm.role_id = ur.role_id + left join sys_role r on r.role_id = ur.role_id + where m.status = '0' + and r.status = '0' + and ur.user_id = #{userId} + </select> + + <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String"> + select distinct m.perms + from sys_menu m + left join sys_role_menu rm on m.menu_id = rm.menu_id + where m.status = '0' + and rm.role_id = #{roleId} + </select> + + <select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult"> + <include refid="selectMenuVo"/> + where menu_id = #{menuId} + </select> + + <select id="hasChildByMenuId" resultType="Integer"> + select count(1) + from sys_menu + where parent_id = #{menuId} + </select> + + <select id="checkMenuNameUnique" parameterType="com.ruoyi.common.core.domain.entity.SysMenu" + resultMap="SysMenuResult"> + <include refid="selectMenuVo"/> + where menu_name=#{menuName} and parent_id = #{parentId} limit 1 + </select> + + <update id="updateMenu" parameterType="com.ruoyi.common.core.domain.entity.SysMenu"> + update sys_menu + <set> + <if test="menuName != null and menuName != ''">menu_name = #{menuName},</if> + <if test="parentId != null">parent_id = #{parentId},</if> + <if test="orderNum != null">order_num = #{orderNum},</if> + <if test="path != null and path != ''">path = #{path},</if> + <if test="component != null">component = #{component},</if> + <if test="query != null">`query` = #{query},</if> + <if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if> + <if test="isCache != null and isCache != ''">is_cache = #{isCache},</if> + <if test="menuType != null and menuType != ''">menu_type = #{menuType},</if> + <if test="visible != null">visible = #{visible},</if> + <if test="status != null">status = #{status},</if> + <if test="perms !=null">perms = #{perms},</if> + <if test="icon !=null and icon != ''">icon = #{icon},</if> + <if test="remark != null and remark != ''">remark = #{remark},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where menu_id = #{menuId} + </update> + + <insert id="insertMenu" parameterType="com.ruoyi.common.core.domain.entity.SysMenu"> + insert into sys_menu( + <if test="menuId != null and menuId != 0">menu_id,</if> + <if test="parentId != null and parentId != 0">parent_id,</if> + <if test="menuName != null and menuName != ''">menu_name,</if> + <if test="orderNum != null">order_num,</if> + <if test="path != null and path != ''">path,</if> + <if test="component != null and component != ''">component,</if> + <if test="query != null and query != ''">`query`,</if> + <if test="isFrame != null and isFrame != ''">is_frame,</if> + <if test="isCache != null and isCache != ''">is_cache,</if> + <if test="menuType != null and menuType != ''">menu_type,</if> + <if test="visible != null">visible,</if> + <if test="status != null">status,</if> + <if test="perms !=null and perms != ''">perms,</if> + <if test="icon != null and icon != ''">icon,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="menuId != null and menuId != 0">#{menuId},</if> + <if test="parentId != null and parentId != 0">#{parentId},</if> + <if test="menuName != null and menuName != ''">#{menuName},</if> + <if test="orderNum != null">#{orderNum},</if> + <if test="path != null and path != ''">#{path},</if> + <if test="component != null and component != ''">#{component},</if> + <if test="query != null and query != ''">#{query},</if> + <if test="isFrame != null and isFrame != ''">#{isFrame},</if> + <if test="isCache != null and isCache != ''">#{isCache},</if> + <if test="menuType != null and menuType != ''">#{menuType},</if> + <if test="visible != null">#{visible},</if> + <if test="status != null">#{status},</if> + <if test="perms !=null and perms != ''">#{perms},</if> + <if test="icon != null and icon != ''">#{icon},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> + + <delete id="deleteMenuById" parameterType="Long"> + delete + from sys_menu + where menu_id = #{menuId} + </delete> </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml index 65d3079..4d3158a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -1,89 +1,100 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysNoticeMapper"> - - <resultMap type="SysNotice" id="SysNoticeResult"> - <result property="noticeId" column="notice_id" /> - <result property="noticeTitle" column="notice_title" /> - <result property="noticeType" column="notice_type" /> - <result property="noticeContent" column="notice_content" /> - <result property="status" column="status" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - <result property="remark" column="remark" /> + + <resultMap type="com.ruoyi.system.domain.SysNotice" id="SysNoticeResult"> + <result property="noticeId" column="notice_id"/> + <result property="noticeTitle" column="notice_title"/> + <result property="noticeType" column="notice_type"/> + <result property="noticeContent" column="notice_content"/> + <result property="status" column="status"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> </resultMap> - + <sql id="selectNoticeVo"> - select notice_id, notice_title, notice_type, cast(notice_content as char) as notice_content, status, create_by, create_time, update_by, update_time, remark - from sys_notice + select notice_id, + notice_title, + notice_type, + cast(notice_content as char) as notice_content, + status, + create_by, + create_time, + update_by, + update_time, + remark + from sys_notice </sql> - + <select id="selectNoticeById" parameterType="Long" resultMap="SysNoticeResult"> <include refid="selectNoticeVo"/> where notice_id = #{noticeId} </select> - - <select id="selectNoticeList" parameterType="SysNotice" resultMap="SysNoticeResult"> + + <select id="selectNoticeList" parameterType="com.ruoyi.system.domain.SysNotice" resultMap="SysNoticeResult"> <include refid="selectNoticeVo"/> <where> - <if test="noticeTitle != null and noticeTitle != ''"> - AND notice_title like concat('%', #{noticeTitle}, '%') - </if> - <if test="noticeType != null and noticeType != ''"> - AND notice_type = #{noticeType} - </if> - <if test="createBy != null and createBy != ''"> - AND create_by like concat('%', #{createBy}, '%') - </if> - </where> + <if test="noticeTitle != null and noticeTitle != ''"> + AND notice_title like concat('%', #{noticeTitle}, '%') + </if> + <if test="noticeType != null and noticeType != ''"> + AND notice_type = #{noticeType} + </if> + <if test="createBy != null and createBy != ''"> + AND create_by like concat('%', #{createBy}, '%') + </if> + </where> </select> - - <insert id="insertNotice" parameterType="SysNotice"> + + <insert id="insertNotice" parameterType="com.ruoyi.system.domain.SysNotice"> insert into sys_notice ( - <if test="noticeTitle != null and noticeTitle != '' ">notice_title, </if> - <if test="noticeType != null and noticeType != '' ">notice_type, </if> - <if test="noticeContent != null and noticeContent != '' ">notice_content, </if> - <if test="status != null and status != '' ">status, </if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle}, </if> - <if test="noticeType != null and noticeType != ''">#{noticeType}, </if> - <if test="noticeContent != null and noticeContent != ''">#{noticeContent}, </if> - <if test="status != null and status != ''">#{status}, </if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) + <if test="noticeTitle != null and noticeTitle != '' ">notice_title,</if> + <if test="noticeType != null and noticeType != '' ">notice_type,</if> + <if test="noticeContent != null and noticeContent != '' ">notice_content,</if> + <if test="status != null and status != '' ">status,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="noticeTitle != null and noticeTitle != ''">#{noticeTitle},</if> + <if test="noticeType != null and noticeType != ''">#{noticeType},</if> + <if test="noticeContent != null and noticeContent != ''">#{noticeContent},</if> + <if test="status != null and status != ''">#{status},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) </insert> - - <update id="updateNotice" parameterType="SysNotice"> - update sys_notice + + <update id="updateNotice" parameterType="com.ruoyi.system.domain.SysNotice"> + update sys_notice <set> - <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle}, </if> - <if test="noticeType != null and noticeType != ''">notice_type = #{noticeType}, </if> - <if test="noticeContent != null">notice_content = #{noticeContent}, </if> - <if test="status != null and status != ''">status = #{status}, </if> + <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle},</if> + <if test="noticeType != null and noticeType != ''">notice_type = #{noticeType},</if> + <if test="noticeContent != null">notice_content = #{noticeContent},</if> + <if test="status != null and status != ''">status = #{status},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() + update_time = sysdate() </set> where notice_id = #{noticeId} </update> - + <delete id="deleteNoticeById" parameterType="Long"> - delete from sys_notice where notice_id = #{noticeId} + delete + from sys_notice + where notice_id = #{noticeId} </delete> - + <delete id="deleteNoticeByIds" parameterType="Long"> - delete from sys_notice where notice_id in + delete from sys_notice where notice_id in <foreach item="noticeId" collection="array" open="(" separator="," close=")"> #{noticeId} </foreach> </delete> - + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml index 201db07..0241d65 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -1,86 +1,106 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysOperLogMapper"> - <resultMap type="SysOperLog" id="SysOperLogResult"> - <id property="operId" column="oper_id" /> - <result property="title" column="title" /> - <result property="businessType" column="business_type" /> - <result property="method" column="method" /> - <result property="requestMethod" column="request_method" /> - <result property="operatorType" column="operator_type" /> - <result property="operName" column="oper_name" /> - <result property="deptName" column="dept_name" /> - <result property="operUrl" column="oper_url" /> - <result property="operIp" column="oper_ip" /> - <result property="operLocation" column="oper_location" /> - <result property="operParam" column="oper_param" /> - <result property="jsonResult" column="json_result" /> - <result property="status" column="status" /> - <result property="errorMsg" column="error_msg" /> - <result property="operTime" column="oper_time" /> - <result property="costTime" column="cost_time" /> - </resultMap> + <resultMap type="com.ruoyi.system.domain.SysOperLog" id="SysOperLogResult"> + <id property="operId" column="oper_id"/> + <result property="title" column="title"/> + <result property="businessType" column="business_type"/> + <result property="method" column="method"/> + <result property="requestMethod" column="request_method"/> + <result property="operatorType" column="operator_type"/> + <result property="operName" column="oper_name"/> + <result property="deptName" column="dept_name"/> + <result property="operUrl" column="oper_url"/> + <result property="operIp" column="oper_ip"/> + <result property="operLocation" column="oper_location"/> + <result property="operParam" column="oper_param"/> + <result property="jsonResult" column="json_result"/> + <result property="status" column="status"/> + <result property="errorMsg" column="error_msg"/> + <result property="operTime" column="oper_time"/> + <result property="costTime" column="cost_time"/> + </resultMap> - <sql id="selectOperLogVo"> - select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time + <sql id="selectOperLogVo"> + select oper_id, + title, + business_type, + method, + request_method, + operator_type, + oper_name, + dept_name, + oper_url, + oper_ip, + oper_location, + oper_param, + json_result, + status, + error_msg, + oper_time, + cost_time from sys_oper_log </sql> - - <insert id="insertOperlog" parameterType="SysOperLog"> - insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) - values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) - </insert> - - <select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult"> - <include refid="selectOperLogVo"/> - <where> - <if test="operIp != null and operIp != ''"> - AND oper_ip like concat('%', #{operIp}, '%') - </if> - <if test="title != null and title != ''"> - AND title like concat('%', #{title}, '%') - </if> - <if test="businessType != null"> - AND business_type = #{businessType} - </if> - <if test="businessTypes != null and businessTypes.length > 0"> - AND business_type in - <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")"> - #{businessType} - </foreach> - </if> - <if test="status != null"> - AND status = #{status} - </if> - <if test="operName != null and operName != ''"> - AND oper_name like concat('%', #{operName}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - AND oper_time >= #{params.beginTime} - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - AND oper_time <= #{params.endTime} - </if> - </where> - order by oper_id desc - </select> - - <delete id="deleteOperLogByIds" parameterType="Long"> - delete from sys_oper_log where oper_id in - <foreach collection="array" item="operId" open="(" separator="," close=")"> - #{operId} - </foreach> - </delete> - - <select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult"> - <include refid="selectOperLogVo"/> - where oper_id = #{operId} - </select> - - <update id="cleanOperLog"> + + <insert id="insertOperlog" parameterType="com.ruoyi.system.domain.SysOperLog"> + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, + oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, + cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, + #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, + #{costTime}, sysdate()) + </insert> + + <select id="selectOperLogList" parameterType="com.ruoyi.system.domain.SysOperLog" resultMap="SysOperLogResult"> + <include refid="selectOperLogVo"/> + <where> + <if test="operIp != null and operIp != ''"> + AND oper_ip like concat('%', #{operIp}, '%') + </if> + <if test="title != null and title != ''"> + AND title like concat('%', #{title}, '%') + </if> + <if test="businessType != null"> + AND business_type = #{businessType} + </if> + <if test="businessTypes != null and businessTypes.length > 0"> + AND business_type in + <foreach collection="businessTypes" item="businessType" open="(" separator="," close=")"> + #{businessType} + </foreach> + </if> + <if test="status != null"> + AND status = #{status} + </if> + <if test="operName != null and operName != ''"> + AND oper_name like concat('%', #{operName}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + AND oper_time >= #{params.beginTime} + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + AND oper_time <= #{params.endTime} + </if> + </where> + order by oper_id desc + </select> + + <delete id="deleteOperLogByIds" parameterType="Long"> + delete from sys_oper_log where oper_id in + <foreach collection="array" item="operId" open="(" separator="," close=")"> + #{operId} + </foreach> + </delete> + + <select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult"> + <include refid="selectOperLogVo"/> + where oper_id = #{operId} + </select> + + <update id="cleanOperLog"> truncate table sys_oper_log </update> diff --git a/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml index 227c459..039b980 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -1,122 +1,132 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysPostMapper"> - <resultMap type="SysPost" id="SysPostResult"> - <id property="postId" column="post_id" /> - <result property="postCode" column="post_code" /> - <result property="postName" column="post_name" /> - <result property="postSort" column="post_sort" /> - <result property="status" column="status" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - <result property="remark" column="remark" /> - </resultMap> - - <sql id="selectPostVo"> - select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark - from sys_post + <resultMap type="com.ruoyi.system.domain.SysPost" id="SysPostResult"> + <id property="postId" column="post_id"/> + <result property="postCode" column="post_code"/> + <result property="postName" column="post_name"/> + <result property="postSort" column="post_sort"/> + <result property="status" column="status"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectPostVo"> + select post_id, + post_code, + post_name, + post_sort, + status, + create_by, + create_time, + remark + from sys_post </sql> - - <select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult"> - <include refid="selectPostVo"/> - <where> - <if test="postCode != null and postCode != ''"> - AND post_code like concat('%', #{postCode}, '%') - </if> - <if test="status != null and status != ''"> - AND status = #{status} - </if> - <if test="postName != null and postName != ''"> - AND post_name like concat('%', #{postName}, '%') - </if> - </where> - </select> - - <select id="selectPostAll" resultMap="SysPostResult"> - <include refid="selectPostVo"/> - </select> - - <select id="selectPostById" parameterType="Long" resultMap="SysPostResult"> - <include refid="selectPostVo"/> - where post_id = #{postId} - </select> - - <select id="selectPostListByUserId" parameterType="Long" resultType="Long"> - select p.post_id + + <select id="selectPostList" parameterType="com.ruoyi.system.domain.SysPost" resultMap="SysPostResult"> + <include refid="selectPostVo"/> + <where> + <if test="postCode != null and postCode != ''"> + AND post_code like concat('%', #{postCode}, '%') + </if> + <if test="status != null and status != ''"> + AND status = #{status} + </if> + <if test="postName != null and postName != ''"> + AND post_name like concat('%', #{postName}, '%') + </if> + </where> + </select> + + <select id="selectPostAll" resultMap="SysPostResult"> + <include refid="selectPostVo"/> + </select> + + <select id="selectPostById" parameterType="Long" resultMap="SysPostResult"> + <include refid="selectPostVo"/> + where post_id = #{postId} + </select> + + <select id="selectPostListByUserId" parameterType="Long" resultType="Long"> + select p.post_id + from sys_post p + left join sys_user_post up on up.post_id = p.post_id + left join sys_user u on u.user_id = up.user_id + where u.user_id = #{userId} + </select> + + <select id="selectPostsByUserName" parameterType="String" resultMap="SysPostResult"> + select p.post_id, p.post_name, p.post_code from sys_post p - left join sys_user_post up on up.post_id = p.post_id - left join sys_user u on u.user_id = up.user_id - where u.user_id = #{userId} - </select> - - <select id="selectPostsByUserName" parameterType="String" resultMap="SysPostResult"> - select p.post_id, p.post_name, p.post_code - from sys_post p - left join sys_user_post up on up.post_id = p.post_id - left join sys_user u on u.user_id = up.user_id - where u.user_name = #{userName} - </select> - - <select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult"> - <include refid="selectPostVo"/> - where post_name=#{postName} limit 1 - </select> - - <select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult"> - <include refid="selectPostVo"/> - where post_code=#{postCode} limit 1 - </select> - - <update id="updatePost" parameterType="SysPost"> - update sys_post - <set> - <if test="postCode != null and postCode != ''">post_code = #{postCode},</if> - <if test="postName != null and postName != ''">post_name = #{postName},</if> - <if test="postSort != null">post_sort = #{postSort},</if> - <if test="status != null and status != ''">status = #{status},</if> - <if test="remark != null">remark = #{remark},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where post_id = #{postId} - </update> - - <insert id="insertPost" parameterType="SysPost" useGeneratedKeys="true" keyProperty="postId"> - insert into sys_post( - <if test="postId != null and postId != 0">post_id,</if> - <if test="postCode != null and postCode != ''">post_code,</if> - <if test="postName != null and postName != ''">post_name,</if> - <if test="postSort != null">post_sort,</if> - <if test="status != null and status != ''">status,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="postId != null and postId != 0">#{postId},</if> - <if test="postCode != null and postCode != ''">#{postCode},</if> - <if test="postName != null and postName != ''">#{postName},</if> - <if test="postSort != null">#{postSort},</if> - <if test="status != null and status != ''">#{status},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - - <delete id="deletePostById" parameterType="Long"> - delete from sys_post where post_id = #{postId} - </delete> - - <delete id="deletePostByIds" parameterType="Long"> - delete from sys_post where post_id in - <foreach collection="array" item="postId" open="(" separator="," close=")"> - #{postId} - </foreach> - </delete> + left join sys_user_post up on up.post_id = p.post_id + left join sys_user u on u.user_id = up.user_id + where u.user_name = #{userName} + </select> + + <select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult"> + <include refid="selectPostVo"/> + where post_name=#{postName} limit 1 + </select> + + <select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult"> + <include refid="selectPostVo"/> + where post_code=#{postCode} limit 1 + </select> + + <update id="updatePost" parameterType="com.ruoyi.system.domain.SysPost"> + update sys_post + <set> + <if test="postCode != null and postCode != ''">post_code = #{postCode},</if> + <if test="postName != null and postName != ''">post_name = #{postName},</if> + <if test="postSort != null">post_sort = #{postSort},</if> + <if test="status != null and status != ''">status = #{status},</if> + <if test="remark != null">remark = #{remark},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where post_id = #{postId} + </update> + + <insert id="insertPost" parameterType="com.ruoyi.system.domain.SysPost" useGeneratedKeys="true" + keyProperty="postId"> + insert into sys_post( + <if test="postId != null and postId != 0">post_id,</if> + <if test="postCode != null and postCode != ''">post_code,</if> + <if test="postName != null and postName != ''">post_name,</if> + <if test="postSort != null">post_sort,</if> + <if test="status != null and status != ''">status,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="postId != null and postId != 0">#{postId},</if> + <if test="postCode != null and postCode != ''">#{postCode},</if> + <if test="postName != null and postName != ''">#{postName},</if> + <if test="postSort != null">#{postSort},</if> + <if test="status != null and status != ''">#{status},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> + + <delete id="deletePostById" parameterType="Long"> + delete + from sys_post + where post_id = #{postId} + </delete> + + <delete id="deletePostByIds" parameterType="Long"> + delete from sys_post where post_id in + <foreach collection="array" item="postId" open="(" separator="," close=")"> + #{postId} + </foreach> + </delete> </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml index 7c4139b..5e82f9f 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -1,34 +1,38 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysRoleDeptMapper"> - <resultMap type="SysRoleDept" id="SysRoleDeptResult"> - <result property="roleId" column="role_id" /> - <result property="deptId" column="dept_id" /> - </resultMap> + <resultMap type="com.ruoyi.system.domain.SysRoleDept" id="SysRoleDeptResult"> + <result property="roleId" column="role_id"/> + <result property="deptId" column="dept_id"/> + </resultMap> + + <delete id="deleteRoleDeptByRoleId" parameterType="Long"> + delete + from sys_role_dept + where role_id = #{roleId} + </delete> + + <select id="selectCountRoleDeptByDeptId" resultType="Integer"> + select count(1) + from sys_role_dept + where dept_id = #{deptId} + </select> + + <delete id="deleteRoleDept" parameterType="Long"> + delete from sys_role_dept where role_id in + <foreach collection="array" item="roleId" open="(" separator="," close=")"> + #{roleId} + </foreach> + </delete> + + <insert id="batchRoleDept"> + insert into sys_role_dept(role_id, dept_id) values + <foreach item="item" index="index" collection="list" separator=","> + (#{item.roleId},#{item.deptId}) + </foreach> + </insert> - <delete id="deleteRoleDeptByRoleId" parameterType="Long"> - delete from sys_role_dept where role_id=#{roleId} - </delete> - - <select id="selectCountRoleDeptByDeptId" resultType="Integer"> - select count(1) from sys_role_dept where dept_id=#{deptId} - </select> - - <delete id="deleteRoleDept" parameterType="Long"> - delete from sys_role_dept where role_id in - <foreach collection="array" item="roleId" open="(" separator="," close=")"> - #{roleId} - </foreach> - </delete> - - <insert id="batchRoleDept"> - insert into sys_role_dept(role_id, dept_id) values - <foreach item="item" index="index" collection="list" separator=","> - (#{item.roleId},#{item.deptId}) - </foreach> - </insert> - </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 52306c2..52f7b28 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -1,152 +1,164 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysRoleMapper"> - <resultMap type="SysRole" id="SysRoleResult"> - <id property="roleId" column="role_id" /> - <result property="roleName" column="role_name" /> - <result property="roleKey" column="role_key" /> - <result property="roleSort" column="role_sort" /> - <result property="dataScope" column="data_scope" /> - <result property="menuCheckStrictly" column="menu_check_strictly" /> - <result property="deptCheckStrictly" column="dept_check_strictly" /> - <result property="status" column="status" /> - <result property="delFlag" column="del_flag" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - <result property="remark" column="remark" /> - </resultMap> - - <sql id="selectRoleVo"> - select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, - r.status, r.del_flag, r.create_time, r.remark + <resultMap type="com.ruoyi.common.core.domain.entity.SysRole" id="SysRoleResult"> + <id property="roleId" column="role_id"/> + <result property="roleName" column="role_name"/> + <result property="roleKey" column="role_key"/> + <result property="roleSort" column="role_sort"/> + <result property="dataScope" column="data_scope"/> + <result property="menuCheckStrictly" column="menu_check_strictly"/> + <result property="deptCheckStrictly" column="dept_check_strictly"/> + <result property="status" column="status"/> + <result property="delFlag" column="del_flag"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + </resultMap> + + <sql id="selectRoleVo"> + select distinct r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.menu_check_strictly, + r.dept_check_strictly, + r.status, + r.del_flag, + r.create_time, + r.remark from sys_role r - left join sys_user_role ur on ur.role_id = r.role_id - left join sys_user u on u.user_id = ur.user_id - left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id </sql> - - <select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - where r.del_flag = '0' - <if test="roleId != null and roleId != 0"> - AND r.role_id = #{roleId} - </if> - <if test="roleName != null and roleName != ''"> - AND r.role_name like concat('%', #{roleName}, '%') - </if> - <if test="status != null and status != ''"> - AND r.status = #{status} - </if> - <if test="roleKey != null and roleKey != ''"> - AND r.role_key like concat('%', #{roleKey}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - and date_format(r.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - </if> - <!-- 数据范围过滤 --> - ${params.dataScope} - order by r.role_sort - </select> - - <select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - WHERE r.del_flag = '0' and ur.user_id = #{userId} - </select> - - <select id="selectRoleAll" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - </select> - - <select id="selectRoleListByUserId" parameterType="Long" resultType="Long"> - select r.role_id + + <select id="selectRoleList" parameterType="com.ruoyi.common.core.domain.entity.SysRole" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + where r.del_flag = '0' + <if test="roleId != null and roleId != 0"> + AND r.role_id = #{roleId} + </if> + <if test="roleName != null and roleName != ''"> + AND r.role_name like concat('%', #{roleName}, '%') + </if> + <if test="status != null and status != ''"> + AND r.status = #{status} + </if> + <if test="roleKey != null and roleKey != ''"> + AND r.role_key like concat('%', #{roleKey}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + and date_format(r.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + and date_format(r.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + </if> + <!-- 数据范围过滤 --> + ${params.dataScope} + order by r.role_sort + </select> + + <select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + WHERE r.del_flag = '0' and ur.user_id = #{userId} + </select> + + <select id="selectRoleAll" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + </select> + + <select id="selectRoleListByUserId" parameterType="Long" resultType="Long"> + select r.role_id from sys_role r - left join sys_user_role ur on ur.role_id = r.role_id - left join sys_user u on u.user_id = ur.user_id - where u.user_id = #{userId} - </select> - - <select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - where r.role_id = #{roleId} - </select> - - <select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - WHERE r.del_flag = '0' and u.user_name = #{userName} - </select> - - <select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - where r.role_name=#{roleName} and r.del_flag = '0' limit 1 - </select> - - <select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult"> - <include refid="selectRoleVo"/> - where r.role_key=#{roleKey} and r.del_flag = '0' limit 1 - </select> - - <insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId"> - insert into sys_role( - <if test="roleId != null and roleId != 0">role_id,</if> - <if test="roleName != null and roleName != ''">role_name,</if> - <if test="roleKey != null and roleKey != ''">role_key,</if> - <if test="roleSort != null">role_sort,</if> - <if test="dataScope != null and dataScope != ''">data_scope,</if> - <if test="menuCheckStrictly != null">menu_check_strictly,</if> - <if test="deptCheckStrictly != null">dept_check_strictly,</if> - <if test="status != null and status != ''">status,</if> - <if test="remark != null and remark != ''">remark,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - create_time - )values( - <if test="roleId != null and roleId != 0">#{roleId},</if> - <if test="roleName != null and roleName != ''">#{roleName},</if> - <if test="roleKey != null and roleKey != ''">#{roleKey},</if> - <if test="roleSort != null">#{roleSort},</if> - <if test="dataScope != null and dataScope != ''">#{dataScope},</if> - <if test="menuCheckStrictly != null">#{menuCheckStrictly},</if> - <if test="deptCheckStrictly != null">#{deptCheckStrictly},</if> - <if test="status != null and status != ''">#{status},</if> - <if test="remark != null and remark != ''">#{remark},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - sysdate() - ) - </insert> - - <update id="updateRole" parameterType="SysRole"> - update sys_role - <set> - <if test="roleName != null and roleName != ''">role_name = #{roleName},</if> - <if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if> - <if test="roleSort != null">role_sort = #{roleSort},</if> - <if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if> - <if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if> - <if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if> - <if test="status != null and status != ''">status = #{status},</if> - <if test="remark != null">remark = #{remark},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - update_time = sysdate() - </set> - where role_id = #{roleId} - </update> - - <delete id="deleteRoleById" parameterType="Long"> - update sys_role set del_flag = '2' where role_id = #{roleId} - </delete> - - <delete id="deleteRoleByIds" parameterType="Long"> - update sys_role set del_flag = '2' where role_id in - <foreach collection="array" item="roleId" open="(" separator="," close=")"> - #{roleId} - </foreach> - </delete> - + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + where u.user_id = #{userId} + </select> + + <select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + where r.role_id = #{roleId} + </select> + + <select id="selectRolesByUserName" parameterType="String" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + WHERE r.del_flag = '0' and u.user_name = #{userName} + </select> + + <select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + where r.role_name=#{roleName} and r.del_flag = '0' limit 1 + </select> + + <select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult"> + <include refid="selectRoleVo"/> + where r.role_key=#{roleKey} and r.del_flag = '0' limit 1 + </select> + + <insert id="insertRole" parameterType="com.ruoyi.common.core.domain.entity.SysRole" useGeneratedKeys="true" + keyProperty="roleId"> + insert into sys_role( + <if test="roleId != null and roleId != 0">role_id,</if> + <if test="roleName != null and roleName != ''">role_name,</if> + <if test="roleKey != null and roleKey != ''">role_key,</if> + <if test="roleSort != null">role_sort,</if> + <if test="dataScope != null and dataScope != ''">data_scope,</if> + <if test="menuCheckStrictly != null">menu_check_strictly,</if> + <if test="deptCheckStrictly != null">dept_check_strictly,</if> + <if test="status != null and status != ''">status,</if> + <if test="remark != null and remark != ''">remark,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + create_time + )values( + <if test="roleId != null and roleId != 0">#{roleId},</if> + <if test="roleName != null and roleName != ''">#{roleName},</if> + <if test="roleKey != null and roleKey != ''">#{roleKey},</if> + <if test="roleSort != null">#{roleSort},</if> + <if test="dataScope != null and dataScope != ''">#{dataScope},</if> + <if test="menuCheckStrictly != null">#{menuCheckStrictly},</if> + <if test="deptCheckStrictly != null">#{deptCheckStrictly},</if> + <if test="status != null and status != ''">#{status},</if> + <if test="remark != null and remark != ''">#{remark},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + sysdate() + ) + </insert> + + <update id="updateRole" parameterType="com.ruoyi.common.core.domain.entity.SysRole"> + update sys_role + <set> + <if test="roleName != null and roleName != ''">role_name = #{roleName},</if> + <if test="roleKey != null and roleKey != ''">role_key = #{roleKey},</if> + <if test="roleSort != null">role_sort = #{roleSort},</if> + <if test="dataScope != null and dataScope != ''">data_scope = #{dataScope},</if> + <if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if> + <if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if> + <if test="status != null and status != ''">status = #{status},</if> + <if test="remark != null">remark = #{remark},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + update_time = sysdate() + </set> + where role_id = #{roleId} + </update> + + <delete id="deleteRoleById" parameterType="Long"> + update sys_role + set del_flag = '2' + where role_id = #{roleId} + </delete> + + <delete id="deleteRoleByIds" parameterType="Long"> + update sys_role set del_flag = '2' where role_id in + <foreach collection="array" item="roleId" open="(" separator="," close=")"> + #{roleId} + </foreach> + </delete> + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml index cb60a85..49dbdbd 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -1,34 +1,38 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysRoleMenuMapper"> - <resultMap type="SysRoleMenu" id="SysRoleMenuResult"> - <result property="roleId" column="role_id" /> - <result property="menuId" column="menu_id" /> - </resultMap> - - <select id="checkMenuExistRole" resultType="Integer"> - select count(1) from sys_role_menu where menu_id = #{menuId} - </select> + <resultMap type="com.ruoyi.system.domain.SysRoleMenu" id="SysRoleMenuResult"> + <result property="roleId" column="role_id"/> + <result property="menuId" column="menu_id"/> + </resultMap> + + <select id="checkMenuExistRole" resultType="Integer"> + select count(1) + from sys_role_menu + where menu_id = #{menuId} + </select> + + <delete id="deleteRoleMenuByRoleId" parameterType="Long"> + delete + from sys_role_menu + where role_id = #{roleId} + </delete> + + <delete id="deleteRoleMenu" parameterType="Long"> + delete from sys_role_menu where role_id in + <foreach collection="array" item="roleId" open="(" separator="," close=")"> + #{roleId} + </foreach> + </delete> + + <insert id="batchRoleMenu"> + insert into sys_role_menu(role_id, menu_id) values + <foreach item="item" index="index" collection="list" separator=","> + (#{item.roleId},#{item.menuId}) + </foreach> + </insert> - <delete id="deleteRoleMenuByRoleId" parameterType="Long"> - delete from sys_role_menu where role_id=#{roleId} - </delete> - - <delete id="deleteRoleMenu" parameterType="Long"> - delete from sys_role_menu where role_id in - <foreach collection="array" item="roleId" open="(" separator="," close=")"> - #{roleId} - </foreach> - </delete> - - <insert id="batchRoleMenu"> - insert into sys_role_menu(role_id, menu_id) values - <foreach item="item" index="index" collection="list" separator=","> - (#{item.roleId},#{item.menuId}) - </foreach> - </insert> - </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index eca3694..c038083 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -1,221 +1,274 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysUserMapper"> - <resultMap type="SysUser" id="SysUserResult"> - <id property="userId" column="user_id" /> - <result property="deptId" column="dept_id" /> - <result property="userName" column="user_name" /> - <result property="nickName" column="nick_name" /> - <result property="email" column="email" /> - <result property="phonenumber" column="phonenumber" /> - <result property="sex" column="sex" /> - <result property="avatar" column="avatar" /> - <result property="password" column="password" /> - <result property="status" column="status" /> - <result property="delFlag" column="del_flag" /> - <result property="loginIp" column="login_ip" /> - <result property="loginDate" column="login_date" /> - <result property="createBy" column="create_by" /> - <result property="createTime" column="create_time" /> - <result property="updateBy" column="update_by" /> - <result property="updateTime" column="update_time" /> - <result property="remark" column="remark" /> - <association property="dept" javaType="SysDept" resultMap="deptResult" /> - <collection property="roles" javaType="java.util.List" resultMap="RoleResult" /> + <resultMap type="com.ruoyi.common.core.domain.entity.SysUser" id="SysUserResult"> + <id property="userId" column="user_id"/> + <result property="deptId" column="dept_id"/> + <result property="userName" column="user_name"/> + <result property="nickName" column="nick_name"/> + <result property="email" column="email"/> + <result property="phonenumber" column="phonenumber"/> + <result property="sex" column="sex"/> + <result property="avatar" column="avatar"/> + <result property="password" column="password"/> + <result property="status" column="status"/> + <result property="delFlag" column="del_flag"/> + <result property="loginIp" column="login_ip"/> + <result property="loginDate" column="login_date"/> + <result property="createBy" column="create_by"/> + <result property="createTime" column="create_time"/> + <result property="updateBy" column="update_by"/> + <result property="updateTime" column="update_time"/> + <result property="remark" column="remark"/> + <association property="dept" javaType="com.ruoyi.common.core.domain.entity.SysDept" resultMap="deptResult"/> + <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/> </resultMap> - - <resultMap id="deptResult" type="SysDept"> - <id property="deptId" column="dept_id" /> - <result property="parentId" column="parent_id" /> - <result property="deptName" column="dept_name" /> - <result property="ancestors" column="ancestors" /> - <result property="orderNum" column="order_num" /> - <result property="leader" column="leader" /> - <result property="status" column="dept_status" /> + + <resultMap id="deptResult" type="com.ruoyi.common.core.domain.entity.SysDept"> + <id property="deptId" column="dept_id"/> + <result property="parentId" column="parent_id"/> + <result property="deptName" column="dept_name"/> + <result property="ancestors" column="ancestors"/> + <result property="orderNum" column="order_num"/> + <result property="leader" column="leader"/> + <result property="status" column="dept_status"/> </resultMap> - - <resultMap id="RoleResult" type="SysRole"> - <id property="roleId" column="role_id" /> - <result property="roleName" column="role_name" /> - <result property="roleKey" column="role_key" /> - <result property="roleSort" column="role_sort" /> - <result property="dataScope" column="data_scope" /> - <result property="status" column="role_status" /> + + <resultMap id="RoleResult" type="com.ruoyi.common.core.domain.entity.SysRole"> + <id property="roleId" column="role_id"/> + <result property="roleName" column="role_name"/> + <result property="roleKey" column="role_key"/> + <result property="roleSort" column="role_sort"/> + <result property="dataScope" column="data_scope"/> + <result property="status" column="role_status"/> </resultMap> - - <sql id="selectUserVo"> - select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, - d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, - r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status + + <sql id="selectUserVo"> + select u.user_id, + u.dept_id, + u.user_name, + u.nick_name, + u.email, + u.avatar, + u.phonenumber, + u.password, + u.sex, + u.status, + u.del_flag, + u.login_ip, + u.login_date, + u.create_by, + u.create_time, + u.remark, + d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.status as dept_status, + r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.status as role_status from sys_user u - left join sys_dept d on u.dept_id = d.dept_id - left join sys_user_role ur on u.user_id = ur.user_id - left join sys_role r on r.role_id = ur.role_id + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id </sql> - - <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> - select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u - left join sys_dept d on u.dept_id = d.dept_id - where u.del_flag = '0' - <if test="userId != null and userId != 0"> - AND u.user_id = #{userId} - </if> - <if test="userName != null and userName != ''"> - AND u.user_name like concat('%', #{userName}, '%') - </if> - <if test="status != null and status != ''"> - AND u.status = #{status} - </if> - <if test="phonenumber != null and phonenumber != ''"> - AND u.phonenumber like concat('%', #{phonenumber}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> - AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> - AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - </if> - <if test="deptId != null and deptId != 0"> - AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) )) - </if> - <!-- 数据范围过滤 --> - ${params.dataScope} - </select> - - <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult"> - select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time - from sys_user u - left join sys_dept d on u.dept_id = d.dept_id - left join sys_user_role ur on u.user_id = ur.user_id - left join sys_role r on r.role_id = ur.role_id - where u.del_flag = '0' and r.role_id = #{roleId} - <if test="userName != null and userName != ''"> - AND u.user_name like concat('%', #{userName}, '%') - </if> - <if test="phonenumber != null and phonenumber != ''"> - AND u.phonenumber like concat('%', #{phonenumber}, '%') - </if> - <!-- 数据范围过滤 --> - ${params.dataScope} - </select> - - <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult"> - select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time - from sys_user u - left join sys_dept d on u.dept_id = d.dept_id - left join sys_user_role ur on u.user_id = ur.user_id - left join sys_role r on r.role_id = ur.role_id - where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL) - and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and ur.role_id = #{roleId}) - <if test="userName != null and userName != ''"> - AND u.user_name like concat('%', #{userName}, '%') - </if> - <if test="phonenumber != null and phonenumber != ''"> - AND u.phonenumber like concat('%', #{phonenumber}, '%') - </if> - <!-- 数据范围过滤 --> - ${params.dataScope} - </select> - - <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult"> - <include refid="selectUserVo"/> - where u.user_name = #{userName} and u.del_flag = '0' - </select> - - <select id="selectUserById" parameterType="Long" resultMap="SysUserResult"> - <include refid="selectUserVo"/> - where u.user_id = #{userId} - </select> - - <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult"> - select user_id, user_name from sys_user where user_name = #{userName} and del_flag = '0' limit 1 - </select> - - <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult"> - select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1 - </select> - - <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult"> - select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1 - </select> - - <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> - insert into sys_user( - <if test="userId != null and userId != 0">user_id,</if> - <if test="deptId != null and deptId != 0">dept_id,</if> - <if test="userName != null and userName != ''">user_name,</if> - <if test="nickName != null and nickName != ''">nick_name,</if> - <if test="email != null and email != ''">email,</if> - <if test="avatar != null and avatar != ''">avatar,</if> - <if test="phonenumber != null and phonenumber != ''">phonenumber,</if> - <if test="sex != null and sex != ''">sex,</if> - <if test="password != null and password != ''">password,</if> - <if test="status != null and status != ''">status,</if> - <if test="createBy != null and createBy != ''">create_by,</if> - <if test="remark != null and remark != ''">remark,</if> - create_time - )values( - <if test="userId != null and userId != ''">#{userId},</if> - <if test="deptId != null and deptId != ''">#{deptId},</if> - <if test="userName != null and userName != ''">#{userName},</if> - <if test="nickName != null and nickName != ''">#{nickName},</if> - <if test="email != null and email != ''">#{email},</if> - <if test="avatar != null and avatar != ''">#{avatar},</if> - <if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if> - <if test="sex != null and sex != ''">#{sex},</if> - <if test="password != null and password != ''">#{password},</if> - <if test="status != null and status != ''">#{status},</if> - <if test="createBy != null and createBy != ''">#{createBy},</if> - <if test="remark != null and remark != ''">#{remark},</if> - sysdate() - ) - </insert> - - <update id="updateUser" parameterType="SysUser"> - update sys_user - <set> - <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if> - <if test="userName != null and userName != ''">user_name = #{userName},</if> - <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if> - <if test="email != null ">email = #{email},</if> - <if test="phonenumber != null ">phonenumber = #{phonenumber},</if> - <if test="sex != null and sex != ''">sex = #{sex},</if> - <if test="avatar != null and avatar != ''">avatar = #{avatar},</if> - <if test="password != null and password != ''">password = #{password},</if> - <if test="status != null and status != ''">status = #{status},</if> - <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if> - <if test="loginDate != null">login_date = #{loginDate},</if> - <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> - <if test="remark != null">remark = #{remark},</if> - update_time = sysdate() - </set> - where user_id = #{userId} - </update> - - <update id="updateUserStatus" parameterType="SysUser"> - update sys_user set status = #{status} where user_id = #{userId} - </update> - - <update id="updateUserAvatar" parameterType="SysUser"> - update sys_user set avatar = #{avatar} where user_name = #{userName} - </update> - - <update id="resetUserPwd" parameterType="SysUser"> - update sys_user set password = #{password} where user_name = #{userName} - </update> - - <delete id="deleteUserById" parameterType="Long"> - update sys_user set del_flag = '2' where user_id = #{userId} - </delete> - - <delete id="deleteUserByIds" parameterType="Long"> - update sys_user set del_flag = '2' where user_id in - <foreach collection="array" item="userId" open="(" separator="," close=")"> - #{userId} - </foreach> - </delete> - + + <select id="selectUserList" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserResult"> + select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, + u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user + u + left join sys_dept d on u.dept_id = d.dept_id + where u.del_flag = '0' + <if test="userId != null and userId != 0"> + AND u.user_id = #{userId} + </if> + <if test="userName != null and userName != ''"> + AND u.user_name like concat('%', #{userName}, '%') + </if> + <if test="status != null and status != ''"> + AND u.status = #{status} + </if> + <if test="phonenumber != null and phonenumber != ''"> + AND u.phonenumber like concat('%', #{phonenumber}, '%') + </if> + <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 --> + AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + </if> + <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 --> + AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + </if> + <if test="deptId != null and deptId != 0"> + AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, + ancestors) )) + </if> + <!-- 数据范围过滤 --> + ${params.dataScope} + </select> + + <select id="selectAllocatedList" parameterType="com.ruoyi.common.core.domain.entity.SysUser" + resultMap="SysUserResult"> + select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + where u.del_flag = '0' and r.role_id = #{roleId} + <if test="userName != null and userName != ''"> + AND u.user_name like concat('%', #{userName}, '%') + </if> + <if test="phonenumber != null and phonenumber != ''"> + AND u.phonenumber like concat('%', #{phonenumber}, '%') + </if> + <!-- 数据范围过滤 --> + ${params.dataScope} + </select> + + <select id="selectUnallocatedList" parameterType="com.ruoyi.common.core.domain.entity.SysUser" + resultMap="SysUserResult"> + select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + where u.del_flag = '0' and (r.role_id != #{roleId} or r.role_id IS NULL) + and u.user_id not in (select u.user_id from sys_user u inner join sys_user_role ur on u.user_id = ur.user_id and + ur.role_id = #{roleId}) + <if test="userName != null and userName != ''"> + AND u.user_name like concat('%', #{userName}, '%') + </if> + <if test="phonenumber != null and phonenumber != ''"> + AND u.phonenumber like concat('%', #{phonenumber}, '%') + </if> + <!-- 数据范围过滤 --> + ${params.dataScope} + </select> + + <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult"> + <include refid="selectUserVo"/> + where u.user_name = #{userName} and u.del_flag = '0' + </select> + + <select id="selectUserById" parameterType="Long" resultMap="SysUserResult"> + <include refid="selectUserVo"/> + where u.user_id = #{userId} + </select> + + <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult"> + select user_id, user_name + from sys_user + where user_name = #{userName} + and del_flag = '0' + limit 1 + </select> + + <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult"> + select user_id, phonenumber + from sys_user + where phonenumber = #{phonenumber} + and del_flag = '0' + limit 1 + </select> + + <select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult"> + select user_id, email + from sys_user + where email = #{email} + and del_flag = '0' + limit 1 + </select> + + <insert id="insertUser" parameterType="com.ruoyi.common.core.domain.entity.SysUser" useGeneratedKeys="true" + keyProperty="userId"> + insert into sys_user( + <if test="userId != null and userId != 0">user_id,</if> + <if test="deptId != null and deptId != 0">dept_id,</if> + <if test="userName != null and userName != ''">user_name,</if> + <if test="nickName != null and nickName != ''">nick_name,</if> + <if test="email != null and email != ''">email,</if> + <if test="avatar != null and avatar != ''">avatar,</if> + <if test="phonenumber != null and phonenumber != ''">phonenumber,</if> + <if test="sex != null and sex != ''">sex,</if> + <if test="password != null and password != ''">password,</if> + <if test="status != null and status != ''">status,</if> + <if test="createBy != null and createBy != ''">create_by,</if> + <if test="remark != null and remark != ''">remark,</if> + create_time + )values( + <if test="userId != null and userId != ''">#{userId},</if> + <if test="deptId != null and deptId != ''">#{deptId},</if> + <if test="userName != null and userName != ''">#{userName},</if> + <if test="nickName != null and nickName != ''">#{nickName},</if> + <if test="email != null and email != ''">#{email},</if> + <if test="avatar != null and avatar != ''">#{avatar},</if> + <if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if> + <if test="sex != null and sex != ''">#{sex},</if> + <if test="password != null and password != ''">#{password},</if> + <if test="status != null and status != ''">#{status},</if> + <if test="createBy != null and createBy != ''">#{createBy},</if> + <if test="remark != null and remark != ''">#{remark},</if> + sysdate() + ) + </insert> + + <update id="updateUser" parameterType="com.ruoyi.common.core.domain.entity.SysUser"> + update sys_user + <set> + <if test="deptId != null and deptId != 0">dept_id = #{deptId},</if> + <if test="userName != null and userName != ''">user_name = #{userName},</if> + <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if> + <if test="email != null ">email = #{email},</if> + <if test="phonenumber != null ">phonenumber = #{phonenumber},</if> + <if test="sex != null and sex != ''">sex = #{sex},</if> + <if test="avatar != null and avatar != ''">avatar = #{avatar},</if> + <if test="password != null and password != ''">password = #{password},</if> + <if test="status != null and status != ''">status = #{status},</if> + <if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if> + <if test="loginDate != null">login_date = #{loginDate},</if> + <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> + <if test="remark != null">remark = #{remark},</if> + update_time = sysdate() + </set> + where user_id = #{userId} + </update> + + <update id="updateUserStatus" parameterType="com.ruoyi.common.core.domain.entity.SysUser"> + update sys_user + set status = #{status} + where user_id = #{userId} + </update> + + <update id="updateUserAvatar" parameterType="com.ruoyi.common.core.domain.entity.SysUser"> + update sys_user + set avatar = #{avatar} + where user_name = #{userName} + </update> + + <update id="resetUserPwd" parameterType="com.ruoyi.common.core.domain.entity.SysUser"> + update sys_user + set password = #{password} + where user_name = #{userName} + </update> + + <delete id="deleteUserById" parameterType="Long"> + update sys_user + set del_flag = '2' + where user_id = #{userId} + </delete> + + <delete id="deleteUserByIds" parameterType="Long"> + update sys_user set del_flag = '2' where user_id in + <foreach collection="array" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml index 2b90bc4..37eac8b 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml @@ -1,34 +1,38 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysUserPostMapper"> - <resultMap type="SysUserPost" id="SysUserPostResult"> - <result property="userId" column="user_id" /> - <result property="postId" column="post_id" /> - </resultMap> + <resultMap type="com.ruoyi.system.domain.SysUserPost" id="SysUserPostResult"> + <result property="userId" column="user_id"/> + <result property="postId" column="post_id"/> + </resultMap> + + <delete id="deleteUserPostByUserId" parameterType="Long"> + delete + from sys_user_post + where user_id = #{userId} + </delete> + + <select id="countUserPostById" resultType="Integer"> + select count(1) + from sys_user_post + where post_id = #{postId} + </select> + + <delete id="deleteUserPost" parameterType="Long"> + delete from sys_user_post where user_id in + <foreach collection="array" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> + + <insert id="batchUserPost"> + insert into sys_user_post(user_id, post_id) values + <foreach item="item" index="index" collection="list" separator=","> + (#{item.userId},#{item.postId}) + </foreach> + </insert> - <delete id="deleteUserPostByUserId" parameterType="Long"> - delete from sys_user_post where user_id=#{userId} - </delete> - - <select id="countUserPostById" resultType="Integer"> - select count(1) from sys_user_post where post_id=#{postId} - </select> - - <delete id="deleteUserPost" parameterType="Long"> - delete from sys_user_post where user_id in - <foreach collection="array" item="userId" open="(" separator="," close=")"> - #{userId} - </foreach> - </delete> - - <insert id="batchUserPost"> - insert into sys_user_post(user_id, post_id) values - <foreach item="item" index="index" collection="list" separator=","> - (#{item.userId},#{item.postId}) - </foreach> - </insert> - </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml index dd72689..0c96069 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -1,44 +1,51 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper -PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" -"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.system.mapper.SysUserRoleMapper"> - <resultMap type="SysUserRole" id="SysUserRoleResult"> - <result property="userId" column="user_id" /> - <result property="roleId" column="role_id" /> - </resultMap> + <resultMap type="com.ruoyi.system.domain.SysUserRole" id="SysUserRoleResult"> + <result property="userId" column="user_id"/> + <result property="roleId" column="role_id"/> + </resultMap> - <delete id="deleteUserRoleByUserId" parameterType="Long"> - delete from sys_user_role where user_id=#{userId} - </delete> - - <select id="countUserRoleByRoleId" resultType="Integer"> - select count(1) from sys_user_role where role_id=#{roleId} - </select> - - <delete id="deleteUserRole" parameterType="Long"> - delete from sys_user_role where user_id in - <foreach collection="array" item="userId" open="(" separator="," close=")"> - #{userId} - </foreach> - </delete> - - <insert id="batchUserRole"> - insert into sys_user_role(user_id, role_id) values - <foreach item="item" index="index" collection="list" separator=","> - (#{item.userId},#{item.roleId}) - </foreach> - </insert> - - <delete id="deleteUserRoleInfo" parameterType="SysUserRole"> - delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} - </delete> - - <delete id="deleteUserRoleInfos"> - delete from sys_user_role where role_id=#{roleId} and user_id in - <foreach collection="userIds" item="userId" open="(" separator="," close=")"> - #{userId} - </foreach> - </delete> + <delete id="deleteUserRoleByUserId" parameterType="Long"> + delete + from sys_user_role + where user_id = #{userId} + </delete> + + <select id="countUserRoleByRoleId" resultType="Integer"> + select count(1) + from sys_user_role + where role_id = #{roleId} + </select> + + <delete id="deleteUserRole" parameterType="Long"> + delete from sys_user_role where user_id in + <foreach collection="array" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> + + <insert id="batchUserRole"> + insert into sys_user_role(user_id, role_id) values + <foreach item="item" index="index" collection="list" separator=","> + (#{item.userId},#{item.roleId}) + </foreach> + </insert> + + <delete id="deleteUserRoleInfo" parameterType="com.ruoyi.system.domain.SysUserRole"> + delete + from sys_user_role + where user_id = #{userId} + and role_id = #{roleId} + </delete> + + <delete id="deleteUserRoleInfos"> + delete from sys_user_role where role_id=#{roleId} and user_id in + <foreach collection="userIds" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> </mapper> \ No newline at end of file diff --git a/ruoyi-ui/.editorconfig b/ruoyi-ui/.editorconfig deleted file mode 100644 index 7034f9b..0000000 --- a/ruoyi-ui/.editorconfig +++ /dev/null @@ -1,22 +0,0 @@ -# 告诉EditorConfig插件,这是根文件,不用继续往上查找 -root = true - -# 匹配全部文件 -[*] -# 设置字符集 -charset = utf-8 -# 缩进风格,可选space、tab -indent_style = space -# 缩进的空格数 -indent_size = 2 -# 结尾换行符,可选lf、cr、crlf -end_of_line = lf -# 在文件结尾插入新行 -insert_final_newline = true -# 删除一行中的前后空格 -trim_trailing_whitespace = true - -# 匹配md结尾的文件 -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development deleted file mode 100644 index 302ecd1..0000000 --- a/ruoyi-ui/.env.development +++ /dev/null @@ -1,11 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 若依管理系统 - -# 开发环境配置 -ENV = 'development' - -# 若依管理系统/开发环境 -VUE_APP_BASE_API = '/dev-api' - -# 路由懒加载 -VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production deleted file mode 100644 index b4893b0..0000000 --- a/ruoyi-ui/.env.production +++ /dev/null @@ -1,8 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 若依管理系统 - -# 生产环境配置 -ENV = 'production' - -# 若依管理系统/生产环境 -VUE_APP_BASE_API = '/prod-api' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging deleted file mode 100644 index 361859f..0000000 --- a/ruoyi-ui/.env.staging +++ /dev/null @@ -1,10 +0,0 @@ -# 页面标题 -VUE_APP_TITLE = 若依管理系统 - -NODE_ENV = production - -# 测试环境配置 -ENV = 'staging' - -# 若依管理系统/测试环境 -VUE_APP_BASE_API = '/stage-api' diff --git a/ruoyi-ui/.eslintignore b/ruoyi-ui/.eslintignore deleted file mode 100644 index 89be6f6..0000000 --- a/ruoyi-ui/.eslintignore +++ /dev/null @@ -1,10 +0,0 @@ -# 忽略build目录下类型为js的文件的语法检查 -build/*.js -# 忽略src/assets目录下文件的语法检查 -src/assets -# 忽略public目录下文件的语法检查 -public -# 忽略当前目录下为js的文件的语法检查 -*.js -# 忽略当前目录下为vue的文件的语法检查 -*.vue \ No newline at end of file diff --git a/ruoyi-ui/.eslintrc.js b/ruoyi-ui/.eslintrc.js deleted file mode 100644 index 82bbdee..0000000 --- a/ruoyi-ui/.eslintrc.js +++ /dev/null @@ -1,199 +0,0 @@ -// ESlint 检查配置 -module.exports = { - root: true, - parserOptions: { - parser: 'babel-eslint', - sourceType: 'module' - }, - env: { - browser: true, - node: true, - es6: true, - }, - extends: ['plugin:vue/recommended', 'eslint:recommended'], - - // add your custom rules here - //it is base on https://github.com/vuejs/eslint-config-vue - rules: { - "vue/max-attributes-per-line": [2, { - "singleline": 10, - "multiline": { - "max": 1, - "allowFirstLine": false - } - }], - "vue/singleline-html-element-content-newline": "off", - "vue/multiline-html-element-content-newline":"off", - "vue/name-property-casing": ["error", "PascalCase"], - "vue/no-v-html": "off", - 'accessor-pairs': 2, - 'arrow-spacing': [2, { - 'before': true, - 'after': true - }], - 'block-spacing': [2, 'always'], - 'brace-style': [2, '1tbs', { - 'allowSingleLine': true - }], - 'camelcase': [0, { - 'properties': 'always' - }], - 'comma-dangle': [2, 'never'], - 'comma-spacing': [2, { - 'before': false, - 'after': true - }], - 'comma-style': [2, 'last'], - 'constructor-super': 2, - 'curly': [2, 'multi-line'], - 'dot-location': [2, 'property'], - 'eol-last': 2, - 'eqeqeq': ["error", "always", {"null": "ignore"}], - 'generator-star-spacing': [2, { - 'before': true, - 'after': true - }], - 'handle-callback-err': [2, '^(err|error)$'], - 'indent': [2, 2, { - 'SwitchCase': 1 - }], - 'jsx-quotes': [2, 'prefer-single'], - 'key-spacing': [2, { - 'beforeColon': false, - 'afterColon': true - }], - 'keyword-spacing': [2, { - 'before': true, - 'after': true - }], - 'new-cap': [2, { - 'newIsCap': true, - 'capIsNew': false - }], - 'new-parens': 2, - 'no-array-constructor': 2, - 'no-caller': 2, - 'no-console': 'off', - 'no-class-assign': 2, - 'no-cond-assign': 2, - 'no-const-assign': 2, - 'no-control-regex': 0, - 'no-delete-var': 2, - 'no-dupe-args': 2, - 'no-dupe-class-members': 2, - 'no-dupe-keys': 2, - 'no-duplicate-case': 2, - 'no-empty-character-class': 2, - 'no-empty-pattern': 2, - 'no-eval': 2, - 'no-ex-assign': 2, - 'no-extend-native': 2, - 'no-extra-bind': 2, - 'no-extra-boolean-cast': 2, - 'no-extra-parens': [2, 'functions'], - 'no-fallthrough': 2, - 'no-floating-decimal': 2, - 'no-func-assign': 2, - 'no-implied-eval': 2, - 'no-inner-declarations': [2, 'functions'], - 'no-invalid-regexp': 2, - 'no-irregular-whitespace': 2, - 'no-iterator': 2, - 'no-label-var': 2, - 'no-labels': [2, { - 'allowLoop': false, - 'allowSwitch': false - }], - 'no-lone-blocks': 2, - 'no-mixed-spaces-and-tabs': 2, - 'no-multi-spaces': 2, - 'no-multi-str': 2, - 'no-multiple-empty-lines': [2, { - 'max': 1 - }], - 'no-native-reassign': 2, - 'no-negated-in-lhs': 2, - 'no-new-object': 2, - 'no-new-require': 2, - 'no-new-symbol': 2, - 'no-new-wrappers': 2, - 'no-obj-calls': 2, - 'no-octal': 2, - 'no-octal-escape': 2, - 'no-path-concat': 2, - 'no-proto': 2, - 'no-redeclare': 2, - 'no-regex-spaces': 2, - 'no-return-assign': [2, 'except-parens'], - 'no-self-assign': 2, - 'no-self-compare': 2, - 'no-sequences': 2, - 'no-shadow-restricted-names': 2, - 'no-spaced-func': 2, - 'no-sparse-arrays': 2, - 'no-this-before-super': 2, - 'no-throw-literal': 2, - 'no-trailing-spaces': 2, - 'no-undef': 2, - 'no-undef-init': 2, - 'no-unexpected-multiline': 2, - 'no-unmodified-loop-condition': 2, - 'no-unneeded-ternary': [2, { - 'defaultAssignment': false - }], - 'no-unreachable': 2, - 'no-unsafe-finally': 2, - 'no-unused-vars': [2, { - 'vars': 'all', - 'args': 'none' - }], - 'no-useless-call': 2, - 'no-useless-computed-key': 2, - 'no-useless-constructor': 2, - 'no-useless-escape': 0, - 'no-whitespace-before-property': 2, - 'no-with': 2, - 'one-var': [2, { - 'initialized': 'never' - }], - 'operator-linebreak': [2, 'after', { - 'overrides': { - '?': 'before', - ':': 'before' - } - }], - 'padded-blocks': [2, 'never'], - 'quotes': [2, 'single', { - 'avoidEscape': true, - 'allowTemplateLiterals': true - }], - 'semi': [2, 'never'], - 'semi-spacing': [2, { - 'before': false, - 'after': true - }], - 'space-before-blocks': [2, 'always'], - 'space-before-function-paren': [2, 'never'], - 'space-in-parens': [2, 'never'], - 'space-infix-ops': 2, - 'space-unary-ops': [2, { - 'words': true, - 'nonwords': false - }], - 'spaced-comment': [2, 'always', { - 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] - }], - 'template-curly-spacing': [2, 'never'], - 'use-isnan': 2, - 'valid-typeof': 2, - 'wrap-iife': [2, 'any'], - 'yield-star-spacing': [2, 'both'], - 'yoda': [2, 'never'], - 'prefer-const': 2, - 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, - 'object-curly-spacing': [2, 'always', { - objectsInObjects: false - }], - 'array-bracket-spacing': [2, 'never'] - } -} diff --git a/ruoyi-ui/.gitignore b/ruoyi-ui/.gitignore deleted file mode 100644 index 78a752d..0000000 --- a/ruoyi-ui/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -.DS_Store -node_modules/ -dist/ -npm-debug.log* -yarn-debug.log* -yarn-error.log* -**/*.log - -tests/**/coverage/ -tests/e2e/reports -selenium-debug.log - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.local - -package-lock.json -yarn.lock diff --git a/ruoyi-ui/README.md b/ruoyi-ui/README.md deleted file mode 100644 index 00c0ab8..0000000 --- a/ruoyi-ui/README.md +++ /dev/null @@ -1,30 +0,0 @@ -## 开发 - -```bash -# 克隆项目 -git clone https://gitee.com/y_project/RuoYi-Vue - -# 进入项目目录 -cd ruoyi-ui - -# 安装依赖 -npm install - -# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 -npm install --registry=https://registry.npmmirror.com - -# 启动服务 -npm run dev -``` - -浏览器访问 http://localhost:80 - -## 发布 - -```bash -# 构建测试环境 -npm run build:stage - -# 构建生产环境 -npm run build:prod -``` \ No newline at end of file diff --git a/ruoyi-ui/babel.config.js b/ruoyi-ui/babel.config.js deleted file mode 100644 index c8267b2..0000000 --- a/ruoyi-ui/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - presets: [ - // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app - '@vue/cli-plugin-babel/preset' - ], - 'env': { - 'development': { - // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). - // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. - 'plugins': ['dynamic-import-node'] - } - } -} \ No newline at end of file diff --git a/ruoyi-ui/bin/build.bat b/ruoyi-ui/bin/build.bat deleted file mode 100644 index dda590d..0000000 --- a/ruoyi-ui/bin/build.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ���Web���̣�����dist�ļ��� -echo. - -%~d0 -cd %~dp0 - -cd .. -npm run build:prod - -pause \ No newline at end of file diff --git a/ruoyi-ui/bin/package.bat b/ruoyi-ui/bin/package.bat deleted file mode 100644 index 0e5bc0f..0000000 --- a/ruoyi-ui/bin/package.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ��װWeb���̣�����node_modules�ļ��� -echo. - -%~d0 -cd %~dp0 - -cd .. -npm install --registry=https://registry.npmmirror.com - -pause \ No newline at end of file diff --git a/ruoyi-ui/bin/run-web.bat b/ruoyi-ui/bin/run-web.bat deleted file mode 100644 index d30deae..0000000 --- a/ruoyi-ui/bin/run-web.bat +++ /dev/null @@ -1,12 +0,0 @@ -@echo off -echo. -echo [��Ϣ] ʹ�� Vue CLI �������� Web ���̡� -echo. - -%~d0 -cd %~dp0 - -cd .. -npm run dev - -pause \ No newline at end of file diff --git a/ruoyi-ui/build/index.js b/ruoyi-ui/build/index.js deleted file mode 100644 index 0c57de2..0000000 --- a/ruoyi-ui/build/index.js +++ /dev/null @@ -1,35 +0,0 @@ -const { run } = require('runjs') -const chalk = require('chalk') -const config = require('../vue.config.js') -const rawArgv = process.argv.slice(2) -const args = rawArgv.join(' ') - -if (process.env.npm_config_preview || rawArgv.includes('--preview')) { - const report = rawArgv.includes('--report') - - run(`vue-cli-service build ${args}`) - - const port = 9526 - const publicPath = config.publicPath - - var connect = require('connect') - var serveStatic = require('serve-static') - const app = connect() - - app.use( - publicPath, - serveStatic('./dist', { - index: ['index.html', '/'] - }) - ) - - app.listen(port, function () { - console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) - if (report) { - console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) - } - - }) -} else { - run(`vue-cli-service build ${args}`) -} diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json deleted file mode 100644 index 2e4b91e..0000000 --- a/ruoyi-ui/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "ruoyi", - "version": "3.8.7", - "description": "若依管理系统", - "author": "若依", - "license": "MIT", - "scripts": { - "dev": "vue-cli-service serve", - "build:prod": "vue-cli-service build", - "build:stage": "vue-cli-service build --mode staging", - "preview": "node build/index.js --preview", - "lint": "eslint --ext .js,.vue src" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "src/**/*.{js,vue}": [ - "eslint --fix", - "git add" - ] - }, - "keywords": [ - "vue", - "admin", - "dashboard", - "element-ui", - "boilerplate", - "admin-template", - "management-system" - ], - "repository": { - "type": "git", - "url": "https://gitee.com/y_project/RuoYi-Vue.git" - }, - "dependencies": { - "@riophae/vue-treeselect": "0.4.0", - "axios": "0.24.0", - "clipboard": "2.0.8", - "core-js": "3.25.3", - "echarts": "5.4.0", - "element-ui": "2.15.14", - "file-saver": "2.0.5", - "fuse.js": "6.4.3", - "highlight.js": "9.18.5", - "js-beautify": "1.13.0", - "js-cookie": "3.0.1", - "jsencrypt": "3.0.0-rc.1", - "nprogress": "0.2.0", - "quill": "1.3.7", - "screenfull": "5.0.2", - "sortablejs": "1.10.2", - "vue": "2.6.12", - "vue-count-to": "1.0.13", - "vue-cropper": "0.5.5", - "vue-meta": "2.4.0", - "vue-router": "3.4.9", - "vuedraggable": "2.24.3", - "vuex": "3.6.0" - }, - "devDependencies": { - "@vue/cli-plugin-babel": "4.4.6", - "@vue/cli-plugin-eslint": "4.4.6", - "@vue/cli-service": "4.4.6", - "babel-eslint": "10.1.0", - "babel-plugin-dynamic-import-node": "2.3.3", - "chalk": "4.1.0", - "compression-webpack-plugin": "6.1.2", - "connect": "3.6.6", - "eslint": "7.15.0", - "eslint-plugin-vue": "7.2.0", - "lint-staged": "10.5.3", - "runjs": "4.4.2", - "sass": "1.32.13", - "sass-loader": "10.1.1", - "script-ext-html-webpack-plugin": "2.1.5", - "svg-sprite-loader": "5.1.1", - "vue-template-compiler": "2.6.12" - }, - "engines": { - "node": ">=8.9", - "npm": ">= 3.0.0" - }, - "browserslist": [ - "> 1%", - "last 2 versions" - ] -} diff --git a/ruoyi-ui/public/favicon.ico b/ruoyi-ui/public/favicon.ico deleted file mode 100644 index e26376026420542212ed58d90d0ed34f554fa4ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5663 zcmZ`*WmMD;u>DcGh#=ia^G8y;1Xgl^C8S$Amyqrd1eKPKB}75GVToN(=@g_xS|pcV zYT@y|zH{E0Gjl)8mzg<pXYL0bEmh)2^p5}lAXbAY>E0vwe;xGTK9)Pb`Ew71o)8mn z03f3HU&jG*@@N6zk*2evqK=M}hmVK1lZPjZnxZ0$r<aF=Gt3?U0_Nd*{>G^oYPn^M z{S!ll*~7X_SR}y4UJ2?aHTg{X39ybPB?tGsd;iFgl8P)3V$l6|>JbF~eyxxj;rR07 zd($`rbIAkd#nPtGAoTwJ^~`n0R^HalXyDkB2r_c6l)s-{04d#fFQjLgle8h-1IP$m zD#!{x3+dmXAC3e)0C0#G7!c-DD}RGi;{o6To>KxG<bA7mQEfV0MgU6+u);>ZMTC>A z3-k-<_frD>v_P$1gWV$_4FF()Aqs3jIWe$zswPJO%$B7t(g3rc8OuOG0uGSPt;&H5 zZU?LkB6az2yM6$Lm0&gj{H|)82$N=ERon<90pOQtocsiA1w>>k@C^ejlDL54Q;HEh z7ARif^NG%tve%yP5D*-oYbbprQ)5De5|RFk-v9V;WsP<12dqxPn&ug)1K|c+US=*k z1!M~kI{Fv@=r6~=-%83SZ~fg^{p+v=L!b71zI8qHV3T7#TE6Xw$HfOowZ_o%uQxZR z@jUx*YJEFh%glgzL%?bI(n4f`u+a3;ub|7gK*<~M)BGZx{ufM)kBEr&Ic<uN&)4JR z?nG8SR^r0W@3XfHL5IMb9B_73S8){fjkUX9wQl0p5Wa$tJ7$ahw(ngyHu2f`nrNLl zAJxYr;|~ZOHqE}kR^1dO)`9dj^6hZpBjyY&VX8kdP#L4$rPchfX$aO8c7TH$M`AqT z2Y|y)_~Yq`QUFp%QQ<%g0Hk(aCV_czfRW5E>j2R4kJkKK8V$4;1OQ5fkvz38A3pw0 zS=mLB_noPuiw4*FffD#JN7oBdg$ElEjE{<FGhWi^cS+CUH`U_N7n0?yk~V%9k|f?* zAvcfQ^`v=VMVtSFwj+iR|7Aaj!kSh3J(*47EZZoECOZ+I%^D*5DdG#u_It`#Y(4#6 zUvSG5Tv99`?8p3Glu`-i;H%_?eiq@6Hy=Axh0-GHU*S#S`hr`(G1GtSE%YAu5q)A2 zk@4AeoWAj?Y((?t(s7M{zCJ+c$3)wRaUl|i_&ICy_*iAD561Ldebly_#$tv^Vzx}i z5`I(+UHR5%5C?8t1jQc6GMe-U>}_(gsxj19@f+tJdn0)p$cQj1TIk1rY^mS08##l> zFS`S5r0bH6RVuj-Sf8@yb6WmKLh(8k!a*|dX+!G~D`&E>8j+eSWC6neMemE;1gUc# zlxsKHZQ#!as6L{SB{QWZ`AM?&r|W^A8!eR5J@40`gr7Ndzoe0?i`mO>;(sj=R>&?a ze>GB;KM5*-FI`}&=2qyZBd8Z!Mj`5(!#R>mtvK|Bzj*3bj<cgP#z}D7r;Tta>Zx+( zugnS8e-F2}wxdq{9}~wANA*E$xanN!g6T?WTj&I{p(O;rGqd~kpU((0WIJX($?`BT z<~ipHp-LGfPnS+NOb<)nD%UsgHjtkREGN>hFnCg7X&73fV$h(oUPd@cT`^V0WYAtF zUOlSoubZSZ_Ud&p>NWQ5l`V07%sZ9B7)Y_cZA&j*0xNZ|u>Fy-!nBtm-Y%bOmZpta z{pB9ikKmfYPcRs&r|4boQ0b830RQ`D1c#)zZskyFE>C@wb(DBCm>-W{p1*F|rOKfy ztV&`&XdX3hv+uP}y}vt;_Vt8=;e7BjX*X$%FJYT_+pD&BZ416*J958mcLTQx&j!y( zwwK0L&)iOn&uDhg)97(#iRYpq@nkxfkfiP5aI)<`*DPnm_+j+wH?kq8wv=wC;&HX& z{}5aUv5xCv0W@+Bl^%>Xm7;&_7hPXi+c*m^eChtuvw?axlIEJ@&^F%q+h=&VpKq~p zwsK%EQEDpBHQyRF*RgPu@b0T}UXOa5cwAq`d`8F+L55}qrZUS=&M?sM%y6bsZQ6X7 zZ`W<w2&Thel>0bWI(Mk~TUBmVw_mQ?GUXa&(zA(YXL|1QLVGuRkM?r*9_&k<Tc2~D zyPc0Q4KtE6P0RSmgn0S*4*S78J9fXUivBF?F8jG{<jCMy<PAR&qbboy9wN{5%cRkB zEB#pNUJx{tzDa-3HqrF^tT?wlcd=^DZE|T?wkNdWT2mmGVZh?2Ec)f?A;x&^&G0(B zG`IA}N%EGUrJtpV<u&rDc0(Rl{`7OV{)KL{735H`m9(6!{nh9;o?NdSZb48%EUE;> zwk(Tc51S6l4tsc$e=T!0giX5WTn#*?KGGtv!ugJ~iGz%!k8Hqm#bd_L#{c?Ij39xa z{ej?PIVy$6gv2JyUa1~kG{+2=wjzs;d^zJ(gCIDSDZ|zCVJ_&?X|lwaG0-w;m`BMa zbbGiN^nOJZ_8!6POqWe_8A|z#N4Q*I=T)Pg&l?{M-*n}M$+aUg@hGV*zEx(yrP<5R zvC;*m3$xwJMMNOV5s?A07s^MO<USM}g!>;hx@Ws(KdgJ>ZozUy@-}kxGkk2THy1y* z()`^X9m@BAVIpRd93uHHi#)Slelv<iK}V2Qd$ZJClZoOuI`^HnGU{`}=T~(t2=y1A z{=yB@&n1^+LKUx^VzgC!dqoJfb$J6*=svZwpJ*B?P5-GJn|m|IFO`;;mRGDx?3~fa zJM+ASyG7f9mp7GoBk-@=AVX^GAZCO8()(nA3ib{<Ufif#twTZ$75v5<U`A^efPf$& zrjsJe4!1j(>_l&=Ly*a}I*8haSww)z(F$9qayvD9oF0w8fRKf5n_YnO;Y8?=(@=c| zR%gvv*WlPCaPc@%H)`VRS4G~pMxyCuX#+#<)u*Pdwp7;Xb_Qsd%qcU&a2}fU*Oi`? z->NTaRS<vIjI>@)g`5St&CmZ)ZyDU*h3tOWb+5#jbk?XNU0zQ8ia8{%VmM0JWO(hS z{>P^%$mJ|?q;X_$1W(LbY~O6SxpLvSNWAzw2p(=RWQeV*XhF?!%};kO`3IknL@`mx z{6VMfbu{q?7`Y;qL(kkN4&E*$(c3Vzb^Z-oLa6#{_v9x9e+_<ku8iJw@$rBy)^v8( z6T0b&Cp?8ndv4}Nc+BVS=lC~yn(~nRc)9ugzvYsU;B}pUMWa6#e~v6?hqs)8b|Hbh z6Vjc&mHfqSg|bCR^uPFGIFlulDyro!3@x;7>)R)mWRzbB=axOX+<2S1UTRmG57&~H zoy=Yg#6WMdT`gW&ARQIQ^5toK4xlZsF#{)mwvsFkJ3LR>Fg6REEgDs_)v~H#p4e4L zjhV-;J!WX%=tZ^9sphWCIQn<^l}p!@_sqqNfJH$d65YGU(BjUu#E9T*JG<~Z->30^ zbO2qn2ucd5xk1ficOG6n*$HpFt+VfPTe-06vKsqo@&rvn7@L2acK17WbwYJmb&6eu zJs}Cs%*;Sck36;;O<gUmFQph83^Tk7-1V;5TE?zjYm6D+%pMY5#*KAW2bP_9p)1O2 zr2E+Wm^(%TWsgd3szw(=(Fk<gavzd8oBIZQt8+4bW!qQ!OB*A%6>@tch>1SA=A0-H zxmTMkwh&!S00`m)fQTpnxV*c^Z2<6n4gfn=03e+O05l$-UiYZnt5K+$(o6k-`Muo0 zcym>FU%0_pH42@7ux-1Sz5P>)l9j9n94!%D$j3VkQNvGRvkoMVn+0?ce(da&q$%L8 zpoTp4=XU9KU+tUf5sKZM9OT9dxZlrxw3GT|WkWHiVoTU7q|w9h_<g!9PaDQ0e$AP1 z>}k2>RB2dWOBh;=T%k+Loz^cP7s&cQHe04Sf3?2Uc{|uFi_q7&Y2h>5E;_jAH4oWN z*|)r?3&mKN5Ygr~KU_?_J@Y>L8p~TX>*3W?*;s7Ol0Gab+Fn#lovzHGgPdF6lSi)G zL^yLVH+_Q=>wUEj-%sE@TUwrf1xP~1p7_iN_cAh+sDxHG1s_+;wKCzch<JO!bj7rv zE9TjjKeNqcGl})nr>DeCAO&#o-@o}`asDR~{uPgu1&}n#Oa=LFsLvp3f`C>Vt~|jK zy_%nl{Zg&~$MZF%AA1=UPk~<8^!g4H@3cdr`6qHkzF~rSpo=V%Q{$Dr?VYlliu04v z%=&RRf@F2de7c>);typLsxv{6>P2a7CpLZDX$>arZUIc2<T9=}(K-qoZCg!=b>_Ku zUlbW`031ZK?1SN6t<ctS!aJ!IlQ@;A^gfNV>^_0fyGvg`-+!y|wIj(a0BaG-bmnF! z-?&Ny8zS6sLm&VVOE>O+ox*~U^9i^5Cev4Mr=}OVv(#jGI%h6)ozpvIw=QeWg5yL% zxc;dSYTByPsn;~w8I3%nVM7fPj~q;T4;*eQE<D8(w_v?%*ILGKDBzl8K%-E98A1+5 zkIc7!%;#tP{<!c53HKfzt9nYPl&!>H((##3K+F+ELsa=<qy7xJe+Dj=I6XkFIeR)u zlI+BUa;xdn=jN>X*VuO?{$UoJERCFv1zCRtLIenGy2;i*IhzdLb#!lN%sklL-`-+F z?JxllW2nPY<eewin;#u(fbhUOzjpK;JuVLI8ynMds#DP#!Ku_c%*Q9wr+6Rj`W0AE zVmzQoC+V<|%MR{NFZj%sX)xD{^B=2M**4vWrt+t8bN|+U8YPg<Q(4^3-2T%0#Hm4! zOBgpGy5Wkd(9!CIsk3JVTE(3d#64@<Z4pHM_3{b-=Up|DqhALqva^$%j<wxF8o|l; zh?g*WTzX*KS1Q~pj1L#9RK0kEZ_LnU<s~HZP2WZB$(PzLX+`X^n(yX=JR0P#!M}b7 zG^kPW;Nt@L$gsojJ~!QK1`n+SnopHHRxVSae1teGaf2B@#X+<B*bd!Pg-SEnps|!Z z-~}@+ACMe?|0b-ML;7j2>*Y~!;oIPgyr6C68E{%9$}}MS`_bfXO`Ru~*8xi-vjX-H zvjoT^#5dq8?}IJ&Wlp}ze&Elo>fpvkve9{Y{0o(4l0UkcbJe=OGP1WBh}U=wuzoO( zCb3vXz{I}y=<YbQAn!&Xg*n|>8r136RhGZj7?Wab`-)4x%6(E35ET$*S>Gr{7Hy?1 zPvuKMN4}VU7FTXrm>eeq5bN>rBwlp`PgxV`{`=85$()C5uFqLw0HxJzMi4{*__${J zMO_0Q;^bTGu%N6*_-eEle8n4*dr{LGd=cI^nYaDe)$!S|w^k}Q2j^)sa|wa)rOWr7 z=U@&U{>sTuswbr)?Sjc<y)i{tOAvkpK5ir!Air+}bu$=a`QQ78(O@&}2wjhVGEFk3 z7nl(~A?Zq<wn5q=7C?V4`I=q3nl}yIS*~tA&=$AZiV-vPXQ~#r(SC<L3xSn;1#y|1 zpSMXTQ79~*)>9{E5BTD&WCFGRb!kCS_jD{BTS9)Yijf$eoGejH$BRliS>kQVwr#VP zPs^4Xc>MxrsW#M9V*lD85LOCp=F<?8J-00UjX^#H61y@ElSuoh4Tf)joqVWmY3|`1 zzHE?to7@Gpk`sq@4s#@)7@1z!JPU>^GKJpn>%Q;Y^>4==VlYTCO|4^&7;9(e5<Brh z0c#Lt#Zz~&=<_YeyOpZlwF-TQ2LP<`Ss6BS`b$j2h9uBS*AW}vzZI>&vsb23+jj1) z4F{o&?1`kXX!p1QbG-x^0H9^JkC(#5i6HC4TWS(z9%5Q}!C`+c<F?yCZNLpg@MTYc z{U!Qh_SXen*LY{5hpM_$^==16^u8a%??>IJOr-(fMiVq%-|BreT|=+0PWgXb&y5S$ zG_jI1l%yt}bT4l#k^g0eq2yHHjK&w{?`d3k@CQ<O{vA@=Y+O0|B2Cb}t#|g9+@vL@ zK;KSL1!6S_I+K)^zy)-8Xh1d~0AB&1Hh8o}zy<Ztmrx>?v1K)MT<H`P@xFO6l_}_0 z+%tbrql&kwa8IfBa@yuPYZ2~LK218_n6jNF!;SIU8leJp0XbhaXU}_j!INvG%$$2s zv&?P0^>#dYWTTR+A7RoqtH(&|aO_;V>9LbLXPn3YBbp>+MnYOoTceweya=B)lEz5H zLp=NDAK0Im^8*inYho^qYR#Qdzn_6Db?UQTs4j<|%h}JQ5#<wY7<_DdXA#Tlzy8kH z=`5<=ZvMWaK@JVJ3=T3LiQw-vJNx}8JG;%5-EurXO~JbbQ;FoV#*(Bg{c%DEd|Q>? z5{Fs+B?@B0C()s2L3QFMo?LZZrBRzLX=X>-xfw1_^{nkMY^?6lVgoW|%aOd~y;V$f zSC2PJkfFe5A(&8sdo{0Co%f9>o#kz*CRzHQ8F$tEB>cewUnj)^>+%O%(dyCa!bQiP zd$9D}qa>x9CI;OPHw~G}AbY<}mG;j)*X33HunLBdiRVoznp0xEgd+S?KC>~mPK80W zQ^fo<JZ0_vs@k%~&YIVzNGmP9zIN}gvH@RYNX}Ic#MhOc$J`;_tjtjm2kypF&2=d* z%~doNW4KB)p5Op{)eas4E#&fv7d-ObZ3{C*k*#V}6v^NmVZ&$X&Ycuj))f@_aJc2w z{PGt(0aPX21E)*oq{nB_n&CEfW(jGKLfrFNST^-)?WrT?D9CZ=IoBS$^=nx(?$TQv z{1xc2U5k#^@^6L!56vF0yG}$-s~9y87LwXG=pu57Ejs9sNqr$?YCd9VI}`Kz;|1@v zzCElMT0(8W2Y~DC1_993(n<lN?R6hhou2#?OPHqLZtSPbE3d{{>F{<7rqIFN9hCB? zZ{1Q3@oG>#AA8vR@Mza{MS#=Uc_yV~`N<vQu_#Jdyh+9JU$~icb8Q~4Me$tIcZ#RM zXz^0FC1;%kub5{nVDdUUfJ4PLxK!p)9$_HgG3{q!nK;@<Bo8Msa4!=rU0yK3@Ovh{ zE00gFa~8ROHiJgts{Sjkf-{b2d2LzK3Fe*se-^ABwi3Xv^xolOvhY^2bMf<vkJdAq z?cZrjXuUr_YjZKqu|z99bv^yrewWenTAV20jhQK2W~06){KxLjC=s|z%9>UvJ{jza zT|v*pR%1$2TRUMF0e`DV+%8O#ii1<x7<lZ3sTk6A!Nx4_jFlwBie(OE#e^A|HTq}- zwnY*AHGNxa8cEUE1ZY{l<gc9v;UiKGxZ)h1{R@a^<lkhG=5XvHU60}Y1(R?ouf}0v ziB@MxUU^%aa^RFkKfpd^xCcMd*=82>Jz8+U5lkts*sd)3SKz%c<KaE~z+K?EXX2%) z;A!0I?3)5oNpvkS%27{MLRclHxNbdMvz(C%*Fa<-HEPCNz>(j|OkN$*b3z1o8lke_ zZzLZqleC$I#|o*|>1;QvIPMtF8WlW@z%EFY@*W$g1UVFe01tVC?CaWvKX+N~&SMFh w3o}1aSIuJtnzw?rKNs-3{y)=#g);%#4FR;juZ0`#H8`NAtff?~VD<KY0Mv8t8UO$Q diff --git a/ruoyi-ui/public/html/ie.html b/ruoyi-ui/public/html/ie.html deleted file mode 100644 index 052ffcd..0000000 --- a/ruoyi-ui/public/html/ie.html +++ /dev/null @@ -1,46 +0,0 @@ - -<!DOCTYPE html> -<html lang="zh-CN"> -<head> - <meta charset="UTF-8" /> - <title>请升级您的浏览器</title> - <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" > - <meta name="renderer" content="webkit"> - <base target="_blank" /> - <style type="text/css"> - html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0} - a{text-decoration:none;color:#0072c6;}a:hover{text-decoration:none;color:#004d8c;} - body{width:960px;margin:0 auto;padding:10px;font-size:14px;line-height:24px;color:#454545;font-family:'Microsoft YaHei UI','Microsoft YaHei',DengXian,SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif;overflow-y:scroll} - h1{font-size:40px;line-height:80px;font-weight:100;margin-bottom:10px;} - h2{font-size:20px;line-height:25px;font-weight:100;margin:10px 0;} - em{color:red} - p{margin-bottom:10px;} - hr{margin:20px 0;border:0;border-top:1px solid #dadada} - span{display:block;font-size:12px;line-height:12px;} - .clean{clear:both;} - .browser{padding:10px 10px;} - .browser li{width:auto;padding:0 80px;margin-top:30px;height:34px;line-height:22px;float:left;list-style:none;background:url(data:image/png;base64,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) no-repeat;padding-left:40px} - .browser .browser-firefox{background-position:0 -34px} - .browser .browser-ie{background-position:0 -68px;margin-left:0px} - .browser .browser-360{background-position:0 -170px;margin-left: -27px} - </style> -</head> -<body style="margin-top:50px"> -<h1>请升级您的浏览器,以便我们更好的为您提供服务!</h1> -<p>您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。</p> -<hr> -<h2>请注意:微软公司对Windows XP 及 Internet Explorer 早期版本的支持已经结束</h2> -<p>自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 <a href="https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support">微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明</a> 。</p> -<hr> -<h2>您可以选择更先进的浏览器</h2> -<p>推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。</p> -<ul class="browser"> - <li class="browser-chrome"><a href="https://www.google.cn/chrome/browser/desktop/index.html?hl=zh-CN&standalone=1"> 谷歌浏览器<span>Google Chrome</span></a></li> - <li class="browser-firefox"><a href="https://www.mozilla.org/zh-CN/firefox/new/"> 火狐浏览器<span>Mozilla Firefox</span></a></li> - <li class="browser-ie"><a href="https://windows.microsoft.com/zh-cn/internet-explorer/download-ie"> IE 11 浏览器<span>Internet Explorer</span></a></li> - <li class="browser-360"><a href="http://se.360.cn/"> 360安全浏览器<span>360 Chrome</span></a></li> - <div class="clean"></div> -</ul> -<hr> -</body> -</html> \ No newline at end of file diff --git a/ruoyi-ui/public/index.html b/ruoyi-ui/public/index.html deleted file mode 100644 index 925455c..0000000 --- a/ruoyi-ui/public/index.html +++ /dev/null @@ -1,208 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="renderer" content="webkit"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> - <link rel="icon" href="<%= BASE_URL %>favicon.ico"> - <title><%= webpackConfig.name %></title> - <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> - <style> - html, - body, - #app { - height: 100%; - margin: 0px; - padding: 0px; - } - .chromeframe { - margin: 0.2em 0; - background: #ccc; - color: #000; - padding: 0.2em 0; - } - - #loader-wrapper { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 999999; - } - - #loader { - display: block; - position: relative; - left: 50%; - top: 50%; - width: 150px; - height: 150px; - margin: -75px 0 0 -75px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -webkit-animation: spin 2s linear infinite; - -ms-animation: spin 2s linear infinite; - -moz-animation: spin 2s linear infinite; - -o-animation: spin 2s linear infinite; - animation: spin 2s linear infinite; - z-index: 1001; - } - - #loader:before { - content: ""; - position: absolute; - top: 5px; - left: 5px; - right: 5px; - bottom: 5px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -webkit-animation: spin 3s linear infinite; - -moz-animation: spin 3s linear infinite; - -o-animation: spin 3s linear infinite; - -ms-animation: spin 3s linear infinite; - animation: spin 3s linear infinite; - } - - #loader:after { - content: ""; - position: absolute; - top: 15px; - left: 15px; - right: 15px; - bottom: 15px; - border-radius: 50%; - border: 3px solid transparent; - border-top-color: #FFF; - -moz-animation: spin 1.5s linear infinite; - -o-animation: spin 1.5s linear infinite; - -ms-animation: spin 1.5s linear infinite; - -webkit-animation: spin 1.5s linear infinite; - animation: spin 1.5s linear infinite; - } - - - @-webkit-keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); - } - } - - @keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(360deg); - -ms-transform: rotate(360deg); - transform: rotate(360deg); - } - } - - - #loader-wrapper .loader-section { - position: fixed; - top: 0; - width: 51%; - height: 100%; - background: #7171C6; - z-index: 1000; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - #loader-wrapper .loader-section.section-left { - left: 0; - } - - #loader-wrapper .loader-section.section-right { - right: 0; - } - - - .loaded #loader-wrapper .loader-section.section-left { - -webkit-transform: translateX(-100%); - -ms-transform: translateX(-100%); - transform: translateX(-100%); - -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - } - - .loaded #loader-wrapper .loader-section.section-right { - -webkit-transform: translateX(100%); - -ms-transform: translateX(100%); - transform: translateX(100%); - -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000); - } - - .loaded #loader { - opacity: 0; - -webkit-transition: all 0.3s ease-out; - transition: all 0.3s ease-out; - } - - .loaded #loader-wrapper { - visibility: hidden; - -webkit-transform: translateY(-100%); - -ms-transform: translateY(-100%); - transform: translateY(-100%); - -webkit-transition: all 0.3s 1s ease-out; - transition: all 0.3s 1s ease-out; - } - - .no-js #loader-wrapper { - display: none; - } - - .no-js h1 { - color: #222222; - } - - #loader-wrapper .load_title { - font-family: 'Open Sans'; - color: #FFF; - font-size: 19px; - width: 100%; - text-align: center; - z-index: 9999999999999; - position: absolute; - top: 60%; - opacity: 1; - line-height: 30px; - } - - #loader-wrapper .load_title span { - font-weight: normal; - font-style: italic; - font-size: 13px; - color: #FFF; - opacity: 0.5; - } - </style> - </head> - <body> - <div id="app"> - <div id="loader-wrapper"> - <div id="loader"></div> - <div class="loader-section section-left"></div> - <div class="loader-section section-right"></div> - <div class="load_title">正在加载系统资源,请耐心等待</div> - </div> - </div> - </body> -</html> diff --git a/ruoyi-ui/public/robots.txt b/ruoyi-ui/public/robots.txt deleted file mode 100644 index 77470cb..0000000 --- a/ruoyi-ui/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / \ No newline at end of file diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue deleted file mode 100644 index b92ea37..0000000 --- a/ruoyi-ui/src/App.vue +++ /dev/null @@ -1,28 +0,0 @@ -<template> - <div id="app"> - <router-view /> - <theme-picker /> - </div> -</template> - -<script> -import ThemePicker from "@/components/ThemePicker"; - -export default { - name: "App", - components: { ThemePicker }, - metaInfo() { - return { - title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title, - titleTemplate: title => { - return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE - } - } - } -}; -</script> -<style scoped> -#app .theme-picker { - display: none; -} -</style> diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js deleted file mode 100644 index 7b7388f..0000000 --- a/ruoyi-ui/src/api/login.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 登录方法 -export function login(username, password, code, uuid) { - const data = { - username, - password, - code, - uuid - } - return request({ - url: '/login', - headers: { - isToken: false, - repeatSubmit: false - }, - method: 'post', - data: data - }) -} - -// 注册方法 -export function register(data) { - return request({ - url: '/register', - headers: { - isToken: false - }, - method: 'post', - data: data - }) -} - -// 获取用户详细信息 -export function getInfo() { - return request({ - url: '/getInfo', - method: 'get' - }) -} - -// 退出方法 -export function logout() { - return request({ - url: '/logout', - method: 'post' - }) -} - -// 获取验证码 -export function getCodeImg() { - return request({ - url: '/captchaImage', - headers: { - isToken: false - }, - method: 'get', - timeout: 20000 - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/menu.js b/ruoyi-ui/src/api/menu.js deleted file mode 100644 index faef101..0000000 --- a/ruoyi-ui/src/api/menu.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -// 获取路由 -export const getRouters = () => { - return request({ - url: '/getRouters', - method: 'get' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/cache.js b/ruoyi-ui/src/api/monitor/cache.js deleted file mode 100644 index 72c5f6a..0000000 --- a/ruoyi-ui/src/api/monitor/cache.js +++ /dev/null @@ -1,57 +0,0 @@ -import request from '@/utils/request' - -// 查询缓存详细 -export function getCache() { - return request({ - url: '/monitor/cache', - method: 'get' - }) -} - -// 查询缓存名称列表 -export function listCacheName() { - return request({ - url: '/monitor/cache/getNames', - method: 'get' - }) -} - -// 查询缓存键名列表 -export function listCacheKey(cacheName) { - return request({ - url: '/monitor/cache/getKeys/' + cacheName, - method: 'get' - }) -} - -// 查询缓存内容 -export function getCacheValue(cacheName, cacheKey) { - return request({ - url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, - method: 'get' - }) -} - -// 清理指定名称缓存 -export function clearCacheName(cacheName) { - return request({ - url: '/monitor/cache/clearCacheName/' + cacheName, - method: 'delete' - }) -} - -// 清理指定键名缓存 -export function clearCacheKey(cacheKey) { - return request({ - url: '/monitor/cache/clearCacheKey/' + cacheKey, - method: 'delete' - }) -} - -// 清理全部缓存 -export function clearCacheAll() { - return request({ - url: '/monitor/cache/clearCacheAll', - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/monitor/job.js b/ruoyi-ui/src/api/monitor/job.js deleted file mode 100644 index 3815569..0000000 --- a/ruoyi-ui/src/api/monitor/job.js +++ /dev/null @@ -1,71 +0,0 @@ -import request from '@/utils/request' - -// 查询定时任务调度列表 -export function listJob(query) { - return request({ - url: '/monitor/job/list', - method: 'get', - params: query - }) -} - -// 查询定时任务调度详细 -export function getJob(jobId) { - return request({ - url: '/monitor/job/' + jobId, - method: 'get' - }) -} - -// 新增定时任务调度 -export function addJob(data) { - return request({ - url: '/monitor/job', - method: 'post', - data: data - }) -} - -// 修改定时任务调度 -export function updateJob(data) { - return request({ - url: '/monitor/job', - method: 'put', - data: data - }) -} - -// 删除定时任务调度 -export function delJob(jobId) { - return request({ - url: '/monitor/job/' + jobId, - method: 'delete' - }) -} - -// 任务状态修改 -export function changeJobStatus(jobId, status) { - const data = { - jobId, - status - } - return request({ - url: '/monitor/job/changeStatus', - method: 'put', - data: data - }) -} - - -// 定时任务立即执行一次 -export function runJob(jobId, jobGroup) { - const data = { - jobId, - jobGroup - } - return request({ - url: '/monitor/job/run', - method: 'put', - data: data - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/jobLog.js b/ruoyi-ui/src/api/monitor/jobLog.js deleted file mode 100644 index 6e0be61..0000000 --- a/ruoyi-ui/src/api/monitor/jobLog.js +++ /dev/null @@ -1,26 +0,0 @@ -import request from '@/utils/request' - -// 查询调度日志列表 -export function listJobLog(query) { - return request({ - url: '/monitor/jobLog/list', - method: 'get', - params: query - }) -} - -// 删除调度日志 -export function delJobLog(jobLogId) { - return request({ - url: '/monitor/jobLog/' + jobLogId, - method: 'delete' - }) -} - -// 清空调度日志 -export function cleanJobLog() { - return request({ - url: '/monitor/jobLog/clean', - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/monitor/logininfor.js b/ruoyi-ui/src/api/monitor/logininfor.js deleted file mode 100644 index 4d112b7..0000000 --- a/ruoyi-ui/src/api/monitor/logininfor.js +++ /dev/null @@ -1,34 +0,0 @@ -import request from '@/utils/request' - -// 查询登录日志列表 -export function list(query) { - return request({ - url: '/monitor/logininfor/list', - method: 'get', - params: query - }) -} - -// 删除登录日志 -export function delLogininfor(infoId) { - return request({ - url: '/monitor/logininfor/' + infoId, - method: 'delete' - }) -} - -// 解锁用户登录状态 -export function unlockLogininfor(userName) { - return request({ - url: '/monitor/logininfor/unlock/' + userName, - method: 'get' - }) -} - -// 清空登录日志 -export function cleanLogininfor() { - return request({ - url: '/monitor/logininfor/clean', - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/monitor/online.js b/ruoyi-ui/src/api/monitor/online.js deleted file mode 100644 index bd22137..0000000 --- a/ruoyi-ui/src/api/monitor/online.js +++ /dev/null @@ -1,18 +0,0 @@ -import request from '@/utils/request' - -// 查询在线用户列表 -export function list(query) { - return request({ - url: '/monitor/online/list', - method: 'get', - params: query - }) -} - -// 强退用户 -export function forceLogout(tokenId) { - return request({ - url: '/monitor/online/' + tokenId, - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/monitor/operlog.js b/ruoyi-ui/src/api/monitor/operlog.js deleted file mode 100644 index a04bca8..0000000 --- a/ruoyi-ui/src/api/monitor/operlog.js +++ /dev/null @@ -1,26 +0,0 @@ -import request from '@/utils/request' - -// 查询操作日志列表 -export function list(query) { - return request({ - url: '/monitor/operlog/list', - method: 'get', - params: query - }) -} - -// 删除操作日志 -export function delOperlog(operId) { - return request({ - url: '/monitor/operlog/' + operId, - method: 'delete' - }) -} - -// 清空操作日志 -export function cleanOperlog() { - return request({ - url: '/monitor/operlog/clean', - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/monitor/server.js b/ruoyi-ui/src/api/monitor/server.js deleted file mode 100644 index e1f9ca2..0000000 --- a/ruoyi-ui/src/api/monitor/server.js +++ /dev/null @@ -1,9 +0,0 @@ -import request from '@/utils/request' - -// 获取服务信息 -export function getServer() { - return request({ - url: '/monitor/server', - method: 'get' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js deleted file mode 100644 index a404d82..0000000 --- a/ruoyi-ui/src/api/system/config.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询参数列表 -export function listConfig(query) { - return request({ - url: '/system/config/list', - method: 'get', - params: query - }) -} - -// 查询参数详细 -export function getConfig(configId) { - return request({ - url: '/system/config/' + configId, - method: 'get' - }) -} - -// 根据参数键名查询参数值 -export function getConfigKey(configKey) { - return request({ - url: '/system/config/configKey/' + configKey, - method: 'get' - }) -} - -// 新增参数配置 -export function addConfig(data) { - return request({ - url: '/system/config', - method: 'post', - data: data - }) -} - -// 修改参数配置 -export function updateConfig(data) { - return request({ - url: '/system/config', - method: 'put', - data: data - }) -} - -// 删除参数配置 -export function delConfig(configId) { - return request({ - url: '/system/config/' + configId, - method: 'delete' - }) -} - -// 刷新参数缓存 -export function refreshCache() { - return request({ - url: '/system/config/refreshCache', - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/system/dept.js b/ruoyi-ui/src/api/system/dept.js deleted file mode 100644 index fc943cd..0000000 --- a/ruoyi-ui/src/api/system/dept.js +++ /dev/null @@ -1,52 +0,0 @@ -import request from '@/utils/request' - -// 查询部门列表 -export function listDept(query) { - return request({ - url: '/system/dept/list', - method: 'get', - params: query - }) -} - -// 查询部门列表(排除节点) -export function listDeptExcludeChild(deptId) { - return request({ - url: '/system/dept/list/exclude/' + deptId, - method: 'get' - }) -} - -// 查询部门详细 -export function getDept(deptId) { - return request({ - url: '/system/dept/' + deptId, - method: 'get' - }) -} - -// 新增部门 -export function addDept(data) { - return request({ - url: '/system/dept', - method: 'post', - data: data - }) -} - -// 修改部门 -export function updateDept(data) { - return request({ - url: '/system/dept', - method: 'put', - data: data - }) -} - -// 删除部门 -export function delDept(deptId) { - return request({ - url: '/system/dept/' + deptId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dict/data.js b/ruoyi-ui/src/api/system/dict/data.js deleted file mode 100644 index 6c9eb79..0000000 --- a/ruoyi-ui/src/api/system/dict/data.js +++ /dev/null @@ -1,52 +0,0 @@ -import request from '@/utils/request' - -// 查询字典数据列表 -export function listData(query) { - return request({ - url: '/system/dict/data/list', - method: 'get', - params: query - }) -} - -// 查询字典数据详细 -export function getData(dictCode) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'get' - }) -} - -// 根据字典类型查询字典数据信息 -export function getDicts(dictType) { - return request({ - url: '/system/dict/data/type/' + dictType, - method: 'get' - }) -} - -// 新增字典数据 -export function addData(data) { - return request({ - url: '/system/dict/data', - method: 'post', - data: data - }) -} - -// 修改字典数据 -export function updateData(data) { - return request({ - url: '/system/dict/data', - method: 'put', - data: data - }) -} - -// 删除字典数据 -export function delData(dictCode) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js deleted file mode 100644 index a7a6e01..0000000 --- a/ruoyi-ui/src/api/system/dict/type.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询字典类型列表 -export function listType(query) { - return request({ - url: '/system/dict/type/list', - method: 'get', - params: query - }) -} - -// 查询字典类型详细 -export function getType(dictId) { - return request({ - url: '/system/dict/type/' + dictId, - method: 'get' - }) -} - -// 新增字典类型 -export function addType(data) { - return request({ - url: '/system/dict/type', - method: 'post', - data: data - }) -} - -// 修改字典类型 -export function updateType(data) { - return request({ - url: '/system/dict/type', - method: 'put', - data: data - }) -} - -// 删除字典类型 -export function delType(dictId) { - return request({ - url: '/system/dict/type/' + dictId, - method: 'delete' - }) -} - -// 刷新字典缓存 -export function refreshCache() { - return request({ - url: '/system/dict/type/refreshCache', - method: 'delete' - }) -} - -// 获取字典选择框列表 -export function optionselect() { - return request({ - url: '/system/dict/type/optionselect', - method: 'get' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/menu.js b/ruoyi-ui/src/api/system/menu.js deleted file mode 100644 index f6415c6..0000000 --- a/ruoyi-ui/src/api/system/menu.js +++ /dev/null @@ -1,60 +0,0 @@ -import request from '@/utils/request' - -// 查询菜单列表 -export function listMenu(query) { - return request({ - url: '/system/menu/list', - method: 'get', - params: query - }) -} - -// 查询菜单详细 -export function getMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'get' - }) -} - -// 查询菜单下拉树结构 -export function treeselect() { - return request({ - url: '/system/menu/treeselect', - method: 'get' - }) -} - -// 根据角色ID查询菜单下拉树结构 -export function roleMenuTreeselect(roleId) { - return request({ - url: '/system/menu/roleMenuTreeselect/' + roleId, - method: 'get' - }) -} - -// 新增菜单 -export function addMenu(data) { - return request({ - url: '/system/menu', - method: 'post', - data: data - }) -} - -// 修改菜单 -export function updateMenu(data) { - return request({ - url: '/system/menu', - method: 'put', - data: data - }) -} - -// 删除菜单 -export function delMenu(menuId) { - return request({ - url: '/system/menu/' + menuId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/notice.js b/ruoyi-ui/src/api/system/notice.js deleted file mode 100644 index c274ea5..0000000 --- a/ruoyi-ui/src/api/system/notice.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询公告列表 -export function listNotice(query) { - return request({ - url: '/system/notice/list', - method: 'get', - params: query - }) -} - -// 查询公告详细 -export function getNotice(noticeId) { - return request({ - url: '/system/notice/' + noticeId, - method: 'get' - }) -} - -// 新增公告 -export function addNotice(data) { - return request({ - url: '/system/notice', - method: 'post', - data: data - }) -} - -// 修改公告 -export function updateNotice(data) { - return request({ - url: '/system/notice', - method: 'put', - data: data - }) -} - -// 删除公告 -export function delNotice(noticeId) { - return request({ - url: '/system/notice/' + noticeId, - method: 'delete' - }) -} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/post.js b/ruoyi-ui/src/api/system/post.js deleted file mode 100644 index 1a8e9ca..0000000 --- a/ruoyi-ui/src/api/system/post.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/request' - -// 查询岗位列表 -export function listPost(query) { - return request({ - url: '/system/post/list', - method: 'get', - params: query - }) -} - -// 查询岗位详细 -export function getPost(postId) { - return request({ - url: '/system/post/' + postId, - method: 'get' - }) -} - -// 新增岗位 -export function addPost(data) { - return request({ - url: '/system/post', - method: 'post', - data: data - }) -} - -// 修改岗位 -export function updatePost(data) { - return request({ - url: '/system/post', - method: 'put', - data: data - }) -} - -// 删除岗位 -export function delPost(postId) { - return request({ - url: '/system/post/' + postId, - method: 'delete' - }) -} diff --git a/ruoyi-ui/src/api/system/role.js b/ruoyi-ui/src/api/system/role.js deleted file mode 100644 index f13e6f4..0000000 --- a/ruoyi-ui/src/api/system/role.js +++ /dev/null @@ -1,119 +0,0 @@ -import request from '@/utils/request' - -// 查询角色列表 -export function listRole(query) { - return request({ - url: '/system/role/list', - method: 'get', - params: query - }) -} - -// 查询角色详细 -export function getRole(roleId) { - return request({ - url: '/system/role/' + roleId, - method: 'get' - }) -} - -// 新增角色 -export function addRole(data) { - return request({ - url: '/system/role', - method: 'post', - data: data - }) -} - -// 修改角色 -export function updateRole(data) { - return request({ - url: '/system/role', - method: 'put', - data: data - }) -} - -// 角色数据权限 -export function dataScope(data) { - return request({ - url: '/system/role/dataScope', - method: 'put', - data: data - }) -} - -// 角色状态修改 -export function changeRoleStatus(roleId, status) { - const data = { - roleId, - status - } - return request({ - url: '/system/role/changeStatus', - method: 'put', - data: data - }) -} - -// 删除角色 -export function delRole(roleId) { - return request({ - url: '/system/role/' + roleId, - method: 'delete' - }) -} - -// 查询角色已授权用户列表 -export function allocatedUserList(query) { - return request({ - url: '/system/role/authUser/allocatedList', - method: 'get', - params: query - }) -} - -// 查询角色未授权用户列表 -export function unallocatedUserList(query) { - return request({ - url: '/system/role/authUser/unallocatedList', - method: 'get', - params: query - }) -} - -// 取消用户授权角色 -export function authUserCancel(data) { - return request({ - url: '/system/role/authUser/cancel', - method: 'put', - data: data - }) -} - -// 批量取消用户授权角色 -export function authUserCancelAll(data) { - return request({ - url: '/system/role/authUser/cancelAll', - method: 'put', - params: data - }) -} - -// 授权用户选择 -export function authUserSelectAll(data) { - return request({ - url: '/system/role/authUser/selectAll', - method: 'put', - params: data - }) -} - -// 根据角色ID查询部门树结构 -export function deptTreeSelect(roleId) { - return request({ - url: '/system/role/deptTree/' + roleId, - method: 'get' - }) -} diff --git a/ruoyi-ui/src/api/system/user.js b/ruoyi-ui/src/api/system/user.js deleted file mode 100644 index f2f76ef..0000000 --- a/ruoyi-ui/src/api/system/user.js +++ /dev/null @@ -1,135 +0,0 @@ -import request from '@/utils/request' -import { parseStrEmpty } from "@/utils/ruoyi"; - -// 查询用户列表 -export function listUser(query) { - return request({ - url: '/system/user/list', - method: 'get', - params: query - }) -} - -// 查询用户详细 -export function getUser(userId) { - return request({ - url: '/system/user/' + parseStrEmpty(userId), - method: 'get' - }) -} - -// 新增用户 -export function addUser(data) { - return request({ - url: '/system/user', - method: 'post', - data: data - }) -} - -// 修改用户 -export function updateUser(data) { - return request({ - url: '/system/user', - method: 'put', - data: data - }) -} - -// 删除用户 -export function delUser(userId) { - return request({ - url: '/system/user/' + userId, - method: 'delete' - }) -} - -// 用户密码重置 -export function resetUserPwd(userId, password) { - const data = { - userId, - password - } - return request({ - url: '/system/user/resetPwd', - method: 'put', - data: data - }) -} - -// 用户状态修改 -export function changeUserStatus(userId, status) { - const data = { - userId, - status - } - return request({ - url: '/system/user/changeStatus', - method: 'put', - data: data - }) -} - -// 查询用户个人信息 -export function getUserProfile() { - return request({ - url: '/system/user/profile', - method: 'get' - }) -} - -// 修改用户个人信息 -export function updateUserProfile(data) { - return request({ - url: '/system/user/profile', - method: 'put', - data: data - }) -} - -// 用户密码重置 -export function updateUserPwd(oldPassword, newPassword) { - const data = { - oldPassword, - newPassword - } - return request({ - url: '/system/user/profile/updatePwd', - method: 'put', - params: data - }) -} - -// 用户头像上传 -export function uploadAvatar(data) { - return request({ - url: '/system/user/profile/avatar', - method: 'post', - data: data - }) -} - -// 查询授权角色 -export function getAuthRole(userId) { - return request({ - url: '/system/user/authRole/' + userId, - method: 'get' - }) -} - -// 保存授权角色 -export function updateAuthRole(data) { - return request({ - url: '/system/user/authRole', - method: 'put', - params: data - }) -} - -// 查询部门下拉树结构 -export function deptTreeSelect() { - return request({ - url: '/system/user/deptTree', - method: 'get' - }) -} diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js deleted file mode 100644 index 2075677..0000000 --- a/ruoyi-ui/src/api/tool/gen.js +++ /dev/null @@ -1,85 +0,0 @@ -import request from '@/utils/request' - -// 查询生成表数据 -export function listTable(query) { - return request({ - url: '/tool/gen/list', - method: 'get', - params: query - }) -} -// 查询db数据库列表 -export function listDbTable(query) { - return request({ - url: '/tool/gen/db/list', - method: 'get', - params: query - }) -} - -// 查询表详细信息 -export function getGenTable(tableId) { - return request({ - url: '/tool/gen/' + tableId, - method: 'get' - }) -} - -// 修改代码生成信息 -export function updateGenTable(data) { - return request({ - url: '/tool/gen', - method: 'put', - data: data - }) -} - -// 导入表 -export function importTable(data) { - return request({ - url: '/tool/gen/importTable', - method: 'post', - params: data - }) -} - -// 创建表 -export function createTable(data) { - return request({ - url: '/tool/gen/createTable', - method: 'post', - params: data - }) -} - -// 预览生成代码 -export function previewTable(tableId) { - return request({ - url: '/tool/gen/preview/' + tableId, - method: 'get' - }) -} - -// 删除表数据 -export function delTable(tableId) { - return request({ - url: '/tool/gen/' + tableId, - method: 'delete' - }) -} - -// 生成代码(自定义路径) -export function genCode(tableName) { - return request({ - url: '/tool/gen/genCode/' + tableName, - method: 'get' - }) -} - -// 同步数据库 -export function synchDb(tableName) { - return request({ - url: '/tool/gen/synchDb/' + tableName, - method: 'get' - }) -} diff --git a/ruoyi-ui/src/assets/401_images/401.gif b/ruoyi-ui/src/assets/401_images/401.gif deleted file mode 100644 index cd6e0d9433421b3f29d0ec0c40f755e354728000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164227 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%0DrCP2Rz0d`>pMVr1-JQ9bI3~`<2w)b7I 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⋘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 GY5fOuZZib{ diff --git a/ruoyi-ui/src/assets/404_images/404.png b/ruoyi-ui/src/assets/404_images/404.png deleted file mode 100644 index 3d8e2305cc973ad2121403aee4bf08728f76c461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98071 zcmZsD1yoe)_qGfpFmxy&-5?DTB3;rUAxKDvbVzqeiAZ-S3L@QI(jWrT-5rArH4O2c zxq5&1-u3_1I%_Gcb<TOu-ur#_v!A_RBGpypa4^X*@7%eAqaZJ%apw-|*_}Heb__J& zH@XA7g}^^3t{QSucS?Uy?A*B{aYsQ$Qp*!%zr`z&VZv_<5&hP{W^Z>l>@Z)@`}0ni zgTxS1Xz2Sp5LyN$jB+`(TK2go0$*ON+wYG~Qz71pR)(>+cvvo`d01{Xdj)u2?ZXzy zmA;x1Nzp_;m7?it6=)ebdFi9=K=7-zt#9B^kGF`IzK;CC(qMy@r8#>WqG2@cS5uox zXbf0B@c&#i)!^b0Mb!?4K=50dqjrDj)8Y7T(OQwKjh4xB0;y*hgfuAsToL#vtY-x2 zcDPC4UD@TJ&X)ylS~p2s{Vm(V1wS(C*u6kTtf;l}x2;9RDSK|B+2Q|vU#<vn`^L-> z5g|>`3ves^tw-x#pW$kM%4o{)rRUjP-bFAxh4kKaDr2nlD0Ny3>QcfT2w<51UE`{O zQGN&5UTB2YKA@#pXv;7`0|{yiD)FUE4eA?4@$j%fYDMKsqFQWUi?UOjnyuv<1_{u= zug?(m3a+6reFd6hu*h(<AFSZ`A<O!?WLjHosRX;wTdo|a#0pgHtPc-5`zmJQ^h)Hx zKd%SYAro=uJ_18UAY2iYgnx17Una<WoH6Y|op>3OM4>q*mTc~Pg?D7J-n+TvnsoY9 zWoxbD->+xD=K*Q$(+jLna6%I4kA`x*GDPIgI-Zm%UVn5!@S7kc4LW0oj3yb?d`)8c z7ej523IBV$9&o#~u-m;%@UGl)D|$=WY^|@KLU`Ac)l*@|602_{T4<k7vI7Ti+PVlb z+8oPHpO<W{|N74}MjXIjrt9Y3x`;5~2evPuF4o1ydK-;OYt}L<HOl0!4}Sb4kNxT( z=2bF9d&*>+M7IA6dbP#2AL)Eg1u&)lV@(b^iSAa}Wv>^6+>!0CyZsvtcv1&Qq&svN z+sZT<B0;BUHGJk?_vmnSvrm>hYEIutRzAD;PdEXgWle?>lIf5kVEHlvET1a{;shO{ zn-EQLhR|g}l#-=7bY$DeCw*BaO6=ZCIRr)2d3ye8*IdkaiCqEbd9ba|DSo;7ROx<z zz<(d=11j-jcl2qdpn-&jNC-t=`~IA(a8>l@(%P?=<V0MUX2{sx&<DGClVt=9zuX(~ zHCwUzkB#sxLDkdYUS}-Akm~n=Yu+w|@ZB2y3&&@e$-cTUMDDr=lO78xCk~cB^NmN* zSu>XHjX#v%4uLDStHz#?vp;8Jp~psBrurXiozhE0`(5iED>LBhfh5__U^oInU|$yP zEjD<I`i057U_Py{F$nWkTKxoF<Du8Z;b3t{4~CrNf3_{n9h4BNI#l^#Y2eqpQn`y! z*RMaYTmSS^KjepJ>z&{zwWAxMdUZr8h#Q=vPr46k)<LT)$2PWX|6?NVtULF8#;hWa z<0ObM_%teVI9hW8@eVJ)Zl70+p)6tlItqJ?rgBSrb)eR>9@kV_jypUZ<oKVJv`YZ7 zh?99QN(MB<G@{(?e>rWZ3!8{4Gc-ISvP>EqE52=OPg%cn3_A1Z+SuWO*0}uNWds4s zAhHbNeJ>FWsaCAW5waW9L4FA9Wr=FLpr*j>!WUNfY>TSb`i)Yththth%76Sc@)}q} z#=A@s1{4@Z>WAs!^^cH?WYrfik`9X{fiIcaicws{R=?W(`}oTdF7Taj4mNRDu&>;I z{4zufM6pn&*L_0n^uS2Kp2m8rj=vHajm%)0ZyNTcn@wug^UjqFs9J#iwD=khPyY|B zktqP6M89)9&wx(|%4a*P;&Jc6s(^o8=aRB(4Kgwpm-fAp_?~bxq0|4UPCxmP54Nw` zf8KveXS@t^YI)NG0{})#k;X3S`owvLhXtN)LG8zL?>f|k6Y<^+zeU_~P(n_T3cesZ z8M$)|<NpsZjVl7HC;@wkK&nxKxY^Dg{nBr}yQFjSVcmn#(tmc>qkPrp{Yt_1HBT1+ zO$}G`mF#sBF264SZO#=YiEgoZnB0y+E+=?at|BLr{=?)Ir}<1cztP~%gOtGG__6o( zMm~b3uxF~!@$Upjl>b=+yK-RE^|!b6=#XmBAb0Kk0yP63l$@RoTOm<YqN9fLEog7b zabVK>8=ocSwp{*zOYGx+e}se(;LO3e6?ei2{2&&Vv#NqBGgg!wJ(!R2P`LBb7c^&8 z?_}TM;6eYN3D70K&z~p#{=4r}rQ6HpW`vHNQ6cYvu$FmNk@Ifi=~0v3F+WPqS*X{> z2_Nn)^R~a;O-srktbEh9S&aNYACRic7*z#8+=w0Mna;iy>`*~9X)GjuDJ%2()!vdB z<?7?=OQ>Z0%@0nm{d0Hybg!I$Csmq{VC#z5?Jn182ITfa?C@E(zU!0=cu06u$Y?}# z)Q!Vd5YFX{PI!wE)k>WaaQkvEERB9y_+J|{$ekI8#RaR>HTob-4E2h#JB02*h^Df6 z+hbAf6XDe)%Bk-yG^;-KiykYn{3G^*W_{J-^WXPidjIz05b`1L?_RQm-0y&O7;DB? znhfbMQX7`Q)xWCPdi9+!bnTwM4~5>a6{jc@y+8h6f(8CFuG-$*J2Knb^#~b_$k<M5 zSKOxxK|5ex%Bb9ARsjGe?N`_>XV(?y&%;wLJv#A=pR$wIksq9h{$)&wK4AHHGojB6 z2(7_D+CMG$3c1i4)v3GYWLSQ5Fi4E)uPOqkT_=lR{&dUcQ=+q{7G%ZnFRo#YhBB7T zpTT4KG6XDdObk4tDsUWL!nCY;*QhBHa&fhy=Rzuuu@v+LHImBfsx)g-H;d=!^}p?a zgG^77#$I}a7(~GRLzx^(#GUa*ujinA+$hxZSd|yfo)lV_E1uj==Sh=$LkwNEasOf) zT5`b0yEWGfLaG^o+e<Pg*H6H{PBXC&o~x?$x7*)R)*l3rh?8C$Lg2K#2Wr*tNXwM} zwX?Z10OQZdTx5gk<O8Ex9wd}*oLtrW>Yhw|&EXwMkEM>mX1|P;97mZ;zVY)Zsr#NQ z_wXNtrD+7xw4BGGkPG2sC178@xc9VW`wjIKq1&9CoxjJoJ{NDBp#buct7%`48WHE) zC$>LXBJREU2b$<4faQak(xe%J!T?_wMX2wIi)RGlMfr1i&r78EsVhp4-iqCvF&mHG z4kS$mO(x`l|FPc44H*0NiCw@p1ufF6T1qrfZx<JXD~Ape|7Tx~`=^u<XpGByM<Q@= z&sk(K^D)33al{40Ij{W&H{^`wtv?r03Z66n%b~idcR0?l9<5R_jGO@*1@HWxEvR*8 z<3zpkM?G2`lc*Ba!=BBhs;MXDneXobY~XLQDy0}mjCij~(ai)rEQl_sc&*=AD{G1> zWV5;6dMF$~gZGYJq({OgEp7LSuk~T2jza-BbAVZV3a>nup0jCE;N8am$F1!WO{#9F z%ZtF*))3`(x4OT{&;Ibpq5mgm{eg5pR8mNE`+AdK3E!M1R^k^_?eqFd6IT^(Ix_<! z-9O*s3Q4_)u;S!Ud<wEhVsD1(ezD2S$ZkQ?KJ)$yVbWt_ab>RdbaCSknTxXyUb|;m z&nNLmS<wF3Bc#CQYKa?@`XHa%0Qg!kr4FJq2KE(on$eLpDuEla6j+&d#*UN9_+j|b zSoC*#7@ANDJX0Nz`6tFo7>wmlEZ7K+W|5x57X?vWEy@v0lp0n|tEjaXJUEYw9gaX7 z^uv?6E_PQbj8#SqOIQ0dtdeinTHL0b>j}|=KjZ()=~AFKB8@fg?{KMr7-*`eVN9v2 z5+(3xlWu4Te*okrAKMW0)Vu@Z-fg&P#851~z%5(K3%P>WkTRft_~S4dR%F~-<O``1 zriKF>z-#%4erE*iyIUDsI_aw!@R(+*>ZLLojl=EX;6?#;ZLvr}?BDkWf<H>Mk8f46 zly8wLw37nqASMlS?e0US<+1v!ZuJu)o=388_yaKFMZa(&D8r_&%q$fZ3;!1>^11Gy zH&1jY#kjMB{(5BY4VdEIM{#~yf1SA&y(8`ZDF$CA#^sPyKho>0h@rMeW|863S2=5b zZI*LJ9-puF-3MKE)x!UULqU`HK!EVidubDLM*;EsR7K7@Orc9%wX6s~WvK{qfnBqS zdPL)Yb>-qs`Os_K<6M_n3M(u4Uxf>>_qOZ-@3gObHKXsUN)R2Leg&}D3?__yiWf2{ z_V(gf^NLae+P38aZ?Jgbun=?<`Y)FtSr$1)N&!<)Ij|Hl_DA<$3TbL0u@oA_Pu=53 zPo9Vv!!I_vf6b{+B`MUR`4m&}!#^f5CPR^?F3DHuO97sVgG>x75ne&Bz@{VV{7gnk zz8pm<<pqA$Kb4dWuH?mVGW^?cWCNCxj@gUhHY-;2|HOM9@Ew9SPgt-a)o%c|PC9LA zCj~N!_6Ik$vR*ED+S_#EZ7TFlatV0XiFn_t?!7In)ZqL(wFOxd<eE~Kz&EWGav1<D zWvp;A!@^)NCeyKPHB!Zk5?f540g}A2__GwhlN%qdl&x1og05d#?*G{>GC_er@IEsh z=7|sF0pe@QiuD95$$$3Lq|hqpBYVqOF`P2;GOKCPD)>t;&-s!xZ6Jz5f8M#F4bB9D zOoaNMO_xXyn1JGe19K1ta!J0G{E&HVTagC;yuR9vu(I*GVb9~LyzHxGW96Qzj^QDC zE5ak9qmHPu7iTq@REe+X$-7)cl>80e4z-=L?xp<4*t2f}Kg7z~cc!4y2C3ucni?(e z75ZH8?}@;V(BeweHxn$bx($aD63nujoxUaXE=Bh5z3nT-JrVJl8`<UmmECy2^(H=t zuR1du7v*DXxc-XIbLGn>doS#?v+%74Wa9szPtaGOjx8g5fJYN_27HkJicm~v@1-<} z=W)j=oqqC*zV(;aQ(H2V33Wf}k58JCua0sVA6TvIxx@}&yk;iI5dXaG(c#y2Ia9d* z#BG`lPxe*;<8k0(!0r7>CAY`SYLb6L48Ai6O&lTPYx&rh(3%eL+-H*_-hgW~78pr{ zot~+JNFcA#<@circTpjM-F_~Dv}@90IQpwjj_|L$2aqngFHQcV>5gVpD)#EfvCH8X zJ`uyzy7SDjemiuw<618slKkzNKqLfa2n!~@1*bm+(w)%w!*Q)P|2(#-(mL}HRv4Mg zQm8<>^G3{Aw#Z$6Xm2=s|066T!!JM%k?jWis-FoDxz7xDSlmL2rBBR`P|pqRTQo>8 zL?C~^Kw^%_`UjEioZ0#v1)6#A$I|JdN)OaT__=giTkbGnlfr;+LlYC8?ae5GTDFhc zdIc)R2o+ZybDfS7&D}Drw#-E>P%E+8Y4hqD`sI6)1gJ?#q4+3$>{87bS;qMtfBFBJ z>;<r6>4i@z9z!ze@nySP$v=-d%<lJ3*vd|FI<)WxI0#s_9vgq7RPZ^TeHcegN#I3B z>_-N(;>EmFErFAzEQPm{Mzwm|lFqUBuc9NI-DcEi1#S=7N~U6xl7j!oQ23A>GoOCz zu0p#A=$Xd8<Kq5+oWP69{HgfV{>@q5I)xv<){ovZFNrVr)1zbKQgP9@^=CvwF8IWZ zNc?lp$>(V1gmqWooCCW!CtVxP=Ce86&vh}M{{0;zP9QWnasl7{W*~V=bYa*TaUQb? zo31v}b-tP!wp&WVNC_^Rxk&M7s4NtWosm9ztiOQqHqWNR^Z9yT#Kj8fZe<y<A4dU+ z;P-Sqxpz3E7Ypi#P^w{t&7gv2YHJ};E>6_*wqfro2X#-n{{aPZ-%v-r`uHAzt5cdI zc=SZ1D4J4B_7E{?n+3yK<etz+2vj(sqLP1S&-q$!_=5wy_v!KRSz)pACe9e2EoG)j zukA#zW}khoVe}S9unUy!QvD1dt>JT|Kl^({bi|l+Q!jcn7xl}x1MqMkULV?ct=_mz zelqcVi2J`-$wF?gN9x({!1C?NARW47f7xM!DYuxa+LGXSku;(Q((ad}-*XG=87a#* z_qLd-MV`|x3T44Il;|yPMop}pTE(n_UmtLWFy}q^h4?@l)1AXwfNl#25WC-`;+|m( znBiDcJEZwd5~TSWx1Ez7uA<EUyf$k1`NTN!(?28*D8m4(yGySI)Fj5dC?#?Mh#vzC z)dkhn?DMB%2~=9Xa@CyPI+bpav!06SqaQoP>zS@*kHymO4-ZA(Uz@rRVjc2I3hMEt zfbZ1wmLFA-VzxpnW7{5f=A%wtsm^!hv@faA{FKODZwoqK>gEtF_xvmZ?~ZxiC^YVQ z|9?JtO31xW@F`AuqX9_s9~GDLIm(Nrc*<(;$M4O6D2;k@?+ZC}ShUd-z&I`^vbp+h znB`!{hwppFhV32vHTJvcPVZUS5}=Ue|B`&%XgifJL=I$2^<$s+pbq@-*kGp%@vem^ z@pBXV)z*$R-k|9#Xs7IF>IM+?NB&!Orq(|SWY7o_up1xdwF99sfv>K!6DwU&)>7Er zx?Gv_CR-FYp_MpWvu<CNoosy0!pN){4{y`lS}Ntfq97g?PH952E`=UL1_7AKC0m*1 z)7ru-poVbqPNgeGe=q?EI+D3+rW?BnWYfQ5t``RZw$dGO!!LTAH|L?(nD)Oij|L2Q zB-}Wjg$~#gPN1BHXAzOO{%?ND5gVR;=v5$g+cY%ijPA{SDCrYz%hXDy_hf4zNK@YJ zo$h5=`j&ZDRf4WAx3aB){1Jw)m?#Q$vi~P5pvGmrG~|vWpAwk~5_UkpcT+}1mE_EF z8M|CcCQ;oRa=u@K`+%A2?*H)rPeI@dz%-!dO>z-8kSV~(7BC?f<NkO`VtjripHJ8a zVF}Q}Ie&h8r*CncRxY|MU-nss5{;btp{4tG4krjf=_M<6ATjw|3#=5W4ybhU^~<Xg zXO1s7X2&v)U(`B{*2g$S@ZZ0>m2HOV$WliWir*Z+#L}PnAGc5jbd$xzv|I|nA8yRK z5ZJiJ?7XFdoubkp&CJ55^plmn;;2l3yP4a5PG{XFQwp%L(|gmbA)GwDDJ1mERH(v^ zXsDeLyvf8MB?A&m{5e*NB^`~dRE-jj(vkxmZ5rKIpqwn10gsato-wTWfN!fW*Rn;b zp{(nR|4<X_hd^55=pK#+I2T`3`{D%MTyoO$kK}Gc8e1Gp%OO<E^sR%f^v*0UWGQ6> zt+nh1hx~ijq4^wm)4oM5mVI1RPWVUFBE=B!>t|LN4Ldb$A$x8%ATgGU^w8lhurIzd zfy@ndCcapnr4I{ycx^b4^)lrpt(xC-rJ|Kjm#Q7``M<9iq>#j8;Po7+Q-}#ij@`-h z9rf7i_ve83GwHfM>rq`RUn2jp;%NWVJK~oIO#V|!pg<q74QO|RClax?{iShR|E`i) zzIMrFq}0vRydHGM06g$)2st7)$4Boee#R|+axogAg86LQ_a`=q<^KbU*+d`}2xRHv zMuR^pFXv^*Bzx2@>a~qfbeZxn^tswR-;JJfj+5si4i|3iE<2-3D8F^f<<H5+Z?iS- zr*oUhsocy+4a8eL3x;nk`y4me^~4SZs1EL|Jg3&J(m7jlcrnqN9_mN<Q2Y-<@&(<= zxk<m1mV%UUsZg|i9TsPs_tM-MnWJaV9*);KnvD4d3EFWcJ`j1#e!TA!R$97gSA+jJ zB@oJ8Z^IJaxNmFMst2=o5-c~2x<{1KSbDV+S70Gu0^hA%GWlKVJW_uNNQ=KM`+)&a zrV_`VegFVyfZ!r28b6Oha7oWd^+vDGhstKINXZ||X3lmXa8Ho<8%?sRmvZqwL4#>b zL{D5BKg+S}W6N8Ls2gGFns<r40AnDMZ!IuPkg;*U{`hgpWVuY(AxP}|ETz*-8+`~J zVZ_j_5IX{Oda~_M5&obA-dymfx}kZDf*Nocg7-!as3&DI+Vviz1Q`2OKiJ-$U^IHP zuK(N>RB5KZE&f_k@`KT+q4zUc7?#}&R{u6s_{6ZX_c3;&Z_Q?#CkO)G$u%5{DcU%B zvqJE}u-y7%w0^p;8u0Pm8s5)s8qHPErTcZ_&Qwp!C}+5=s5}RJMyi04LzC)eL6rCq z^M9&WkRmcqCEhy+csh5sgzdoGgNVC&2^mV!S$1~zJ`>+dJEWpqj3zX*cE1o`ldqJP ziDC`HxME3);a|7$ep<9`X4nuW5i`a44y(0?Cy|JAQWN{t>@sImEox4X8aMP-#$J(4 zGW*-R5KdkdH0QjC7&^z#2v~aQg@z@~pPy2!NOAbL;_-oAeIY@2`;A->U@cZ!r}Mz` zgSEUx9oCttaX(H&#$%t9a44HSVg9aJUzCxGuxMOL4u$fdYwy<7$i8`sZiP92L8<3b z(IoM`%bJ!`i&9Pmy0J5-9&G6iLQG#2qU#S4tywRc^Y<`wi1o%SK13^UN)g2<h`j;o z9{BOgJuN@3_NqVZNa6xAVoH4@w2mPUG<x`I5dx@#b2Z+k6iYT`obXf4*7H(MmJ{;J zU5_6-nOc)7N?p)h2scKGUrhhh^cBf=r8uQ_`&9N@i*BeKA5wxWNWAL4D7sC4Yn#m; zE_(~pg~6{#GoJxllCO(GqO|?SPiLU2-s*_wZ$VKeBQR2YWi*@MT{c)xf@Yr>k+J;4 zZ|<Fwe-{5w)3Q1Z_G}sGS9ob7n2NwdVsx>&+AVX!!f5RmK+t|DPl~W-1C^UN3iax* z=qP`5R^~UkS*aSw=<_cDB|K{~4ZlyB;7?TM9s+7gnXpFod!U1o1|Cm(Jg{*<Y<jR+ z<<uKKK_x0b=at=;CGTEm@3nXD^5eWhY66$A(bdh|w5Rb=Ccn|6!>Wm=?STJhVV&FP z&R^e|g2d|gZ9!rx@z%!rD6ZFK^yjN(`t++b0s(C_0^;wcugdn5j7HKOm)|~P_=_Y2 zy}{>(SvAs1Zz%k=K{2YjZ(vRQ^gf<#17!9UQ$ls`!@jG2to6Ik37<>ukirY|pNeuS zr&RRuf8$rPX-n6NUA3Qr*rKxb!9IWYS0f@CN2OiR$~c*#b3r(8k?Wz?NvjeE@rz8< zNb=taXf_Ne#}9ZDD9|A?@7ry*zfw2T1f!O@^kr{-1ZPjyhCi>B7`t$<88ND4rNH!a ze(Xn?Y|!@Xs`PZhFU7BG(>D29lc>ApLXZW81m%$IQXM;BTNRLdGZfpc))!X$S#@D; zUltUjVE`S7r7ZyTTB!CUS4icu^B=r7MwUZNKQJwTwEQLF&fuJOX#Y~bw7n1BgX5Cv ztF#mGT3Mp07rc=&*UtNxDVA$Cxm<j^V1qNRu)$V$d-U)h4f}187<Me)cKn2-!`{5_ z7<|(Mxp1ldhRWN(g%sW^m1XB|U*Whqn5~LOv{8pX>NN^jdx+Oc`4jIMx>J)#Bb4>= z@&6(|0)PU%U+d3a6Grd`EwIVDXIp*B8tHo#)S*3p#b9vkL!78~E_+|Bt>|3r9<@=w zngkXv-w*Fa9>YNF8<LYqUrXWD-j&MR`3fl^QK015+7eBqelCHO{Rm$Y%+`GEpj&TY zVOrk9PM-Y`Tr}B?wJY4`*f1;FPd|1OTOK^&2*^R%gC!)kV!~>FXG9gCqtM#l?j;0d z#97D}K;WRP$zis!I+_<TIIbeB`rxHKt<^tl8;+LP!^6XJ{&l%Xds1d_U#e3NJLP&$ zAYw_I)=!~ozta$C#%S|c6vYIFlUsuO&#S4w6>8|-*9*qLKR{z%j+WlvGahZjJ%>+y zSf>u!zMdsH?>94Q>?13Q!Hh);he++PhbY%{$+M>!1aP-32oMbB+IZDIwO=8gKL7)* z`AfBY#p^-gym$51z4^IqE9-gdN4&c0@}Y>v_fW|P;s<SB5AThxNP$|d0K)8?&WVsb zjGgH<e-B-rPQ7SJ4OB}wDwGu$3ef7?*W^DCO}wh9pN3jfQ^ixvpXIc-h#7nR3|N|& zWK$suCHceUf>;4rr3^&u!3ZQ$Q4|ix^L{LSE;(JsBjeBRuvZmC7!jovh5X{^DSijU z2D6=qm2LhNjC&-}zL#`0k2@`lIN;mEoo)f~oCy9!4&8g-a9jmYs0WB_K&__ve%BuM ztKaZtCXIt*m!Wb_O}CT-JCw(!$X-H9!FmPPenpQhS|`yT`Coz(xfWEJ>|g*$yue~L zDxcU)K4OlDpw+zW4-sxHs5v;eyem-@FAlu71YX`pyl`fl)G*U~p3e>+K}*z-(Mh>Z zQ6uKvFXF!iYd171%kiKrHOcE2EE09s`*IXm*`%U7z)n{OpsP@5c4i_w@4+oT_ocl) z+F{GQcL}GlC*hx(0|TjD-?0`61y;fjeohOW3+J>Rs+l|Z%4u+HuO9#+tC9y9>Q<J! z&^uqgNby^;7yrbGNH2bda5M;3KBDid#JdYDu?$#f@4$0%6hjfAu)9PD-fA`?t(LPo z7HviTdulZhA%wNsvK5V>wa4+X3JV<lXf}2T8acRTv}ns?+i7R{r%^Y;jnv@YBr^kn z^hFSGQh{@$T@BF@K09<%eNGHzsIWt&1TLH6$B`HQea&j^c*0NI&fdO^(bh*+>~6|6 zPokd>F=p$TQM*L|Xw9rBDUdl&el_<Re_)5vIf1>~{;LB*PgRZRG1-jB3`WD@PqE|# zzWFoi-V$+R#?QAm=Pw+|9zF{D9WvJBz+&bsS%vTktsOy4&m#<)=|c5#JH}QUA5_eT z+0IS*VBp3>Uy<mZtOOa#x1%ey79LK)V%pH1SE-xtbdQcw>Sh@UY4??vP5P>k^*$F4 z+OG!t>ZuOL4u;2<aUveN=9oUo9S^|HyG>0=a->CB(#OB{0h;AXKN5P|>PLUl5&cbh z)dfMDHw=^Z5h4V@mYRlqIqp4n$4Qm7rb=gAs%*r%ImW5)k}A*=JYxq|q+|8AYSLHN z!fmm0+zz7{OMNzgk`o~(Cpwyn<VBcazkS6~Ao%#9|J0*btudx{{&*B?r&PSv_HVWk zU2%RPz2=0Br~Y@IAqa3_%dIVw`fmo5D}E;gDH$MUBAB8-#!F~H4C*A!Pw8B9raMKr zID<pFrR))peKYmvuK=m&2(~?|)z8(l5k6{R1f9{Zi(CRSui+`bfYI%{F^e|te*T*P zx-Iw$o?HRrGHh_CBi->UI>w~OlkS9!U+0!2=O~F+Q%45^xl#UhX(APlMV}`a{w|Ah zSpoMHee2Ew5@EWE1d&xmv!Pj`4{mcXzjUj`^COp03-LT#yb<p!Y=kB!!bE@bS;{qD zF-cp|;Ek<(qfYfEHKqOj)zgjrF`}av^6dr0S0DM?u*y{Ibw_5=7^#&cT*`d(m;mD8 zr+xCvf4Q}vkL!{s;eNtFd!3NK)iuK<%+5~xQPu*%xS(B~cwIrtMso-D^ZT5H<g zV5b1L0)&RUaUc3vO$I@77SRmgOH4l?#`bIj1~|(Y2~qI9$M~R{I$N<_=X+&Y1w4Q8 zQT=ce_odpZ`|T%<K>pkNS3BY71MTpI<MjjKm6x4=>qd+Kh;X5VWdJMqPE!u@-gG1X z{{HjAXQwQR-Pxjm`ofy-A47qxaIb^(Ks=SIPl(B@hf~+zCXcReee3s^D&^OcvG|Mp zJCG2wTPgmOzm$`x5OVP@FEQJ_r1-<kX$s9)D=VB5O&qfFatZg&96|Q+1U)@38nS2d zS9cp|A!(63{-gX!=;L!=Y!!1{xFGu+{P^`|%pzSlKi+6}j=U8a?^lW1+8LIr7hzCu zP~)A|c8NIb-6)F3i}tU7sv(bde&a?rYiR9O_A2@Mq3uo6>zT5_Hu8-pq1!|Uvrpmz z)slQ`wlgvV@oZm+I>}tzyYW{vgT(<A^E?zanfV&y#pN%c$?|<(Jyqi-2icLJL-tb{ z3bI0&P+$;1P^<K@m>%baHT+=vur;7dhH?;}=^>aPu4U_w3*<O`(kP|{pxw!FncrxX zvR0V9ao{vHbpu~07l_Sroe6+54D6W{14xt_n$pFfWvbF%fEDR)02Edx6H`ujA#<Gb z&?YDHs}5b&rzS%IGWY$s7*WrSOj~Tr=kNWNG;&b@JwxygtC|9cL7f~$yZvxldrrvn zH8&`s!HMl`Os+)HAJ`=^Ro+JTlYBKF<*TIxob4rvCeJtDFB~78u(<WA-v!`a=yeRE zRZ&)8NXF(#=!GHCk(*ge5s(p$$mfYAPll~Y5>Z3rZ<YFHW4V)pL{kRU#O!u>Nq&=M z31MVj{!ukp5ho!JF^Jw@vDIC4$ezh#?i6tv@c*Q+Q>pH#h5p83%wvWtc?^sES;>+= z|NLo9ku99OuhQuCj5zk-BmDy~z|=P%kNBGdf{Kx%<3M`Z2C0gDJ>&8kZ4;&3&BaWC zg>DJlbIB1<Q(IezlY^&!1IKI(P(8b6JbM=omQu|nT2joJB|etqGw{7Mo{A!k8V2%< zTjz7e5?xibh4aqwaf<+QDV^%u*={=Ko|Vejb)T=>MT7o4{l=+1<{yjG1EF9f*x9x+ zEwZs*GBGcAUUr$zAJzr!*i#+4b#01=>-*kO^uJASsl0U`lv>98V})rXfkR+x_!C+` z0;NCjea32@uAMO?c`tm82A=I6B)jARGzJ5{X1<*EEZ(kNUjt$x`zgEBsKxCImP`6{ zllLW-Ae$ke#p`JOm!wp_$))%pr}~!$%VmnU7d)X8VR1x`XbI;R5Z~+%Ie%$ES@r<; z4^<l>1Yk=)IEw_}AuO`XB3e#2efb(WPUH~2*g$9{9=RnkFxE4y2m7!e&VgbiHy_V7 z6$QZN?a(8-ugkVVEz(Y0Rz-M0RgeqyhTPP^GV387HT;k{!s2K1LHcXBQ-pYmH&yRz zsL$c;EjoQ;$rd{<f4d(8Kn%PNhG#N_5tu>40A6b4KjB-`O7R=VKX1YW0+5GO{4FPf zgp+9Wrh$^~_Si=CW<^#6ZA3D^^n49y$z$py9KL!e%28<L0ur0w^JZ>V6DF=}JsY}q zL5sSP_FT%5ACN|HR^d-~{6;BbR)D(a|G?g$3yL5ZxmZ@xdDa;*T^;UFFPn0WZE!Y` zZuE9g$3mRl1L`@M;Gt^qnfwD<X+~Ts&XRL28o`k{1(JbEYIK5?SGw5|WO<ISL1J;A z%QtUX+plcI*cMUMyu>@7qyR+&P%FQgyh2;x72!Z?CqRe2Ta4y06|fF<anM)%1r%FR za!6=opdM_(@V0mm=%r~o!}A;Wb12-_x1C;!+^13^a1f(^{=J9pE;V|(GjzikQ#^9r zXO<tus7&v;z!ate3`$uHwSnH2O4!}xh#pmEO66ap^Ms;2W)OLOo<zLMTmCyaRL9>5 z=+{@snF46c5yaZ7$*skt!o%gKyfG)rL_%D_p&gp{I3AZStia%Wi)wV9Lw=hxTy@Lb zlaP&|Dm^17QMVa=K=c;pht$|eU3#G7V-9~3hGivM>TeqLdw`z9wEW1;xi5UR-(_AS zrx#x=r{fYo@hWHaaOXUCd&wj0isGD5%<^|j(V7YHz|f~5<iN#u+T7<~)eQNp9tpBb zv<qAo2B56aA5}yrnmsrmE!rIf5RDaHzAdQlH`(O?%^Xn3S6&dtdv1<5(2^u^rdXRy z&}VG1Ey}PoR?3JS-G4s*u`HXWM?mepx>4y*T-n<t(Q+eIU!qChFK5^N4qg|)<W5M> zfNBSF_vgj{!RMIQzpgG%^A_yzRH5``a$S+<?)cYqMW&<N*j&R}b$oRIj^DTdH8qTX zC!6(xEN5x^G;M6{U9)g1$xwv2k?TUUuIh7k@^=$<9L%{eH%pDHQYFa+Nd3Oqf^5<? z6|BJe?qpQ!od_fO*yxbytLyp=^!@si0E@D#;K{4xrI+`RD^UUVzvEcsM!7r<HaNNS z;N*>p$@_8a2lnQ(ic*Et!_va$Sd2kCoQR`uXZI1N0L-86P2}qKuXJQ$OI4IrH>i>w zcj3DZ%Y`VW@mq;AEDzEmD*-A=HDik}c%_%=p=v}&6R_68b5AGouVo$l7d|+X?`|+F z;JwSW;<=oNiccagOP`5@@&DlBu4G`_;%RQ5D>82BoX80`yUFb<u^H05&>2^q6)tY- zhuqf%Vr7LDK4I2dPUjp}LYoezkYc=2UE^YbYsB3zA9p^6WT-{s-0p0mV{6e`cX<ra zntbbrFf2>!;AP7Kb9Sr(ZA8g_c^S+_P8og#oCu@WWAWkfxA)dh&0uZbpHG`dD>WY@ zs{-y!U{tV^Ibt<VqKR-iN^ce_oTIoa1uObB(=Q`sH@8kR7xuJcn2k0!%5BslfRI>^ zBkVbQLBSy+sk#F)RX5($Xo{cfmA%JyUh$YuR$vWc?G{2%jQL6&;}tL-*0WypaS5xa z)jxoAeii>#ug`<y-gVmz&?tHq0SFMWi0e^5ofj<leZLVz9Vt2|#jpAUq{5A{{n#CA z?QKVfq#<-dG@Zj6OhGzdgT;QiJFW3{aJZdNJpIQY3-5gFXUhGMeT!)mh;kjh`hG~^ z$<{@qYN<L1ul1+h3SBP1a$+Kv?5$7zg+yyMrTf*=Z@cQq&JR=ay>Tb6sLe1?zi^KR z3~x+EucSj1m5|!#5VP^klrJppC<^!ihskN^NgNh&hP|Q<cko>`>Tu!|<!v24Ar1^S zknk52F|4~rnoPK{7Auxz6)@sNKP*}@o)_x~V}14ABG)#q@E`r38MDVd?|4Tgnwej^ zqi-HbGAxgkmI%M-t1g?oawwijy&3|I@_$)=a@B%+pXsJk@XRNi778fh{Zw8jrCG$u zTz`TmAIRzAS!hN`Q9e@w)B9Tim(7KRlpl)r_F6=t6@8Efc=c$suJUL?Zm+$qz>{@D ze;-ypIawvtpin^+Q71T`)0A!Iu;m(K6&H%fCJp`8A&P>Br_x*iG&$UiI>p{PWEXcX zTnnq81Tc%TzR-mQfV~jEIE3y1HE2w7);A>PNhDyT-e@l}U^im}KU84=nAeJ%U@tpF z$8-MVtGL^1hQje-*-nlz42B8jHkrYx{ZMh(Co)GUji#7Bf}pSC?)rErvt#zzdRiVG zR}Q`qW>~<-@|Wgkfuagh9c@(CP}R3WTz>F?{5FT$_C%mt2#|j1K&B6yPMg}m|0Rqc z>~b%ar?Ds!M9{w1+8eV?wiO^ujg`2va|=x)_O552YVnGwJ6FH?5tWwh&~hjp`yEoi zyeu5*;te#lZHA`6zUfOHUG5jJpJ$6cW+ETn)3y2Nn;7}mi&OwESrrNMX23TA)!B2^ z2R<d0?Emm6yOn|1fn8eSv>0r&x^eu-b{u^u)M%5}O0Ws85NX2GVM^Frr92Do1~O;k z$aDcGLel|3rZ};iKlp-+I_>?`I~7Je>l%q>F=WCbl>#aXS|Ujv`P>DF-5V7PsExFW zI7et1-VePW?_$7TX>+3`tM2=Vhxqd|7djc$i{yb9!K(*8tRlfpHCQM$n>m1x$MQ2N z@T2(sl%+h#Mfz1zsqG7KVQy9^&MPv7-(q&q4!}dz3Oc5cVNCC|_2W&}lXzxMU8{^M zElP!-mbgz$=6L5`&agzc5FRaWLFpF7EIVHh62AZu2@S_~PI>y0i(T6EPp$i0)+z6X zH&&1h*B_6Q=kW$>#Qv#PT>*T}84T42{IaXOY?D|wHzLPa&8cf5Ik;IB?`GMfGqo`< zqF{}|aQztZYW1sjOGjO3G~!1k-(qVE6{W*0gUcGR8ZK_+)tXW=1$9nO64xN1lT&9F zvW@bqS+;zc1Q^=#G#qw!;p0Lqk%grwq7o{MYpQ2QBi*GZpWEV}rH>Jx0;FFS6$vGi z+kx7jInK6j;BgLtgdsXjuMqzF-LBO|4jTNB8Z9EuM$HGX<6W+$(B~0#P+Y&}7N#&n z)}Y8t)xdE=ccE#cLq#9|UJXMgGZfqFcwx%yc)x;4!aiEblNS@}c@PeOnjtVsrqr4| zQN#!o@yxu(-&UO24fwaH9HV!ZX@E8TQ;q~}5?ovm*W0-N)H7mp?sa2`p55@RElDy* zP~=Gb`t?20bSdKP#b^1Q)p*u(cZ0pTl-bUGd#Dkc3qn=x`RP64r<O`ZLR{V&$@_W_ z{nfS%gv6MR*J<OR%?=X{xy$=Sb;Ag3V(O%fGt$&usR6>S%_7;hpJ3lh!}DnAHJ4=u zCC=L6td2M!;`rhLI{x%0&}^nz1)oSBJ_QmooU?BW7C*#OT5b8>-aQx`oc>7jT$X-q z&&mu|-nZU6*J~1mBdIBStd!#I0w;?*G{+{?X{8&Di|D@#X!{<AKV@99MFPGj1o#Ru zb*ABCFWw=T_$dZnFleGdF=8e>f-8zSP`fR0B?YQIf{EiyAvE)ZP@hT=07jChp+NS0 z&9Ye-A))c@R$PP%-xw1(SWvpgq@4$cS#60=>_kdiFsv=FOl{p?zuBW%Tr6{RJT&Vn zg~_y*_a@Xtb41eHeV8Qf^_cN0KMA<^Qhv(u&7Rk6LLHhY{Ptx`e^G(0sL$(nIWnMD zh3!2nVBRRbEZO%!S1xWvK`z_dRf~!D(V)=NaC|vMB<Ocwq#~jz>_kMOfbj%;5V^@l zBcVeXQ;kS<4iN^(a5C$CqL?JveAKU#&+HYAT0dXaU!mpMlaG#@8dZy>G^&w_s-ttl ze}y)#XTTg4%o=V}7P1YRs3wi;$MtdIRTc(G=)1OgS@Kd!h||6|9v^-IW=M?TEu;H$ z8(027qt@eb%)6Q3yGsdzOO(mJd5<J(u_WFBQ@VlRe4s@yj)P_d^vA|y+bM-l3@l&l zp)<QU8J;nq-xarT+VND0NbWaR>VfHv7-;l^6_rM1Yy3TI9}j=x{7z<7_OLtMzT!Oc zRdY*nd$dOl#qwQw-*f$x#>!W(zFYmY3wpA$+Gde<aV@xV7GN`<Wc4oU3dY8hW`0ja zc5G!um8y4&Ea@`J$(b2R8B(QzK_Uu<c|eU;XA5GRjIeuYldO>=oA#-q8vZ$cGrC|( zdArb@5U*|go=uC~+=i!H?-XP9bKU)<4|~fmt9idT;sxvyR}a5j@0SydWIxc@yJ{E- zC5~`8iwDSE&XVmQvyZGp>xlG%+px#P?N$nh(A!Js-|E;122wVZOxj`y!XQ$|`!(z! zh}WLxJeITqU)xzL|ITDmC^&@mtvT&ovdr$goDh;IOMFLdSJ(rV3B9FOp{P?YC;W@7 zL4%pvc|sKjE0?MY(mHT7u8#C((WEzTkcM~o8&R(#6{T$Nsp4+61R;$-P#OjRolz>m zIbeY=!R;#g#-fjkn+?f+m64&^+KhR6b69L87QRT9pN@|prw}$~oyO?<eEuffr(j~p zO&v7+(-YCdT9h-pInXPBrTDWue|Nafdp*g>NNLB7{xAT6`3nK1g&`t&bh4kA_TM7D zPNX|U4Rmj11Ca?_Z-B(_cmaMU0t{UTb+Z_q@UWca*F1_S5v(cvz@OEhSY7`$D)DG- zC&LWFpG2_1swTnlt)zOAgb`NG^11(HUuJFfV2%4nfSr=$hhf@=*^5xlNiTm$lU8#D z7G}5eB&=+pxpep`3H&>5VyN`PmK4<pBqC=@@e2Lj82y5rP_(gjHUdO{FNiPN#(~D0 zq&jlBeg>6PE4z^A&lPzzJFQsbWcDj(N_$S%(|<hir>lSW$zFH1+xuPR&DKxs113IT z_-|7z+K0HipL|5Dic*0~yXicGvHzjP%cLvdbO!Maty}m=d|79tS&*ey9V7KD%W(%z zHnyoqz@@ITs_lWt|CSR7EC-XunFLr)7{uUC(HLTiquI#yydAajSH-Dor1d7^oeYR) zP?pj1Q0$<d5p~LZD9reUS0b!x*}+~3y)vdqJH12%MdhotqARQ~KKAnLlrv~5Og?c> zFqxb=UQt!^I6C>Nl;MUl%MgP*Y~-7Zb=LX$8`t<FrBfcTm5J&6U)xh&0tk&QKjeNO z0Wl@lk*f&%ziMj4E>~cF#wZZ^{hTb8d?H^6ov(koOY3FmJ;F~M!Hl&;$yeZe^%_*T z&nzrf>$B!Vrxm*9rbeNwllFA|QO!X=UL4oh&89u{xGrab7xW&xm~%sYN+U8t&_k!V z@i2&>lz&E+@c{~tSl;(!fV^+N7t~TDTg&-KiNNi{b=Z*J@b~l2w+a?6oZlYuWk2C^ zX7Ok#U-yt2RkL~eIwX%>F*g6Y&O5tjuAuv!$D~EMl2iJgAexZ&14imantY3~DJYxv z_V8QbM`*jWjzQtP{zG3MbFZ!XN+Uy(0Us&KO7k1uO9p?Z&&@8)Sun{qpeMqu{GP$A zBNUkmZ>2~}n}d}bXQxT*e1rTlJmJrO68Zh8rBC2+VpK{5_SIL117)~B5<SJ2?RgU$ z+)7<c(`>}nb}Z4C9W5)ZD+M)ihZ8mNid{+_H*+AWae3IGv3sZ!m9FATHZFb@SLgZf z&0&x1Ymh6`g-d`+7@SZQ)i?x;o3pS;=2sNP_9k;O_)FBN>(byi6mbJDg;KZT6yz3# z8IP9$H6kWMw1Lcv>N#9{%0?T^mJsBV#GL!<On}(XCbG^5$FG*4K{#Gh;o%3(L7GHg zoLlR#__A|o$0NPnN|D}R^ibCGn4-t(H@jCrO9h$J*pWHSBA<mBLMopt$mjwihJndL zWl5eGv84C>EW#4gw+9>dr349L84kZb)l(~-qxq;nd4RFS_9e!~UaqLJnDNN;S82Nt zy~9%Bo82DHpA34r>ueco^zSIh3++&Tj(H+{(b#`|9{m3Z!>sg2Y))|psRK_9X9!}J z*uuSM^U8xOWHZ_|<z%XD=W4$v#5&4SMSM;VRH@^8{%oAB{62;!ry}W-2NkQ7+Vl-h zX?=%DLs><Zz#*w|=*Ujy+fQ3OV=1{CLOX>=Xx`_E?Y|F-;d=p&rw_ow2P#<la({p@ z^(57W=yMEw4(rmT#ukbFn%-_(AX{xKOkKKAXLoA8g&F4{e$~_vWhNPAeQjhrr|;kF z=N3zm6H?QfRFW9K6bUr46OFNFnV#*ev=?TYPjr78$d{{!J8Mz2t9<V+WZiN0K;|Cn z0MNwsK&?35J7im43N+*dOaLcVHCY^&zSVhkSJ;Q!NG7=5Cy(y7w<_$z854mbi1D@( zCd&tVlJvP}0aV(!&fK^XZ<MCt3-FmCrSC6ZKV*gPV)2Eh`VK)yBD;JHwSkZSb#p`$ zkNLc8EGLUpyqQ*?o!Qg<krBY6{<`+2VN}R0kR8Y>HHXdSSdjNPglxo)LH%J+Tyfv6 zXW>XqV`oeTX8-wfUiiz;7;KAb_cgQ+?OD#T_*DXL*+@95b@s%jGD)31JB#RBm=?#( zvtSS5dIN`siIu{lMTv$Z1fEpQ@yp4MGZW#0;1;IX-|`N34$z$694267K*_`S0(zYh zv~loLNbaY9iEEzIv()$afmPur^nj`fP{^(RaKQ-cK83ga=l2wbRMrj*yXJcL;Y96* zbtp+V-rp-GhXtLM;>DHvp@EETJ_GS(pZ9@T%cMv<9Lq~W&;>;a7@(uZe;lq2I6UtO zj6x8Q+Kxt5=(gO_&PHNpH>)SnGoMjCk7`%LjkcbuT@z7rm^A>#fF|a)E6cEh`G@u$ zUg#|?q6=*?P<pa9xXon_eVA6)I@S)OPCsFYC3A=33>yt_ZnuwTEe+8wigkM;a<RQA zkan&n2eg0#fjkO42;cj5Iu6J1{ndQ_n4)28NgDw|>pMXyYEi%|^L5sV^Z`>hruvrM z`8;qd42MJlb4!t)h>Y5ZlYC|U$Hgvz)1nUgEDf)Q^mAG-tA2=llTKF`6kOTjOoc<1 zeyeygaR7+2{CLu<3_^kUk~x>9-=8f;vlZoCsfv?$gwZTacbroY59OE)E5(ZQbxe}a zp+2;mZHuwQhdAM+X4JG^?|UL%9%&6@)DA%EIa?9Oug2@Fn*BD$>zV)h8fFxk!Aj)2 z+P{G(ziD_KT!x+7o>9?%c~R!}VMac82K?p`-R)6uAGHYG@%G$Mt9N~w&fB^iF-*4( zD7V9kQ)8%Q>!hcT+I`<YghU>o1k^h_TgwW$E+9S4S>9szO3MtY%w<&jjjBFTg?0)M znPVAdYb|U!?e+uCjnWO*9Tb3}20mDpr}};3cmz2KTQ{ieLcuU10ZM6~@a%Pg&A$z2 zhOzKZv<Jb)0er<_Tz-<EE-%{l^UcsMDu4M?Pib8CKYckm;0TqUc|kTRbI<?=4SHhS z#sNkBQmpd5V!x!AP#@rPQ=hhX4$L>ozG(2Rc@-a~MpfbnrSm}fBhK>yi8FSy*>#*j zohK;Pj_}2deRhpMJ_JUpXY`BDMUId=xt+3!FSg8UiKhpYA;&${|BYT;aG2`q_erMQ zwXw9<fB!82L*QYKQ)wIZ^0~O+#sroF3u7<g5<Jm#T!)e=<o*P*19Lgzs(xR$A0&F3 z2_fNxQ?;${Mka0{d%%C4E%-enJwgV`d78Xi8tRo?tv5KAmCom=T#{z;G6}4ww0yR} zKK2~?fMvXny6pUwm)P&#dMEI5LEm5&DoAxy`>re<b#tz^4p+c}@{gon%13X#(q(QL z?jw!^;SdO4WIH;ieBWiadqOF3$)IO;h$rH8HQLZ9@;H@57t$mbIPEJ5z`@PByk^7i z?d%g|`bJ7V$MTsK@R~d86%6X=AZHOjUrUmbQ#XkhXZL^|=0@shM2s&Ez!FW60P--# z5L03&ZICy9y=Pe857>8Cot*Dacp=e#Bkp9$ms{_~q(~E~W9fsu3F@6~HIhAG1fO1t z3}*EX<+ZkeZ-20Ryma_|%8WbqPJs4M29cr+h=UP7M67Jm8<x&o(=!=xi(hiOImE^o zMHW;V+Q%`c`Hb9suxHO)yW!6iskH}y8gqVcgv1EH#J2-*RJ_YGtS6rA&X|Fh{o`g? zUU`vXUFT&|9jXU&P$SXB`Wfzy!ts*nLPxTY3GHI`>A~RgisfIhPY$}Wu+J!5mp~py zvQcQdpLV2To4(=Y^s!cV6iRKbz%jO&bSx9w9<Qq85J)bj?+Phz^>g)t*&rFh2qv%) zeaWmT1{7(?7Y#>KuckPN+;PX?<RBKanTy@L2p3q|5j9E{5J`?^qJ<e=!In%r?+m+| zmN;@ztsQJhcE$dc-p7&Y-TRV71X+iDrHaFI{IUe!bz|y<nOpOEGWnh^23&C)5Fo`m zJw@Z8)l}<9;o3=j^<ie_g42VLaK4(SE<h9^pOuSj4Y7Ub@{^|lft5KN1>b&yIp93a z&!MWZ;3E%$tm7-RJApjf^&CwhDxDP*+9G(wK9hB2Y#P~bkq>x_91~70%%x!%c>?m8 z>T8VFN!_B#@DO>BhJ6@PW&#%%8koMETzJvU3%Q43P(Pon^n6Uu@!Pd}MBSE60mN1E z!C%YB248gPtEG#OKtkUKZh4)>5j0H7jD{PRgfsgupLNC6n}?KPfm=E8fK#NY3d=u4 zDIW<Q87e^@N7ThK+Y?}A{pomeV2qe95s&prA_utXAHa`4eqzV+f73&e=4$Xj1$}Bj zO-1iGn#kAM{`>w>F@w5L(BM>$#USr20W0%lrfAkYm{`?TSIGWdYBT0vX;vZ(Ft!dx zR8yRUFk!p2A@woKby%dC@FQXolk9g}71GYm@b5OO;~M!GfDHI;tJbi3GUM?^m?vN* zL1zb+zmCm<0V|1N@KZ^H?4|BZUIt(-cr?7~RM;{|>q8q(^>AWfa>PB}8>;sDEHX;( zw2=QPb4h9Vfu_}>tLy5M2b$e^2EQ4mHvV#g<Nfk_Hb^y5&`NdP{k4X<E*_kB^m~Tw z`A;w9@O~Z$(ue{5CpY@{!D6>Nl!c91vCKBuC|o&Dy%5VLYB6z9RzMRFNgI-pRaB&N z0HHNCC?NbuaqXv8tQCdARxo0u&54((w|8jpXi2ONM@|Zq1jt9S4|n#~&7N9RZyrt* zJMvuDy1|Ma#XZpK!;oR{O*XKtekGj?(5>BQxdnFoz>3!;ZbB~%)mHnLJ&&d@MY7cc zJg4hxq8bTT`;k2mZ%v@f95Z=I<N6uXkCz}tyJg5nW{km`Gk&MycP<P~k%0O0e;bU5 zPms_j00yqTl&H9!)zj~ahtHl$&W*|0Kd|uH%)RiWfQ-kq7kK1<qF-dsa9!wffJd4p zGZt!Ttp2L!%gEl_G-&`*;GiQ2^RF5f1;UNb|5umJgpoTlj*FJ)#$jw-CpvDj1aFp) z{kAagN)c-ywl_|q1*3R75+E?ldv1+=nZ31U@yblOBSnf(h1$C&P$XcI65lsf_9RUs zk3~h!c##8tSfXx7%Y}xaoEwE@xFwl6py4QcXvxg{XPhq%UZomEWZk-CJ^Yg=aC$qV zeT!2y5(j8*TYwW2fu2gdf>Gg=?2p$>%mqCmI%tLa1Fq+$&DRD@^M9pD6Iuz_b6v|Q zmv~^7t6lHb(JB4D+hc7*wUv*{z8sU6nncMW0l~!ijjEVxPeCXccDkm6NqebVA2nX@ zdY3)F)Gao)a(<sBmN5i*jY#G<)E)6e=zeUn;63{GJGv%-Ol~Clh)NRlfq^^mOrV4J zwHj6q$)JnoXR1cO<+JGzo+`cQt=xa@LCNJG3zVK}w%6D!7K`8ATZT7a@q-h~wOX4` zBn51nTkh8R4o<?&e=|l5RDeX8q%sc3gHCCW>bSc|NiNdmDn;Bn@n&(cd)J3(pWeT_ z(Yq#}`x5M47B%=T$+uWHqJYzfVcEM3a$H>)CXz4|<;|HkZoo{>qqKG)RKPTZWkHKf zGcMo@K7)7IbqNyW1f)Y=)KZ-J!>NxybwKK~(C#V6`s~wCKS5nxGhtBI0o5TUFB`Kf z4^#z2_gZj&I8$_uS-sWV)fT`(XGv_wy2L55GWpZOM4m|>q8r)+{&odMJK4R?sx?9V z*KjYcjG-ppWZZ0;-LQmO3OQe(zx!Uo7GmHkDK&Y{Gu-W4m0NmV_-<WGM6_~o%cXq0 zP9WP~%<J?K-YtAU)D01){>$~RR3e0u-l!*b7ibQWDH-!|7<Jv}wBOeb&bt2Yd35Y9 zRE&Og#NGBSIBx41vX|_fiXry@n0m{ws@~^&SP%siqy(gqmXwxmL68!pOS)5OI3O+E z(k<Pc2c#S6M!Gq4oq9HYzQ61L@P;>BoPF<^duGj=nRQyjtLL{v$6VXpMCO!Z8e<OI z-zX%JI&c6Huveged*|oU!_06e8sLLzZ=WalqmfDju}0=?9qe;}lHrsUV=SFD7um87 z^3tmz!rTVmA024lO#63Y>&Dl#r9~4Is3d)DS01NQu6)*>1lFCgd7&2Bc%$C+zcl(b z$xi@G+DDUXM2BmD%H-h2`x5$@Au5~52JWt8id5A(R7}?#ddY^WUu1hTcwB6W-SXp4 zl5=|&<aGZz$}g>>@N+>X|G7y)ZyAZ(<o}Wn9f~MPa?kHb!2crY-eyXa@90%!EBeg) z*u7<6_#1XfCcu-KhDIavH|dySGCn^tdpTd13BKD>VT!8^VT-x)HNR_hwy@oH?OEFG zS6%BUOqBd@Sy~*`>|s*rac~;&PDo`s<Edxw)tBSUL>gF+Ys|(46;9gb6C2S*Ja&o( zqF?ly2HM|6roPQgMw7?anzR~>bnLcZQKpU_DG>O4u&doa-8;0u4H?QRzshQ2*HFKR zXmo&oR6%_(<j;ro{r|2gfL-&fWb0gg=tqAOK;o2`E>!lsK5>_S*RR4q0f=+tZ%Sn) z#isMc53y8KcpmH0A9<Q7AN*$%!}51qzFlg!`(_{6)`+%gdsb!fp$}Ke&!Ggdwagvw zUuV}kO8^iVO(Br~7Yl%$bP>p7!25sUIeuv%Eu$vzwa7KfFho6UqtMlI3jLBrsDjY! zl)7Auq_MKRf<!f)51S;xwnFJcWY=HlF6c;3X`M>a0ZKSFMEzTj$#9LviGKRsRorZc zXaGAzgbJF5|HIZ1)Ifp{waUh&!^K9WC5U=w#=38Pt2>E(DBPm6X=6nZ_S4qjm;To5 zab`rmzQEh<2Bd=4#S^E>2cX-9x$Nr{QdFN(?ujbT#tQuV_k}r6C^wGT`j(QVdX69B z&i_++@wddENFD8tcNwPtR%ny~iBd4Mz&a_q(tJ6+QJI9K*QZG?f1`ELUu)e_iLB2R zs3re4{U4;zoYJ8(UG3iUG_+5TXylL${&y9C;ZmTi2o|c8M~$U@`z}`O@C8-KA3e5< z;R&^>3jW$+Uc(tr^BD(*Zw93q7|YFtc^Sb|b=83jR~_W}l5Opg?q2Md2`2x0OjZCW zrOBkuy$1N+ft=;3fqdF<LE{cC@T*ymKJ)jt!G9;D6pSE?O}5&7vLV(CRTO%VU9!rw zENM((rW*|xVyoTwu&jsFCjJuhbWY$$?HH$Q@FPklHUj59v)GZ7--&~%CcCuUPUK7g zZ6i)=CK~eb);5vAl5q~|oOg}u2-#uiQL5?i5qQ7+PkU$-Fii(Zf(JIfB_7JC!*s5~ zc$2LgGrM-rd~|eksO^n(?W!9+o6fO?$_Cj(zWJ6G=j>Z)*ANr@A^AXVLx@986i1oM zgSMlCh33E`>NW}LZXpA8`A4r)``<sL1JEyFTHuK>QSTkoB8Vv+uRN}>4#tEW|0qi; z@A-%OwxNVw$cJ_*0+vL<*aJ@~L*$;k<5~<sQ$5fhPqgJ@EM)whH-E_5szelC?>N{P z|0nY+urvWc2AzkA&hXBQ8amu>s7_=<u!J)Qp3M(qPSR_xzvB#Tnp=x%w{JgWucFy^ zFl}pA6y11ubfln>d*hURqGC@(EWcXz);W4b$wuM;dhyKg-;0fZnD@Z9GysG$06DTq zDMdxAJB<Ehwap55#}#FoKh8MTi#CITK;;Uo{%ZxsB~XE5X7BqZ`!~$lIhxz1=7)K1 zk0_Jq(wA@5+eE;PWD#kF5A}yX3E)ZNon8FEF&S{>I#VHOkk=!jIu~bErD;6u;M&3M zvyXoPD4U&#HvPo#!uaRHbc0=qZ6clvUR=WHc2BRdxeyOd4w{nvrz2@iA*>LSe<jky z!#-?kac(vpt|Dp&FI7Q8of!o%+tGyT)sbIirOM2}sdJI%Vd6Ng__`{Wk%4N})_SCl zF+|y-w}EZH&rJfS<K^$2mH3cDpBM5X_`~Ct)mk5uT$`OuP5X8x+RpSM24zNkMy9<O zd6?cXJ>Xe&K*h(Wx2WmCsE3$ZaX;ld3u~|nME;<g)bF@;>o?I-b_fn(GSS=888Q1W zu`7|J%{!Y;zA=rG<r~9fz0F8yOK)Ui4{wz`wS257nl`S`5qRiBLz#?5#4WV3?mDbl z>LVQ1Y}D3XjBI;Y02fcg!|19sOvBrC1dM+0UcB7JwajRAZc-)Bs(w2!ow8$L`g`H5 z?-bdCWEE4(xt$h%eCh1#KSBPZLB`&mtYWfU=mLTt9a67E<5gMUAGzCo^$YMngzd|l zrSUL^yF;gQ`AD!s{w=keKeQ*VVJd=v$$ns_vlJGNUk5M|Cd%5GVPl{8#~HHLYo6@` zhnG$V3i^76=9F*~DFTm#VXQT@?JotI3L>*q7ChhDm0#-?5q|F-Ao<R5+9&llAuTQD z)#foVb#L@TiUn#v^&=aLfd>tpS8~)Zh;MGypLSqsU4$5oHlFgVpeU|gQ)P~-Yhg)$ zh^3MHyYbm+p?Pvd77hKw&eQ(x?Ozp{(y7$rgX8*<Of9QvEuo(dkAa@IK{}Q&o|blw zMw0Nq3$jByA&M}#h>XjM6_>^o|5kAQqq*_a@Y&hThlFXD_Mes?+N<~#8LLVdkMgo% zzwnz(+(L?T2aEqS5AH+|5`DLtg??oak}aOQ>WwnRKf7%4n_M-Vp*&c6E?o4#ISx|U z&XMigzQ|+?27fs`zs6nGka0O|P-a)~&1;?TN4CHg_aW4CYbZ9oO(;Qj$5u8f>PH(l zU0f!at1u3_uQaL)W*hQ5+DWD4$&co&23G|lB8SleyriAh)jU!7(QHM<O>Munccqwg z(ET;31Jx>IZNvS)<o^+vm0Ru6&H;V{4U6yM=pEIX>&@@>Ehd!*7CQp<It)y)NV=lC zet6i@aiEWhFHkvc|E;3$@0U-{$L6oz_yTA6EFxjQWL8m+*xJ*h2Q(fkktsFw3HPpU z?HsbI@lRR?62{%3&VfxC58=l8fsNqv75*phMXDsO@0v^#y--sznLN4Wr~B#6LX9x} zoUJtMET09^l?pOtVsywD8(#mSb@7LLeKJfQ$8~lV?Kex(SI!b!qNGj-u@>Gp!>yxR z0+~*xTx66s@S_hCp#I~eE8pu^#Ga7;rCmG+DvLI_WZA92zl-<4QPuY}{ado+i4~VG zzYHyy11Iu~mbBLmUqi<}Q^d*UR>zw-&QOgFEfu<)?^yLW?qt2H+_K#{$&>%Y6^pwR zJnSB(^LIzyzQPnhS#F1}YJ?S&+s6P*QL8CxUL7ZgkGKJ4i5J|>=JRa<--Tnxe`uCT z%5Sa2tkaSE9|suc$6TTCtL)O9q^Wnk(AU>t83F+Y2*O7E``5?3E#ER$W)2McOK85p z(vHJcHDJ+io0v2zVXdBt?qnk_$Y-=-m|Dj~H{1A~!bMjC<n)sf$u@ZY{D)D5_Hd(a zGmE3p!^cR+0|ln#n2;=>He>YGpDse11y5mZ!OvlDO!^}qtKvO8AWbHifx^S#9iv0~ z&>#!rxp9$!n`?tD*$j5wDnH@(+K&fkxs_9KWE?zGIuIH@=!pBfO*x)JAFLbJrH`nY znq>}aA{USUcSekl*(lMG{$}g`fJc2}h*4B#|M1J`+Uz;Dzv#y~5BFKSB#P3?DWc=0 z^#&wnIZo8Aw^~}?lxz-<7RxP&2=n6E2NGSUtGh}8jDl6pn}&2vcjl|@vnG23)~0RU zhUP)iVTEyJz?0+vMF#bw|F|e#0{8ub<hY^?@9}{Y0#FAG_S{;ON_hfU1FfIz=Kj2y zt~+DfbbRAF?>Og>h*nT3M4Q=h$-b=f*ng&-v)NVZxkH<W>9|lPR%8g1l4)l3X<joL zIo)J<|0&auJG9yHzw){SxGWv=M#~v!9~n>2hdDr~@^JpwyBcg9J?5hR2CvFAI^`WC z7x;)ZpgVWZS%vu{3Jrg%mU{u{3;m?s{4P|T@wm7;{ZzM1(EQ8N(x6gkhOrN{YLsjn zs9FJPjnM02ClEhYoEo*V?R+RGY7-`M-~Twn54}Fn&%9h&D>K64N!T#1z^ddE8`k3? zE4nv_HU&$ab=pS4aGqD#o*wJYy6n0pzv@K;q@z8RYwGz?a1{9M?aAp+|JIo9+<)>? zek2R%@=fqPAhL%7S(W~@kIdoHymp~-`{K^4vvY*;vPenk$)<*a)kuRh_BJhvvNHxl z)aH5vfxNH0Ay1B#bIncgg|qW?tU=FG+Qcj6wRG(!lj!EN(ZcuG;h0uq3DW1x72%H0 zdzO|sT_F8(N?7QC>;3<_gJXDpX+T{HU6U)E0!5ayjQjl7T&FksfGXe7z!T>eZI*LP z>-F{7Qj1z-^^UTszCh^xHHnmb7-wdOha05k<fpB^`Ho4a)}llOy5KrL#NHB~2-KsQ zc02HSPr(GhGyKqq7&;v$f=HZj9@N=h-j~KuLzYxdIQW&`JyYjL)d?`@AyTB^OTVUr zwB&k%a1vk}sNxghR*0Z~tu@ZVh@T}+Z`g1&WPCg+&<Q(@+`8^Xx!bsR<ROFmF-eVS zLPYk(!G7^+r|oCW`D)m_C;tWop8yW&!5AYRiqUp|P+E#7h2)ouy78!=50U%&Lx&b6 zvYmtZg5XqT%mUXdqHyg6n&DSXZEw-Y`E4l+XRaJdl&AG=#HC8b{gSc_rJF_>r`Cl| zoRaK<rELx+?e8bxAu+qJEke;hOmLny8KHg6VK>{QJAPZj`bvUQ26)A0z{lqaL&?1? zF{q<NgWlak@nn&V?xzyLuN#U8LY1}aFD4-9j3Q1dL|A64J~qBxlVZs+qC8ooE?Z0+ z`)6F!qu<C4i*fGW>Tscxo>bNKk7R++`F}kSGVWq%^cG`IL~&t#Y_jK>#gz0rRk?Hz zN#kvXUkdnWihj!mKlB|+(=v!Te$e}|{KAg4>bxt=gS@tIakB~3gmH^``wRa#vin(< zEUGB)F0dh9A>Eal5%fg8{L;jFALpCY_pWrEuK_He97<n`K*LEp+7BryFT?^&JkA`} z{5HKEM&iu$?y=;?)4RW(g?)Q5nu7CCh2g#cj@`|voWS)REqemuHw<6PTf;TFMaM0K z^$%;5Qv{<Nbv^38h?&5zGHT{vvYP;z;bIPOdB`eJC#`a*QY|{|yND)uHmwp9u}cca z5dE+>$tbKG9?9}8$Kb@`hh<~mU2jdee{?N>=J}NJ|70xzkKL*Ca`*V;j9-+}>Hir0 zo`Hb@LH-P`|4zFe`My7A0@PkwdU#02Z~qaepq<QyD3lR{*Z&o3Ey=6K?uzNwq8BlP zTey;M=N1-KHfv*VMki02ib6udj(N(iTr3)$KV%7$C-eFwLdHcD8B~TdjLw^w{xwQ? zqQvXvr8eo-Qyzx5va5PxjuDOh{r$*imC2gnj|XQEvNW-`aJ!|3cHQIZ<t((141crx z>Y1+!QfFHYCwsR%3g$;ve+?3QwT?vS&IU%A?En2jV=<W|?6v&MSj=m(`+jwzx3Fp> ze;KgvAE3GsCA}C?B~^O#4356;iDYBCOh&`KN^uwNaDZMPE02ouWyHp6jbzC6m9w9P zV~nl_Kt6PuqHb^QUp0%R$c5TTsmc_gEd54Hdi^ESZ11MC_|N2X{^!vpRsAL*8{c8E zw#Sm$ffh=wSdp9m@c4UR!fB1EMwkOrUHs7y%(H13$tFL)V$gL`>n8Am1rA<lcG(4W zt;I#xl@jSfom6g?0v1FZJKOoKbonI*#i%Np%<nhGC||G1{(R*8xKkdIoxgJQtI>fu zrKp5w^~go~*yq_Gp_kyurR^&zM{m+*>hBFwc}Z=)eIwORDAcB-FR=9ee%!Y?!hkpM ze`vOakKXb2bbTx*Cr9l2CuGPgV+-Eyz)$f(W=PQS-rlX7ZlgU#@z%VeLR=~ZGQ0&+ zZDQc|ixx!u5-y~MX~QU=N6#XFe)HPj9Pjkk#{LSvh7j4pTAa#(V!bebxN7~Jc8473 zWK?&2Dlqh+#REl1%nDZqWrg*px)r9%g>gO9R)A8D`jN#sAZTg%4n=F<fr^q6p{r-< z;}?EKE3n!w<a*>z+gXixU8<qI>3()q%<h2W!Jkg*guF3ZS^Y(y!D&KZ^MryU`Z=+` z@WGVL4)oKtZe*b{ojG%n)>hmgX<7SvF2Tpe3RA2CoY9DKD$;)MxxZ4#--G{}7uPf@ z2Wud&$e6r;oZtT|O%v!I1tIXY_P{}it~j9)@Y!dr1IS9f&79N)L<3%!c3&oYLV4QZ z<~<FS=dit@(t->WFcH@SGD?B7ea5u@40u&+nl%f}vr8mrms6%^e}83l(R4~D-R$$Q zx)`uulwY~<HF^gGe8LXcblGkF)O9|ApcMOP<5SQkSx?0aRZ%1kddQ&xKn~^J@&8oE z>CeCFzS;JXAur_w^t`)F<1xwiAOy#k93<aM=wIbd!gGqjAD3VfsgUfq-;cG|2LR=$ z2G*Hdy>Gt1%*rGamf0Tpe?q<+>YZw>Ix77%zKgt*;E>ewVK(@21ncMBoZ?nFuzAyc zd#S4X{w$++HW=+IZ#1%L$<bH<Sl9P|j}LgTT#K+<KBjnVbhkXnO)vw&?N?ON!j(WW z`s&(Hwd2Gv&wHg<!*3e>WH+jR;<={b%<*7-)lQ}1(NK$lZi||E%XPzd!penLs0Ew* zyXHd{6wpc7Hxm0dT<dA`H6EJ5jNdi6U&-Rb3!_p6_y{~g6d6X_JO4L2Pl1A9*60uS ziWiqbGw?p^O`AYc3K^>ZLE(1uMEwC58E{30r=;mZPv)EGk(WQ1FB*E5>uh!7VihzP zO`$*X%MN%OBQ$J^&kiIo6Cw)xyF2>Ub~9X3&b9kHgx7nEv>mM9DVAei_`1IXD8fV3 z?VK|LT8xB>3*$h`m%wf_(2}ADDvSBz9HTFEex8@QKr(z(cGalPB9?F`_3i|RqvLi1 zRCYaY4uSLuZf#5G8VGZ;XC}uIt|T4l6C{Ug(wlD9<X2aKM|XM-KPzYJ3AYO+zM(?C zhsBT0M}Iro_0!-8re85f^e9WxQjMqUrl-)tP|1{(bk1Rzo>**tZ>FiH45$wF^G<;~ z%tix5Yu|9AQ-J13=q#=5Xu+u813xW5P%=@@Bt-+946>oM73#oezx?wBvs7(#tubbG zeEY^$-xeB|?hQEe!fP@!Mx@lXc?%Y(hhc+omP!mazu34UV#vn1C^mIg^6~7K5f-st zBwo5~^7?$4LI{@ISvLH9U`K26QdodjN4F(L7N>8&$j829>74MQxo*48Sp|49?1%0B zE<ca^YlcS!zrQCU_??@V4NdY{9!Fdw`#8ZkEb#S5{S63QmK~NGdwV^-!kAw96%){P z#ipCWWR1O3S1Q=#^QYMx`gPI~H1G1Pcii*?UQCUz(lYn#?1kaL)0p>ih(zm*<l@-h zGBo_*VJ5K@g!&zq=lmoWx3F<Q%|v`e11m0)y?B6z|3Ajo=rt-w+v)EI5W#lT=$7N7 z;EiB?`6@CGsTwve+4v@DkEq(#=^~!nbZ)mss+-bN36YiTGMPc1JUkXXOsRFzn3<fg z`hq(#nk3+F8WG;9H%og!oNF(i$VsO5S-AQRLO(dr<6y=}M-B30%4AoVqa;xotV}7? z)1PGB9OMjQzRF4Gdj^2V2^~~ekS!a?KqL^&!0Wi4cfs~rO#Bi=C=MfV|BFy#x<nF! z#;sUUluQ?2SG$L3aq6ZYy_05vtMk3cL&T$B_%@b*Scu^Agy;sKd9%dVm^-1;UyrE0 z|F}v1#G|d)-Lp|$xSe5Qc$+@Cax|k=Uw~mV>C!c|*@!PRCPQcPwXoZAQak}H%5u&t zdGo&&@uG)?#>LySJq)~ej(^4bZ*OlQQpHFUEHZ|J5}g-6V942pg*)Ojeh12mg8|&* zqyCjbB8g_I0DCcHOVHyL<kb{qOUtQ+nN^|qAP3#wr9d?Al@HvB@wkezOfsW+qV47# z9PHS|+X9I_xj1^4^=Pw4Ww$xxrjLU(Y($nVNZo^s3SCviTr6pBjU$3@g`EPUS-bWw zm>$@0YJVo&zm=vh%~MRuQXU=rSpz)XVO_o@XE9!a(_^CH*sH-|4dGeeAM6Br&VJ`4 zR!qsY)0)`2lIc&3q;=SVXND>cjS+G-zudlL4;=1Dn&MW~#@vMcWUa+!OtQUBKj#<8 z^mWznj_?1&ydX%B^tEtA4_AmgiFohYe@R)T);IUOGQM+e-QOJ7h~i&F21?PuaNw0W zjuIExaiN&Du4Rnxf`e>t=AJZN+Ej6^qBlbQAN2=AakaGVdRAKRc;XH|XYGlhn;<!& zn)gWNDY=~yH1#`-rgKAqdQ}PAm%n{n5|VvA<?Hs(E^BKylEtLz#IzfjfN)c`Idp1z zntMU(cyPDxWzMek3bPG6&{zY;_fz@>pjw*!un56VA;9tKDQak*;frJ_Sh@ka7Th)? zs#;PCH#}afKh&+7m7VKD+ZIjo1NpGBr}BdJmf?~&0i<_PQMusMcu2MzJ%j1ZkfcC6 z8?XdwBG4X$8+_oRSR3;(J0Z6mdGt!zaDVISYfnBcr;k<sBrO@(uzdU2*YWM^yE|Gh zQZWpJoMJR<#}mtv^tM+ImHJPBiEaN-E1|8U^r+(6$+QLhTppe!^|Qko?K?gs7ul%J ze8s5SU@M?HT7BH+Frq{)#lLZ)3h~Wpg37-u5;{T9My=Vgu#w%fHe<0vm%fY|wxVrc zMwG4S4-Pa%i;iTKnuzhUh+-x(R!vVlslY_*S2q1_vki&VJ)gAVCT1NPe=1g-=;xtL zV@-h<{f}_%1DL!AH4jNS4DlQ=X7%M-VAE15A;~j%^u$fqF{0TzI`TInl?{yRCiZj% zp@;RY+yvOCalrQ6JDu@)!{Sry)V$@b>zbFoy0iTzX{waaF+Q4OwmK_=5Ikrcc;ZYE zTCUuusO~FLJfnjg5Hb%Y4m@GNOz8x^8Nl{86FX*%A0A*UGEVH5xrt~7zIWT@p*bL+ zpQc-q_;?8Rh5X_{aU%qHie&_;Th@`kE`o03gd3X#fvW_)6^dGmchzZNuLTqdmj2d& zQ@1Zkf48kNW&oeQy6ez?@$J_~^#hsrxSCm`=$d~FL<r((^XgU_Hbq(|e!emR<G%L& z$MFB(Rtt^f-$?$|y`W+ET=q01;8Rwa^L)I@0n&bdvH(=;d36xR936RjLh820%XZS? z#8f9dtH3CHSq4bi0y`SxZVPKJzMmS(k1UsiJa#(K%q@CxymK)qieedW*}3d{Ds~60 zOn(E-?*IhOi!(fWCU6xMv9|!z5pCfE4y6M|dqKPbwVSc8=^xRHK5c|@{F>SaMZYd9 za((3<im<q>{C$j2sqc42qWb^L2;{<-S{8{rU{ir~P>%5YzIkW-4SjWBm|Ir=?tWDL z=&-APb@%Pmi5^6C7UEqpMpiTheLS6dB^ON9B;qoX)K%y4oX8)&=kWvA`arjKJzSbs zZ<QU0P<kdnkL2Nv)H7x?@=whW#7u^6<53hsnMK!HCt}HdLAG~%2P>`3s(aU63SUM= zxEo`{c`$yKOz+0Rj2(q<!TUTfe9rYnGo?4#*}3K2y^R)1MnabVQ@K+4@dzZKpo+QB z5C&PRVMrUdcUhS)2IN@Ut&d@hruZglN`Hfh4YbgEVTX>bV3+&rXNFmUl1PV~38Y1O z-cvI5AkFXz`@fiTFqsX3(AIH&h7(cAcLLK)cz$ChCB`66R>lqkB1h3opuYO($bs<F z-2U<&Zz3%Xar<5oGYCMoz+@#r#q1W91zJ26y+`rBy&4?ZnhDAv7jUsW?MXpI`+5!b zC&MDm;A)QX9~Mf34+FYGaNJ&CW5e<C5mHTm^NKt_v!Mqe#9Y69gWvT<l7*BA#tCVD z6i@VGiE8p14!+9Vf5!Z@pMqAgbGjso<YhXQBDx_``0)+YB6=w{Q}+cWTG8|c-@i~^ zg84ST+S=5d+|m4R@c3pj1YJd=Fya19v#>)D<Emi>$-9fw6j{-hc`Pek+9!G^5OPXN zUu;bz_hm_fCsP^@L;T=MXdXCO-p6H!!@TfsDj4ILC^#uqDqRzk8$~T6!3I#od4<1Y zMWWDPN${5q_xNsi4>0<7yzE}lSB*)OytfmPRMH>MK_R7^-s7%w3ae0X_ATg{ymh`W zt)a(u;*CJm1zQ9>)td2H*=i@Jq0C(iMBR(^rZU5i$_;1En_tXe&hw^Tp^rPpPXO&> z{VXuyk}~qNah6Kbs&!6v16Xl;@URCb^F)O`DbLhah(4uksa|qfM)K(vH*OXSBq<$T z40fSA+`^NdE%$_j;nzz5kBKzQo<`Q`6i_~cW872aNEH@-TI;b&b9uu;L_jvwZa((V zH2?WQTq+u<Wh%?tGNR7^xZ!i754+(pyv<sn`K|Tt>%Z=C2rx=}(aCw1_j;}!r{X&8 z*YNC2<9qyK13DIGGuViP)A@cal~flzJSW5+w%d_LDeCBIlGZN%3rZKavBJ&CdB%%n zhu5cfhLJOnw_I}rqKQHnIxN=hyZ53y_xIs<a_h7H!Nz{-baOY@XAo||=#Pu{c1A}` zcwLUq@XiflyTy?nG02&aZ%XTriqf9!E_Q1F&-m8BAeA9@IT1wYd`~v1Yw!%`S9t7^ z!2!!vi{jyTHxBI(+-;Ju5W$>FMB#pa-INW}Rih*)2-D<V5J4l}dJZIh#s)h>r?XyS zBtzo;P&2Q~xK>+tbZfsJ??p`;5hkDkJ`H-JMUlw8*)=u4d)j?{`$gw4vTa|7?j_bM zwiYgqf7I4GfaXP|U3RyOL8!If4yvY+vL{D^mAA9VLkHbD=RQ8BHvZQOtCeH(ug>{Z z_S}F-^o3OirX1m*kk~Eo-S#FcWEjr7)aZcpNbGmMVIY|B5=`o}!#M;dH>6Yiif8YU zS?&D(@pJ;it+a=GE}kb|(W?tC*Kr!g^j$Q8M91tpuT8Mt^M#;^b_S1Uccap21MY(Q zL5~md4t96*#ROR;hP5+YQ)U_yV~Qd<5a)XRv)#OKHxu~jXk}&rBQM^Ye^XR;Q`U6* z>_&md{U?#cO&BkQM7hmDIzr-Lv!0{e4fKr}!tncb`O0#AWs#6Yf!;b1IVviOzn{3c zkr^6lwINAX(iw%%WzHdU#d$#elLHwYh*osl{7Yy<vm_261ovwC66AC=4mR_ORMRz( z+;gj0f`bDlK(Wt+wUp^&?#Cqe#HwuODwgJt5#U(@{=gMIG}{#sp&i-gF<mz?PO?_w zvGEoK?&?zY?+Ml}UOM5stKansM~JS8f!<urf%;(ccm`G}s&3n^o%`AEG{^4OI3!Qe zP*ExTIupyP9y8Cxehy`U$a0r+l<Kk@er<>2Ld`xRXW^5hl~*gtBOiU6W^*zsVuy&S zuaH01^5#J@3x}kbk_RB1PoP(l$khOJoZ#-srQ)-x8hHw_HSWFq%(V~i5917*-a-&3 zw+YZR6Sb2tHMNtY+qNl>ziD4K-Zoc}R5jXV?lLOaXr!)Arn&GRF}FaPxSgaj_$}rd z>=vIr0oz_qK6~=a3<CoVcvd?<as90#?1QOTnRNFf|0M<bo1{gOqYk!KVuG9Dg9`30 z=u@}Wg+Z6+C#vV;9I%A|q}8rew2ygL^;KmQxxhJfJ|da=(yc6~&X8tISG5%x&f9~n zs)OsVmqRruVxd2-tlF|znET|pu57G&JP8rmICYmWH(o2M=Uf187RBQyja~{}*q2*+ zC+CALf}g;iDjA=y7h-!TR>_*%XP$^@MiWbZ<v?}0oEu!YXUO(^7P}<y(@hBdTxpJL z&er8*U6+7gAi2qeIKyizWxxlaezQSpz52o7dLs2dU)jXP=<(gGGH_8U_;fDu6h8B$ zkLLJOBRF-RVtISVqJQD@GKax5o`<U5-PP8`8nR|@b<Iz-uEBp|?fVdX+{Jrkt+X*; z&TX7vmoat%DL7{{M^Mhc$%hRx3MYd#bdRmH&oy(r%|_@RX^si<ujLNNH0RotXueTg zw8FJ}2K~{?PAfnqD`I#Z^haRsIp*SOmRsx7=l1B*;HDm~bV35XzWBWUm0hKYokCjv zQQdW-9jpLMjIyWx7X+oy2ulaQV_XkB&ky^_T&Z=7i^R>Xs(kT@48wQDKcF=5^P9|w z<$|iGpf~e^vx+uHLKce+CTVZfS*dYxEjfW};!yomTQB`ATI6)bEZJM3+-nW@$mTQI zuyh6J5Jd=;BOIq0>~eJEA~pm^=W5h|ig;e`&EDPJQH4w+-+sFHB;={*y{LT1rdy|{ zr&^^m<ugN%J9L?*qN_e$kKU=1!u~4S8u(@OpAC~gVv0k$&Ho`1`leJUwk5Em8VAj< z5&Ztg`gTq&Qy_FKC9FmpkKT$+{pa5%8;2J)95w1$=OqkwqTCxx$!3V3ZzC!SMOs9T z=rYWI)j4O897WpFSnGnuwr8vk-^T4wEhqI0-rSe)h)JYoJ)eXLI@-=<v)q)qmVah) z6Q_PSF*~aNJU{W;w?azU6RG;mV{c`#{-v<+^0Ajc9#_nRM-$EaO7Y^DJRrT%BCxdv z@OrF8X%w3y%HT+jGg8^Y!h&}{dm+39EACFLyMy8lJhp|#^^4IL#d_qM>%wa2g+fHL zmm{nsV62SV)0dSq4%x_<;niUF>!X(2xW`SRJJD!@HeoGGL{e9D&6kD#Of~L4dor{G zn~KQgVI1j`;EW)`4+(UaSrlg_V=f<8(FkyhsQd#FjhAPxGGB*3&QR`qJ4nD?;O5ml zhVgoNau>*xIv3<cSbFR9-G%2NI%hsE?td4TB3hjKnr*p<n9^r&oi55ySGT95YdE^G z^h)=n1vD(GnJHz~Y-}umxpQyKUs-!hrNch<zBSJknfjFiK724r#)ZVX&cMAFE8@53 z4-T0wT@m}y-kNz&wTRa&C6o>gIr{omv{n2Z95IAAnlyoV#u<8P@nF}T81%1yme+Ax z^D$4a9|YZ(mCYWhFDtyhtrULMtb4Py+#vds=)K+L0)fB{e<8l+v%n6h;D^UH-cEw9 z^aJ0_^N(sNioJhXk3-*GSPxYu6_`%KLL5FU2hQ$9GoDmiBs#cU*vkh==Kj0A|BU+R z!KjaV%;`|>e)Lg#oCefe5ij7i`IXPfnQ3qN-s9)aKDnT_SOVRQg-}5`o-2`op5#!y z-$u}u<sq*<T`W%D`4heeKPtvyd0UA}?Q@{?J#+$$V3w#nXpgL~T5}vonbC19?@y*P zJiHiJH01SEL)|(TNk{yY<psOUtyDg3`kB(oA-+086t`n2r0zUt7pWzcW#S>@LzYp_ z0LJ~*iW{muUf^<Q_S6&h-d#vb%&@Y=Cr@QKX9HX==FIWM9ztI>nw6>ibMe`)3_J`q z?&D?8oFm|bo#r&Sp>XqDu;i*qwCF8Gn8Hah_N0x?p^d%<i0vD|q3tKyF*;F2UxIvL z%HT7TB?IJM&`ja<&zM5xEJ|Sz0@g}>1qpPV{pL$zYLJ_Y9D%e_Uox3It;I+E+lqtC z`i<Z&BVMa`nWH3jyy}bd*jn4{lqQZl*1LREOt7Vkr7?DKR{$c)uISd=0-fQR83=Tt zCGa#QqAM#6BmRwsmLzFJ{t2wmx@ZFZ5vf{l$edN*LZ~G<U6SToQLnT@#L-sVQr;`& z^B73Y?_cAF`sBsf8VMfh7?KO!l!a=|SQ5ivg5!|cg=>Pman259v9u30jpV&luL;ho zu{kHD#pRLuyJHzpZLT(R>=fUqcVZ)F-$1p&P5OjS%3{AXyBVzo>BIZ54yE_+?P6Oq zu`3Z>$7AZIwffiKuTQNO-<JhN&KEr&O_H|?uD@|PEK>}n1g^+5O;vqX9s>)ZrleXS z;9uO)MrEV?dgwsP`=4V~aRF{s88QCrHYx*zfRb>msE?*!{jky2HH^$Mko&B?4+yyO zXQVQHKn%|3;lK+i)^07bhL%&WhDq-=zko=7-<5b?hzo-7p(bw2PW>Q7`s*u(KfLR_ z9+GBYvQo2WbN1%FA@kG6hYpVB1vSVX0gl0BY2-(><nG#&%t+dLtb$LOU)Wg&{P=3A z0^5YpQ9krM_o%$(4qNnk6Q%n2N4je##|H7of06CKOP>}1T>7*CXiYOiv?!1J>!>wd zvg|^TP+9<?O~$PEicnR2?J<XeYl9EIrZ1ZZYzY!}0?YVSrUp7FF06QyJWTan&&N$( zP*dMm4o2?e`{m|jg=!uQ0;v`MEqOlk8>Q=@{v~9$n!};qSl$e2PxNHKmm~b6QZ6OJ zqxi@qOVZ3xsGWaN`p$svhukY|H{}<RN}~D1xO>)Ubmb5>_qa*|B8HvI2>Obw(c^nB z9c4vuDH)5pC=i+-4j@SBFMgz37RI5$>`*9IrlEvw-Rl$3THAVs<ib6q+OUOIoA6rE zHyR4NsvayR7bEA;w5GPtHv6Fu9W`EyNtWX-Ub=H=kmNc=2o9C6FSb)F^Rqw%A2ZBl z9=yg*DE97Uv%|0H8Z|k@*RP3k2&9A=sK#IIW85OKXUM!Es&iI8qg35<xtw$q{{{(a zXF)H6_sR?NAA3LNSKvUXjz*s(`baUrw6ReYe{Sk4HoX4t<y(3^B+?v)w#&1*W9H;# zA)9bIOs@nRTW&(nr+VX^FZjjU9bXApEP*Xxzyj2<9gc`=9UrpZAkP`eAP1MFPM@oM z9m%ol+}v2rxr)@0TCVtk+L3y7hk1l!M7E^LhdU_YI_JwPBGd4F5f;BIGC23tn{feV zw-St5BMF(kd?yUfyJ?xi!hC>i!!#-*wADAiz4^O(^qa}0P8N<H$5E+YCkL^)`-#7d zV#R_#giQ>LGEDyldQ_VdyKvbb3e7ikAA;=q+wgLTs~v*(mumVG%{e}gH-u1MCk+o) z#?Bqi##51Pwx?&DfJmSRo>LOX2CWxJv_QmM(~I00!bj>}>+tS*P(b;03Sn+tWb(8Z zWPWp`<E~&VBU5kQ%+Tg?&IQe@;@v<^($kX1b=W02*(m;_Qq<$z8650IM~128DzDV9 z!!2XJc&s@XtV@oug^0(@H|oU)qCR;5qTe6#8887CE&3IhWkVX-IeDVfmn+Lq)>C3P zMZF^`16hL8D8*FM7WpGY&RZZ0XQzw^wen5tir5KA$Oz~Wv^{3blUTD4>qvS>=71lz z*FG~{nfTieB9<#G`1x<J2D4`EPz^|7t7Bio!nGx#i6ghBGUNKn%L+SfRo0e<<iXfg z+89;rR9qaio{-PiEJbIuqZaxdV+A<BTJb`E|4Cn2L6JOu2z9))K-^Bvv2pBaItRY- zVffSNc6dc2SYYy=HQIPhLvza(I!SI5trkFZDXWct+OJD>i?)=azd|nJS?6YNe_|J- z_#rCfw%s#-Sjt=Yb1MkuyzAKb3Z<$Yhu<#ZW+oiovhDjw(sAwESeg2D*01D6C(p7` zG2dcc6^tt^jIS?HMS_AnjEawz*rAS42|3>ebFhmwnRN{*8mx=G6q5u9-T#F;HXzK+ z<yL=~BZwAp^eWz3{iF~EZK(R{`FNTD8hqV6DV#Q17?{p=#GdF(6TRle`%a}5iC$Y< zOGUpNsrkG$5b1K~jmRK3yb()2eXhidA-)$>Nq4zsu(^Dd{AodK#DoT#;U?r}|18mm z?rzZviNOpt3wsPeSTwZ7r~bl|_ueH1eEof11Zsq)jbUU}`qxX!W@1P5RSgx5C{kJV zgseT!{?#IEQ4cOKA^w2VF}{7?7465<@9l`x=4+o`xMpobW>(8m-i}h>fM6U+-**QY zv%E3;=ir~n`)@e5!Es~<*YUVBI9FF!a2Q+Ta?MkjgTzk|Rx!s#rO2<B>o{Km5VxOG z-Nuc!3_!KqLb^)J$@BV#bcW1OVv9<A0r!X0z!v1kr&9WP0X)zGbB-7iHI%pO1hnuq z_`g8>>g!eDKR|#0#{Zr+BlsZ}FXwJXi(ZyElY<oOIPZh6om-s(l2-lo8)6Og42;Au z6nsVQ=DRt<R!`*;z4Khb=$LS2sRJ<1WOKHdw(hN21+ek?dc9Gl6-4~WbE~9_HRRDe z(b*LHjhO#Ry<XGb4q;RuxmyE|NbcvECkvd)=LHRG19_K891^DwFPJpU&vilhW^I#1 zY1x~+wXOJw8$~5=Y;8bTN+&JAua4*Y!(Tl(!aW{FPlxXaDJgA*dcLtf@0~H2<=Vb@ z)nVXCKwd{Vba^_+gm;0y(O_T{j2@Ep@{jZ}B82*iCUr?V;ea#d9{jr_G4c#ilIgzk zipZ9C@Z!r6+lm&_d|LZcZQ4SG<TcgW_Ht0l{k;SC(920I;8SO#{PM5h#X|`1lA6kG z)5R}f>ISes!KO{6OlUJXs;31y!T+%A6>yn+;6Hg;`}VRrPOd)Cd)V217YwdgU|783 zO?MX!JO@=OC?R6aG?@%M8hq5lR<B@&@P4%;cjOBUixuhk=vul9NH9P-Ry<DA$@$WC zW6)OL*kz-ELDWX-*LmGBps0SOLK<TvM*{@Lc^<U<nziJUn#$-A^4%{D{z(YtQ~Bj} zkyxlu5<y~%EjUKd4863I3+=ymx8na`=;<-sX3L{kbTRc(XN{wUjb|bO3JIYLhp<QJ z?&E(O_nxo0b;<~J49V!){{{`wb2I8W-*fVHvv9<|P+BtBaPD5yz6w`HeBd4JkQi&o zN^|^hwE3wav!fV{m>Klf)ab6<LB;1-yi|Z8u=0JKd7WB#vEY6pt1IZ$YeCq?KkSb& za#kOpixlp}uhe7vV9$)H%-4-4CoXGWo8~goB33k&l9&54*_(;`i6c=K+iP-Q|3f+x zZy(avtAs0hp6fy!xJl@RNPV?u2$8}eZL$z7Z|usj`{`Y5c$Rdw5d61fg8!G~*6k3z zz%3E(KiA1EriaHB&X<}$AO9RrF9kOTtf{v*grgEXH5+fIRVRZs?%6_Pt$$`NSS)vL z?Ji#?&16))7eHng7Vc6su6iE2%t-(4B?N+oYKkMIuY*EYWaspUU)SsZL4p=kl;hV` z$%*a(i)Qq^i`vM)4c`~g9gd}ziZ-J3nOecZ8qUbW<{A@v$+!PI4leG)dDa4>V!RR1 zaFg9k`2J$qw_n~JjsoCt*VV&Ze;eZOVS#f$mrvcuij~dBTehbAvqPYIC!O8wq{3VI z_F3srQ$@?3E+K=HTtonSiu<CBRHG+Ym=yI*b+S~oLul=Bqn>L6eD+N2Yc1TZS>E@q z9*KM3|BX_FY|{r;^Rau>3^)-<OEaXqgQ`>?|6j11_4k|A1!`26n;hu5nUdtsCTCF> zisFzW6#pGsYWjc-xR&S{%RZUqcaV+Y>WYs_!<^3=3xS(??oo$#%MoI0FiuEd;mss0 zQN_~NEAW40SL;K8z)(k?pQ*o1(Q;9|ZnDDP^mB7t5AB2UkQzI)`;|9bgK^i(RebVB z7nQI)9(*g)sw92TNa^|~bB>kfx=dR5^l5SegWmRKR<rl}BVO$)%XX)=3E!~>*}s{$ z5|R~M#|@Fl4zi`Y740w^P(Ssh7-kOg^HU0g5b!L&o+h5(G}u2a+6Yo47##k<zKvpB z61kjAoa9cu!Qc?-WC<retah@HrTDQW=CoSvb)OoKgZCI!QPwECzuCuoqm}}BIH)oS zvuPwA?Lah$x`olAWXYx?2Z`lR;>SbAokX;PtNz(G8wdzJz5%+N9+x>?&z)eK^$XXR z4sOkoktY<He=0Pai`=41$&vcR`Zso>O|uIYPkCV_Dcjj6({u#N9>#0^(*EVcS$tWR zyDWNv(qQKeoLBn>Bj2HKpS!sx4s)weE+3mSj%)bb7m7lDY1@d+CClGy|G~*YVjo4X z`9hELX8hJSo}p2barB<$&7)VGV!Z&Kt1}gMelg3fyY+|bmUfaKT`Iq=n>qN7FClh9 z&G(rz(#*ij@cW)ve|3n&HvuUYm^}lkV2%S$puyoj*_Y{?#<P#hE|IpCP~c0#Pk1I_ z9GP)Epw*0wiXTr%WA)>wEDLM+NPfh4|AYBOj{$^y_^1?5qJLv(Nv=P9G0`Z28{bEJ zQI&H4{!kwkMR^RgNRPg@H}_|*XhSxzI90ybGi4;B)Sy+gCS~%|&69nQ^NHFr4UOEW zna-mWS}?*E>O`DO+;g|ohY)kKN4AC<!VH0oZijo%F(-|g9FFTZK`ZrDEC6o6+TCRI zkSnfes8MSjY*vrgJg>$zQF!4(DVqs1sv%PaJw8w3IIKDb5QAY?Nen$W7}Ft-R_5$X zW>!v6M4u^6zvIa5bzX_eUEp6`-R+Cr5#!e}*GIGo$l&AspB4c0D7?J958u+q$A>xa z#lP%Cf~rYHV)nWl(t_9YKZqU8x;GUr4hdW`T*dlR0o9wXC9r}cPg|Gz<yPt?GH1Ij zekIMz@}Ak`pQ%FFlf{qnRtzIAL5-#9FcWZ&LBV^ON{#2#3c6sdclV8yU*m~0D_e+$ zc2_DckT(#@+hF7=PHEIXV_#Yqxfz4dbf+ve(Xb!v4Q!HHiomag!sQs|_>}oNt1T<r z`cghO<jHZ$oO0)aoEoBj2Ljku5N~f&t$g(CvNiU7{FkNJ9WYF1!GPaTX}MUzENYUa zS?ql(D5v+nJ?bqM!~eqFfvi!07{?WHRlIS}#mUN1AegN*9-}=JZpOgeVu|FhAwu9! z-j91$a`j~LURAs|&g$Vc+(4xb5|CEmN_>LZ>gJcn(jG|SnSb{u%8QL+Md5(z7(vQ6 z*}CvK6AG&NJG16pJ$`iwalGK(tNiuL?WEZu^LD=54Xb@UmNrHA_6mqwy?h<$Q11DF zRbCkO1BUPyH*Cr5ApT&QH&Wq0(0={YLc@xZ>PFho8Y-*en_8ao*iJq3b;b#R<&(b< z<KG`AL!w))#4k^=u(>4|pf`{sH)0Fs6O#P9EO+x&_*K|w^3ELP<2Ebmpoj;o>?cn4 z5X7GHF7D;w=xY}DAm_{`@4NKn4sFyA-YC@V&d41$HV+LTrFF7O<`s-N#0Gr0-1A(x zX(Qed&(6rU3&oCz*?ciNMQDPiMj?6?<MFprNYgHk_DS|TB@NO?G|2Fe$fWiLDc`sf zXuNmz%S2xad?;!DBi<CYAM<97f6u<D->rQyTr~TPGlPx6LxECGG3)7xcCE-eXD8*8 zQas1M{F{M>wNK3Ri$p3YAwzoOw9keak@2%>b^;>f0F(@bk@<H*Ph+-jwwL|c1TYXh z_^{FAJqhErA0qS#Zvg9B0{F3dtw=+j84@t9xqDbIq0cdS+RL!$86qIl3Z9kmG7SIf zgL@8{>yg#9cfDI$J=rLHH|~2N<L<RkdS*l0{v5O!&wSwi)uHZjM@sRoelE}a7qLHd z{;rE_ck*fCatv8AGDu}229(LBnJm2*i7+4gdzyI6V*j3w``>vu2p4;#)XwZNIN5yV zMnZ6m@cBvXYFjIzu>FDSM@jf&)I*u<%&W`8Q5z@kVmQ_6@rW-pBW{(Ep*NYwumsxA z!4`#g@)$K7PtMk*Ex-5kaKD8yKbM9x{m!-SdS}~chKAO1@cMtHd>sx@R5*z1DhgkB z9v8$xGZ&*1T{C1Oe9cbIBAR6uXDA<s@$q^VkETtN)125wdiT<kJ6Tw)K-@`o=f%Fi z!~ET`@;oAb$h*afvMUSDt5ABa%;PR{01y3TtbW57J?p9Oq<^$+3tb%^Z-{0-*<}zz zjDniB{lz}cJ<`J~FC~u~z@{GcqJBSUOr$VH`DSayB?h*VE_cb*X*sdlum8lR$d;Iv z+L-MPT!SvG+~{lm>hQt~HH{sbPl|Ru$#^~xQp8g<YrNAncW{0H-Xo-!O4L-JtAaP& zhSq-ITUc}w2K-&gZMmt=;|vW+x&-=v_qXf?5S=wcrdlMcRY%d~vP)dDOlaGT#qvEd z)da3McgMU@e;?ByzR0DbfO(b0gC=IjH8bySX0!$uz>b4amCmY8rNb+Cn`71NVh1;Q zW2TobSTq`1)Ft1bT)c<Z?cI|g;w-!Iuia61lb0O$_d>~0e^x3+`j=Ii(}K2JIS1g3 zcH+ryZd}=|zgqub*5hE5MTm3HPF1Fxz&n<pG&j~evSwxsJ8_N)nISYVeSDNv7%VG9 zYJ42pk?ZjNI%3{3j>ErePyI;AfVI&y3)|)>`AEEr^WWk02!X>@KKpZz8X<N+Q99%V z!?9Kac!H26Gtq5co83~UN#1K$cAuHp@O_hpef^W*#&;CDjP*VruHvgXnzn8sv%zf} zEzTP^0*Cw2D#KZAza8G7vr+67E^`w+NA-M)zUFjhf`iz(<`=%UQ0T?9e}fvf<Zra~ z8dD}_S&rqx<>;|1r4`}|gC0VoZWBr;6;MxzI@~6)Sn@)F&{gQrr~X1@{Jn09uj_J_ zq$=}Izs?!F&@xc+9YexCH(@AWJh(x(gXeRqmAL|;8%#2+L#I?~euR83&XpzEj_nH5 z>0dqE*+&f&8}Uw2EQwj=qcny`ZoM5r-%jg&hxHk!`t`SA$m>tun|={bxwsMZns?`3 z6Objdo>fH(sZY`Dw=*Nct&%fVo=@jrgOX~G6`l*7*HZu0j34)f>i_WpZ_eRPr<gZB zv49at9D^70`Iyu#u{5Qv)%+HRpAz6|v7tf*ur{fxuc5`NyLHt|)6A66nP2VN>#kTk z+VRVJ#<kktp5Hx1OOm4QUu08VAnCv)<g=UZsMEPueYxZi^JlAzB&tcs>rF!&X@YHh zoRwaCntEr9?LX{b`QZWP8`nl4_74rR)Z^x6&DRUA>e)-1GTn#h=glH#r^YjNW?P*o z@yPa%-GHW(+~jys9+%tZ{O!E*-_w)6?J1EroWU+GSUWpKH4S<L7##z?uNJ>5i)kq+ z)>kiQc$s;SlGNF7Hx|CWRnBxfIhxk_WE=D@HkOP>=eM*b3y&;QcQ9=XcbL!CjxnCk zadrI9mX1(_&gd5FC(qf*@mPcZ!|)T$7-+_8`3>79<dGuhe?zS2eh_*!G)dwxU)b56 z2l-mWLHCF05Dr<09x{;G-)|uA+{n^~eHjawc`Lq+#Rf@!CAr*RX-DaEGNz`5OV40b z9!iv0*x^Eh)U`iZ2APEk|A%v#^DHW<g+j%?i`2bTi(CcL<J7%RU<(3y+PifUOK&jd zn+87AxUEBpn4ykqN2UwvL$9~<-7VgCGp|H8T#6QwJwlB;UJF)mGQfD|Ov(x!81o#y z{ND)x0Rn(miC!o%j)3n=Azyt0Dck*BeO+Ge0LrVsE@)OD&*;Y>@1}bX8Cf2QcD&<r z!2pqd7Z2)MPG@~<gJtn)Bw<TWG~Y(f^>yqENh30{*7i6yQnQ7&DG|3n@!rKp%AvfC z{(t@&puUeKCBfuU%%c~6Oc`_9Sc;1qJ7<5-rB=|B=>B%dsaNsL|L2Yr=kPsy@sfr4 zQWA~O>F&zUpFU|Rz41hL8Zeb*0JH<lmes>6=h<U{lqj~$H_mK7pD{VIX<vj04mEd3 z00^Qk8!_&<saqsReXVG%7&*5?k~KKArDoNUpCS>r&xr|2exHrb6_e4=UcVYo;H%#; zef@2Py)XZ6pF2B@eJShvZgy)X3Ld}m$zs8Zq(GX#ALHGkC1i5C>`<berGNG1g{9}! z)z<QC7iGvP<!I$sjWQA$OXE~tpwBt<<dr)C&<*>K<_6k5IXDrb_Y*!J$iexkJb4ox z5=6gUWA^u#cH9P(VV(Z#JEuMUl&jpA!LnoDRCsk8m@%wX>hs+tQrBwirhhz%r#nh5 zPj3u`2TK{WYcfNXb83*R%+QptZG^)Hx(wK``nK$Al7Z{OiAp&TW2(uKxhRGc*}-u2 ziJ)VOlI^DFLH^b4QsZUo^JMdP%KT1nnca$&mEHG+a5wG#gKq)N=5Kwk3Zv5zPYyhV zlegZ>CvHiDK<n-&8)H*9t7M!jc>giSdoLdDq@>X9#uf@v`zp-F&ZnZ2xG_FL+C2Q@ zG_BcL1+OM*jf4to(vHQ!kaeUI{W~%=yMBv2iam(P-bj+s(742j+jXO1{S}s_!!vCX ztGa1?AIKsCH1pnqVMyzRqy&LU(Of(XWdPBa6}*aYca_BU^g6f4eJ{qlIX6F&`^$mA z@RG2+(Lq_wu$e$m>~rF!sY9IliA?d^l&pa9n=D1qtJ~r!4`Pbw_@OYSp~$W0L9wyA zZW+F6FAE&Pucet11pnm+)*yfeQOK!LYNV65FBeh%H9y>}o?-lov*)ZWElsi~S^jXU zL=nq=4V0r+(!A(t887|Y_wehWkI8#x4YEe<b-HhfGdY1Y*9%UbG(u^7(2264ir4z1 z9|o;Ym&VNfu<J;zzShm!wbpZL(yFbb*KtKA9o2;$OeXSW9WkGZj~7r8A7{MPiCSSI z%NwoP%-;EY^MY`BtcwQf#M9tltHctlry1TkVN{uBlA)2Jf6;dD)ARq)^c8GTwO!ka zh=fRkfOH86BQ1?|gLDtwA>G~G9Yc3_4$?7nH%NEakl%Pe-+LVU5A1#Ib*(sKEj?;n zbek)hNB-u*Y2@1i?)D1O(r(ULFXP&qX0PPEBengGx6`ag(QUU#<gsb_lq@!up^vGX z|7NkO_d;B*^7~~N_iYB1*CVV$F(q?=h0%oXzc30A-4R|&)fhupm8>kebYn`mR_qTB zBd~4dnV!G>wY9cVF3`H`r@e?7IN2bm{<+|%R(KUj;Dt5v-t;UWekH7NLAYf-{Pa1p zQo;3Ia@B{RX#F$ok78vjQo40Bwr-i_l^$%zY=&PBZ{kVL$<yJ@Xu6VSY(zHlqliXk zF(xd=mN*l~L$8dvPmVZ?lLfVS2X+J1PPOc1wj;IaY-L?TA4Zx_-nljfk51oO(l&ch zwstwN!yWc;H{P~f8B7;8FpCApIEl5THSokwsbA!!QEL7M`~>%NV&K6E3G>(dmdFj> z)TpeA+yOzTuHc~~v2_J<yj~B6d|{$=iH4MD2Xe!SSa%(U>zp#5>*=#{R{oXwcmGnW z;u05^0>o>NS}gJ_9&&YP2I=0Tyi|sAkVdWNdwjgVyPYdg2iw0@Z2F0bd%I~Y9iDv< zc9fNsO;!$P1mvdpo^jpIh89jXc1OoV4M!u44Cyq0-?WVAJ23|3LELE5j~THZ+RFyB zem>U|@*f&;q*2@6htK1ROi_;Eh#gMiE$LzLNgP)h7iXOWRIW~d_>NX^XKtK@E@4m8 zUHG^bFKiDf#*-$RFPu58X6%YwZdjG}<?>=N+PsDEh71-2L0I%s<jA&6@|^7EQhH*h zNtFl95324ICI^2&k9ze&lEkQUO!rGEBu<Xs*7$T9_R9$D@+(BiA5?9N?p_weez5LL zB9i?7lh+D=SlGyzhI;^CZIq1*`30s9%x8N??N8m)Gnkc0$YZ%TbGy?US6*wTZ$vCR zCp_-&6c4@qpWj+8hj%5#?}i^cFHZnzP_|tOnQx4z4I49Z`tqSdG0YN&s$D0=BHzn? z3Sj-1rMNNY$dwNDD&zeCkvLW@J))$vv9liQ_|7$OVG@hsf$^;E|NfTTw1J>fDSpG5 z4IV+w!dp)iwvudlW|e+&HFzc+tVh=}&mm3jL~JW@o|p?y-YgMv_E+NhIJ494iE?u~ zW@Rw{Ookm_V3;@2&!7j4-~YaRHChzCJt6_pf}wgq)beV?{X>^E<$vks;$NJ=k2I~l zitPb-E;sJ3a$hT`DLYFf4!4Hp&nZc2tImBN0o)IjP?E{#&XS!KB8%d4QWz=oc6H&? z(s#X_A=as(d??Ge;^In)pzZK$r}$rvni6SM7<*X^u1%;nhq`IuK3V>UHE{>_q*h5I z>>PJxMPQxLG}n}&p^G?m+XrwKF-JP~D(|Dc^`6gmYF9lsECx=j4=dreF!_lX2+pW3 z$v5nhPW@I8vkM*z!)%mvIGPE6nW$}XfXZ3C;y(VKS{qHIY~dWx@&;#r+sz&4@p6m9 z7E`O_7c^U_2JmC%ExjK0xG(MdOgf#3{F}I*3X`HgQa3#QM@2A*=E)W^@d~u*_oX(9 zr>1YHBL{sghp<HRT(APm@cDGgZ=#Lwb4Sl-Yk^=#Ey(DK33O%joGR^aNJ^@t5|i`u zE?rBi79$7N-d3td28b3noTWg)%=pMrlO~VbyNDtY4Yvs+Ku7v;bOB9|sscD?2vMUt zI0^7oZiK2iWn>|W6gC1jmt~Au3ZU<q`I|ciCyiHw+$^rEk2wd~|3VPKUK~OT+DiSX z%u@@TFj^M>kHZyj>e0U^vF?jq?QMGkYpZ`6Xe3dGzfoeLn^MDlbf}mAB^S)s_4NJt z0=PNC5WlS|0e-JY8fzPFQ~D4YB1fS4S#wpiwrOWDM~N<d?hW@fP(Sw;{&XPq<L9BB zON!~Mi%=VngO?KHZmg+)^Pkoau*M^OVUC;l<^D|j{%PDxU%&D$*)CCP9iuP4qs1@^ z4b6jTe#<+LSZ>gse8;lJ<dhYq(+LDn$#r>%^&RSby7RoaP$XZpm9xGzJ^c_BC;KZP zD_Xb#7x9kxHEo{nJg!uzSq%#=<{>!bK74^&C0>AiLsd<2YZs!^UF#^gOo$rIYzC$? znDS_?KKzmo9o0<dUr2X;Y?Rb)J!z8{Q_{V#kIB={U;OoW%+Z#Mx()N+xmoDzC2CW1 z>h#VZ(eT*QY2>#Ne!cDBJZw3SY$4bGjfiN;4mTTl64OROmt3q<CBvs3HxsV3{7Ixl z5^U>=*eK2`L`@<cMIgn-;bl#)h@^=RT<Jpa{OZ_`L9Y+HTfCein4>qCyZifShS6Wv zE?TheR-K99(*7IK`TRMA0XkkcYO_R_^g!rvQ>J(vTHWuv{#J@dM3A8Q%N+Mv`&D?u z1^?@T91zGj8a4^kyJsb8>t^~<PVknm87Q&=8|eZa^F`j)`FfF@63~674cd@;ps|}c zrH<DxB__Zziu0IFU#?^xjoFpD@xm*;<MuoBl)9sW5!<3`rPDewRyf4gCxoN3x{TAp zCqntX`Pk{L^4o5Aq~pBN3}Hj=Cf=P<VXpku&+zRt+CVkA!{=Sse5=yCR92v{4wN<` zgeN+#0<t%dfBR&u@HG6%nAAz3z70!<67wpd31^jtgr74l`ZDIZcjjTs!`hIJ-}Vx< zX(e}F_J2kA1~RO;>V%8C;pVyM#RB3CTmUXZ?^_%4`~SR%Y`*NTI<G&kCx?+Fn*=A@ zaWqjnTdH?%)O>^6V31yq_C#saqfn*F_qDAk1;cPl-;T^EwLAhT0vV-mYkE8s4}?D* zlD^GQbCy=jx3L3D@8YJ=uD@@8EVM$Ou+N^xX73hv8*^KY92~x!$a)9-q0R(hEod{N zp?fSolCpYDtH=Ras|f`}s0jPqRS^qy1VLxH+yMo6CBdv>I1D9t{sZ}O?yD)~K;cfd ztv#ol+RpIWRYltt%1!kZ0yL`Q3Gb-9V9q$eK)>e&B9_;{qw%MV*1NTk%%A@ymR5XN z&=4*>$nin9yX;z?eu_V9TCO#{)HhT<?=@PlKKwnZ)YN%jhPhMa%q8cA6mLI-BK6}# zkr8@!X5-dP-h#7k1Ff4POr_||<4TZjLfM%Zt)|I9N}#Ol{Fx>$#8dP#y+p8m>C(!f z*{uNj90Pq8H*3Wxi?mL68k39Xzs<H%pvvlqX*K~QtiHOmA3LFiZSO_wuQvvt^yGJA zNek%qV8jHhNmJ+GsdCWr@W!E-ZL7|nB0(7X2l;i#A4)X2d!tDo-D#h7WE)&s7*6t^ zrk_nP=gvV<G3T&_##5kbDQ{>%+wbe^=ezasRFbZLIOeJkESsX5?!?o`eTs;T?1&%T z5k_zDcUwged|jtc9FER*@_s6fjdyWr`92~^qB#a=29UnVnRjh?g?r>HSK44-3AwM0 zSSn{87YEPn+hhw=n%$@n?S7UuEFE6V5AyP7UAM3*9(7;%Y%?yuW<`QnwN>cY|4Gt? zL2Qk!>|w76^KOBqX3?wlY_*Y*fA4fH*;&&KZpa4rG&8I6*CiLdgw1q4CdeuOrurdb zzYNbfUz>aVNW+cVBkP+>lFWzRqNT~VbNeKQDqA>dt%G<!h#l97E`Y?G_Q+bY*fGcB zbwT{e^bsDbCvD@|L}}d#Ip|*hW~feLq!E<!lYS3AUpVcy+eF308Y~_fEF{A4j@I=W zqFw;1gdn`z^IAQ7-vvN8DzQ0>7Z|6^@jAGg!5~Rt3-<!+XA*0BX5=ui?JX$8GiKKv zC-&!@nO2+U#7x<q{A!BOi5@X``b!d*UQ$sew@r9r$3$+OK8y6`^NqMAd$8zvMO(}^ z$+gARofQ(@Bg0&zM(d9U@p%)=Bko7(+$3wlomd26@4p(LUj?+zd}U5AM1C>XYq?Iw z9<p~iY4g8sET9SP$Q1;)`{9e#XAVy#19DlqMO|1ph@DZpkYqcG|BA`?C1|hc|N0G6 z99V1v4Wz1>*5>(M?zc3=Uc=a^bCUNueJ5VUypGb@WRhrZTe7wn2q4oJlcr_!@<Y-3 z^Gn8rL6iDy*0GzGO`e3FmTD4d@skQu9?N=PP!SNww2f*Xa#aox4DqbO@uxS)AIP7S zA@BlbdAN?w$`<urMw*EW^W;T)k3&~Db)C-zwcOva7kAysA2`lNa%$pl9+uSpa*=Le zsG*e2aJe0<Ki=F>$K1gK!|qGy_@>;btPXDjsGB9uTbhQh7{jZCtnB7hbGP02+JNy& zcE3hGJ%c#y8n06+io^s=0`j88E+ss2W0u{Xl$&gbP@h@;y|*Xqy{qaX7e1dM%rU@r zd0faiijMjv-w!@XdV9Y<+O!@NUX0XKu74%aQ3xOusjG6E<;bX@uV6%!)+8!SBl#n# zu<j%(w9!X+ZbaF+*k)h@uSQ_5TmZFvHW)Zynxgx@GyyNxL|CDD3K-Uj3ZQw?IF&~V zc(pU-dKjBqXi`U&lc7AF5nklIWc}b#hj>^}e7xR+;Ng5W-olrZ3+vIFKl-|*dP*Kn zH(d6wHINX4VujOpC9<k4s4OVgP>#v2`6ylr#kO5@0rQMeRWeYtU$2CVmC>si$fof! z+=DM4Egl!k0R(R)o{6gx_GCR)rGf?+E!uwn>;5h2{*m%9z1aH+{U$ntBQMru6WFY3 z`@_#;1#`}CVZt8%hGEO(kNv_|jxYB0gXsn#Lk1F6B4llwxPqP0VPL$+cWS2kCMlK` zt>$_Crwd!x@+XP9fcWjQHD9=I*LrgIL;<gtl_w2kl&f+`{Bh6fa}K7=UsG<yvJ>YP zs@{(dx$f~@>07FdU+b~2PBT8<RU@rezMZVpZ6$u&aestA6cV_+N5*u}#;ADE&WBH( za~J1Pl?FU2JYwZ|4!EC#R`#MP@cRV38hhE`f@8cyl{+Sjz;<qQ$>C8fYnO)nB^mn% z2l&uKO(*Tz{BF=cKvf8q%3tVyU)2uRMZJJv6frrhgiP@xj+m38#V=<>|Ja3~8Is4# z&tlQUt1MoBpLAWF=9KBeo%+!T_wd!~Q`x^i=^eXQYmU?iy_(L{s-=Ofx@r98PesXb ziJGYB4dMyT)ncDvn-h*vT0^}9!;{YeV)qSR-am(drvXv5p)NKKb0@OL78g^7)2d@i zBQJA!>WJ-;+P9pda>B0@pE_0z{SVmT?}HR~+?I%q0V<Vh)E!lr4lCQ{-X|I_k{Z3h zwoP~MJ~?~Ti%Fg0cb#AH-?T3aK-tL#1qoG+Pd<xX%Dkbadk&4-BBb5Er0|5*fXQHo zSEZ(#J^6K?KcfHeA!JjbeG*-UX8`*4DUKh*(fgdvfM;67=gyrbvc2$Jrtd4<)qO)r zdwW`DPW^oau8))#6<m#$daZx_(Lz#2(rZY1iTC~JfWP`mSwS?K9t;#vji^zMrjy7J zpW|<AOlDq^mjz(p`1k4)Up1lkxQLxG8Zi;2An{zAqdTirF9AE$b89v1hN!tk=gokT zi;G?&5<nZjNA7XsO^Z?-$l3XLl*t$WVJFD3R%UF_)J@yyoP@&-QHViq&epf*u_~+5 zb?acDrjRFb*aC}};%*yz6XjHN!$da@J?^=pzE4j>Sc*)WwuF)@DWN9FJHm<c?X~#5 zJw->~cJEUQH2!Y2=?P;zjO0Ha8rQ%34~}N$)JEv!B`;>5gYmDYGL4S0B{RWuXGcfJ zSqpSGov?M6Xw>(p4i4MREz^=JO54?1Mfg>1ciyTKR_hkmQR|%^H?{&)ffy|XQPWt9 zutlv^TqAjv(Z*G=PlroSq@%z}sc#3BUd$8mJ#IE;Vk4}E1a?Emeg^N*C%7JEDQ_Dl zB3Rt-@Wuy>3lb^q0A??|<>TvfVnwKh1{g8&9XfT@;58BxF^}ah(KWsmpuM$_mmQP2 z@Tp}4XkjHFcifZx1b=h-lSLOAVyZY(a|Ibze=m|E-PiLg!n16KMzNL^B0-?ors%Re zJ;-%)<g+~^1!FSz&q|s_qQAXrda#XV)-575yRhLojL(P(t9dMZ^phVmGpJtUWA;dT zU1b&o_W2{1o;72qymP1zg0$mas`+>usFTOrvV4EeHyQ1#Rk(9#`S(Feikw<II|&cl zvbc-~4sPN@B(BJQlS5l|W(wxwM+<wEp^zCd6;Z>6^yulUuK}HzVLme#CT*sdBJnan z9%UwoCd3m$^!|>a39uwnt4P>}a%5y#J?0kfQz&%>C0HP^om5yU#q@}u2_KYlv+-@G z<4d+fydVq&&40k^ZajRe-T|{u`YSzM2#)b?x5c{Ds6KNNJQR62o9dOt-ibdc$l0%x z%Ydy4Zo!Cs&VYc#clTs>c4afccWdr#`>2R?unI^e^iSI05#6+Px^BBlSn<khwm5I# zTzG+X58>gDSg+&Cw$q1`R*HEHUymT#Gdm_7wXwYEl`h>Bt`3q%++&UYx0whM+BZyQ zd~)86D268p9^?-v)=D2F;8<s?x+EKgf5sEGqEVAhj3E~DJJ+?aF24noSX=)ooAHE_ zjWJ^=#trhY)iY7tVB&}Wk%FsA=2H#u7c?F!^18gBWa+i}=mkf3@}by6U+mLvie!na ze(KMQCKrN0lPlgq-V=qA;)3!TOwL_9B(r1kQ^sy^{iZ%1jys+0MeDY`TqY+(BP{+G znR8q`nrsr}bY_07@$sX<wu75@Di|~49UM`Vz&w^a;`6$Y0wDCP!ou<hUx$+9pa0A_ z5s%Anw@9;cE`oTp9?1Ltvjsb^%*`=peQrnSuVe0Ne85S<p_K+N<?0x_>O6*9BRgna zmRr^aApo{^T^u}f2cz)R6T+SRPV#KiBN$#5M06nrKfvMtx{hTI<$03Vij}#Hm?9hs zW=<RK_~p7Pz=tE7ux<#klc0Jads(``3N`8B=|YZZAW?4!dUI#pe`i}-oXE;)fa(uw zCxe=H((zPMCiySXf1dJ|!T#=89WA=78cKgxtq06KgYISV;d#Ft)R}y4%Gl)g#(Y&w z6tp{34!+GY$goa*gzs7R5!fT2Xz0yyyawnIJp%-=flYI}J0cg{?Ji#M4UYyEGI?t* z+nmy=$zdv@nj6~+#F-nSnGJCFK;8A=)lk$z3B-_N;{a7&nW-ns>DGcaop|J_e8c3p zT?=`6T{|J69#~sh5hXx#60v@$7JO-i0Otq}B?}Y};U!_ULv&?TNwpJRVU_@gaIdqy zf`F$tYjPY@SVIZGkWS*K`wTb3zJV5D93Z3V*4~WtTyxw~dM|NoyVKO3XmeQ?>vFfv z@OG;0&ro2b@rkk4dXcJ?@MnI`nkJl@1^4YYoJ6_{m&}fS#n>(5{PsE5^KzN|QV2Au zzkeu)Nfo)<B`SJ9Eq`EaKlAiGM>*By`runhaXZd?w*o#mH~<CBys`}Dc6c9J$qwGU z4((mpbifp;{OUF<2mvHIbg09uekbBMluHN8#aF>K9E{3$8*@DH*S^{w8Cl{mh>NE9 z*dn((iEMvJuTRJE9iO;YlXW)(n@vN@QVZ5nv#Z>|ZowDI+w@@1!It+JF%AnKzfDvv zG<Fe1?dC+T@LbH}joQ2ROSOs@^g2btzK71!)XxSG1I9~sM1VF(V}o4*ByJI9gCYzZ z%`3oC=#n!~`O!q0srB=BKb7bRF-M?43_wUJ{mo$aRH;NlkxYXK2{qwLIv2l~kcCi` zf30NEpJ4DN@(^L?mB&Hky5}h?N71IFLz>NciN4L>YpI~7XxdoV@tuSS%%eZ<fxN+J zg0Jky?k;aXRut6Sqh}0&@sOUqH|9Ha=Hey@wlerU-Og89?4=~jN~UYrsF!Oei(y*T z6|w3n%SAya^{(26L(g{3>w=_VaENWum!hJA4~<U(+&9d8gOt$HCRDuE><+g5L%BOD z#WrIC!p!P#d5UQO@nh}+Dk0t^!9S*2+BPc@Vqt3x;(HQ=etYvP;n-n=^!$Oph?|v- zI$h5Bdw~Eig3rr)%*qiH@L`m<)h<5)c?_4+j<+7V!izVm!4m3uF3eT^@*2#8(Agj4 z7l@a$5$61J>-IK>Psjm(LwMQ9qSysg4eD^;C3-D!GvIwv`2?40>>UfT2z9GqeTxpI zvA-(VMiCny|Ft_E@m993^z~zKe+FIKQ>weo5~nqOApcumT+wX$kmuyiryXxrHny9( z_F5Y?1I>g~&ZoO~@7|qpJM2&Nu@%;wn&#!@L6Sgs3pI`=6XZw}vRrr9Ce?8>AEt8= zL+<A!udKBBC_5D?I|xWjIjq(3(`N+Y7-|8R%c!CnD9~$qGM?HFyqW%1G-G>oM9jz0 zF5c}{CdB<4jkBY`AEF1?%I!??Q|YH1?ZA8nDHTH?=LRXWnJ|B^%@;2plv+WxG<5Pg zuPYvHid5iCJ%L0%Fy2z8BmeeABYn@6vC<|gZ8&YT&>~`AEHR>(9wKe9PK}4X7E%9h zyJYCiZSK_e8`nZC#3V_!Vzje39b@94p-VRz<X(2(1WJ(i?usSjFesPU#10AbCF?0w zYyBye`|dPTx(*rkg=ECC^Fn#kH#_2-y8-%V(`|YT2;EO#ZP&f_GM)KqlI~HX?4OYj zI;#DEnl8Rqe8>+v$DO@S4(pcT2qkqf<n6W03V+8!yo$uHM2w9%b(TXq=C;eg3hO2b z6Bou8!co<OOKK-XBmHFAjWILe{9t<6_&AtM_wugwkg}vbRay|xRksG|Ct!IP<3)=| z-k`6K^$y9L6dpej^oSmBJ*Pl&he4AR({ro}ad@eX1?Oxqqn5E*Omv&=!!V)W@%2X< z?Yt&S&?h@ofEX%}*_)@~A&c|fU~6BjlaI~(($jOp+{MvChf)XVH+W#7F*Nr%jkWsa z@9S49&a`06SuU^SBdNH1^h%EJfiVe^#kYxeLwH&EnT3CfhMuLt=$R#?tI_TzV{2`1 z3C%Sp{}uG8a6}SWF%v*BBK}^@P3{^u#v}H2(kRRWU>(^i$t+QeD@IVVRBI;HZT;k% z8#nq}-USB8EK_q68eE*|ouG%25i{IZ<^?25dB>E!bUwLNR=e`b(Rors8JjQuB^57* z5N6i*G+yeWbw5wODBW@t;$Jz`3mkJG9K}HT$w}S%Ut2#`X;WMfTuBV4VR&{#Q8f&F z|6HyN!86f}xevIH?2$9QqGg>}ESJT58t98iPVndHnH$N(&9xOi^+b<9f3&b4WX#zk zzmW__sACVBF|oKXa|gZmPR+UCKsJ2#MR7zRfmC9TFnWj+y^Fz@jJqX0@X}K8;&;{E zQFT?W_==x>&w+U!1NO#XetEJ4UIv<s%V9oBZ|Yk*G%h4_+k3rCwLGE`#d(mzPFoRu z|EvDEP{q~0BX%0%rof31SmWAdS{nVV2>NW4e@)QT6p^FVLyx_?fb7L^AmS<fxEAqD zdMhA>%Zy!0hBza6WifAcgr$AOU@fjgm>Dt*P@t!$(67pSSJpev?R>p1Z3NttGml89 zfXoZawl&$5v1d@;)>+<vmKMm~LPzhK3OAhX|D4ld?l6*8vffig3N!lmG*9><Vc}1y z`IeEhs<Ww>jPITmj{iH(sl2{iv`7!jlP8v8g~b?r)9v>s$F080G)&SAgv*bEX5Z7K z%2T};KRv)FQtAZh&JqiKt$;M;e*-G6ox9q}nYV=HzfuZO=3P;a^QW7V*0MidEuR}1 z)iTqOh!puq22EwpofTasHkIRp_%UC!tWgf(5zFj2c2Z(P_A+2Tt*rn)4z5ppCL#~o zjC}LSggjVsA2T|y#)=Dmh^c_imvs;wKGt|Y92D6I-@G{czGgMB`mPbCtQ!(Nx7oB` z^s`t<7`)s3SQRr+gY%>@hEh(FE8pqUQMZGPhdiSM&x~0teNA=Didii8@@2{c{Ffd6 z9}ff^$*OemiM`a|WDSM<uCQ^uH@F(9kO?sW^_sxnK-}o9uatdgM>L)m`(7yx(8=D? z5G*iTsq^V;E@h?YOz)!0vYUcU{REcyV8WU}p>;GzmyF*yZxoqV&pFm$8tDdJYld~W zN$Ih9vZYm9rATRojDyI>D;h+kY<s}1441j`)CCsv{f6<|Yu;Iyo#3SY5qn6ooN<D$ z9Au!z9YrUU4kuBFa+T##dUU;e+Fp7T1YGF+EBNC`IL5Y5QJNa=8^`IW()3gy{^17R zwI<OhC~U}rQ1jJl=WdsBjE3c+9D+JR{kjLOsqx@*W|x)R%e6bT<WuEy9zb=kH{+lP zgC*E9p=^o}-hh`Zm_B;I<<_~Xaw$1@GY4v!Bkywbw<nn2yG0JNiV9FB?-+M;bBhA( z%$r-+PeN$pomyXmROmIoj`ve!16JcGV{Aa+&=c!x&iUTJ<BwCysKm@C?@P{{{fDU8 z9pd~#JR4yt^;T!0oc-HEibI_p8q^6B&W-VP*YKFnvD|XJs6L9_9#htDdQEF+w4WeX z#cb*_rYQf*)O#!a1ic!C&>EV@O^e;i`O5tIfD&^Hd#i1Rf7SV%{BPTFL*L9-(S$(P zr3~}D5%I%H`Gbzzg}UehPjXLt<DVz<bHnjTQ_}PE5N#}0{S_37;Dm~!W?t|7EI(T1 z_ZMBPEqSj_CisOrF@A5%3SZGTEk-+>-cBf>IfCdTjA=bSKGWGm(4D=ri26y^-u9G& zC-0{&uSLf_Y-_|#c)hBiXW%OtCkMWMGTniU1DpR)4sd=M+p$ly-%&VtQsg)x^i&Kc zwq>yNQ|E@Wk~@wj=5;$+Sy=&{@0SP8fOM_KqG4KX;QXh*{eAgSJ&<ju!z4}XSf6Sm zRHM$U?q}><1~vEB21`AmE_PI3I;4E~htCAGyFEpY76<dT)5CKi5p3#AG*bEmH^pG` zhoz7zLSkgp!+!}Hyx97bT?_O+i$f6qUJ?1HFSU2Hu50eio)PMG+I7tivWI@|Cb4Vb z@tCaZLk?UndwIp56QXwY_qfi7iQC}r#dH)A&DI~-$*L%?Sn=Q^=ESk1hA_gn!h;)U z&GeC_>6JLK>*$?&_elER+03h`CnBx*ijXK2T{$Xk;MIAuqV?%&ipVyO8f`P#61I0l z^O3q;GLgK!J+zakt?ylWekk_9gUHl(>)ZG`*)cYTc&Vlm68Y)mYQEW!3`xd_^oL(w z%}ec+?d;hzRF08=qTwwhKNz^G^A3i)(-m^jBe|-B>iLSXv3<vipWl}5(0rp+B$uH> z4{HBvo+V3o7PdLeD2v=&(Vd~hxE}w-%k~>|ss;tm=f<)iE`uiZs&DhSrDtA?MKrb4 zj4o8S6~(ua<`$+D>lBSADlb~xzg}wI%xiN#ds%#bypx;7a<1#XY^BRi{ryKrGaT7> zxkf~m!Cq>yQStMM`}wExq>X=^I2^bKQbrj41%|XHP*;?mmm%h3h{IqB@vAbz^Pda# zS~=5^rC;sRFlJ!ac&FYwa9NXA4k6djte)usx*JeCEp)Ur`<eWHp$q)wjGeI2MgwZ{ z>-6~wZ}{}=M~ORa-Y7mK{V5lRgxL-VUXoYl5zil7z)`A}Jm-CXB|TgzF%?ix{zCqc zWq==zd_m{~f^9Kx);SOQTG8Eb5@Pe+y*1iDt$gVwyDUH!uU}{lM+%-K>`a|?>g2kZ ztHyTH(|dx5cIG(D1~$~IEIbB~LL|RK(09`vt&cv@Wy_qaf%7Y*%Ux*2RG@4~0!z1! zI(|GRX3N{}TEgn%3w?bEG2JQdFMnC{d6$|WFq!;(ICt66Wt$@^+yu#qcZ7h4|M0y1 z>VBpTznZ#rL8^l}pczLo08k?KwzXtUhJbp`JmfaV_L`K&)~h`qT}CMb<hY+s#NjJ% z8!ZncNnl_Bs_hqVMc%-CgI8-lkoVq6)B1}b?*%*ew=|@Ap*YvdD%P2Ug~ZDABSCfd zuU&Tr>(Q$%Ed@v|&Tw!rpsua@C_W|jN%q$PZYrA~#7A@bDU}j<(+KdUVckS_EN%qo z{TDZ~X6rbmVCt&selMA7EA#wRXjnYa&WwfG!AE9$S_v>BzrqkI{j%y<|LNBFfOV_V z4!P>CjIDyqF8wq6gospe!>-rb%w;lUVcwsd<;$fZ5gwD^)kMQ2)mr}G?>b-XmBB&Y z(4c$4MvQy>6v|$(gE<P=Tmu0_o-ySqXJ$r^p>}i+&eZJ|mPV?`zY@*&Ea~-+eA;A~ zb!(txUEYNg&SoH1H&+mIjQyMIRx!L7<iehl4L&J&y<I5Cxu0a{Q3aS4&8zACW--X; zK2n?s%$P}5`Z?S~GMsOz3}iWg57dS%b7T5nhGk&Q6;&X8Fu0#7feThePLd=L!%$Z4 zQ&5YL`K0Di6|~6`x%p%G-9Xk4#<O40-GEWyZQ@Rcny34Vi>r30v1BX`$;XIWo6zy~ zcKf}6EPN@JrvpUzrL+YWsk^E}(?Gza>v}&-1g|5Ok%TmC=YOR7bp)2H*;m4wHk)D( zU@fe*%Pv_@r9ieyfhNuvtcBI(GBvgM!pfRzlB=Uafr?}z0xx{4d?(9MYEaQATGU`e zu~apIN|b{k&|pfS5yTwD3RH=908v6?JS48&Ss}CV_Pzygqj?lz_DHH6Q5<7^Dc*JK zC9eCjOhq@Z5Hxj>c;T5ydbeXznYd)Z8=h2_Tu_iAB86@MUfEx+UK?z$-|~|x**EPt zU>Q7SWe?As*;QN2mK#(U&mYkn=}<)2h_p}i_q3>VrtoQ~3^THb$7&ko`a*-uk`gxu zo}rNVOK3t}B#G>;W$HE1tknA+36ZMzxjRqn8$G?A5+j{3bdaBczg>qDL&qMYxZB-1 zuy2x@s=S(x&XBjPTtt2>#axHdhYV{oY>6UK^)vw(kE^BNa6UA1%YYWH?>$Iek^FtS zVVD95tS8j+hbkG++}sWr+qoUe`NQ%nZMcP|2#^@n{=+MaG_Usy)zzdS<aUz#PE?v7 zVLA%&+iQ~L#S+iWjN*KPWPwe)29v9<nCpYr7r|FTt?AL_Y57~dSKOA`r)HA2DaS4C zuLJY3M`ATqEB7lxQL7OGjbxeMV*)rd+bYJJJw28`e@O)4JH_i-pvK;7!C+R_7aPuc z+@`9e@9>G93<iiMi%nW4+CsiA?K1zgHW5q8aZhlE56h1^@J9)|N9xeyi-qSitew{6 z7ICW1+~h;*bhvKCv3GkdCPDT{J@-Ajx%p2VabrLVD{@gg*0FvZt#Lk-b_tn%^F)*j z!eG!|nK?p@9bzfvMsBHjO2X*WS91Ux3PUndWtp^U1a4PLthxmWh68y~(C@hUBK%YZ zFlU!{Vj$Z7ayl3=>sYdBa2_iOrU9p+{~4N6RY<k&jAjIAdGe6wQt85Z1m@$JU3SNt z#(LT$xUR`brx<2lDr!#^@iTv(T*EP*I;T9LNt|*QT<qvBHq^0`vz#Kss=dZSEse&f zM-Zuz1jM-MeNzDK{hG8HJ4hvS(~$3@_DsJf9fjj~M5+Z1go|(R*iZ7lJO#FRFmZ%I zOc$y0Ix3wVc$_b~J3gSvZsAI!P)s!Tg0&de$B#%)R;4ILG`BiYVGcGMFbA83DYB)3 z#MY0B>r^NsJ+Iwy#Dv@8E!GreXu4D-u*qk238HxG=t{lSel`s?1ysQvZ_>s&@88h8 z>YWXnKuP83o>fXD;Zg^TK+bOg44kB&%!k%j3__Tz1{32fEch$x01a;r%q`G0tIy4+ zFAf%-ckxVCe;B^9^@!YE`inT9+_oQ8*t4HOYr@>G7i-(Tw>2h%^h-dAY;9^rJn8Q= zm}qu$8eYSLyl5r1ao&UuiFeS*<X)G=D4%_ZUn>&-P0v5cD#tAJ)W1O^o*Lvk9B%Jd zqsAFkqKDA6zA0fLfj$b4VvX+V$aKRTni4sZrj;Rjxvh+vSm{j@L$iykvo~j9P6MIN z?A2oqR!D*8flQ}qwjF5Znfy&fuMU0ZeI_Mq?qLNr`3UA3%C3rVY*sov>ujYX&y-+m zTqHk@oY73KBRb=uhBr{;zu^-3j`~LXfh!%$>dzS59Ft=e+bt)>E__|z8x?Ai+&BsL zQ4#n=ZKK>~L&WMBH^2M(c6WmQLev0Ifk_?gti!83Jhc~c0KUh2D`1|X96<cXe$Ugv zi*S}NLmZO%C_8osf@3#2`;p^1KOFXBwm)^%zk#!oIzGs+YDV_z9Jjt(e@`~o)_Q_^ zL!^^~IiPZGk%nhe-9h=Xwcs6UwG5tN^%3k&kMaR0Ww!rJ5Bi+e9FsVSE_73&U3Kco zbyY>pZmxVQa>~;1ESu8XqERMM%WdBvK!1OR?{JDU|KpC;F7@L3H_f*tqgQGA2xqZ* zRCRQHMDACo7FB@O<y-8PsJFjVI(8~q6|X|wk6RXqI6>eql^+$7!}BA{Ar<tpEO2+( zapOAOrpB&zhOVE@us+eEO$Y9si|X}`{`N5l-M|06sbHu2!>i>#w7@O&#IWimP9nJ? z$MVOg4e&|C*%oDkW5Xu~0r>H61?yQ7<!01oM~}J+iW~=>Ab9yU<LyLarQ_0HrzQDo z)HjM1Z=XcGL{9Y(&AlMW{E`Yt`+~0L=~UwI-Ox)-P)<7^s^83rW-;E78^xwH^UB28 zwSSkYYYet3vc@Qo7_*cRDLCd4cy))7&;d80E;GB1x%mc#KFRDu3P+BDklIe*FZJg{ zoIjOi&_{9&wY&%131&q-B~fW<0@uEyaLA6uLfJ7X?x2(eZ4-s7xuIncZ6r!8y;k-K z;5)v{--)%KCldgC;qQbY0?TnsTo4FZ66B}y>Cw?6S+|-qkWrqyMKSp=&f(*x=v<)P z$C!1^nzQ~-R)%Y2RX%^*(2J?s-P{f7Rx`;@a8fgc(tz$6S%=?hL0*~j?|_hjibepi zafu4wYh(Jdud2<b&#~0>+JBnR=7x9cT6i<dZzFsg)SM9IaK!j4WWo|Ys`?_cd<0!{ z#_KsJ7e;rR)DC9t40(uJv+#DOa{_HkyPbHfe>Ko(H*8z<r<;{aKN#&38Ps@C@i$C0 z{LDXGL|XloUjVx*HXX5}`+Pj!1Eo-4^AUG_-#EnPPdN(zR-B-Uht_>Kseg^|5V7^D z5APUe6ybBCgH{luWd+@4MUsDSn7$&Z1;<e^A1}_#CVEuHlgm0a==1mZxG5%YevFv4 zduh^9I)Ap#9lgvR<g8r~?ii+muHY|u`Z70cbv1&7fn;teowmn1ppU|CGp{S=xG@@Q z-`^e$yA^cR#TbO8+t%42A3m6>+&6-vp-JLXcUk33u)*n1)Q>Rs!W?mDFNYAZq}st( z3a#g{2NfJ6>O2V?WeD{*;WbyDnNP#XB+(6hs+jdYagwM3Ylm;~s)1BJuU<<V1PU;t z+W^#|=_2Yl6FE8AM5&9<Mnv=!JHhACk)Q>;i#2zOF*xKxe8hT&nj-!a^-t);&2qmh z9|!GTtPc6wm0C)UzNR4&)(*W-If^_tKK@YSNW|2vwCJxXpv!_Wp=w=IKTioJXkXeh zXOU`pX}=j7jharEh@OVP5SvBr)#9iIDP}G!OtF*sLDcJ8G!bk5>3X2IzkS?o*hct1 zzk8R>=EA{q0nrhM@3-S<5M8P=^h_{~KlJbg1uy*yZcE&1;Y~yi=g|Btd<S$2t|izI zI(Uv{iW4!0K>s5x*d^?1(jf1XSVC}4yls_|q~-j5;Qdiwl_aCD#%tfRaJd;uk2Y#H zRJ;}A-)tW#Sz0LyKsnvL`74n*e6grkxgASLiDE-tO@l4;l6<-Upo|hv;e=|vmkg<) z?KQBXH1B-<!T$nC74eHEN1!wm!$Ho=ia^4;6ge~oRC@{2TuuE(PK<LC)Sq}mN>YNb zZ4Mt9kQ0y=R(<KtC}SGO5!xbS2Qxi|@aCw#ku=gxfw_sY+24wuD%Z}KlIQC~4kZ|( z3NlH_EA2FKZ>6$=l-PY^W(C@T@$e;K{5y)~aZ8Vhm@U2HyzWTy%I+Z^t?Ij8i#~<3 zS4w<Qn|4Mh$^Hp9X@1#N+i_MOs8<weL}|hU*H9$BMB-dQYf7e``liKRot|DE&ulgv z3>%cR9VZ)mvs9*_`%(lCORqXpc``&daDP8OS|ro)c?~4l+0+w4d4$vWqdUqb&4RCC zh?9>1^~uRr#aDe$iNg_A!~XOva$iN;$2bj$WG?J}jrHK$TndR^j$$tb(#USI9u2m2 zWes*5`>>SNjYMk)Y=iEEU-jh|Z5B;L1{T<sO<6iplF6(3WH_i>npjRdX0&b0<qkU> zvfu>IpBqBZ3K~^2yNeN;C3MaC{yz-SjivQ-!QR@IU*cG=F^JW>o`W}EUR%6l@QxBg zUw`6jmVPOd$8roYo;gV%D-!2l;U9^)l;ck+OlBQ?bB2=GY>nb25{=V#wC@6`Vh-Ld zBz_UTR5m{=qK|}Yk2NK9%2<spcf?+1mAjGR9m!0EU(TGwG6r=fFFb-xx_@_n^_GBC zL?rphaQ`wX`?j6&r1-78HQ*N#WzAkut1Q3!CJv;!3+B-$^G4v1VMmg#rs*C`JnO;h zl~ihuR_H}ej-Z+@T#e1VG#+X4bZn5iEA2L{ie93neB$#3fK)rb9Wfjmui+aZWB&DI zlQiEOowPC%<Lv0sWA$&9WEL-{6H+@Pu3cZvqU3@8Yew6>s&~W5RQlQsI34sDX0x*1 zNOj92z3loP5Q=?DlYDKeI6#x-qR;Pms9AVFkYsBU!U6?H1n~KJY71e0424;~ym>2u z?FO9~95$o`Vm=3scidSFbh<ejPk98h@~6+B51k>Hd8w>BfqF59%o}4>{>X4=E^@>y zF4E>hX@~e36Q2wCdqx>m#J#aFCfpvI-|GbElXtwITWKS%LC$md(_Ph^nEXGmgjoTK z#GWUwWoJ<TG08w!?2hc^;R36Fj<nu)A#;0#*rTSCAa4I%q0B%eO{RxotXmPh65)A4 zgo>GIs}D&-w#2QO8byR8F^8*rE`zH5c5<b8zIOau+P~D}4scx`#{KB<S$+(PExnib zl9Lo^ovp$qrKgjn=4}$!>S<;$(EnV+RuSNE#S>n3scDmM93U4@EmPGf$Cc#8_D<Y2 zp!DP9c2uCart#BX^7se$69f!seYwsOS_J-@IWja{iJn6SU7nm1zwmO3;S>De)c~FD z*i7sb6*M|>VlPjch+nQY&6g|;(9~^jz<r_EmvX&eInIO14}mbte;<AKd5j4!A8i3j zrs|{#f!?>m>6AB1oIXF4Z10EGAoWulFap~bR7Zdr`04na7yU$7UY`c=n4fO`-Nt+B zXWBU!G_Ycc8*u3MY!_Il*jb&i?zS?`vo1%l?!S}s2}T0wK>WsMJ<49bWiUrO<sqXs zc=^*PzbnlH+)NH7|C9N09!_Wy|AQd4*s3n`*6QnQ_bON&^D(is-TAwn`=Z0yY|ofX zGNv=Oqi4wpiHH$!iL}dsFYcX_!T)&yz`2R-x0t=P9-rX<n_7W={m?C-0YiK$E1i?W zh68Osc%M8oREH$(>k-iO+Ms(0SW?Q}6Q;7)7f=G?%mSvKMi&vwH2hGQv|opqFiR~i zoT5US&dH~#c{ox#36ig+HI54wQm->~*`SXWlX}ZU>sZ=}J+;YUAKp{Y|1ctui%o3& zGTI~PM%xVN1VnSXkCjR#_C*|SR?T$ndwt`S=Q6eoBcoVWA>mA~&lJZUcj{}RKcr%F zs{wX@#!bt}J{CPI@!J&td@9ilbb2F;yNuYNt&W>-1T9?p7?jD=F6alSo9)`#TNXT^ zj}dQ*U?1sGQk2=bMTqZX`FOeckb*4rK4!taoGm!^9`)_H2$g`Ii>}NGNpyg@Wc>Qf z69ZSp21pL+i=Aew)n`G)jR$;D9cWk9_C0iH7^SEmkZ3>YQiHCY0UC-P=uq5hI$7gQ zy?GCkb$+(e)L+*g-404F1K4yMK%f<Unb(aNX9LwX1B^vf)k*n689oAHr1EV}nmEiu zO<=_ZmCyT?c!sfyu6)(C1W09I*bzSxj5yc+x>-8FexL5L*vpRpRrIvrF;iXQH}K2d z;X~Yhbfrn#i|nZ(kphRrNj$Fn(D;?#rN+!{t3INCJuyuzLIeg~eBhE}g$B5Js(Xfr zL-a}L>1K;&&V*97Gkci#HS%IeWKEFxG_hq`aC07?>~>_Po3>n}3AkS_-Z7QiRUR2D zZK7bdG$yDX5%HTo=H>(Av9?*wF*1o<vu8cQtxQWTF+34f_4u^HUH;l|)ur+5WeEWL zk2tIA;%h03ry{dcG(u&gYZjH1pcez*HjkpJT)|1ma2ZnZwdkRh-=95Dti`V#>3E;Z zRAinm<tKunjzj&Z!YM(wRAhdJyy5#VO6-ABXJoHQQjHY8e+R049#r3c|J#{cR|~}O z^k}EGNyDw&HL^_*ZA=0N3Nw*GrgK%dTo~S(VW5+uVwJtvCTuyo^9@;*C9K>8uKl3> zO}QS9XFLqZYH^_*zKa+i8Ax`*w#VCY*_Z-*TDKA+dKY23A2}QnWa`Qj5$IGBk7N;P zj#Uvm>%fqQSFhv8>bC0tsL*8s*-40DE3mn#gX=P#g6S$L0nNd^xx`gNy+$t|1(ZB7 z)0#Qab5^lO;%|0nhRW28={ADfk(nF=%8&Y<RL|#8^hdK!2zYKc{M@-af8Oo<ptt$Z zy+FoV4MPl{ST4_TMQDiG?76$)2`6eoM}H`DyZvP?H|Tz28u96ml9eu|hE6IvH_~=l zKI+-=QpSl+z7A?WAt0$KDX~oEZMLDDeQX-WQlP8}r7F@~wHsu5zs`vAL3=cwXT#~3 zRxT%|FuvK=J+4XlmJW`r{>`7pzmQ?2$g2GptHP<2ZJw(u+tAai<a+IZB)@YKQGf}K z_%wcK{#hEgxN8jq#+&buDz_-lR<lgizIjzK678viCrPm>>w?G+y_ws%Q;M`D?{5aF ze}u#k&{rW-;1!sP8r8-@WHxrxW-1?OQ?jr@0u{YFDN<fA5zzK-bdRFl6f-H3)p3#M zQ@xb_lJT4uAA`)G_&W;vPIAW2q*!0_hw|a#(Oi3?{m^yPwud-w4cEyr=BQD>TG5KC zlXd24MLA;&xTmG{4H?>5vI6;>+%UU=#6{~`bSidRwjO4i8(sd>DA2}N<s!_-TbtB0 zf^%GgU1*7|dUNmdLig%YrTCU+C{*uQ#zKnhKa;TlAEnJ&Uj6G{rzP3r2iEaC>k5A} zw)UZrDld@-?!{uSMFbCXO-=A00YNNINP89se3S~=Z8&|K1*zSg?e{~^c_!N4;|Z4H z!|-h>BVZ9L{PYWA2<D=(8w!tw5WUe^#&t)JDG*bYSVZnC+soZ?u&Q!t*mwuAcJrs$ z7~U|0L78m?5PIj&dn7{{^m7z#*`_}KFMeFII&P3iSHjC~P=7Y+j?JscX&+cZtbm+| zpG-)8Wk#PIv<cGEEssT_0gZfpM^%J=z~!BR{U!BBTOB<v$6>!{wFol<53gA1eSdp{ zTF<cLD``0c0cnaP)nUo~gMUe30SXK4w95Nt4sXahS60cxGL!Qq7L%%8<UW0USgORK zqOwP=qD(@bq+v?2w4Ed*D=~18_HQ9w;bhF1;#U&rVt#<p?wK-GL8?r`SNM4|w<&n^ zz+_w>FMUk|z=*+j)zpLp#AXjv9K@E=0A1!V`&+;2hvoc0I5O8FW@W3l@MN<Vt`I~x z8T5sKpO$9JNN<jFqea0u!tsQ-5&7bv+TxT1aWI{a49{-^dPKUK#!m}f4!xiFBto6` zenWG%Tc(qTS(yX)Io3ei02xX=noAaz<WEFgGfA3#PLwsOCW_wsq%7@%+EEo7O}TjE zTV+V+zmCgPK7Qu;NA_>Un2`EP;TL8p93vMKk`2E5hZI&>{}D4{9Zb3v6un*U@S;xy zTBV<~O^i2ee^{g(6SXi$yi(!t43RlqD%)Dve{{&$5<joox*n5ha61r!st5|?F~}HO zJ9Mh1)_)P`cOj`44$v0P9QgH31ope@oJKyTw224r3A3N7I-s6Kwg=uvc8&X&zQ+t= z``sfflF%ZPE}fzpIhfBD=PZ#NUW7f(VZv4p>tT7!Xk{=4X5w%0cx9-z?5-^p^NBHO z=d7ciCO<5A2lScTte?(smUHjh&=sic{rcc*SVlkDnJ){}^a#)YoCFTs9g8;>Y4j>G zv=SVe)(IE-z^44f`n7K&!2i2ng(MM3kT&E}1?mB1IP4}Fw$w`UDKWUUXc8T>y5PEx zZ>D}De4X0$JwrluJoGy=VlyR}k@qv5k8JaNiU`hy)bVt5)S#n=3lxIhJLpU-$Vd}w zQDf=UCl_0<o8@}M3^8uGq{oGZ6w|9NN=jbF4#y{hr2nYj6c%{$Vn?AuQ(OjV64bpQ zY5Le^ATUva$G{ihRaOZ8LC)K|?!^n&hk*huGH2Q>fE+f0U2-Kp!BmiEoK=1Kfw=y9 zt!Y(_ZaZ#Ja+u^^+V)5HZIT=OskX?^B!9d#J(+~||53jy5Df!V303#s(fR?(-r7Fw z04=5%Fy!nnmw2qArc8yCXH|Rchu%s^CA2aH4&G|Zn|G6?_fFc>Ejv{Z?wbiLmo0{( zvMW>*?N)2ReADc#EfN0NFv?v~x%(R2u=|r*e}^YZ&NQT@wk|lcNx=9yV))}JOzDC@ ze!<O8QvLdnsT+;o=Z_1mR|O26oD4?2cqY{Axc4pmKY%i;=q~Sb=K|xXvEXl0O2BX+ zBRr79tnr3=2ofod1uux)CF~~s^i5{v{31yBru7Ct&gj$BI4{9ndC%Q;R{2d(&`W{s z|KXFGcD4#vWObMJVyM0Bo_yd>Nhwtk3S<D7F&-b1D}LeJheSX9KXW3rW>_)1wqR z`%M3G!Yd!7Ao%adJq02g671&}I80y01&cSoxo}8<^C=q!85dLbK~9pi0!szUvbB`z zX+gxFS<*g!5A_%^_QL<AGbo^!kY%;Kr$~ted|Qh*Jcl5;Fc94me4M_K`I~?`rUhoI zGkWEMTjE|C1lq=thhA9xbtn<J4ON|N5_G%&`l0l$&`N-mr0=kFpDxdaZ`HJw^pQSf zhy^vEE{UU>rgM4dxNA%cyr0XNobgqTW<0ay$NH8XRw8`u`n0zh={&~;Or7d#gWV9o zr~%9G7Qz-aWB2yY3bWbH;Oc}&JL>>3oz1mynCiEv@!4(`?ewj0(oX?UOy878tjEb< zrJh(DAu2UYqc~GZH3@NA!b3VWr0A}RwMuUy1A2yhQuwo~d0F{E;=wqb=sEWB@F-)k zMac*_<*|5>^qJa<UGOCKRTN}Xg_Nt2*9F$etbSLlo0$E`#FJ-#29OJR_p1XLJk!UJ zBp7gy`e$6Kz*lk9AjA(aPfd0^Guf08Yp-{P$~7AxTW}cT+=tl}ys3%R6+)GH2dD4% z^R7X9Rhq8Br2Eeu(h45tSa*nsdp84K{?KCbT&q8_DHcysl|)tKs)l&@n_t+xR929H zc7@?|WBK@^;SwI<Ac?tQ1u||{X^)nKf=0*y`pgs-t?IXF#cG10p+}jcUS>swEKEax zaa!H42~~B}*zJYBPQ7xjWv&_qG5GQCwu_|ksIk8ZaOFvII#?KCoy=BzgipT|I_%Kf zYQ^6A_6GlVD1X4>ru$TRyP>qbz)c*rUjcHK8A9%Y@CdA+KmRiTFC_g43HNcmWVefs zmVG0Q)PW2ii5IjD!s(}0@!(QtdNK@1jD8Q#b3aw5`Q0Tirz#Vg`fYGt7We*p0>-Q- zW;o{|Ao-|(=cCyr_o5JKYO!>iMZXraowae}lw#^P;XtH0s9X}`s0{db&+X7-9%Af3 zf2zPK`==weo$IHoaT`!Z#*FNZRH}g#C!<qdTdwNnT9_w?lWC22Ga5`H%Z}$O-CA+L z?s>`*S0xusf@^6Fol9@)|Hy8=aaCBODtf7G;~C4nIMZ0M#KJ9G^(*dx*r-}k(Xg6E zu(QDV##SZOLCEihdGa^S^mr}IwAI$^r_t+(p-?SiC@aR>*hjnm<g}FNI8k_akx$Kk znt0Ureqm8;2Rj%0J(8Hpi9U#&I#f7(OQ{rma@;i0g`*s=s@@(&3mie0J@8r*p{xo% zISk)emLNA_(q_?eCqK~?;aM02ti^$Q9>l-EeGtR(ZFDg#kst#3G??FL{6DJRfxD8f z3m1)@j%^zq+qP|VY-`81JGRxaZQJVDHafZc{m#APj`I_$YRy%1KAN#Mc>C)iU{=(A z_10U9$E^U9{)FF?87Vc)?$b3?aaMVSjCzq%l|d<zwkyfj%c}@yRX6KyGHDh03luF+ zeDah=Vq&p-s%3Ea1~gi<@JE{GQC7xxE#shBF}K##0;(1F@Knq4jWAX^Uj|%z!w^9j zBLS_p|8PAq#1KoFv6ow(jh`1>)|kc{tO%0q+Qd7&a>eI}DvRpy*?ylVaF4GadkqLz z1Pi#aH`qbsAz~9BorMG%j?@M0Amh~08&0CZ3Zfw(J0>Z~()u&c-+9ZhUCF8mB|{=` z($~qs)NxhMyoiGeHs_ruUUkGLOLgB9<6HeP&Qn=#mJ6gK{dix84Wao0EC~Ip%99Qk zNKbKx9o(rIJ}iY-y?$+v)W&=v+n!aNni*9MZeJhI;q_3s^QC?Z%Tl0tUUyk@?Bn3+ zZ*OnENS{nraI)nVY=4-laOlSQ5WW<){hu*5nk@g$+P$_TDl^fy!fh4sOScPm5>s)o z@RExkl4XA~U9~rdae7wm*{7ma0t={lc`Cn@Wp-gNs(*M6%--Z4QyHj&v`6tzed8%@ zGB@-na>24d^FXKhN-n?h@D{X6q%7~nc4Z_G#QLar`FE#@V_Jbo_J0`ScUNNhn19VT znN%(kkBg3Q#^B@wK49qkoCtyj_JuV<7hZI}S&Hcu`xkVjn#c;Itvv;DI!I^1>QUVn z%TmnJCtmF(vA=n6tk~CEL{JRt1W{b)l@h(L{d~9DiSYohC;y%x)e%&X!B@oHz=H6y zt5tu;n`mpp4mJZRVrmr~0E?;ud0Fw_KRf!yPEFFVsYIgN(i}C_;>;&a)Ex?wNvOWM zJo#HRy<=SI$VUI;hvV500sk*Qyw#Q23DaY3m9;CZ+C8)bQxV#z#^No#WxFrbxenjB zRKCNv+G0RJ#ni5uQGJ*qOX5}|BAWWoEd0psHyBDLR0~&-;c~FcW%r#Kw`#j4YDM@F zqX($bA+AcDq3J~m&c2<n{N2t+dCsR<a32~V*Ht$&q{Yx?mJN;Ut|CMrZZfT`BvYP{ z*|_f_#?y<ZNnR&`p6=!D1r42i2qDM}li9zNzgpAtD99I-%GVhs@3Xj7jqzsT#hc?y zULj7Qoi)9*EYVZ0y_}hw-!K=~H8|Plc`eZw%0_3X!=DFeZA28SlAunX9HdLR0{SB! zYoPBwye_vVLt%mcn*gB;GUBtA>KFmKj3G@?^l#WZz|}jaZhY;%jY?74smo@)gqv=4 z0~5X2^F>Bq`v&d@!xXBtjDNFZ&5uW5#%}jMu7!L4+Ih*<&V7Yp7Upe7Sn1?J*<*Ur ziciolGLM}YiTgJj6;r&?3%80@YE##?+-@G}2`+F0XC<w-3;zhFxNeQl&l4HusMNtH za!{;9tUol`#mXVAf1%#w9CHAt=t?0g$=bsQJ7eXHKSP35es!%|mT<41Ii$e{`uZ#) z*|GBcRCu^k@kTLJyk@UEkWD>%R+Vz7E_;nbP)&XI$4xRQ9*0*fjD6IBfZcAE&JNwz z99kKe%k!+T$l@<Wj)3@(E@|2bY490t&0c_u5=w^EevgD&9*w~WE~GX@aWW+A;*vHP z!V0T2B;RO5;g?sem)=$M{%Z`OE}S4@BSOkv$#hgeD3(AA@LnRYde^^81+B5*qKjE| zkTTVUY=Y&NxdEzb!^iRH+NC=g0{+O(85Dg=lr?s}HCyjpH-nAA>s82M&Qul;ROK|b z{S|G16Su0~avvvhQSE`4rVJAnvolBa4xK!KuSmXD0cUFE3ZZi$S+Lc;`DlWftr-|g zNd*X7;j-1!$=*A>I44gTjzU_L@);8LHTEh=xj(UDmphi<zKx3<J-&V-L?I?C>tzs5 zy~r!b=Va`(I_$C`$;s<z(`tSJr<4~~HBF5c0)5Ld<J>HY=(t_@XnvRvmMtLGyKU0z zNCb3bHF1JXC%m?xl9Dz7r9#2B%bc55{;<=V8no{nlO|}mG2ZX5wD93_s-nr<lfGc| ziqcGhXK;()og1tv9^m{ODIEj7IRwS`1acRo#3R4FS7ed&SJZE5xhthZo#GqV&MC*s zsY-I$tS)omw4d-Z9t9XMTLG7|ei6GupO&~AU<Oiy<qTqCHXUHGM-IzI=QKJ#j5Tn- zTXxL7+bB#pSZth~42(mX!*l0`P-)QDn+#n>)w_xR<GuqQmEn553^J*tBOhsKV{=2( z549WNzjo5`4R?k<S)mMb%;q-Neo-t$f_}58pu`TdL>9yicPDyZIAfGD1_=E|Mrd#L zr=lx}>D0|hg_7WfkDxaFdv9`V5`52s(~&yPC(U{gDW(LH8o8fD(kF60zEXCyy~wQo zNzeZcdS`RYU|1DRTO{{X1PfQuX|do!w(e=7_CuKFGqsnAlU$GXxjJ$6rD~${sA2&a zVIuSEjvZx8yk*4TYMg-`Sp#!t>F9`&8hOs=JQwa?cjs_D5Yw>RFJtS@<iFTYErXUV zY4KI3k_Qw^%vA7xZFudT*x6@JQ7bvfCR+u`nJ6BI8D{<(5coVFZxIV9hBYt}$)9TZ zu>N!oF)GdMTuAa3lyLjwOft3X=3lVy`d5KP`xm0l4Tp!lZHx2$){>l}gRyguUdE2f zX%;S#^WthDh|*$wWZ_w`kq$xN9tNBz{X>zY-sqE}aW8aL-2dXR=K5hyNepH7=_(wG zRva8Cecyu`(lf7^>zplLQxbg>|0-})+O*(<!&K_vPF7rEv7kU0mkji{FyFW%(8p-; z;8ZEKu88Fe2`+KZFBdomM^#LdKFKZN3jSHfQ#SqO`J0h1oD+_W6aTLkDUU#QnDqZo zs&9n9Bp5;NY^1XjQGsuD;_Qx&7Z2@Etk}Q)`@Zb<NgyBh+tpm=uk+iwy1Lrgvq$m? zAKV6g0r^4fMI1mTwJ#MEWY&jig^W%{J@3yYCPIQoDM~4>i*CGuE)KRN2nZdF|1<C- z45Q^UoI&+?5?Rz&23Z(294oMMbG_T|X6CZX;$8g<0LWO^UtHv0TwL5<)X(8o)mML; zarmWv#OdEVHKaYItK#-KsgW2Nt(sx--7>&mP<?NPF-CXxhRpbT0kxvl21>SjCE%K* zH^HYFzjAkB8A%xx6w4ADc}21u<le%moulZpgX?gZ>kox#O+?xu!jSg-sl-)Wa*ST2 zsxnGqZRXj5P-1Mz=HFoHHa{*%VlTe(dN8PZv>m@2dEUP4dRK|-<4_~{1z9NinP2aW z(Z{Q!6@SyPGf3iDYK9+zhIR@pP<^6jql$^n;7>=#fYosLT>hM;ydyg@=EfvZH+&8O zvf#PS+w671^cm&Fnomr61=9_~5xtdxKv>bfpp3%c$9uQ#QajNp#o;s=R}VsVFcFEH zY0YVyYT<G&Ee{}gc}a{Uq06_AXeedNF#@J%MlH%-($F#?lLjb@R%Y$-4|DL6zui~; zPRhWM?2a9h_4C(6ekcS5iM#`P51es9I+7~=4~ozKK@_aoY>t2GB<WX~uh$$+Na)zx zUaR3{l|U=fx35K(3x$nnr0hrh5v*6##ypxC@D{8&D0BUjtigs77}1ALicH>vp2IXu zeC!a97UMd_V^=2G9!=kOWI7T61x+cZFI0E~q4ECc19ELhO?9FmyFKf1tQYZ$hl0%y zru0k7b=z~%Xd!$N*`ZTeP)ckxk%u3%>x-|797#esX6``JKkhJ#bCpUnB_y0!NYLb! zY~P}eXzhnDz8pcj1e+p;79xv4F#CX0QLohKPm_UT(0zG3Y}iJbM(-j-?7ic|bD5r@ zIV&(0`VN|73G^XTC(`E8X+RtELJX(kII(;IXuIRPTSj9<*RKE;Yp;@2YFI=B>Qc-K zk9ivi5$*cl&D(@la1eO>x8MpgJI<Bl=xJu?(9t_*E63Hke3oQv<88&y9UQjQRTGOs z=XI+B(PQluOqc}bWYVO^aw2fyOGM;OtRQY=OozKr^u#wJ0p7&=Iru9iMF?=nshn}d zbSya45fW6L8rA?;NH@@V3+|=uF>r7au(&|5(76;yDL*YM!$1bUJ7kG<Xk4-<nQiI0 zdJdG%3DLwp19R08b^KwwNR$bI2x~14qkv}9OSockVA|2JX-^N?6DGotSxVc?+UWu_ zISp`wA_Q!w)yaXPSD&Dmjyq!)^ZZ&cUIcUAkE|vGmm7lVPOJhdfNbx`mdxPnf=4D~ z?klv4Log@;s->gQjw&~2imistl<jnmZFO1fhJ=@e#lbT4Hr!_@`STC*KeQoUg{m}< zD(hZfZzqBzt+S_GtK*7I(J*2VrD&i%4Oa`F`5RZAifD)kd3}F!2q6pVOz5sI^juZ& zpd7J>OBhMsEyPZ-j+>bNVcQyV&Lh(O0_4L8)j@IZ_H3dfNTp4-y+&H5Vgmzwo|>jX zbN4;*93;B=6Mpb&NMd4ejNSsz#vb%_fUVqE0LE-^x9N#gw`Xm4r`Tf!A(tC+DqXQu z>07F3@)~ZViyPccig5;HgwJi2&a{e^3v(8cN0tAlFk@nX>1cQMRdpQ{qWJd;A#r5? zUrn5W0T><}W$cR9EUKtNsT4x#_V$N1-bM1KYYpL)xCPBH{h9jkEo%@Vjx_(#67xE8 zlGVbkC`F5O2gYRpfpKc*;QXc5(RQMb^9AA{cHALtz7)Hd#$BRA^zw|%VgejEOaX+i zEP-M3T8f|vxFCw1QoZ^eWWetdp9sA!0XqsKHf^hvql%dT$n@fh!PL#q4T0xC9!^o0 zewDlXNiJloi<z@YH0UCTD9yHZt_sw~R#2pSID1UO-**%H9&zQ#6yg+u_QC?~Y<FY{ zNBH~k9lbG!|1b%o>VzczN^`!FT{j%#E{U~)XVhv}8R>(Luj#KOKGNl6K*52qGt8A~ zS%uyQO9V~|o^hN0)Xs2a@;Ku+XU*(3G}v9Yx1}$BdMb8z{#Wn-TXo*Lp$1dyGA27i zYY>M9=IzBdPa_BvzOzMqHze!+?<|mlc|m~T9L6f9lO%iwA3K~JV4v9VAo1c)kauHD z;I%9rh-<5fLT7+xV=?}j5eO#8SfL&(UY~Q^K;&_W_XA!!2SNb=#?PyA@Td`y(-Zff z&hvt<@G2(|f9^NBN;~U%n#2Q$))Ft}Xd`411hGGja0k?3cxP(fE#i3D7?$v552MjV zEIpapJ<vk5NYrTJOjI%go24*qo`Mxo6n!hcY%e%oTcd^SDQm)mxJN|IMP=k0t{y1h zC&T%;EAd4{@5h^G6KZuBR(@_I_}hrGv1Jh{zM(^jZVs#*2XPHtE_k5&tUk+OGYS^Z z1_U0>2Q6Cj2Wl#?;m;2ZM9~Qzf`G~L80Yr172y!G*hYwIv4H%gI11|XZ7+cP&HJ|0 zA38W|Qu63+uq71IbaaI)D8rpH4<u3xH|-VRfWI`rHV^3!ObS2O6q+&aH|n1Q;q}6Z z3lb(btRyzvolplgFeeWTP?z_LjuGu((bl|He5-3&%1Py)7s=&a<$hY50bwVf%o9TJ zL2i?;DyLE1C&>3%hMJgE@|uNiZaL`jUpSg`u+DW{F-M#GUhJ)V2%;bhKYk|)GBls; z7j9DYvaj$ZBwBZuFumZ=iL!nlR;8%ZRi?O&AFV2+ovf~`)H>+3IT|M?bZ1Ik`iP%n zfBGHZ?fzbM_dr@y*qF|i>(uXx2VM%KV9+EWI0z4|cX(0)Nx)S=$N5?#t2wLYs+oq% zWt#sYh3;Kc=SN#XB*$>*c3rZqb(!P65kq<lL*d;o9gBNm+yD?`CUYpneL)`8h0U#0 zi$43t9n!7H-Zgipy5V{>k#$@&{7K$Fp(LrQgKHRjPl#VRISMX^Z-WPC&tZf@`7RYu zeX4wFhhH}`K}9)wk}ssn1jLe3e848ad~@efp$8#(l!GbPHHUc$Wir)@mRoA;5n;~= zEQ)jbK@{6kONoT?L7Tdq?Ic=O*yLFIsOuB0Ra!tus%oVKXfPCGHceFDC2ZyC`k8Vq zjK_PMB~s<S{Fb5?E3W9AqKR5;B`!5d%_yv~$K}N~+O<f6mv*f<sqJoXo6xiQLCfK` zNG>%nnUysD+*wslacq$wwd8i+AI2`DBz>=#xW;LbP5y$A5Z3E~&BxQNFc4=etchoi z8)8_hK}ay043DCMuR$}ieq-cb*A^I~`x;J=#$u_#qx#wU_Tal4%m2}YC(+>tg>Mxu zM^@qSmMkb<yCT%0Z{qy0x$U&ulqSIc%-Hsz-N@JGoQxAA0Z#v|aIs@=KDqBr^2MyV zL(81JWN`kd!(gZb`jm67@pkxWU9_TQlTvlT`L*A(oNmBVU@$o^M-tgBF}DOmwX0UO zJc@&Psg^W$!CQcOMGA%zI7kX|cGO3_W}dKd>~Nt&)Emhuchg7%u<Sdt!<7<H`4`8u z8p(9G1IGNjk(m8o=%)eij&92R%`n{t0wL&gYu#PY*`QYZb%1?N8L_ZPT^yS245634 z)@~MdN?<9Q;Skueou}y{W0;2)KCGa)F$Ut7L}|^8auV>7o!pBz*dcpZ;_h)5-RjKA z3PQqLH*0O~5mv=n=xf{$3{8gB2+i~jhR?en^>&=kI&Dt>)WqGefsKVzC}Qd2xa|3H zfuV7x9UBScpl==JJs-v%RBt6<u{tAOm(wK}M^ADGDO7#N*-S?7D-*+8RPAr3PK4s} z9|{<eT*eS5|Be#EhN`ne2jw&t)+<&IQ`*Gv=yNz5I7%fN`~e-R{LVP50TrG{j}h^D zN3Jp}?X=O3Qw3YVFNdihcz@K)K)jK(##@auh|IKF=a-^RbYB5I6TuTgfLUV(wDf6> zHTnqT5REkr?O5p_YK83F3w<?J=BlG@Krv<q58fm7bGTn?tb{w-OnbjQaBF(%BFt6m zXLCg458oe>r6O9y6b{ZX<(^!Q{Vs`A+bNwHtV|Vw8I1XqXxGcCNL^)jZRAm{tD7z@ zTbap~URg5GCwp{4JXe!45u|pE<NeR}hsDXsYhxsZ@!i&lwfJAT!-avM+F2!1P`f`g z!;$CRIHHhux;k&PE(TwS+|zupWl|sIjpzvGvam|_?2JZ-<PiQ~xesJ=tDvaCa=YjM zMW#jxpNjVxYtt5P0C~(mgg1!vL$HTHVxOx@!?n&|X_V`}#N#I^mqVRSpdqx#<!_pK zPc%mHZQ`e)61YYl4pO{*gs+r*s@CK2jbLB87$kGej{0X|Ml<J2U5*0C$he6{*+riN zvp1^V0xia84X7BghrPpItC|)XmNFPvO5IkG?BOa`HO!?4<&yNG6inatPaKDob+c!- zUwHuHL?v@5LFS3PioT1aOU{D<SP$(?8Tj&$KoHLM{t}^`+Y?pvw^p^FV%`3y=^;fa zr90##gpJBqlCJw?vaMW2UCPKoDgOSkc+KDwjj+0ARt4FBN25nZ!zur8SJCqlg1?{6 zq*-EhpP6BSj5&{6#iy7BDc20&MrN4rKe>ArQ$3DINmtrbjp)i=#y~>!H?*P$CQ(dT zPnrk1Gc8Kkl53~ZCaUmwN$*Y+YYn6p5l?K`dc`T8HLQvP9d9d62Zz2w^9*!!-ruAy zq2nE5ev%@iaAAWQ6uvF5kpO+Hb&b+}NO30Besgw~y9!82@nS>;17iMSPyxOv_edZ^ z*u#tvMmtSagN{D%qWR!4gchb?wvAAUDlm|C`UeW=YZn+{GcDtB+ue|{d!e($w`iqH zfzp<t?0i);Z*J<yFsa&;oy*~Sv$1HCtmMT0=g6!O`EY2P>b4S=x(s7dj3|F+@njcI zSy7O~yJx2L1*7Cymr`k@7cs`#x(iqH5ZS0v$LogM82rF!h|(mn_*aS*?Zt{~#FJwP zj)zO)n+Qy5V@`?K!ClCiWYFayMt<-yNi5Ww`Qb?vGI^AekEI8QVGy}tHKKzpylC<v z7$CRe+X`?meD^h`%BG4O!GPn}Txx5NA!JZWupYwtnqw0y9haCZyxmF&=s|cz^8X&R z$q~!tzRG>v$5Qtyv8#NIlEoy4wzU@$Nw+8Tqx(MI`9v}6E8tqcR&dfiPC<zeCBJ=V zZE!F?T#a{BLQs2LR&=tGh8F_rARSShjm3__Sl(Q!{zXjDF&-JZ{1w(WM*y@-iSN_2 zg0XQ-JS|waD;rp4SJyJ?_jKJ4z%!|3igT4l7Xr6z20d7gpX2P|d|dDVlt)dCWkVF| zCDcC^%EdY(gv5-rV1(ScnSBeQ+j0!V4Q+cST(_yKDy}ZJ!0SNLDt;<Y2(qj5-v$x7 z_waxD{5-!Rb5gh1M3H&_j{7Hc81oSUu6?3Uz|e708p817FOPw9<Q{Yg(JnL;j4P)8 z^W;8G`u^fx@tpT)X5$^%n}hVF*WQE(J;rm5=UD2#6F5r~<nbk*u?7P!{Bn+Z!;RPh zv?v%OBi6{ZvEPJjk+6X0Vsg_K2F2FKXVp=J2JSM(cC$MP(@KQxLO@p{T{+d>TcXv- za461f6QahALJw^1Kq6z+2-;5ZvDr!lH-{Ok)Oj~;Pf~Kt0y-uS0-9Gd%X?RNm)5;R zn>u>(=Z6#AumiwWX#mybC5>tr2TEovpw`dV5=>}s9_+8#!)(TTf;F$~o6}oZz=3sn zM1ts42CfnlP6em0Z6;_gxfgU~0+Ezw+XxOg1OoC}0H|2j;}a_#O-K4ZYn$;7dg@jx zRzn5;UOa-MY%T@_8u_KyG`OJz)=p3|<{@FKI75`?^aT5va`ke<hRlYR7PpUyF%Z^x z@HhN-NF^xEVroHJPn1kM-*|^&ex&Kv#cL+*ayfXE>!LQi3ohLh0lY~iLO=}Hp06IY ze32S<lS*Q!Sw*G7YT<TWe;{muU4<TBgU#@KwUB@)Ku;g-rfonkl4!LH)~@YB{Y}|w zKsJzPg4-?HX<gbFxD@gq`8Y%z_@PW?ur1Pw{BXY07QZgagHP1}=q+LRme?_Q?f-is zBo1P)1#kaTIikUSkW0Sjnj~368dGT*Tpd`dL8q0A?XQMebaibJi?em3;!jBYPf1R; z#I+_}wyn^K6oPT?NdX7Jlx?ZO+uA`r?eos`A8c6S^hxrnDjy;_0(pL<!)qXc4>i0C zBPzz(78}IMJU&}XLh=~9KB;uzKa4`8w9n{NJxT2DPwo}RvXxyWB#!1c!y317xm(9C z1`HEfK|tnLVZ!#RJ-rnA#)#)i23*b_q`Op@l(>$_k<CVvVt;;29mFMKk?rcZ&(MN7 zBTlYVzW!aC$og*KNIpyRABe~}$Wi0Q%{^qD-EqL7(v8+-znTaXWEd+8gl1?tS$?@& z8gE;8wYE0ntqj2EuUE;;Y3JPKs(1eKZK(Yjqp`y)&LZIsyiEx<zp?jrrlJVnUe1pj zd3x%s&X{OZXK)Fujikw+uPlc@fCc!s4H+iHL)Z{KqC3&o?^JpHC2#UzVnb-5M2<J< z_@s3a-uwr_av-_dU#U{%34ayYy=wF}g%1W?g!1&^$KT1jvJROFt%Xay$vrNx{hD8= z@VI+eg2;hRDxX~hs}QaLQ%}j0xTw522-TuzHBioo7;)qZ7;KhWiL}4z?@B`BN2O87 z|7jD{`R|>{7Vb$!XoFytJ*I=W%&D*}&?`cbS}CNXF(TQnk7g5nD5f{{9%p?TnxvOb z`i@rc6Qd_r-VokabB-1uNgCw`EUdJ-Q_@6eBO=E!AQi$YnuSe>A?u&?-!z>kdY#P% zl{u6^$<lf|NUU%X(s~A3;gH$pFtG04KWPz*mq7MU|F972jrT%NMZp!nDplr3Ij~el zLq*@;_5C(x?jyf<lWqW4wx<Xn+HVZ~)QgE4XecDInnx1^$4rCTvm^3p8BnF}qV7Vq zK<;D8EwfNIf3bem=8o8Q<M4+AsbDf!5YI!P=DMXJ%Jg#BfVu}tjfi?^n$wxY`#Zj4 zpS(4CHEoLNaGQHIeNLC|S*<240EP0(k^j~-qYMPGQpXMF?l@h`wQtzB$)6LKZiZ<$ z{u^8l0zt%D^)rcDmWpKA&%)wVTzL60fO--s!0#-<vm-pWFDs_-)cbgz_<yAywDvNc zOs+5=LB(~+qXx^ju(B3;tI=zL<wnW*odR8YIlOV_uez&5f()^GZxMUY0eQ(X@b<=+ z)?#B98{|WAJh;-Skm{t0Gg4(buRawWxR3?JuZ6D~Ui%?ZCppA=J7O=}5*~2ZCC}wy zx@OiIH4%QFq?2OUmlX0p49RSMn9V_X((5N1;B}^Uo3<Phc~`bEpp+cZ)F~3DQ@*7H zHqj~AXiOA&)}r|8Nllk9)nO79XDgMK8BsjXcZy#O-GkG-K&%s!;^3H1q-NZ6%Y$nS zA;l0$Rv}Q7_Jfv47S@2Gz+Yj_>}90*501OogNgo0{XWL`t_eE(+0r&0jfjh#+;ST- z(&qg8801I<t)GRQPq#RCY@qU$@wc^Xp_c|;LNZ^6*9|7W?i8emqJ&G;{>Ptb@0R?^ zKyQ}x+9ld%9~aiMZfE}Pm(wDuH1%+jWC6XO3W;m+ZG=x}Tt(#mI-`nbT5C+e*5yT% zszV$iDjWp9nHcAI5s!Qz*<j)q_hWN`uhfIG)5(UL7iDM2V>s9S!snlo+^03lPS4TI z4||obKaKtMzZfY2W)S3&7~{emZJe|_f#K{!ltrsi^`O`V!_`Dobm%#W2%J(j!&5O^ zbU5jO*k7kWk2RRe#ey=HH*1s#R0#j}%aa|dx8LRA<}w=T$+1*?EkUAtGZ+%beHC_M zk7{z^ItM05V2h(nl5ozPz3Y5en80R`Cr5rhR|Js;!^dCQT>W3<KSy<HBr24_EVd3o zc1zVT_2<*5^Y6j4+=@HK-7o~5bSxFqVozE60xk_`d?dYC!|GVrhxQ`-O{|Xc*2WX1 z3y*Ar!7+C#3fjb!kD#e0N}p#v16=+RX1kVwLQKY_E+@IU{2iynIL<?o$?|8(dE~Rj z7$x=IX9e8x1!XEbeLB0)#-RfBZOO5^!nV!+soSSbD83AR`EQqizCQT_BxM{GXSlP5 z%5JqA3P3u+`PUNp89Z9cDw&GUr$@@+y&Shbu-{B?w7uBboCPjq?4FBiU(*EQglvDE zsyLecpUXa+2n6d6K84>*_xM83P8k@pS5eX|aZrA1L4XxVqT<WtQfG?&X3}!Zo@=x# zD|4Q@=!1|JFcaJjb*xQ(nWXEanO;SunTC8-+p*eKaKLU}LpsBg5HQJ>lmr1KEw1VA zbiuabZx5gpUcyK&5|hY8=e(%pX0Z_4{UD1#!G80ApbjI#22_Gs(xqDG(cjrE|Ebu2 zC>>SMNYJem-eoU-BK0##{o}EEhat+YVhyp<94DkB-xA9d8r~u@S5T1P9YN=0;#y$l zx{&8`LT4(rTKs)n#tl-?iCN{=zs={fK^Z#%)8yGO+lxv@A%1dyG#P5By^$Y6wM^T& z@Dkb#BF1E@y(a=YNsSU3x)B{hN4SoQvs&^OMZkC?u*6vSQgZy&IS^+xN{6ek`}#G( zF_2wW?3(<UgV^YcK4|VnX^q*jZ@|asICdbqK^Bqd%Exb-p5Ch=o6hj{FjLOPikEY3 zul+YEhFD7EI0{D}F(KhTM>jzA;RP3T+E+W9^y{y~c%@LbotcnVF2i(nRsLk^$jbfa z)PVEVR%EAx?4q4lhP5hiq_bzQEc=E|Ei+uXbFK5b;ONc0RmSMmL@(-%=<_6-i<~=g zksBpJ9<BjH6(`@s$NrOF9eAi)HqI@7>5y=|N!fb73MnlB&R&qkSsxmW6Ayy`1A4r$ zy5_SWh>ox&HQ-*pMslkF0bBnwsm|~+2Fr*B07_$2%dZ!^G$o&|HFO(1Fx$N#ytcGu z7uTs7jCH)D-efSN7M*|;WOE|n7ctaO%wx844jr^(jdD*VgX7saFVl$n-E2((Ww=Y4 zIdvt0VJM*t#Da#>K|!^(Ka25QKeEoWWa}N_s2M=f{vM!J%43fAF7(5R?$e`EnL^;0 z*Z`IY*-Pi}tM9*3DLBgyZ{|gmjNlb3IsO!|Lg++NOH(y9wV#ultSf0$&oQVdo+o%q zaal+=-N`}0l=zVC+0O-Q9gcQM4d;NuI#Ac$7u{2XRK5bLc!$q4hN(c8bNMx2$LU^l z*>L5Q?kM!JGN=fp_!Bp?J?Kc*%-<E@oQtkW>~d<f8q(F&hNWd#Uk+Wg6B#%gT+b>b z6`3kPrF(y7x<kMLd+X#@tVgcv<(*#9Gl0S<^p7k6C%f-{<j~h2ONnokz&nw@#3H*4 ztzLyvC!Cj^Ka{gwf#Ln%;)NDyQUYRm2Cv0<6Ub^~Zz9S&O8!gcKy=j|BG-RRe!RWC zpn}k~2i{got}aeUeWa-oNm-+ugnYg{hzl&pkY7b2X~<8E(X$U9N7VbqkctP-V!n<n z<0oJ7&FL#>%efG$&R7OBX3oQJ)v8K*582Sj_h@39fKYFg`O=+RvJne24Mq*=`)K|i zjHt{Y+l}>0b6Gl=@mFE|MEj!w^1meVxIt2s!pp!Vu;jA{_-#JvF71`V=d;+pE(w9h zrbVa#qrUF$Cs@k7lr@QHSBGK)0rrjj0{Hg8$S!I7D}gn!!*&jHN0f`8R7i9z2|dDJ z*N00>aV4U)j%wL~Kj=W*52e@DgTOS34Gh43a!R*9EDp`?H_l@zTey&c%8K?j{9%E$ zJes|tniUO}=_*m&9s{9xO%@2etMaWPv9jW^6{Xal0^IRWW`s&M%42bi_V6XE%UZqF zCh1wLRmr+&H$1)`SX>{SM?n;>LkEhWe)vuBqEa<Kc~Fx)7k-QN!d^>W7SRHF%SRl6 zn6`Mnp~x=H>SJJZ#|=++_A}(Gt$mL-GJ?HaM*(k0KoUy<r&g12rgUAN)A;vWvb3}F zOq)<cbr@KGZ+mU(GZkR_xEqFb%^Y2NHZ*N^=fao>Z}p5S=EQgeEgMRp4!$j;F!U<= zl*|8?@zO1<>XbB$2puqx*^gsX!s5bi!Q=pXeHn8zIZ-_1XkNwHzDIvdK)zB*+4Pjd zxwItS1#6yK#vIs{1boXXFG=26=Ox0R4HAc>|2M<>y38$B4w6=?r=O(^(8s?w!PjD( znb%3`4CbQ4-7epLYr@!?I3Z0^W%a`+eg`U(Z-w6;y^6X%v!K~E`iR{JIvomu_G#9% znX&CIWcrkx%XS+$Qh&3#qv@^>5XPS@!9*D=`(DB(H*<{}O}7(-MItf_P-I*AAyWL# zK58G+)Hf8WgPO21;~j)goh2Jn+Y%LBt{qLjCj(?y966(}n@nJdYcJ7y;f|z_xQ2?r ziYar&hutiX+6Db<iGlK434(ZUQw3KPjvqmEmAv=H+oi-^pz^DcFUD08!@>nrfI><; zBWqSTe5Av?Xksj3f##lgI)ON=)>7PSCRggxQ-ki&R=x2sP3j9V@ssx)Dod>zBqG0Z ztC%R9I{w{&lqYWKPDV*-mX@HdpHZrC*cgA@Lr<a(=~X~%e17_W{RBIN_G=q0S$RL1 zjJqSeWAfYueSOcoVetX>PvZ|W;VzP3WMNG!4F}4-Fvm&ifY3z2l90KaCNqkW$VR}_ zHX_6;9v_a?NS1nUNkQ>Id4OylTS|lYAv<`A@+2KX77A#!OYzP^5|U2Qa5c`6nGo^X zsc>|0=Or2rE#gprp+`qE_XQ@>28=ulV?}o@BHl#hJzK*2g_AJ~x9+64MJQ*{t(e>b zIk|4}R|+Z&f>2bcF+BHX0OX;5O13vM0}LmeFaSmpN_=6PqBn>9xuM0Ejy<02989N^ z5Sr$r%<3(d@g_xPxn#oq>G~M$<fbd7G}8!sIv<4#^$p+k7Zf%TqNkYz5r&_0vf{<7 zHo*%L>7G5R&yJ=thCedQC>JT%prp}SNRKXT(1ZZp<>D~S!j}ESBI7ht^zB=%F{c*g zKrX-vkN~xJRP8PK)*l;5J%-E*iwS?;oqq>X0oiE9LiKC$FcKP-SIIDZOY}bR*a6Av z*3s<sdEO`3to<`GFG3?S7H2%Mgu71_-+|1zh!4(WD|$83i<J-}I%Y3E#4uS8PU~w~ z5EIlK(B|0k6MZ=rf60~tz04c=9!j~rQj&b}bD}`n*7zAtaVtR?2e=t*yT8twU3N0T z&U)!%nCK7{mdkx>a(%|6iVgjrt`GAUod*ISl|&X%QxcGB$}}@NvOq?|>CwZEzfAsw znaW4&*Ls_S=gDjXR2zmBz)T97vur(@s(9iZ&dDdFi4MeS!%K(t^vz!;spUbDy<qN? zS+U_uFeth`N4Kh<&_tG)T9jBxg@T4Cfq4oBLtyGbs$WGe1?OeakW?yoZrbedi!mDP zbExK4SYizEZb)6*^Q3QO>`Gq?Jg@oLGNj|-!sH%!VZ)%Ot|5U}@jIQ14>Ufmy5+ln zuMr|i{yCMnwD|Swa@sYd+;r|gjA;x8LPYS#!{FN`rkA}(^6j||)OFw?R_LuVC6wj! zWm0}!{Kepp_Mh=qkJH|oU*$GXjh;JwHkk<Uv)xCoCeTL)>oYNjWb=}K{yH(g!xNDt z&q<<Jke8%gR$W(yA`T@jJTtD%!u!ziz(#K+G)d<E9YE)HWkNL2f;`X2xoMHJ8--Ea zXMo#ZzxE47V2GsdQ&XnyolD%E1-<u|MNsvq`M0>?eQt^qb0)7m^t;d}O@yUnnr)uQ zVx}Q^IjeDpgdHZ^G!%+z)^NfW+SQwCn^q(Kj5B&Tpvh~bicZl9(KjG4*3g5yAb+mC z%3#(5ND*1JAI+13xGDZkMMIQitN*h<fy6Cjq6p;r0NA78q=R8xwuw9%!yYgVw>dG( z0UE<69T~O%<N7LnIFU*0ygEl3ReqR@)e(~6@ICg{=cfH~kQIDWNSoQNNMErR{I~_j zHHbOpLWvmaQG9$-^A{7=#=aRAC|cvx;#B{nuGz(EImJfd(ttRH%Xb$15z>Q({OILA zeYL{5Q~bswnnJlv3~NHyZMCN0Ae*|J?Of1t;H?wO&{gg&nH+3^Tu3A(U<W{*UT_z^ zNgA~Hni9#()|N{0$X)FmtGZ<6{B9|JH&Rgpr$N<`@E%ee(#%dF3}QMrXHiMr24RPT zj862o%+QKM$-xFNziQ(ZiG=X+Y>j1r=3aCsGhpXFDq0cGN?q}Tnu7|=T1E!%f#sA7 zCtp^XTn$S;HVkIqx{<Fjy4H9ECAvd_^X+M50zmq`kPKk0B{19a^@%5L3~CV|=W1_} z8_uK5hFNPFN92XaS%xvP()@cpb3-Y<4NUUzZj@l~q8grUaA05~Qp!piNPouAA0Jm4 zU<se!G~s#n`5APliKt!#-r|}ipcqrJL&2nwRU@cox21;it$9D|O_sxX3ZzXOEnHcr zZC6ml^0L|>?Rf8nHklCa&uWn<Ntx84uo1=;U^m~qQ18#42dp6tTN=aRU0tAi>2cMe z(atlHI(EUt@D|*J{n&jY_~G@p2DTl^`a{$w(tUCY`H}`6dSom&1VQStf@wF^H4g24 z6Zj!MvFg9xD=?uvxXL}$T~w0<X>jq`*=KAnp3G9AA0mDU(|*Lun&*M18mm1kulAA@ z_LhK-k>bQ_BybEa4<BFF&xJa%nI<$iqsxSbTM8q&{c!);HMlSJN&`p8pJUWNl{%VF z?vP}itK`CI<AcUKF&W}AFt#H_y?X1u=_a4%sE?MLHDwq#)wB9rSg9Fl!R7n(<5Azh z_KOSthC3Fd<i;7&Tz!OI{-0LQD~Ub*w6Mj!gY~UMgq7k>6C2c6G)_B|#}Y=&7FxWE zS_);oN9+H^e2sBhKPG$xgzk-lfE#HAOx4gTdTlj<?~}Tt+--UMct!MR>zeqrwl_^f z-o|I4&AmPUdYa?h?xf2PMlgO=M#Sx>xyI86gEFl}2K)ko2t(qhOtd@y!)9JbJ+Nsi z4z#a&a>Y{Ckf0y1ZN&14Ac!N%rA0BRa;TI1F<%ahJl6gY;F<Npz~5%5X&QEUsk3zx z9@l4W06@><TC(bT#qyAOe2f!HVV)#$kZexn76IJM!b!6MFtgWf8O<_e?HwBFW`4IB zrp6uNB@MH8_87iyR4(L(V&A!H&(L}Mmh+*nr_6h#DjMoPN5-_3Cc}H3<Xx1!raRvj z6cGfuJ}qSj)-us`vCc)lzepa74Q}Yf9Cr+w!Fqp$to>Alzd5JUi<%KRkCesu<wig5 znjlkkFX~2`=FaKa@SG1HdRK5M!?_~RrMQ9#Bf)*g0J9yh|K?G=bFT;xt=GG(LBNjG zz<&nPwjhQO+9;@UEiIn8vTA4L^t3S*3zNz~JP9Pk4NPQYEH%*^w^7kBk0r*LcHrir z=o1p?5ZsNC{i0{oZs<MCoa?0c<<CpA>M)y^+5WT?Y@tct^2%BdBWB_+w0tJsZ{jIf zbU@|yM`~wIp8Q!foQo1j6QP2MlRoAI<olzmJv&K);Xdmjkyog;N!P17*$VSumJA9# zf{ni{qUH=jd;>EL3Wag86^Y-Lh>r3kOoMrs+BMfD*$Eo_x7-vg{*8DuXm9LWvmJlE zv9%i(>CI-FI;vD%M*rPS5d&U8Z+!5{ztmzSF4le_-q&)}{@U#r$zd_B+b?JYrUAJ- z2%CEDvBG?Y{B#Qd>zp?=;0E>Agsf%kVy`1ptuG5|b29M?gE&NLiK8Ywg41e1*;pA% zPt+qFtM|^VW7}t-m0isYmQ{WEk6dDKfnedOJGD#W*G@p91X*M8U7<urapLCm$x0Gv z|2gjE_;781Dnz&M1KZA0=>OCEMJ*AFB8n31uP3R!Dg?xDn_#KOBSw7mR#!MVj6BX% zZ8*@@PLN=%AqMDQjKp3@cZvTIO9|Z`Ix3X*<Hs6)zrI$cMh2!Wa;4$hoG3B4woA*0 za-pxJBow(hQfmLdEP$tK($_2=fg;gH;A+#3={hQCU}NO^gsd6`<0=xs{YWoiVfa^p z5YAGPvs9#Aox@vK7!K~I!2P5<!mUWhbYOu;*a}#2d=bo(98OeMK%x2;i9dF=iGn~F z4`)){J7M#LfbOckc2xynZ20c?TLxP@wVU4$wdeGv08uS-f6>{0<k<Ci<h9o4aZ2aY zhcG?!A_oHdLeFf`r{(wT|M21>2;zJ6OkP3vBxQdE2wBXV_tNJAv6XV}v&J5>WBi>z zYGKx}9v|UbgFP5X?J9isLSZdq*?y<2&D1yE)^4D0>34Nb)%2jFq59aUu1&g=lk8*A zhODEPBx~hwS^mxViAJZbdhFVR_m$5Dyjg6-4u>)TUzY5#xaeqj)?6!9knOC_5(mUt zwSRV5yj#S_f4uI68Ee#pRc_SpQnOjekp@J<jYV?*+<UFsb&wI;)2+6i$Bs;^Xmmc6 zwDP-tBv-6d#Q&m2rlzeIR5?1^z73B0o9@QvR~+$<fKT!42Zj|a4j~Z$vS~~5k3KV` zRrB<;5F+(o4Ope`;)gYm9bJ&j&~+{}n8y|LUoxB<F`9oYv@(4R=5m{1oeun&grx9z z;YJunvca3>b|qQ&FE>0<D9@>|!T&3z7>8%)DUDn^eL}$HJ|hchkEpCGj1>0<Z8`9d z=+Zb@m+W%nZ_Sqxzo}eW_v|t949w6^Jg?|I=wRT_!TcD}rhoc03dMW#{KtzgugJN5 zsu}1}@yU-coA{zCg_C{%=82wV2B-J8r#7K;<E;?)kw&+cP0<boKn%7n*bE+imVaj> zgx`uKcbZ>jbXSDgVu~DEAW1~G#I*o~h3RSS=M1YIG7%$6S2=QN)J^w9DkyX+IMghd z&jh-G96!-F#6%Xo{wiNPo^+A7Y%M4IA>ct@k?&9T3u;{%QlQkOi(Bo>=wyd^$p_ML zwIrZDZ%AOKp2*8>2!agE2YHQRZ&{N!;nNs3kUs+(ExK!>HBszIH)!MQx7nT4I?M(v z!l}?D_&8Cs*^5-@8kJ)whlGoL&w1i|wuGr$ZBSz;*pnPy*$y=OpWx@AtfU18g@Bn4 ztBOlOhSYy$L}E6Qv>yq+1i&>0(gF3%FgD9-PekM`arv|^O-5v&30}oD`|^kFR-^2o zZgG3iVMNIA|A#?o@g$r@jv?x>7jbt9>=zlggAuYIo3AZQNGJQpnM4O=TeU&w8=?9z zmsO*b$l`f`sy0+Uc#(Vcj2`|UfuefZGC}r37jg%(0Y9WK&D<Va<PToD|F$-xC{Gjr z194u5P#Pm0XGFmi4}=zu;SUb#0M4%nRa3;bPde@+L+*w>>Wy-_ifYSqOPVe9L(X5n zWI1J;FOL_dHe%D643?C1fw;{!@Q!BUd!+T0DD%%hK<nJ&&g}$_P0xQ;W&e7zV5r6d znL{4ZzVyzb5G>NUOJ`RE9WGh2NKyu5EJqq#>5$Xoiw!7OwH4u{o&#I-$0%*J1aMKW z40{wP&g?7Ke_>v4OT67q=R8ZCo&+mfiyZE&Y<U2sV2E(}Z|bj;;)d@P)<}ZtXFp9^ zqN!;~JOA#F%w9?9hLb;)a8*C%DV6&v`_l<h&3fHqd6yK);hk@`jiV&s3iN+|qTITu zSoPDy=*PnN>u=ItLN)r~{>h)ne46~aNze(p+apJZFm!gV;w#<+RPoRvb=+`tu-+(i zFiP0n;k>m}t;CP9poBqCtRN}ovqMkDi_jt6kKnsgn5;j*fgI)ug8&7xW2zsk{6jUD zS!l)E#h-^kG>i*jP5`MS=&?(E-}4PRK(`BC#mHoXZl;F6Xx8xVZzgtoJ^zEx8chRZ z=}k+ZR*g(a&EzKc8hoN|^;Pu#-h~Gs0_}1>I^at7tgIu5xs1k&g0hAcC=}F`+T=z+ z42mpN40yyX9adW5lMXoyMm(R<!|Fd=ZcV(@@v5-V$112j^KQ5h1@I0jh4&!ohge^> zBe>GvyAetOn4a`igWFmv?Jh^er?y=xczse}*tq>wXg_#z{kfz$XaT8y()a02FnNT* ziFnKLuW4i#)*Z|uIWc)89>X%u2SV=|jdq7SZ*vX^{;r=0a-hI;vv#sxz(xnY8aSUw z?gA|Xb*C=b?76fYHdKt_Pd&;M(PI4?<gu~3?Egp#=jM74n5IzGB!u%enCgM7RWVce z{q+E_dET?$?$Iu$oHh)0$0YahMFv(g+yhGJSB_zjg!?*tRiPtE!HMK9ZfRc7PY}rT zV_U4KBv7bF$ptfcp>3&2)>R9!ec7XRyjcPFJk0h7aFAocFENN8;X**lt%v%w!rblS ze=~ozw;)H@&jX#Bhdw>>XH!-ApJXV3xyY93w@^t)psoi`{Nk!Gio)iCim1VCT&~%a z?fE_}i>lwTUT-O#FmCc5E$uBqw3XaSWYW(~_GMU5cb2Uje~LP;)pjpPyERL^4H-m4 zPwx|QGi8%oW%culXqlCkC6oMh$^A!d0$gEvkZoXy#kSiDqm|8M>Eqm1@qtOMH~;nq zVSaxO7AEYB-hvMxfidwx)+9h%O1F}9llFEY#(ri#ZuP#(>(p@{#WY1Y@n$lp*y2|9 zphiN^AiZ#|bM&C+>LwrJb+!oOVG%kYyS=u2*%JD%(Z*wcf`DBOA_^fV;z!Kkgf?_l zVjs#vs(hvN%=UWn(~S2{rZZsy%&me^)3ooE9a5A_W|J<gRC)whReO5WciNs8LgBr6 z3L{|<Fas+{pS|I{%>30xna({gj0*7OY(J*!;_3F0pboHQ|0AC*Q9--C&JLi}uMNln zqp2sx#j@el31VX8$b-yGdHo5}oaiJ>>m>jhCU9QlUee#kLa`$S6@$d%WrXlbq2aZK z`3*!Z3-E4$y+G~3lY)=Q@rIVh&Q@(%jgmM+<bFTN>|c;0kdbm+MuL->uv1;Wn16N6 zZDL8VCFh8hKk=kj>k>JR`qt9iK-|n1d>#%%YJmt{)Gkn$**EKCip;_80lO)_k%QZX z{9H@=?M%td`6xo+NjgPg{c5rccN`%A(fwqgj6Zhar&gNcpwaRHECHvdX`=wJq9`UZ zEVX;-3Cx|riSxYjAbWpS0vnp^&>CUbrtc&8JZo_T17=Gh9!4U}W&tx^+S?kH3SWll z^VP}N$M>AF8AE@H*viKN+DsH;X7(Y2y0~~4Ma&T&Cy2J^95EoUP8x&y(PJD7N(N>c z4g!%j+|I=ucqsY>N5AG0I{i=NepAy5Dam)t1SKX>;Jdkm3R_CRP5zB)TPciLDcQ2t z4ZAPsQ1#i0m2VTj@ts@RG|lU@$$yR?`@-begH!CW^?bbBj)3%^4R4&7CsQa_{|;eF zhrp;y=4V^vL=V-QhuAChUF}2h&a|?9lDDa?bta`PMp|49N%u>9w#VRbqMYRBK)w(H zlivFP(jST~%v6hck3A$hhvr|gEp58Aa!bJRV8P*BywHK4qw6PmSaQi&>-g{!L4x7s zU5(N;H>}HgeL6$KOF|6M5XzYbBevFDk)?f#bdPkD4AK|7oDn$m_0ExAt#!^jE7UH& zS^nEvd59kF1#Vxbfr3SCMZ#*!Le2$K@730oUY8j|W<;M93N?BC>YzOnNWzlO5kJqr zsJNRGz}7TiNI>RtwENlQixli1*&O3u=wm^HpxuHm&pW}1TQnBC;pM+U-%Ao2Q2?kw zmBlhUIIjWk<JyDg5<&<IMbfdTW9(_w7Z+B+kN7C0J;mA7OV54VDm)F%1IfzXV!K-| z4Y60v)&?^R<Vz3a3_>A%s*;B9L%k$Eue6sewdazU7~o><-MWb{TNOh$hRFwJG6w~4 z!}wGu*3prK{ROZ+2WI||J`QyqteG88Jp`tJ_faHQI|?5zW|f=L0uGR^b)4OkZfNCj zI=pM=L2V{c)nO`#nC%*U=#N&6Yam=srCG7g>Rm+VK?)PL)Lpy-mC&^kpobnVeJS2w z0eGk+Ds1v}4GaS%L)w~@j@(iHTs=I{(NL^oSi*Jaxg8j^Zl4!}7=aI5!7}f<cRSpQ zm@BgWhUWpuh5N9@<6qp8ttny%%3OxW`^%A#G6VNRHyaecJ@SB!pXlWad<7~k9>FF3 zWsnZas=9<vFO&)jcI_;WW>_#-rzmJw4e~w^&vbV(A`=J+Z;%k4$)nv&L~2o9hI_<o zHuGvE*=K5C8W&jbD<b!bM|0;d3V)sdK;@;LYS35@KkOx0pK5?&^JYJ)u66n;c^*S5 zLdehK`t>Jx?f`nf_V;%0%$g9gFzc&&0`?cot9Ce^+1|llBw@@_lSQ?_zsC}=W4L>5 z)Bch?aj>*6$PU&DWQ<C->JiIX72Tb$nW@zNGOz`_Ry4TtZu%_N|HrUH(WjoUru(Fe zyTYY6LT63K*-#B=PE4zt(V$yBpA~R^Dq-V4_9Ghe0Cqyb{~b9&kL#`8n!@kOADH7= z)Q!MC6ZIpqa^m-TM4u3Het3gqCR1TZNGtV2vkxTg)P=oFkoavsl(QZL@I3*Q9i^7& z#zNr&9v@B7Lif=s;e(dpWkAq4<@j9iONj27c-v5-gNf!l3g$a%290hT3yZgk5N{OR zg>}5-$ou|1$*EbRpi_^;-K|NUer|e=Lxe^ae+Xmy>&ZaJL2oD0dLAzPCS%D!!1T3f z|HN?EzG*0cUEP<^PcSUVy9-e%`c#!4p$!5EB@5xU9&7%PTCSP+ADC=VHLiAnA%9z? z97NAhMG&!%HuQOJd;Vz<o!*xJ=^nOa!)K(b1MWckT=nGa+^jZJ`}HmeI9;(2IDmqU zpavFX@qZweprGLQymVDW!mj-gVQR6ncJ~^v$3Y3KkmxIZ^LCkqhxDc{zrcG_CHlRy z*o2)7A-kN_+;%$2Uh;PSZ{CSM2zKF9>`C4We4J_GG3J>E;pj*&g$G}Q_mXydb<0on z2y49c?SqFk&mVOMQC7#rNH*3Nlhh-^Bf}!b`@Fz|;jHTqR=-P<w^YF=_eyw^mPdol z1mFmH5D7#u%p{}=**!Z86rKFp<Ze&d$j)0rO>I!Ep~@0=3ny2(go{PdJj9sb*RrbM zYZK(fp(0^yR~Aoi{Ce>d8$QLvNdgx(tkP<`^5jD25xI|Q)j}^#YZcG`!_-^GHTl2q z!<2%85(=n*q#!v21nH1YrF*0_6A(rZM5P-<y1S&CAsy14qjNNDurc`0&-eGbU-yIS z`Sq^zIO8~vv%+_kZb#rdb4rL*6&dz|WNvco7lhI8%xbun_qIkq#3dp<uVK6w$P&SE zxS^=fqpF`eR5@x*aU*qBsFb1s96`j)G7uJo7*&lIgtyKyxj!o~`4C*Rbl-_2W6Re2 z{c6JYk(=>fCFFCdKzQyTv{r||Q&QaxIsYoaQavq7<hW02U0c;ORK!8K)|0^-R)FTd zuBt_EITBL%wsb?sHEeB3BzbSjZgI5Tr5=6jIdA;r?&Su$<>gYD;484H<k$28mlt2U z=Bjl}U4k}Y_G2vQ5`70=s+CCAgts$`joEd`iq{LA)9LX2AmUPx#Q9%-c<l={*{l<6 zWFYxThZgypzUE=*d@>Q1VG;a{ARY#wv%tB|7uB=E&)(`7o5YR&9g}=4l58{%!B$p+ z#J<o(GL+of5z5)&C$PsbEI`JV0=g-)D?T<^$6nd_MiF9s`Cd<@v`8*SWKixW<#mGc z=ym*K4?d18!zw<_n>-Ty8|LA_l>_SP1e19tGh{1#9<6aMdou=J9@3fwTzn{5Jn1bk zAvym2j>12zlLP-Iw(Q`|Pidu>nxpG8Uaq5yVJTw{!~^X<a;bUg4xT;(E}k10Z-C+> z`eZ14a>6h-p{>~7kH7R2Xe4P!uYD_h$N61g+p8B4COoa+4p|Bxam;8dYQOY*Dc97= z^E9|sPIo&tL+iXizAL+X{_Eu3J$AE?)WD%6AxOFUcm{U1`KCsy0CYFJfzr=gzHsLq z$qc16dCyIaXo-Vvk!0~T93(!u|B#Qj8_!RLChi37bme#?0a(OMZeBNBt~hm8uk-DY zB4POu-28#dY(;xRo&v^#F~<pbLy*|p8r*Gp^#_|1A@7|rs}+%;Mv*cLMNJ(fBhHtr zW`9R;^eJsTa9rFl@YIt$xw?p2Z|15)aT?_M=8w;Lp5p_Ija`pUg|Mt_Y&ZGJ_McA? zqu%D3dWe4|%-(mYem3QcH{MJU#5<Rd97yz~2p%(CEQisuG|8FxmK!xy1rxcL?Y0ue zjW!K==A0X60SB8LP6gM@CvIp3<4ui2RQ<i>+cU!XvYupYFgaM!>WRuWLyoNGqkLZq zCbv{xqqt`Jmi+3s`1kx*CUIxEeA}61fU&H@43BCxqU+mw=ROTj9Y^jqRJgFI5s6ib z#VW?rwfGRf=pxRPUS(4)#{V>p?J=}j6}&N_{N_;e6I^H!O*lVQ?Ttxc?FFhIL=NSD zpV%s&*iO{T@YVETm3=}ULWB*LWyyTVy>%PzYNIlzUGAj6r)VRc&kxu&SP=1srEg$C zvj3IMNn?yee#x2omTNUt<({v!qeKYE4)1?XrkYe*7A-oQT;%#XK)Tyu-1&k;?)g}@ zYPta5YjDCgX~n(FgbJ~~mwOU!NXDDEBjzpOw0mLV^{hYxc94DG_#+<6uuvPFZ)1X{ zdJpAaSH1ZPiZfSWa35V9o;uu$h<RpE#ofu8^vtyLQhJrJpM-3;4EO1O*)A=Nx<xbt z(9UV!S6FE%$-!V_P^Qk~dZLBL7;TlZ%{t9q{hz_jAb;jy0g$Q03R&g;BWoM^@JxU6 zUed6j*EwaY)wHZ9{EB0x_4Orl27c&oZVGP(IiPQOd4G#D{<YB<HEvmWJqlIP>Cu$^ z=$jo)@xqI|nDV(WS+a4Rqjy=k(scKQS(oSB{?@>UI&ps19eypZ<mI`vn!sqq9Ua76 zWhZmzp@&i`qrcomiY9KprR#DuEdeuc`B#VyOC>C;M9>8aOn-*&Y0H?pmp^6|T<SYf zEy2<T9&0Zula(C;MMamX8lVXyR(ccOduJZS-q(p>(?(1G4GmcaCSG2G-k)>fQ;<yM z0n-b><FZ=Im*fBQ`dZH{5I??l{C?oqpsG<*0!Y6UFRd)q8|mn)RXjf@Ah&2_7}1p7 z1Gz~lkjjt~etE6MW+!3zy!PDoM-Wb&-)~sV#qE0X{ALA_1o6eAp)_$FZ{wiP4w2rN zk`k&6=Qz)N1#TMi?|*A#Y5t?co_%}87SGyqqR;^ts&$p|)&V8-VEz7LLkHswztwRS z08q67M*<5BvSy7$5p-45*}?q~-998~!|n#PkC2Y9?z80N=Pe~KBylXG9tPp0%dlK* zWbu#;q<(V6d9ZE<a4(Sgz!u|Mp(ddFOShqgL4H?f`}a_X^X&SvJMGv<aV?lwbiDIf z&|B4+{MIr#vim};ZN3|EcihE`Kwz=bE2!LNrmvYtQTOeX<DTy;HK@-g=YqJI8k&@X zHvJMCJ=rmxLjhBCor5+a`$YYoWTT34dBbywbY)2VYTpTZm90!rz|hqofX8(=)Ua#` zHCbBOdKT8cg7qMo@cIHf=6=hyX~H;g{H6P%_p)e&-3w@{01nT`T2zJ%Rr1pQhOLf{ zj654pvY(tXe@blZNYEQP29`<50FF}w544ZWf~O2C8RK^+A3SD(zTS*>&GCn3SsD`g z6)hs%u!r<mFpD{(_vxdIkCsx0xUBFD*WXvBXb*2P%<ExEUu(X|EtIm(KJvq-mB-v} z+p@x59|(;O9!;c4CSymt87p%{dY|nG$#PCwIs4aNT*(;psTLR9y8~sa(uCLK_a2n! zS}Vudx_H6dCYZd95Ar{4QtIj2gRSUCWBksBE^C8lIZxF!Il^0osGe}!CrwTE9D9y3 zH{3VKd{gm{ZoNxHD_S*67|?U#|BonY7Ta3<c3Jy0f5eJj8PQlddoVClZ$$gl0-Cy; zRHs5jUyOa3@!vZdpP-y=)w|XmmIp^t3luj;iNq;TR}Yu9wy?`}+}^^Ql(uB%>YVLe zLwrjoARZ)}(PMy;>|<GqJGRZt9kuzX4t1L&h9*H0y+NYh{^+2%1t1+smE_wbmeJ5L zNfwJtAx$d9k`x&9h|8un7<KLaQ{rSPd2?p3$%-!LXeV}~i>MtgyLx^;G(Wo%!Cg@( zQ8ElmiX_M61kdiun=Ez%^^mS_h6a-^%#2qQCsiPO;?a)p^w&ZEUf&22Elt(zP+X$! zZ9!D#?CIFMAc2zBba5X+15;B$icF0f)#w^K$56c%OYK(8@`W{2PH~>ytN88Q=IC#b zPkM8oSWcOkc&Ug8il4KXXG*N;Z(e4pZVpIe0dtWwNa+=%$Z}Lc1`3=$a;?FoGr#Zr zEX0K28k^%1n4SAzuK$_Lb(DcBbMoEMhW)dL5F@MG8GE%9(WOJsQPPXQ*YW%V>BF~m zwa-6$^)+dpUE$N!a`b<#OcP+AE{!Z>lI}|@Q{P>N4~XJxIe!%QN{Uz7;XWtx+&2{3 z?l#6I6o!;eQt@#I?^mJ+NHY@!CpA3``nf;Fb=uVISzyvhfnKk+h^f^6ZA2&$EpgQ> z@dY8l4B)`?6NNO5ZU(@(F-GjHpLt+^->|x=sra$h`}8o)>fZrrvRJWNcZPFcaO2}% z)`)AG&M7d*fO?PMscU+i)S38rG{+5Ylcxj^L742WsCmETi+>fb*!!Ahn^J9^IW#Nk z*KJdMu{UxulD~9`=GQw;+-1(3v;-dV>f2arW~WTtlyEvQTu+uP2R4h_BPmT?gLxGX z(Ts>z4W6*Sk{Gjr`)eYsb|yIjleMu<>?5OjcJIHfY-z{>A+J}$2PPw3$#>y-=gkdA zlpC7TOqIKiydBq!t|n@qJt=*Z=BYzLTqSAYZjlq~ge#bn;V6Cip?_A*g8UhK)vO94 zNM_$n#56;{`$w9KA`+i8ttu$*idU!fE!}jUVW~1D^c96mW=agBgidwU6B`K~-w;jW z=ofcUNKM@ruN2$aP>P6i{CkYOo>4?3__$b&fj1&4yS2~m^Km2?-Fr+S6_2MLO7J<Y zAINgi<+FdqO6esk9z%=`6-N0-T^X*$MiZd@pVW-zOeQ-$jWof>eQ6m<s2g@QU)Zh* zgRlBN;@Gz+A<gA1vSL86dg5`DCS96hEy8c*cYO1F$a4Mm)Il#*H(1k$jUljCG_>8q zf~2E<uS>o1^Xd92>1dM9tLB3C%^W_gWp^^J7|lyE^;+Zh{~_}-*^>_IPCR`S7)$08 zJ6U*d39xr1JB~x^;l;4z=2qhoqx+u1i}^anFZMD*sr}QgrswvGl`2YmKm_bSN1BIv z<aZT92$rxV^COZhLI2&u-h!7io-f|v!4uVO8g2Jm+VFbLpRoiOX}!kXRGSXHVcZ&y zG(tSI(YW;-m2S25ad{q>!9Wwj#w)Z$NfTr=^=4H3a_NTW5lj9?=r_JE3vYt>sFhMi zm65YY({Xi&xuda=Gq|Hhw?DSm40<WU?sb)bdfh6}{A^&!;gYNL=fp&-V9k>=x`<z1 zG2KE+&6i2GKTa;Y0eOWU`=XlFh3~D;536YUPCBhQhhFFn8cy+)&QfbBtx<DepT=Ik zHt^?v-iMv6Sy8v?x7$`Jj4)m1#Gf>jZBz&j1?KwNOEjdUKqtaJZd0%4spF|Q8mGSf ztKv=Sgr{GD0KuU|T(bwg3Qe7Q?OiDy6`?jTD$iOLxGtE7UQ&2M{)_;xg{9FxJaBXJ z6uew4oyYgwW%E@)K{e^~GkbLW$FI3td@+(14>my`N|stTBJ|~DAhpUbq-+;F&;e26 z$n~%(bRNx$kzA_3R;(%7ogC$}5S`K9%|N1w4%QfDX_#qII;;y$nIg^<%Y7Tv>@M7| zY-k@cc3f1szB7KXG2W9E25|XNJikcY+bqXgyhE8i2TxIK;`=DBlo~X`bV>0&s~!OJ z=aSlcNIv|B{-dWI-BNtTR!*L9_~6cZYXuCs^j-)%!kqG-1tBBnCHNr&zr@x50MDE` ztq~c~S3b3QO(fMSO!e&@y=jQVChasj<rzLf`tcheJ(_jzY5S<+{$c7S-Ia)05S`2P z^kPZsV7eRQW1|EOf=oG7&O>M*B?P<Ehb3)Y^ejGV-xHV%-mw2+eAmJfuy2AbwM;VD z9m(F7anr`#j2Co7%AFSAHYnM_u6+dwzi2Der)PLRFFkalYyaqV7w_RT>gtSo#Nw`* zVSS$lWc#sI^uYaqnB)bTp$=4OvnzBKMEH1)Ug@{J0|NrbemEBfh<-iAY3MCD(<9wy zIy>i;@5feGxV1)=cTVtNmYD=l7j)4a(psOWLOsMkV8P67f*P@bRo4Tb=NkRDA2@-5 z6h3VfUPw$))SXP99Nl;X8Lpz3&yt(jhea?2CZ#-$)PVFp^v~z5B2htZADaO}4WP(z z*L@P#_L%h~hHLCp<ICH)_2E9X2&{|pI7n*ugkMB)=UvQAPSG(U>|QjdY%o6l8yuQ` z+}TO96esD*TGIur(-l9@;iz!WuK4f4s*%+Tnp!_{)qTGSHFV8ivnLMX-w@(FTg;ga zvfBoG8G#t{WG%P+P42h_*qESKo<ZE$bFStW)l7e7Ki66N&3vG@Wc+YeVSe^_zt_{N zopMlR#m<5C_{U#P?`j!BMVsw;QTDd-C=JhM=?bs=0~nl68%jA>x#MybWzd^s6>5<7 zk@58=G2l0?3O42R&&?PkB8iv_7x0%Yz6*;&z7(N;)A4~U;LGS9{va(T-cX}}#~od; z-_C+UBu`L(ucQR>+jP=pzLRiAjoNv?d57cDNB!du{`P^2B!d#?oK4i`dqf+`UwaL# z-vjGn9#i^i#B#aZ#XzBr06z^;n8cc6!txy??;G`>Fw6qpaqjEv%rX@Gr_lnR`#|6u zyY_$0NXL$BXzG#HT#e7S29H@XJ^X36kL1OhvcI2};7H&FP2J9j9NZ|n`b#BG?-c3P zwp8{Xx32i1AK`xa+vGt_;WFzPaB2Hx%ZFEfMF}X*0HS8O`0R(0<B2G|Q+QCRgVLkC z#pZCr_l3Dx7ZZn|=iJmFU-`#${B+#R*lbdW6g?4b@?7|CThW*K=A&G{Jo+H)O$ia~ zySbr#Xd|3cIqsz&bT`*jBO(1PJ#Dbvk?~Uhox@J5(Ix)ZgbX8QG}Fyrbl)4flFBaK zjUBED`kSHm*xk+`CrSr?iQJ_ni~~NsTs93H%bhb0h|XZ6807`rWvRPX+C{WLeT@Rb zPL4tgJc)h@07pf`bF@Z%byagJHK<1a<fY!!s2a$ZC)W%rBU2Qh!$V(WfAD1r8>ma5 zmi#o4m9K>KI0u%8o9~NmN~H_Ze`@ec-`shzGf=zW2ce8Q3H-GO{oK<ZaFnRbDYN`6 zR8Nv^T6C&(H<bmdgz|YX8myFhXaW+b9(uvwD8L`jQ&C<C@ZZcY)RiXysj^~C$}bB7 z6f45}TAX$1){RcGU}KEAsH>aS!j2_j_KN@=d4N7YFe8ZPiDz<3+l7DZ{yAeUX_;|Q zcLp!RU}0j{*d?{P4t<N*_PfE#{h-9FgKvfE2~;+P&Br1B3HvnKr#oasQf42Qw>k*^ zZIOvyNf2Z&<%e90!0A*TaHDA3=d%(D84EeMpjROgJ|g-snm)6!n%q#e=K_!-y*?;P z&V5OR4-RtNNu>w`w&<zNIK?-<<P*dJkn}1CesBQtjvX_#e*Pr5wklp<YY;yp^|pz- z8mc>xz<=;D%`CauKVtLQw1Rp<yZ@a`HI)U~kC6UyBj!tQ-a5)tN@#x0-Zw##fHqB# zDQBx(ENNxz*Ra;s;((;hqNbDSAsXVvq`N`>(X0sa{~6$C!g#@~2&MoedlHs@gr#i% z?jGnLvV0)(p`pGZQmk1RrWkQ4GQ*ixL#|EqNkEOD!^*>B<}ugu4c1jGWplqw!E@Oe zy6?J191Lq?y*lIZeTlJt_IZui(1wh$n9bahs$cx_N&QNVbU<6ILTZSV0s*4vxCGgI zb72?14c0pU4iDb>%^Wb!$HZ$+Bv2=q09x>i*>pRKCyt`TOJH=2OeV2)P|aJP&3A=p zP@H{C{_&7cG@g~s=GBMa?Q<&$dvWQLFOf*@zg)`=AKF???OLx;%gUkN;$^WOW*E4P zE9O+IPV%*N-3tN}?i{7nk8MdhF{_K~9|m*Ee;jYmPWGJUt!$E!a0|?^3_<gLco;BJ z=fD5F*8ua9D4C$Icg?x`=jRm>U8ut4`cKdsBL1d*@81tkXEDu|>Mv%$7K}vCfWdb7 zc2;Xb#;PW?c>B@P*5;ZUfmWl#!>`=haiXyEzW6nO!PyULh4qatuqw&<_aR7-|DOh> zBQT*5ci<1yi{f>gt!IZ=5_403`=UK5<t^5UXk++r(bMSt2S-xOKk%93qmXA8DIOQp z<j-E=o%DFv`H!vd1=B|H9k&%w=3T!a7aFFenHvkBv$>l-d_fsR_cz;yM;x~L@p=1N zVZQG7-ar2G!X-<_<$hkJajow`708S+DI8+B$t<2v@Ear`L6;|E(Em=h*jq!%Az!?i zp}-%MUqFrPRcOR?=^t(g^$!>QAlt{=l3yz4F3w~3zNN>}27Lx@yXrnOKO@J;W8>lf z1cVyq0_Eug>0=5ZMehMir@Yu|fzrE}k)7ea$-;QIoza%^xxd-LObac>8Samh6jABk zSI+E^XJq|_!jZED^`Hsg!g?6frIYQ6PSS%$5s0sRs$RwW^{PHVrXh8hC`3*S#l?R; z%z|dZ1n%~U;1=3?%VmXxyIdL~S|vk1{7NEy6T-^$L7RX9fu%)%3<@5#Y;YHRjpmNs zSaf*ti++tLSYrHztx~*~(jF-vQqTctveG|-?Ma<D0)L#mr%$-bP=l3WY5x7;uEy=W zZgy8F%cdwnJh0)r-=6y~dvO=W3A?<=lnVj?TO`W5_#w|HJNGJ&Tx^C$FT+Y#>wl1C zwoW#OjO3KL!%f_E6KS_JR;jP4iPz?EwjoOeROo>VqLWUgGVS#GAItUF3xx~3*em<W z91DL;9Q(KQ!l6f}1v#L$96AmOksv-{92c^~p$vEshYJDK|4|!hiMbRysvYXdsirqL zej)q8Se9_!#zkVEl>$R$d}<FN@SOQL+n^4So&qBQE;f1@j883ojo=I%=Ws6yf3A%r zQhkOOxXIk}l5v*qxw83~b4zEZr;gp>NdZlI;NQ``-7`wiC)w*3Z@;>F#_$Rm=KIX; zUJWVQ%?al9X*2ZVAN>#4o-6`Cu#@-r?1>J*4Y@!jN8#RW+=7F9>&9N6PB9vio@$uy zK?;vjgrlhcgK)D}^4+Ty$~QjB^S7_)Bn4LHkJCg$to4)A9U9hsY@mp(wbZ2dUsY@p zYaB^ezC3KFTO;Y77~V^wvx?u{6V?cIIX_QdkO<#4H{KK1jRDO+@5QBZwnB7niW3k{ z7n;vU3^wK3+f?mSr6P(cC%-{)pF>bGI6AXZXH6Np_yfVK`~Z3-Gwk8yFvZNS25tsd z?J^}GSLC@3X1;#O<y{q&WRn3<qJr+<|9+ivpSIngvhY|Fq&Bp72&%6ggB=VdngsDq z%sGfPerU#A4J;fd#-$8gT;G(^GhCwKKP_6z%u`kN@p(q<eVUShjg7Ssj`6oxGzuY7 zmB4FhcJ#*0(2BinkJ8wCcVaE7)I(||N#-{~tJXy=Ei_jvHSaKaLC@2=6J<Ghy&5(* z)h{mn2p?ySHivWJd5D2Ilqb|*O?7}5*{J2wW%O<<+aAiV+8RuDUo?oqSiIm5z3Jj3 zLrPEL1<IDrTAwH+IWD8rBG<x<Ax4{PG*aozCv9j^<HZ|QSu<L))nq{2{n4TjapDce z>|=AX-~K-3i2Vii4JYsNG-1_rm_a4mY@MORcHs9fhwFX=^xS!g4lgDkS|$-a)p;j| zOW2WkwSL!INdRX$)}!5jd2?(4cn^0&iphv80tx<dV?r0~J+ID37Ne@`Fsy=H{@ga) zM=>wpiJ&5Pu+01LVJFz=Zw8rgxH0dJFf|jI+6W2GTqY^al4~F<VuCm6DXf0VGW3PU z*?C8k#m?AQgU$Q+e=FCHF}vQ>^3@~XsdU#K&wb-+ScO+Ua?`juC66>x@>lSCt+jVC zv1r%#3c8M{RX+FfXdd25M<B?DfMNu!CP6lH-KGyi2fh+vR7oTJ-9^y_h_WPANuO5O zPgl3LcK?#8E6B*`>@DY`KgR8dn_NA~<bqtI6(}sC58Fic4+3O~q+H^r?Gb;<GHz0) zcwl4e`J|=%cV%Uy`dwdSg=t;*0zI2+;`fCHY<x^f#BClZEm{6Pi-0v2JBwbO{Sj&0 zEbDxD8ud*^-7U(8B7>Ircb)iAaxNg}__M&w3I~DQ<>vCA=Tk>pStnjxBsS-Z4_BBF zEpOb`(rhxng*e8*MWNS?=WnPkU({(6iO21?;_7MF1bHKzS<WR2H(n$zi;a_RXia`Z z>9X(51$$lBMq)ukPA<SkOm%W?KJ%N6zkYW{&v)v)NnvIsjC6tK(2+5)95~%@D@R92 zxJ#B@Fmq_z7j(DQ9U3o*nfU&tCMXHpx%E#Mg9%Tj!?c=naUM9Mus@p`k~a{xt$#b; z>LK<7TeX%P`;yv8+|NcB=QlDejFzvU8<-M;a@q-jTww==T|$pb1*7Q*A1P}1pAISr zl8qs1(%5=8T|B~1#=UaB@#)TaP{0Zd*4E%SjO4qYJMJ%~G<p{Xm`s*xP@z|;MqD`( z_T+b4D65;s4AX*~$nIg;<BH_e8~Zbl&k$mIf+t-#F$?#ibp*7&O0~sVfdQ}fmO@#C z^Pl_Gun_}Kw)p{Zl@)*VQ>35xv_sCBE{ay@FMJQg8*|I|+cnEsM?V?7f0Qf9FRFE$ zKA(5-1R&XVGJI<hlKl_QLOL!O%#ODc)8PsN3VX96lt#y=KcWDN95rtx<Hd4us70<* z1w|Du7{k=pNo*YBK6Kz1^f5Q_*P!43LXK^JY~N$)vJ-AlJ?bSCf?R>T>`m`cycoIa zgdDW*xjO<nWqkim62d-#JCicM8hHhfb+xH;%YtF|`ly^AKOtV}Ui`lIBfch6jO$Tm zeP$O0s(#hOVIRfhD($*BFe)%F4eu&hT&3wPD0qOMQJGauI)5y!1x{II*ETq)#0;^R zwERri)?k~5hvxb3)LCug-?b0+`+N~m9a}Xw1EpnLOOyMww<_*3UbG&Q@?o<M02Q-~ z7*l^z`pt&amfAqmRL;@cV0v%+>{nm*w}lrJ{sZ}t0LG3bZ;=d>o#~<Syp2V$08?aG zg@|MLeg{-SG+wL>d?QM^wElapV3*Lfu*a~hd#gIN4(D_V8udf|#NA1>xIW|)@ypJE z+~*@rfP5&+OB=eSuXkq0BWj>#Cn4u7X-%ha5<P0dbmudWY%)!<lttG(SKn%|6MTC+ zEeddbPfyW5==;^{;4{V3vS(?28C~;<!b<}|cujmLX*}VklV-C%qn=d;7xT1XX9n6d zWqN4yA5xB+ytmF*ha+AG&Sc*ty5$S&bHMni>R(N?QUHqHdjvl`!(0pgrc787THBW# ztH%mt+T`_SAK&kOsYy2A_tCJCQ(<F7DBkfjI{s{cFs@7>eyU+64wVFXe>~}}>A$8M zw}Sj>LFt(}aq?G1XX$Y(<z8~87HKpy{Gx`GWZ+Z2%T}+wlhNna-<eR%(#0c_bk4#| z%$OD%L}}J3z7s+GeEGjCCnehvd!}82_#OW;Lc~!+d*7oYP<J}?P7BMe@xE4X`#Xvt zlQVCV+NWjb3cqNvz;oEvxiTn<b|A{)mnmD`OnaJYOy}}tcExQ(!{=lf$<tbMZnw92 zM(|+zt@!8U&mR8E0M35PGS!4(1Nue472hvS^#nkjvBE{&x&#X}w3rjfS!w)H9+VrO zsAE%OCvq>%1uU1hv~8minohWM5-u5>S+g_S8HxMp&>;952>k0k?5Gmvb7H1r_n3qQ zHdS*erpj6MK0Yu=a3~<G_~c=xOB~$5`q5P%QQM#@O-O+h5xneGUFD6pW`<;99@{9( zG!0N?A58tWe}3I;{%i|Nv^%Ub!Wu03(WBOv>!umNN9*OrSRs+NnSRr$hEb&d!pHeL z)AQYf8ao6e%`pwN2oO(SnTLVD{Nv*O+eLMv-Rbh!IeFKDN_GnaS4dli?`%Q)j@_^} z;x19bHr3Snu1fuZdMX`3wD|O!>q--b{Gyci_;hb-Ra#R5?PUs+l~xAGz&1&%G<vze zjuMdY@}N<58v#<|l?zV0`W80{#`!;+l|jp|N1}H5L)K#+;j@`@6C?$T-RI^y>v}qO z|Eu$7cEt)$y6_3E8acZ+0+?%UF3r+E1#*)^{eT~8Sc4X#lP}y_KRN|U?OnY;Oc^S{ z%^%}CGWC(1<otm8%Y_V4*oPH6j`xS9cVg^1Lh;GpCzbpzbv4@%CGD8SHO|RzOh)Z- zEYZ+PFUeu*<qWSplsTDK+6lV~#!T8_7I}8FpQzJPrweg+E4)n@JmJRtv@9@2eeETa zxXdn8hh)RvSu|pS?Y}(S^Ee5f;Fviuz8Zaz2?rWA0gSzWDTL)7$7mxA0yGAHjbrC( zDzVdhh6oVAD)tbIP-dh@{INtRL%;CJSgVSnMT5f%KaY5<npji7W+?Bl?eCM``>$N1 z5{6|4HR5pyN8gLpgfNsnz@i<23YDmA+|#qCgGc9;yt=G>sug}2>@UX;1@(V{N|`H6 zuG8pl!QaoRvhRcY-lnuj?J`Df9=?0Dr?S}hI4ir0_<?Nm+ei*{Z9##R#w_bFwZxaJ z;)aci%C34!<_pDLc71{GGFkqY8u6RkdU455Y#hJNkI+EUSZGwdEj|2;1+cWaTsk!x zylb0`=}ph=<fKt_GVa)hzyc|&@S95Ei;_mumurdTy+TQX`^4T_Z4EGA75w8~tSlYU z)E^ysSM~qfIa@|E3Ln4JmXRuum-wd6Ph)MijG)Ty6nV(q2M)C1>XbHuUd+nzJM!`P zgOcOy-}372@m?P@m~X2)Dv`1c9L7GSM{LK}W_MR}%jS#k4Z-<LcV|)b{1z;XwXwHp zz>wcHPsShLx*Y{I*Z#SeDV4FixIie}YxU}_vCOA_U<FqT-=@l|N*-gP$+JvAeA70! zN6*`(R2OX9kn+P`^T&vKv2LeHT1KASTMjW>J5?JZH+MI+`X_09_J!$MdDS!zFjcyp zF%+XS&a9WvE4txaJ?gb?jM8QE)KL-^N^yreY_RMXh1&HQQCCHSv|U@Zlw)u6AG!?J zxwIi$MqV-&NpXCWLpTTO+$~;C`Q9qe{lU;xhr=}NfSL=ak1wJd*5>(Ud0!~w8P9*d zqAY<2^Qr_pe$3o)RQ(~3$`Mv*-3AqP<DgU`IQ86DITI7^)V@)!(9zF6t497yYcDu$ z!jA82D<~RTZn=flcdD1DyLmwWES<4H#GS3>jB5Sz4`QR5JLg#72~le%WT+R%A8#C4 z!^A@F{vA&x$)7ZtjUJaYP$unLbxkE<#qjEk^N#Tkl;{z*(|K*}LA_L=7*6)^ke-{u zLpb>%Rc#C+;d$rZK<N}}#akB@gmIMd3R5<z?NhjMC2Jkvj=$Kla3Dg_&+oE8uLZWZ z=k>Q_QK??ggm{;(?%v7Y9qQGfrC>|_(VH8`67k4%!A0roSyAr;l=q=SqWxK`gs)$D zM1PCPIRfhhoDI-JMi(c99xL-V{~x$^tdV{0_J2l!=D8-DHD^3Ue%C=vt4LYjrDBKX zuq9%4o^qAI!GC!4Tc+*6lXQw!?@o5!<+GJam=Oh*lWT&Y$b@tDXx|8M-&2`Y4IZ91 z%#DBY8)}G;gOKFy4ca2te06@5Tx6JlbWu*(fGly|<hN33gy^@Q7x4Ol@tX~OZ@&2u ziJ#B)xvy-ShmmwER=lhAP|&i*ayn@@L{z`sI~nqw<=si#_MnYx!?8>lBV-Bls(>PV zl$yP#x5tG_jFhZTHR7z!ooDqdgq{}o;kG$9Uf7SKqwu@XbaA8DkG?&5<njb6)<wMU zdCGq9$4VtNQt#MlhNmC>aeEwc-mQ8Kg5C{$hwU;B@4ouKOM{Z?2x;4%y8}G*F$5ff zyA)6%g?9`sI*8d<SkWdb(-IX;WCWjU`&~#OCksn;y5jZ#hiamaJ#zKo4-vC84dMb7 zM{w}){OS=1jIIi4zOCJ9D(zzw-8|)AQXGBQ&A!Sg%6uto*T%TMB%1ijOsEV_jjh#p z65U`aTSrA<Og%Qv-n$nb5B01>Gb%r-AZ!t<ZCL<$z<#q_FSN+oVady6aTXIebu`L4 z-^pIQ40&4&;I?NmRjnp{LOphXU&|xyxxJ9-HMu&z$_5KCRWry9B6e#djj=~J%Q*q{ z^v;gA+a{yOSFiVFyte86PY#KpIiNgO+W%$hLWoF+15J+ir@2Hk4_PG3x+MxgJ;B|Z z>ZF`&LF+mS6p0vsY$7HoMkLLL0sU=3PCs>gj73J{Pw{{o^$X?OW=h!#3$yePr%8=j z;>;gRKg1$(AG{NW_nZ3|m^}B`G5PLt*HTXC*;nsgW*$oqer9%INw33@N~X^8!E(V@ zKFl%(evfh`w>~n!h2?^|ymy?Hs=hK+)K0W<N)N<RSBkBCdG07)zZSnx<wLLC?JBx- zcMvjn@Y5^$qp4Dmg7yPvpVU&+4fjmL!Mt@j)VWtbE0;@6b(fB32zw76T~JhS6>9TL z?<ns{3X6i*B|X<Hnx|Yt_5O>#u;pehg68%uIg3xT90Sn&DpYjgBW4sSDd!XMUUY$c znSu44bY*p=%Z_bSm=r^K_eKck6kSb=-Pj+P%Kqtw<FH9mn$KGjf|ySbe7v>-K7EK+ zYsfr#A=Q1xx{rx=v^%DRB=UapI?F8AOxP-NH7v@D;i~9}UcS1|jpXOw?BiJCS~j|4 zHk`l(y*pT*wt<GS8(W;bHD|FYhTrJWpUgnRhB~eZiV~J{4~gz%pvYK%cSSMJU%8Wh z9v6a%dU;zdqSiL`wNnpNF>SiMU?-Magrb1Qj4U}`1DEwi{MXw+qL)4F6;b*Z|A8{E zD}lGytWm*?NA*sv=U}v=)7{3yiyR^~U~VHmyLpOZ(eW+Y{+FM5Khcl3cCrJzX_)Pp zRu$Ww@9~tLf!W{!*=^nR&p*x*cQys$^t&LhTI6|kAOE1<syce&`Hr9CtA_omZ5)mJ z?(S5RG+|~eyQs8$>?UCyhMm*DZ(Rm%M_n81eEx+w`<TdNjq8ByiUwFeeKhZs@3G;a zWVy!&KnMPGKgxwjDjgp<q}O4UV+@%~_p&RMBSvdRky#bQ6~$ZIbq&CkzwO=*<=*mL zht#MZ2UayuS{mmayg|}y9daZT_5Wc4N};2w^!*RuKs6zjPOfzCwz2&|5gZ2Te|>-3 zgl=3l{Yvs9o4<Q|TB`|CgM{ns**Fiu*~I?LTQ$XUsSf1yFEfgLmxwr=V~(j9=WmJ- zPZC~9)}~Y0qk!e&`@i<D<m8?>D4)wAatRiuKQdf9mMZu}QlL&9T7pJC7EB)=z^<Ig zQG{@eHZXPp<6gWx8&%)|<Ib!(zC*@MY#bkK(;oKW1g3i<hG(61oR73?j_1Zz%vA_C z?|2K!4iBid2k$P8hRz`XXCV05W)AFsXQ)qrTDQ373RxX4J7j^#-K<&KeUiP4ZAHH^ z1|}vP0a%6=tnUo+N9)JNNyq~k$`Lp1!3nk=J<R9gPjBX0$37CvR;1P<=J<rxzcF45 z0)RFZxh~ze{q#XZn^#O@MNNkX7qRL?ZkjDH)e_KclWq(B(bP^d*cYVfKS~+};L%Fs z_j__=Vp@VZ9sGppTF@$-*N~}(asJs!&z`=7Y;<=H(BI7v@2x-WdLI7rzhJ)?FE9|f zrQ1*g-tQvQM!-rBHV#BYvDRfo$r>2$AYR`25-Eaf`Ef6Ikl-7=lCMfL>}R#ofpuZn zbI<pVDjX|E@(eM)d3C{wBk(A@>SNol=BMH#Rdnhee!WY_a#^>{^_50m{OsIIh2W~G zqe_Ul9T&h}z~;9-(nss3hpMqu<rA(xr`g6j(>v<fq|(vwE-+;`Lv1C)pUO{4boH=L zpN95?)JKNz%8}x4(2Gv$r-J{75m65Uvk{iZ*7NgLY}bshIyum=SB!_rmK=qzQh&xt zj?a{H8h$%gD&A;6e0R<lY1i-slT!@SuuqqPx0IKN6<hDK!D4)=mWj{LatHk-U-$BE ze3ja$sIT;Szc`yN;$ToxZmh9C3*{52L#uB^5%0RoY+b<xIp(Q>P!o1Le~i!L`0%i) zR)(v;^O@X9x>OSv^uA~<Hh&%1=SPpQ_51%NQ#QT^G*{)mVRGM^PT$N`KG}G2W9{q@ zBd#T3>Kp8<a}~aB)<%q?bP%Z}wm~71z2l;I{dn>-WIm%aQz#M^`r=ywm2*afV{R}@ zCYE*GA<OW)W^L+dXBpuhNmsmFqrb9!R%Ip0lLhAbeXOi~d{$ZstMGR(UAQv6>_MTI z!n*bL=OrafOs}Fh5biCjkwX8=a5<9g9^aD;fLA)&jD`$jLVns{evQC5sw;Ue-Xsgm zTP6BA<tHhp+(k%*a-jRPDc{VW$^`huGF}zI8;)beOoi#3oxcwHe^`{Pr{4J-{@gP2 zGl4x2qvix`uwR_bX4FaiCSh6ULnS55ibX_G)>V`0MG()dKXSwy6J(F?2XN&YxY<!r zLhVrlMj%)nu_sUdCudI{=tur6{I*zx!DgmDUgLLSMl*d8Ty*)5UyX#ALNOfjkpqpC zJ<E)lIy&r9Veh3S|3yoXbstMQZV`Ys4Ytb@e1t`_GJQ@XnyL&1ncT%W0Tm?dkrl#q zXz#6eHP&{0_b#FeA09bPLypgu7rx8?yo3cS#rM=|qmq#lf_EBGg-_p1|6i>1js(wg z_SGf!ZdJ-;Ro}fy2fQqh3PNxORH#_rIbfYMW~`G&dDodW8FDH|z)FrAzpWBSkC4mk z<|APmErMfHb04iCWFfupyyX~-py^Z4TO;}1>t8|~G)k9Yx-Bq~m)P5N{on1f_Vies zhC5U)7guOIL?V&t$|=tIc8Dgo`A$I3;Q>ni&Hae~B3@<%GkA!fC?2xDrZBJMZgxWc z%q1PFW(6r&9_>Gxv{J!qhG74zyA%$!wzBK{#)M}X5ukJ~KA@0Nx$}i1lDnhu`U?Jl zbRe4eM9rH2nSXZb;;fxt+*#S7*gE!+zCK*5^nm=rYrc2kf5|JI1Ct;d^M0+8bfn#$ zl^$w3PUBf0{hBLe>gaBC{_IAh{WD|R5{UMV@qf`JmTydoXQ=@{|E-t;fnp=@<saIJ zI=W+UxTx4KF#V;wy7irl`)cM3chsA<kd8*CEV+bbWweN!c=`QA3@<>k1g_!0`OLBD z0CeLYw_=HIo}_X)T$#@E-*A|K!k#<I;72$e<w|DeA$#&2?i1Nbl%R&EQ9GbAU05#e zbnw~Z;AZtnNlrHF;oMBj^84@M8UHJy%bGco{d#SYsi4LJ&C@~L#POQr;7BAY$x3TW zGPOkSSt4B0Gy7YjQHD}0yonfB*G!SKB6#LA_m>vl<bf`-IBR}76TYdLfH=wF3E%il zl|#a6$tnQM#nDPDrm%N{W}*EEneTD@Gs_NM#x^bVu>~rG$d4x8eN-4W1FnYTVu3>- z`u2OfmSTL1UEHnBvDd*3<Vi#20Zq>{-v5kR#67(4dq&Pq)*43%DI91(sMtk$n8#E~ ztjJM4>aYm@FGjDG^1mo@={?zq#5o@Z+pAx`nCK-}vmwCyvm;hM;j1-28_xK5IGO{U zzNlPFiKpWPMD9zf3}XG4T5a`e`L1#gKyjNhD_%}xz=~OEv8DzO)TIzLT&|4qK}8uX z&MKXsLNnEN?j{@kOkl5j1O8_%%E(@mRE_3x*xmX$Om7lS-(CNbFs7&45y`|JX`RR^ zgySo;Y$HeHL?c=R^K0b<E6w{d^vjCW65byhz=e#2?KK|KtK2JFP3cx(bQoaA@cQpi zbdZdnU;*C!Qa^0>_r!>yW{UemvyIvXjQJ||J<#1RKk~n9Uh;G+M);_tUXm7Px|Oty zVocT%?&ystCjT93M;_A$&-UzSU~_f6Z{@>5U2pnHU2l-&$e^Z#v$FMF={fec32$v} zx@@x*EYssH6ZtjFts`ugW9FUc^R7t}q)>(9-=wp%>Va2D7XrGjq}D69>7%TXqLpmt zARkEFNTy<mUcLuZxWFE1__^Tb3LSTGvl!pIPH)tHE*C+(yEVRhj5?CXfGc@sGZGds z8<?J~4=(8D_Uv$Md*i>PG7AH*yI*fPmyboE1qYgbQsHPZzgiM(Oqu`qrk>>r!W8Ok zGI0Yg=3Ckv*ckkvio|vusO*Z$g)F##_!BiTuTCT^8X|7AH!XYi$M40?_WLt~FVP4Y zqfp`#cMw3%%>bQwYdE3bR(vhKWpz6a-gV3W!TW>N@5E`~Z@6Sk!b{gd+xfw|yfaZ~ zPH=rQXM+oFo5|-3-x`DA_8ZjUzHa%7XYr2I;Y%z$9ENoNlU8P6`k+Wq>$3PI`H5X~ z5yc%}aNczxmdSx-sY-FRBf}cs-*FBiaC1WjzY+}%{pDZLrB_V90@N47qir-QqN~-t zW2DJY0l44la;~o^4W79S6`S`p&EURjFbxziqIet;>#K25D3>y7CLj5J>&G0xb}L5l z$i(OMMWv!ky~hw`)klr$bf@@*Xq{vms<`Bxc1d>0bLBW4!FW`@r1Bs&RIL;SeWj$4 zu2MZs(^8$v4d_ig1v6IPMYan!z#2_3lb6aHJ_03su&?Ogy-kifG^FJ4z@NhzIQt;o zmij+v4*T9QMUM8p+zV=`K;I?eCt@xSH!15UCdD}qMNi*Lbi`C9Za4hKp$UG5;l{#_ zbwxtjPuWZzMDE~i%<1t{aROJP%W;X|_IQ{-JfgA6qBS#@zCqz2im7CeHgv_1r1sas z?Ni0`$g$GD*z!yPe&7$P-btZigSm)ucwUsGI;*$~MAIJuu>0o9T<m{K|7yP1<dH<0 zx^i^83jOakF@b*>Kh4?bZ7G71Sv`BGk3%`4+#U~pGnpB>IC~jvMDo9a4eK*pcj{bR z+*n`lk9V1p{;vE(JSBk3E+!B9B<)KKs$*mWq%EK9rEe9@tmH5db#_7+x1C#k*Q$8e z^l{75aPqkzR%VHFfreJFF*oe-c^M=4qhId#7n%-_e3Jz-35BqUO1aqWTr69inF6KT zrZJ?0Pm#tSx!{pg@cBmGZLdrDW`5f>t{kR55l^bz)(d`Bt1KCZa&&5_&4>{C35ZsB z9!1|%A*?@Na(B>^zkrF9NBEhD(`~NSSE3`ZA85Mr^nEYky|APIi~l|l5HM98YlgE; zCS*+Sykij--qS%y7NC#GV?9-p%-&ah`XJpmw8+GbP3=0wtpk(7&h8aEL*IwWj|eer z;%5glJUq92n^)-+3Fl4pn|A$`O0R=3(s{oDQa*RbcE_&$*q6BUTDqJYv;*nM?_Pe2 z;y|{o>Bs^v1uZglux*d>@jUPLeD~JCERhGm353sG!*I5Zgr7Gmn?>ABn&8e+(|gEG zY2%1SY42uIX=7#<y!Ec7!RNO{(nbPoSNyKmp#e+<E}0KT|L6n(^_oGql3u5QUz(0R zEjs?swZKaBV%M0xFR<Un4ubZs=^&sj8TOpwx(lNb`be^&)z;U;Hg6SDnJcRygQaj} z+r5!h*LPlTBA;X*e|xzp@V9Q|XK<sqAzMOPy3+aOr}sTSs-D-HcHZ2$uwHxn$6qV% zw&=m1HVOQME$J9)^}ww8n`uJO@ZeirH-BFPmUb63jnYQ1p4vm8H(b2l)6`oz&PUuV z29kG`2t&z<`<Ah+tLiS-yW>xwUq05=f>0Sdgb&q88qXI&^nO}tAc#XyuQRb(!$P31 z@2v`^m%K~ve<h=iO=hxC4CBFADg2K3-o}-v<~*cS8zITQ#vpqag!%yJ_qUSo&Ns2X zBYg{iiU?V9pm!90#y(K9U3%arq)%i2S(NrHK!9EclT}~2Xe)+ihHJjv!8^=|?G5Ss zBa2nUtK&8GvaMBWsF7EDadOEr{qUOkt#{L3-viQvd;EooN0O-tb(f~s#mCCZAdDb0 zLi%B5#yd+*-~L;8u*56&+orrP+vRa9(00xitTkk%olkdn0)i`15hxNEtX3Q@x72?0 zJ46nv{E9uStg(N(P2Ky6gAzH3kZwl1+Xuz)J5fVx$s)L<clRzSr7;}=c6qiOXvOo% z%>$-KvpIverq38J{#piaKBx&5+|2C3ysLfre(9xC=7Lqb_pciDx}fCYQOO@3WDhVB zlyA4x4=H?B`%6R()0}G^iV6zp1us!3y<4w1Zj*@)eQ|auMl^n+iS4qQ{nh-Sdtn^F z&KCoas60@PQ%cFK7P;*jWf^#B0kPhv9$PH3g507GmD^VOC6>VaqaYwszj+!g_Qvf0 z{IjPIu?jMT`ss1o=Ybd)wp&oQ=2%;DcO&ja_28`=zG_KfQNp%pe#L0u;H?vM@b&@u zL*04FWi6I_=h`eXuwr|LYiVnG@b)^^xmCQ(wPR$krQnvgBdiZxb$j_!K+;x^Yj>Dt zR>^i+uGO9~#;KAuvOMwUcc^{HT+$C!xWTkU><hmFoofRYfcREIJ0H1+YP~=IK>g2G zv63LSeJ9+uNKqy4JLb4C6*=H0)MckGkHrGmex<2-*L%GG$Kou8f3h_oV})G^2-Wg) zubJ?alL=^t_3qo;OuE|LvcWLF%JH9OMeh9HLkl7L?V>HvC9`@ve*xrhj>=r=uO`-< zzhgY*sh{*Qh=(XNgJUQB6x|}Bi<Q+t@;_J1#c(~Wt5rrcqOIy}wJ1WB8+4-{Zq5)C zNY}g-sGYLVPQ=|Um_miON^xJZgInVwdf^iuB6h6dBuX!xe3zwMC{y_BlJF+E<10Ua z<n^Dtn<XHXIfS9uZ|_cd{|@3~^OB{{9fkys{yl=PFZ4Vj6OzJXkiuz|`idv5DJC1X zl&?6TX`EOZSCVI3T&*3I*Uc{H%Aw9t4bS7)dMCo6^YhLnpNsvKXuajoj9ggG>#!c; z)kri$fVhnfcxQKG3w@9=pKb!j;}=&LJ@u11{(Et8fLtlG@kT8|VQ9?C^`E~=GA4&X z5*<v@MM#lg)14KEFj2{Xm9R*Q@+GF6PSYJ2DTLvu1roiRh)7eXG(ql^Io?q>scek6 zy|+X1ZjVb+csHs7sbA1>#^F4Okt!t1`VAV3HMKWL8k>U5-UA=_XnN_Ni32w!@gBKo z1vRe;;m1xyZYhQi-TM4q2flWhCv{S@-F(O4q#~C%@*Y$#Jd+s33`cONhx4GH8-q$! zyj@Hsn17Gvm&{yzFS{Ppkb^YI-D~5U$?~inOHwJXX-JiXwky8pM$`d*>SI!0xvV~+ zSi~vhTk_L=OAqr62Ef&vCqNU1f~iEksvQ{rE(!hfpt4f??|Q^-b>4;j13P}%pgRId z_up5efOIM;(!B#yG5+;3>|_(l>s@OCh0wi&ZOE^y6avKn0>#xAcux_t48?a38z+iE z>)?ms&2V~3!XwmAdTR&-<HOr<kEnh5_x^s4?vi;UJTu@e&;;R<&o;E<yu47k{kKXt zJKSM3$6EJ0h>g-+2x&6nvgDWKM>LkR=+EZz+NMm-p?!sx!|?pFCijL4we(>u>3!lN zm#mrpWAwV9duRk~Iou2k4QxUW_4w~C{!)M#Hov@OI<jYM3fnH5Wyk&8g=C)ZYr*WK zw5$L^8Pv;;>nk}O)n017##-v+hR@7d%gh@)#^-+qI0ZjV_#i3!Oir06XLTYXDF3Z5 zYx2Q|IiWvnI6P=T7ESX_i;|^a<LCLlbLri`xu54jwzVv^O$FW7upd(F&G6&E-ORU( z0=NzKEm`Xh(xqJ3Dp>k)-g*nX>qWU1Wx`OzTl!f<tpHZ$jLT{m2_g$jU!lqQ?#}~g zFNp{c^)UbQ@C7BTv0neQ;vS5&PLunhnI*1Y146q_Yi{9c_oj&*w(fj!Jyitgo|ZW_ zI`Au%FdVX^dCKqq5uWKscd2nz3A*T$nj4yF0o59)v`3%sUd@l+0N4tK-+yj_3d0#b zpJ(nJbaq;bQ!wCC?3!T@PtD^b$zaC%%O0tFAllTG4}d@R3!gVYEX+NXX5K`fspWS< zGaO3FdF#~(2L&|Fhqp^1>NJw81}zk~^sN_dHr*6*sB9y9vcjn-uLtGtl}gwot7Kg@ zjfcGAfV%*{eJ7B4qW{;TQdAp!<4M`MvVVx2oZed&-6@CuxVIuN)yhbOytKG1Bm0wc zzOzi~|Kb7&Vr7WQpr-|4OkLJ~fXbH-!*4A(M1eO4YJq$zsrSduD+-n~ecw4BcL@jV z9Sq)ZedhnS9EQLJimcz2+@mQ+kHClSog2u9;dy7<A>Uu4Um7DAUpfcjI28Sm@@eQW z0a81867Zn=)~aDz*wfT8M<*N@SnFJXHL<675d5+Hy1ifFMBLADm+<$!tat@t+C0|d z975u&oSufC!HTwD0nWZ?@=$uu`_4#dKhQ;)CpGX%d^<-qxzM49WP}$&@fY5KpD#>H zA0pRUdK?Pgq6_`g`4Wb1ylZ#fXh(yk+vG%>uV@abq(FQ&rsCph8Vr8RUE$HF`^UB@ zkvCANp?7=p_q_vWoN!P)){@{n;F1sM^nb&r*4SRTh`QIDKa@1lTXv3@gu&hYYspJ# zp=q`8aKX4OV95XRM+Er&(kfq7n{u&^?svcO%Y`1dy3b(c@hU3(lWQI{#|7irbc#k2 zM*aHf=d??vEDMyk+n)Glc;9S!j>YAL()tnPbyXzV7wl!(gOT#0nwSiIh*l!<Nw^w8 z_q5#9gZ@O9FEUrDHK03J+Af;AwMfIALFR45D$t--gt<x!!PtAppW$r5aBxk1W;@S? zxOhP&F<Qyuzgx!;cunvczVpN`c6NwcrLy-{k-8BME<8VDF-Bk%(PO3#G{PhyZP@>$ ze`<`Fr8Guxwoy4*Avv8@?r{|`Uxn-Pg!w+|oK>3frM!;fdDb8wq|Nj0sQncX^zAox zqqODCs;)14+I}fBZLpES)uDOfLk#=KuCv>EN$M5DCY|QDc<m3i7oG;Kc_nFtU~cYY z7erd`cA;{$H{8-S*LG7~sJAWM5$Q<o>z><hep6nE@)uI1vi#J&X*&vqOX!nDqsYYD z%f@a=@Mo1-jV@QK|E&v`;`J*jbD(mrT;@g;w1EB2-<-Vh{>uRLg$<cC1jq1ztm5!w ztnn+t`A17T&%%i<2@iVU*B5GI1o4Adn%PY6hP)YjliH$tu;}V&hi&zm?E|$)+9<E$ zq4tOWudOeEhWd^EM%E-tp^}}HH6*f)B~eI{rNmg8lzo?F49ZTDEZHe3ghm+K3?a*8 zOWF5*pKN0pGu~&aU+@3_p4S<U;~dXC%e|lbxu1K#^8~OHn1~d#;US3Y*|YTGNlV2F zEL}ZD#8};9o0BK#ve@U#aZ%w{Hq?V^c`&&&rvB?^#}!M&zHOZ%O|0EFbt#=*G=yBV zEaK(x`&KFc<l}IP2j=KlNyE4aQ?~r&RkW+~x4{R>Mjgt2?@9_A>>_H&{zS=!N}>oQ zmh0UM>_EQVK1Z8_O`b$zI1KR+8tXhmJTEY|2!_<j`0NhjVliet&4qi<6<o&y83Yuf zYsV_H4Svx$mE`VCu=>|m&e^WW3Sdrr+|x=X#&A=Q_NMVJRg}b-0gx>go{(T;MLg7{ zcYU)se`$M!s(ER(@nBa3Ug_7NUgC@kX@1a~i@S^M(+N1Fur#nLCf<e&yix6U`k3dy zx8{Eku`4=96O8}-{4gN6qTudNd&(_jh40QxX$F!T_h`XQ5Y8Qh5JM~P<vk^Gti2-} z3Hhbw1hBn7$*y;mNs^H2xyx0(D@nNG`^9HaKH{?!GAEupOc)Y8J9btvJINyAAc4hy zzM2gw$$E7#e8nLvci*_VNb+8QgQ~OZ$;~V}2c>BjX^N}~R3SDHglG%A()6y!t65f* z<<)~J9z9jM2KdL)xQ~MuBK;5Vviu}{lWI~~H<isDdGJ-J!cXM>3c~-ZOcsj3d!6JG z*w0C#;&=Ht64tuQvVmuJ8{1W#8)6pxIqLdpFjckU28GHK{@BdZ70}nMzP!z!!@B!* z^`NG`am+r~sD#w0gi7gyyCHX?SK<oOQq&q?hf>{I7D5@ag!mF-uj^p{c|xV8C#TRO zTiRf}H@{1@r07PAjkNCxNrDAUGLiIkE7$GgZeKva^aTB~dHbb|bO?l3Ua>ycHVUBQ zB_=OX{E=Vm&Vlb+O?$dDs4{NUH=o6Gu`|c7+aeE!I+BWxUnMF*Smrw*S(|8_Gv@N~ z9l}mCoZuqtHeaII>VlWpP3`RLGRD{|EtMS0ofKpXRMBOm?)H!}P=GYJ(~B&(Xq1)C z6v3KF9jj>x2o68qBAwssQlo+ah?hEXN6EQD`Ef=)%5#tT#Mh$BWs(HuDVvAEVlDfI zL8TT~x?qRNrJe@Bwd8-6%z_UEH{YDh%HHfMf3H<@eq-A=|72ZGj=X|r4_i1&suP=! z4Xl5L09PT*y~;wlH#VFRsrhxew4Fe+IbYsX!4rlJOh)A+B<<t-bGzz#WT%+2UhTF^ z1X3um<5LsHbS;{uA0uk69X#%%@H=sLv#?BXFHZ-$qx0x^-s19Q^Vi)3Ypve_ijwVp z5Jf1QrgX@+mpw@?WF4+c#=bm{4TVf*wI_=s2VtF|+G$HjgaIIg7a|U1T?e6z$?#_$ zNfm^Vg6yAKj86y`W)JuRxF2>%Rj+Wqv)}DK^}`9;tQxyVYI%wndKHvhP2H8jHU4wc zaoek^VnNxLDa7vM7=NTc=|fZH=n?+IT>7Tk*WY`U(3;?~t+-SZgXp=pJDnKOH9E*+ z)bOn`n(n9b164+vRlO+&huO>`GrUi}!lih0NqxckeS0rztmOW#g<dOrmHPJiqeYj( zDJ1n+*7Qio(gWK2c$encx%}n?%J+peeASF>o;S;@>(u;}+<Nk&3u@fxC*+3)VNe=J z`6l2#QB+V~rH<5+miwIJFkY)DkIh9SZveO>8BYI77GtSh^C;8*ZQcnb!B5+MIN8$9 zn$Unv#TLuxa?kR^N9R;eX3Vcy1dJlMo9|~oWXKNZ`d~D#oskuHvqrnY+JQo-35vDZ zuVxuA3;oSjv%Nv&acDt0?NBEZE2U9~?{(W#j6W3x+%{UA3|Zh$NhX|8bQL5DOA;ih z$FZez1`RL-r{{Q57(P!u_CxtSP6<Uw-JON$ciP$~x$})q)hG%G@@QIhNLlx?@+q`d z2;b^F@I(CCm3gG<U#R=W>l+7ROi^IM_GaY(X4m#xe*aw)b?Miy4x8?w#}Ie=2?uc` zu^*VR#@Kh4G$~YOauLU`Ec!h8dPg=cb8$I$kN%VKA7bN6j+m5_*yR%oW#Sn{dl=7P zY@m(6JRQfGrt&$8KDj$)Z#oo`8o|Wv_%_J1X1b5x$$>cS?3w6pYxD)^OXTNbjE;t= zMj=L|t;*+?W0}wTkLSiEiwkwTQy&Cu!tnP#;x|L<q`q61%eNZgnCduJF7$A}{i<25 z)B%GeRChKqXnIB#Up=knqUbWFDCcN*w%?!c5+#W2vCrAB1FjrIy`-7F`pf`+(XE7$ zH3*Bo_IMu=It%4r=;kro0Qrkg;V;YgmUVqOb*rw!eX!?P)se~_jg^l@rZt9Zm5(}b z4f1zG>v)5hr~7~SP4uv8wS17j?Ac@RmUdLE6Kh9-e!ffpxtXu7XCwcCf9XJr-#jx{ z(t+a*8)911k|k9oq5LI^*x#hGgGAvD%~m+k3=M~*gB$T^XHN<hJ=mF$Yy?~smtVq2 zBs?2O^O}F%U&;B{HXTp(V44h?;B`wQ=nI;fHp@iYN-J(#68|g9GguA-$w;(QdHcQ5 zVTK~<>$?*35g0<m6T0jB>L-7JgH!pOh}(yP=p>t0@K}ZM3uIQJl?<<2?CE8vCkD|U zzEs;}`*m@?ZY1{tjzbiURk^=@!spPI`fKBTf9hUY9I+d*RlKxVRdwUYk%htJ+nomC z-#arDw3W}KQuX$SUTcZ^Gr4UMKrRqpxd*Al&rF}%<z1$V=MBfAE%o*c@#`oi-NvJm zGaT-N5T<0JF-<bO6@wRBN-d7QsdI}F4Q{3rz>ES`o86KUeV29!*Xn-NNt;hzc<ghg z3|36BC9r`ix{iZ=o5#IJspU}P+rl7?yi-_WEPZxzJ4z~x+iPFBYr*9f%I0owQVPUO zLIpbdWy@>w6q4glC>>>(*hmhgUecuy;B~)Eswh2pDC*!Gj3t%a<tf@rIve)Od10Pq zHL-dn-)bW8NW+ee>o}VI8qRn-kF{g$r?84;>73?tR|McWt2P~`I|Lr_lUqFjUkB`; zP&w1|`8hQ!==g@8c+G2-`}VHBubs^FROYU(TUYIj`I7FKb9MgqvFv1zjzuHWO-}dc zS4@7^ODxw!nr%R3;TFax@4o)y{*=_NRUlyXum;Itq@1v_^kJ8+PWzrpE{JDvptkNk zPbm4)uEOAh=YE2gP?U*v7_6L|?u)KoD{M8b>%P&<xn-X-KUkD_oQrTzqdssR2itcc zd9<Z+LG+79L#wtt1g8m$D?f;ViaIVn({)!dT018&f_)oaa?A9c){7o*I;C#+u1R0z zUSO!R{hxl5%in!V_wgmo2ZbGa6nz2P+{6<WKVXo=gz%iMONnEAbF;Wd561Z){e&H^ zy*y8_vnHz0I0Ty4tPuJF(i!duynok!Wv_W}uS0yJ=EsrX5Oh40wZd40YU!or<Ms5S zrg;W`S-IPb&i3fK;hNie?x8|oyT)9{A1<DG-T6?cFZNT@l#cD`M%!c0>37-R*QVrL z-vOEi-Z{Op;09FW>wd<tya*;Z@O|ZJ#^1+H!SI=y@+cumK`*1H?TglraqG|30nW+} z-d~Il0l(m_pRPlhIV{|N^0|^pz?3r<38CcPW1E{b*OAXR#G6)58}?uyvwy38q<(Vo zbbLuyTF$L*`9?!4Ui<6yTs61W*DlRk7$uq|Kd9i@PF`E@MXvaLQ5}=m%V3TyBc7t7 zYHDtucZ<>r&NemV?WI|sMwOjWHf?|^T#&f9@S)asdh6DhLZ+{4a3$8fdCP0oZOY`2 z3+e0f{cu`;$IYbFS3zyn0hNwV&exisjaH_@x<B}GrazshSOdEJ{5rT7h%UFs#l`%W z@DU>i^t)G^Pk*V;$Pc9&s6*W^?tcDAuSZ(Mu<R_+!Q$F9W(dWj%sP%6_JdwaRn~zW zmaoUQrPuukaBF9NTD8M2bXY=DIjxHw(dp&*rcn9}A)u$&25oky$)RVRCT_nLCCPHI zpIL0wgL~4KSSGj@8MCVLY&;_SCA16)8Q=wCL|BaZpCs@SfAApm$GMfWHCL$^S-Tlg zZAHp=bn^1!@h+B+YQjF2%_s|eLQquxN(4#oD3gQImoRdKU50h^JM7!M^4Fhl(V$w@ zv6_nG^IX*%)LgDQgx+u;pMFUwluEY9=i#cZD}*g2i3nlb?fAaCwHRT_MA6B0`%c$m zGBO|cnOB>*`)9HFY<E=uJlkL?Iu;Gxw6d^93|JmI^i=O=VH6i@WiE3M(<LCFzivig zfD%S^rtlBlz9dFjJte;!Z;jy)4q{aGI(lemz4uY?>q@D_-pP=2OjEfV^v?oqL(AhO zT>JaAq!fBxPZ41tk}*rF_lqmO;6P~7R7&2vv|#z6yQB}C1h4DtI9|l+T(}t9_Kmj= z!zu#0CXtB?>dy`w8~I<GRq8p_KxNY6BJzs2L@Vr~ROP3N2D$0|QKR$Tfp=D%wA})m z7>>*z#bR{xRn^p0Mv5|6_x;u)I!2lqE7Vz(KfSo2C2wFiDleIDE2eyXM85Yyo<Rz_ z__obR<{vbnp}#dyS+8!xSz?e~*{>KYK~m$q&nFp<C0POXHniMdyk2uHNppN0HzaVS z#b*$~E=ibn9UKpH_?aQ+{PD4Oe*fgDH<(BHQ36nl9pkNJ^E=&wV!^y8UFL?+Bkd#4 zsqeiAGPN$KF_XGKz{(1Z{#j}GEh3Y2#uVwW)Ar-JcC%Jc?On>}`1RT5{>oe8pR8ZU z8Qg!REWXdPUsO=LV9)FLwr@B4+PdNV&iis`a~)c)jE8;Wd6nzqFUMv_2DtN<8JUs} z>w$-qO(p&D5D6_10P~J>D)|dip(b=~(;z?dCXk0g4*ZEcxhvB)Zac9{{TuMl;bM2H z-kgH*_LqZvjue6=joddbcT}E&vwz%EQD{8*aqrAyp!99$!UJ=%vkab<D1`=@TTj&P z&JEjjn~7bHx}-Cpq}zAHuYdX_Zg@$%WJkCvFnK#tlH|d@tiJONx&5+gRTizGEoy|Q zbMf7gKVH!TWX+cA4H}mYvQK{8X?V`kEd=)(fqQ(vIl}aYI5$ON<Vya37IPgeMwppP z$>KQW{fh-ylEG0dr_5K!G7s0m@YWXLX>C`D(|K5u(6JGzMi}(t$P#kgtSiKwqVG`} z&{hK#Rm?Vx8M`&0g54wfx@^C`cAEacHTBgztT2s+*G2#QDYi~LB48e;Ba?hWDy_Lg zQKdY0qAAbYk9~f>#B8g4te&xt+T_Wh3iN=^d@lrj%Q|O%AXNS`%<^<wtG8fe+^ZGz zfSzw$Qp`oTh3|V5`=40qZ~}<NtJ5uGrfS*!$WEKh!*`5Dd%BF01e8r;i)&p~afpR6 z=0iLTuszg9VlI|sLO)sGRk3f9>dp-G(uox#_l)sZa9F-h_87G&2i|-wW%0ISv%YMX z1MzCJx8pGD^|JxA9=1sg&R1{93<`>wZe1U%5Iz!|)n?axa(-x60P1h}V)s3+rjPTa z?}sP-A8*Y6q$}TYDOI&i+mST5mubfq{<NH*Bm=jge^jLLn>uy31CDCGw*abl3=;w# zM-vY#B~kUCzds+rRRL|r0>2YB<`xmP6nZpNX&EWy&d;j-iii>qr$;l@IGQID>vMl& zg<2ZR`>O*jCQj@ZST{|e@MmzxS(ED{>!&}N;LKjQ`<Ny#d>6qsyK%S8ZM+O^^|6q5 z{kY>mbB>UkZ7P3Y^&I}|WB)d3%B3)04KdW&9e%=HX5M==IyuLHc|fYSfA9WY_#f|0 zpnpc1ToKYa>tM&4a`_?9t*14N=I6$lC%H39D;^w8LiSG}aX@|ITE5$TH$3x=aPU{Q z`q8Gy!*zwCv0vj=mXX3ugYxG&<yFt~WbSMU!S-I}Ay4Y!m=UH;nP|&Z<ak+i@{Otb zUbf*#dOW{p`4Q_Z?0i5pIw}CcS%8Zc7{g4ZlrM0Gs$6bkGH5F_^6qzXr7$z`4xe{v z-SXOu{3Z9t9_U!JOL5sxJ912JQuG}Nf2dUs9o&EV{-Y#;OLSb<$$nz!R0kHcr`noT z)WZ(vhE`tt^HZ`#gaqAN?nP`E6pwEu)y%YabhY2{fq)M(4@w%$T3gM>Na?<lq$$)S z{nXhKojXxEd5O*q8a?I5Lmg=8h*}-CZ)>?}-0E=QC>*Z(dVB2D>$Q8ccRzLPE8bDx zS1jElk~#nfw7whLb;w!JTXgkrdR{K9W_mERF*7z4Lm{d5^CX_z;wTXEE}&MJ>tA9p z@r~OScr9n`Gb;Ld`JC;^Q*OQ`6UY+y;^PO10YD|yyr_%kf#ho@^?{fbKgsUj9dXpp z;?Aiqc&2`F(T#zY3Fj=-CU3+~3=N^!B2us&E;To^oV&T`fo}DAaa!=#&DP<yJuxGT zH_sOp@3?2>ZX5@$HT%u%>7PTF0E$oLto3a6k~)O|wB$YXyf_B%WqsGdLm|sTxx-V% z7F?o5J+ITw_CvS)5Ted)T{TlvUs5puT9$i6IDp1{?%YHy6jkA~F8OH(t|95HKwC+$ zIf}~7?(c~1I+Bxxy9-}cZ8x*s77rgL%CZdyzK!`<IDA!NOJ(#r!cAG$Z>fDN@^L;v zbw%!Alp3gQYuTlj{~Yu%IB1s|&2~z;sCqVRbwmZ}7N^-;KM^2})*68PX*<%sd|)C* z+$%QV>Sj}8YMf`+hT>I{4iI>fnhV@i!2WqskNAFA`_|__vr%lI^R9+D<LER0U+>}K zNB!X9s+?`-Oc&GG6Win}+qNX)urFa^dGcxNAD2YY%lFf<7v`(5kLO>c?0)KYl7?G6 z^8Bm1bdLeo9wzL%dol?GMNb_|-M6%kXBZw4d4B8($1`;N5vHZE@tEorO}4YCIOI5Y z0*r+KpmeyE1U^=hFF2IpiEVJR<z`RZD#7ct#itWool*GgzJq?z-Dn!gHU4MBJBK&h z6t2B%(H5pHp<uG>PtfZ`buN2YKnrE!rAyLJcSvcGs>3yLM!o%aH#&BaGZ@H#OKj*E z^Y1DfS;|WTvXD#f5v;YAu9a5uwt!zYHu+u5-~tf&kD!DQ6dH)@g8t!`?JV%zudj92 zaay<el#WofvE02_e@({9T&O#Sx^~OBjr$-b07W`KvL<H~@ZnLG)Izji_x3$cbKQ}v zx6_;0t}D!He>Ir7jZWG5xYgjy(xEElEB>MFb5@e%;HboPudMJ^+}ctSHI?6;dmF{+ zgb91R-dKZgNmNK6?c#EUP@L%}E)(J3$|_%Q#kpIx8jqIM-Cc#c#i=Kd;|ZPEmPu&{ zUuM8D;!$3P>UQ<Vui)tvV|w*4UdmnPkcs~D7UCdGGYMRDpM+n3{Z<e5?gg{u({}de zfW<f7@3PS)zQ+`+x3>-xVMg;$IbjDGW<KFDPEXg*b~Ld7{ty)a=~Ct?_kyo7B5I>1 zXIR2Zalr$o@g*ULej2=%nnv^2GB{gg)(o$9GUE83ZF$)=qo1_Qy`{Yf1Ay{Z5k5{y zBt9hLON5%J%NnaGZB8lOFPQRM=Pgz*EiMvE{~GQK3~>R-K$?&*&==Zr^cA{P5;xQ& z=8Rr1z7|gFU|-qE%eAD-&!@MLH@_UP8&Y(}*Ven4DHFC|f&HnH^(B*P-SXsmwH@>u zXA``K8-vQYY%yXouB$QQ<KuPRCs&s(vYyiQ{Hn6gh1r!aRgS$()t`2U^`MmsTxiX| zI26s&J?{3~UHL9P{zi*hfkaE?Rj)uI9Cq^Jy|6Ej#dwye&kT<;jKdJN58&2~LfygC z%2%h-+aEkQ6Mb(>WPM@Zgm^oL_uyH{S-AOS%YC=OSLvCF?&}kfolv-8ZSuY4oUtRz zby5e6HkMh_Z?p5xuNnVxFpLiDygYx+L*)YVCp<CH`Vhd6nR}7;pAb1o9Ri&_9$r70 zpjHM1l0cb^1W<x1Y1sJzLpZ#GH+j`muP`^l5Q3S7Sk*3WLmrlj(Rgb2y>uzO@vp*x zu7{fnDo?&E!L_{8_aQLZ^{MMsuKg~weZD_#yWtQyjB7jSP#);kgf0(is;hRRpAPpv z+s8sy`eiI;SqEpKAn_~?mA|;GcTh%G>8)alS3~jt&F5a!AEUHP@5%<n;zyQL)4m?^ zHX6+Jph*`xq$J=yh`H}Nh?79A$X_~TwaFulkD)%J%U8N&fc5mdzn^s|1(Pdw-hGn- z#o>!m%WJ#n_t_kj`yOAoH^03XV+^h2bo*L17aLRNncp-;+z)(z8yuGK9@FQ%U|Mnk z;Ll3~)XJGDV~utAZcsh8?W?-tOA8%SSD00$P8dbD?w>%dV2&pfm4RVh%W{q?l5$L; zR!mVNm0$!O+CMO)^4>XmdU*fE1Cy~S!tk!iUT(G&you+|w`t}kCDP=gV~~mkcS4NQ znC`59jZj~?Z4a%>7Hx0;Xavi+$X}0)qMr~+14?1GF+)8J!zD>rDu7I!_N9s&&OOVh z>=6e}CPI>6$U{>x8cCg=1-BSsF6p4PD?-J%D2soH-O<Qtfm^RFdqY3deX&SHNA2Zm zjUmL<j*V<R)um}kDV(m#WX$~OVJ8>UWAXy+ECw>W#(1wk(wR>7E1(QtU{Vzc<`B7< zDDR{A)gVtk!eLu!63H9b>5wSy>Rtt^eLhwlrpZL&fQ4rRMd4Y-LSRWJT*nVQ+(7q2 zy7SHL)mJ?d%uyLDS%M?m;n2{4QfiZ3EAF`=&f=p~IZy?7Q_<p`%j*xv#H+Zugyt{Z zZes)?=ov@lf2b5i53cSND`<=b)4CT_|4iCJNUZCTs0#3)W68u>LoY5H{%EZ?EAt?% zPa0Wk{dRACy?Uh`<bV`>7-x;Hfrjxdl);sbYSal)@C0t#Su96S1v;M$D4%e!QjYMK z&4{a$UX&cQYMxrwWCrDEjW@Rc$>Zmf!6sC_MR7BHzDNm_as8PY!(-MgCI{-u&d=Qy zx{rxWAQ3cx`20FB*$SP{J<m)(?CeYR@E~L+aF-y1B$dXLJk1Xf&-oJI-6M5(y*$dB zIFDGSGK2;gm@e73L}y&TqWi9SY0Q-UEO!5<K+?ehS=27TH@5%Df56Xv;ri&s<*CUu zq3%rT?^nv0KWwQ+>fJqpih`W|ge4gRJ7jVQ1R5)(+A3((7j>oJIG@#h^RSZigbN9; z^dtp&LY&|Kw7|Xo5Co#clRJZ!-z-X&<xXW{jQM9X?26X!pyyRiK-~vQ&L(jKfls)_ z@9%rFL<NyD%Rsv9NnU(O7?#w_b9<4pQ4mxCSlN%$$DZZz8tek-%6aovydTHa=HS(r zYUR`$6->cdiF%jCt|*CA)vhuIu;XR>d@tp8$(ixITN&te-Y8G6^ki-d-1VUN-rpRv zo%q!J<#-eNHM)4{NZbD3H@|fbC^|CgZnA6()Ks7f6fSMz1(Y1yw}$u}`LPgoz~ITX zSV2bG0fv?=TSq9>uCwOIyl~pnR@0m~?Uu~|!z|f#pLZkZF*9)<5}|X;Yn3oL+4{%1 z?}dPa)jfO8`z3WQ|HXJ&|4GnEG~1Bs(x%c4F3|DIm28rE=4jy}Z2M9iwW7^&?4l^G zV=}e<bt@T%EM;H0WEqo?#btYjB!a+SXQc<(w>CwF{!2A6wo~#CVc){A=%@qWw~zw2 z`j@yG@PsG~^7=)FLcCLCffN|)UM$7C@wlwhpFq*<33EhBaW~O!zq)(DEdDP5+3SOJ zvF~aXgl&O>%5_=)t^0;yy4qj;Ey8_(W#2_}2D)~mb?BM!ndUSy5&(QIqOJv`sY>jE z9i-N!FKkWde`>Zux1>Oe#kK&J_)?9IHKjFmlpbyBIf&uR<!Al*%k4IoBrtNYtBrJ2 z(e^Cl1?yRXegGwvS2*uj>;398WwUF40W$kESnzL=OeZ^*zCLvvV%->p`vP{*wsfu} z#{Nm^%>1WXS_jf4s$Z*3n;#9gLxFXiq~0jLuPpaU>2*2N$XelfP$i^M{zpOfL8e&( zv8_;};s(MkMD=wd9pi^BTB|n9l^ds6@Hn*@1bs454p>8L2<5f5V5dq5rCxknI<Hrt z>g83Qh8@?(3#>q4{l^s5sA7fGtjBeR9HXff)75|k{Pp_$U25E!pjI@q1|(pjSoCf# zFR*7w@OeNHOV--p#%nKsUeCTjA9J$?g1NZlh>u~w<p6D2-%Wgw;V<d<zp(H^O`oAY zYCs+ccR~@!!&Blhg$_e%G)j&7v|J#C173OfP<i~mx|j0}Dt&dn1bJNM*$NTv{+hzn z<9Cy`ZLwxqDxc+iYg37(lK+K1wQ2IsK9@5Gre*ewTrM>O`pufwWv5nqdV&xCh7<=V zro1t%UXg#M%*CKtFDK*YHxLMy3E%QcA+bH=4dnixVy+IKJvehiUdjpsDj`><;Ps-x z$N;adCpvlI2|s!wEb!WsNJK5bF)_tqgnoEc2=IuBfE4#kOse<sNhPGHC+7>a<hj0n z6UQ}D9d}Y9Qys5~(0}|ZA_h3pgN4D1fb?D=YnYZ~y%kT6P5M{1mp<u(>3f-NiX<>x z9pt<=SVCvFw)vI%_Gw&V*&Dn}m#n{Y?Y37%X%SAyrmc&2;6Vna(<C7JuLtO4w~^bO z_9$(3fYm)@P@8Ev$6Yn9C90BMOKY7sqC{|>&Qf2<de#b|1676y@LUuj^6O5Bgf|=I z+Y%+8CHu92K56a3Gx8v`g~lcR7up8N8$8TvjR2#zpL@}kvg)gw8O#n1B}vm0*N|fU zPc$PAr1f|ej_U^2vcR$=333ld+G-l@{Eu?%C*STJ(~e2W>=sW!OI}j^Z!3Zyo&%Ql zO*<Se2pTWaD2n#5w|#xTZ@gVVVv1MV<;GY9#v5`C@gl4+-rgjbd2HImnqqj+=~PdI z_v4W<1~<%wt<re(amem?goHuho)t!p!w>SW&MegZ3M4&g8>OX203d&|+)5^X7TobI z<_&P62+<jx5fo#==TAvrVRRtfK&_02J@1A=kZ*bvnG9w-B6~G`hu6QY{@hAkTrS9I zss0PG-Dk)W$+W_!Wbg-Lmex~ca#;xmR-8}Gc!IhOOg_~t72K0~9`K+=T53E*4(g)N z4Z|qrI++e{&n$i5CwzQ7+-UdHDondIWXnrh3?HhQmN3p#MP~vw;14-}#0o4=!aaLH zAEaGFEJ3&KDZWk?QSRd0I|DA)bi&`?v-|;riu=A%I`_dDwbCL!Xt`%;_9m8ofU_lI zKD>7=BSo8+6vo`!U*4k~qWPEf2XBDmOKyoYj|aLxKV?J!P@=T?O6ZgsHO5<m&xbSQ zAkKigBOnC!9k?hY#IeSW`m5|3cK%wrai(-lfqf#_g)c4tMcD2F@-A$*ei{e6ASZIs z>Dxp9KJe@^3fwoOYUzZ#aUXBpF&>_<-EQyGw%?)6XP4FsT8Xf}{WT>8V<0az-ZlGE z&jAc219(FruR1;pur^7uJG|_~PG`RRzBxlyTFsKf+6OL(?>Pe*`K$nf>ptEm$uKtU zk~C#kYtw61g6U$64`gJmG5_&{{pxe7?JH;gV#1~8VBBf5GGVZf9KzX>gcB8K!)kdh zfr3`f`S9CQ$Z=={5;RbqXV!r^r4>Hj*<)^5RYBeTj7Am+n*&5-IHvlSQBi`-bl&ba z$rTm42>YhLgp50}K+!a)EiI3!{9^IL*+cg>fU<MBD?sI|%rz)<sPtI-kVJjXW3HpO z(HFZN^G^Ag#s9Yb3eadYUJ;&j1RVV%YD%+B|K2OUpq=PU0B-t`hmqir#d{`DPZ!{& zLL9@IpjJ#dBb;)sp^9y&o{J<KSd@=r6~?5uN$;P~H6H~bL8w9duLbc1`%-^_T74U4 zg_0XsDHtMR<~v4BCXkSz6D!>G^_+vg92$q>xhq*WzruV4=Clu(A<1cUl{Qqr=2|m& zy(~|qc{6KvOO^b8M%JRg>fKPKgFyXm9UTg*e=E(Eo~|5wVwLaeSYzpeRHUOT*kCu* z3YXdDPOgE2z_KpgC1u4`($qmpS;Lcu{&J1YZu@0VYUdg0F5jIm9AsYpGf6Pd&+>r2 z;8oFQxdAXHumm+%&`A>Fl0eU5WP!uxeS9TZ8hgM0-Ffw)6KM9d_W$Nx+h`mc`@c=| zF)&S~)d-JTV4C{sRv^Lkj5!t&UbUAr!k&j!9fHuA5{=qY#C4ly`6zl|m@ftl-}_^; zcq*X!^R>1%$23ldiKn7Fk>~(dqYZQVm-AsGjD^5${**vGPk}ieSDH8rLXX-eNB~KG zQe1Dpi=kGeqKlG~^qM5DjInc8P9QOtk?7CY8pmc|Z63^iF5@+l_+sE<wO`$*Ftj54 zpNU=ogPl{kxI&iA?ASmy=`J7=XSH>tbP5vL;$#>P3h?2)k@EZ-+I$<JaF_%ZAG3OM z=9`0E_@;^uw6Zdl1e{53%Pjdn^j8Dmzv=P260Q$;h|BRR+O>V25xj)Dr&pv_-)IOn zP#!c=;+eB~+gkV8tQ&nzB{R=-X0*+9^b}M#Y<U?^+QR-B(p`W>W#YRr<k3@8)rL~a zX(b64-!NytiTkpx6mYcMUfcfq8IFVL(itT){6xzGi}D&r{C>*0_$%^LwF*gYaaKI= z-D7lm(EgS1RN`Nd3r-RQrtcme!+nm7dcnn)MuB*D-t3WRoe2Mi&(&s7u0Wg(-U&-^ z8>DW)h!miI6pl__-wBPL#$SG-=UDuX>0klq)^Zeg|E=3f9ZZ$cX7UDk?vEs>60UgE z2e(#&Y|CHJYml>wBL0x_K0X<+0RMZ@bB->uzME?wto?_)>y#e$hduea<;9=<>FD2c zd7)MXj0h{-yh<i+*;?SkCd;ll`nLDp@e_z^NW};si_K*i7)fa?d)_`8_$lpt;rn<C zgKIZq2U_yo$B3?R5#e(!TV6Rmp9KC5N$!}$+BHj%11jkM11whz6o*}r{l0q!4KFcb z1?r$x(g1wRYy2{0*GJ!+c9ndt1bMnl<S#WpUCs2r_(>48D7ls3ifkV_Y6K?<zvz5T zl)S2XA5X^$I|N0zCk~$5Cnd?t1x$sdCYoG|UbnoWWMA@2*~s`F1Z0e)rwuB9j2isB z16otjGL|EM{aOw5)GQ&TijSSr<q5|ILLWRWdvKKFKpq4L5QgAy_FsB*fc_$UbNcG2 zsc{;>A9huf-=|65e|m$UFRIE)ePqTHT)|IKx!H8bgvayg9lxinH7nDqPv2unEV(QF z9k6j(887D_B$)kBO;-d1P9kW_E6EJgUs*+PP!bm#zRY{{__O~^I~xXKSmn1I8|~j) z=tg}GdCjO#g=t+WsA`=zxZB`T@phHOWcbo;Wl3CPD!D5dmr<kDT=MPK5Pb4>`&g)( zQxVGhI?Wb9j2lmWUHEr2m%!1ynd~(AJuZwsMld2hF*%NLZWc73HPR&(djCk$1HXFw zCQDqRgR^(WYQ5~w<4~DBSBR60AX~6&N&QO@$ng-IjK|xN-@43aDN3)wtZ(ha%-Q_! zTtUtLK6l=PiUfmpY{1CHKzyTUK#1)lCvd6LZN@Wi5b_B-&uxx<>V`l3UwMsAb|5uJ zEkyy;V?_4%wAGYYbzmJ5yZooON+;GyfRaL<f#(mvphqTZsiWcQz5RKkN?Llm6G7_x z)g>)SA{h75@iPwjwymH39r|ZgfIoeZu(OopF)z_jntdSv0!H;=EAv`-=0$-*fn_sL zIow|?tlG|$Rw`Vi``%A%mFb&5?xfFC@(@y_`&X(1Yu^?CtCm8JNRfvE$#2BL?pr}^ zi?`p6qE*HB{JCO}6z}gDnU;;_4FBBnVj~>nNVMTX$LRi(f5{5)5i-Z5kV*S((>Fyf zX3EtB1oNU+c%OFT3gi>IzkrUaCHNy0;vYbrA!k3*x7MEjHj;^bGJP;4v*{$zS3^o& z?x){zK4l%ps|CC#JguDU&c9y*AjRS354fyPUO>i8HNhYG+*Ms3#0mc;B&NhfPm~Q0 zY+7t(g!!M5Py-_o4C*}hhY)j+DKPh*hNz0;I^VOvg)18{27l03w5#SS@$X-B$;E&V zjm@3EA0(M)36ewXJ+M@r^OcD(gfJu%%M)Wr)#OEqs<%1)8J7&S>43N-@bY=b{hlnv z>4hTz#hT;QyIxXC=lU*{m~)%}v-7cV3`qFr8#Lsq$b`CW@^2gNWq1%XnAD{{A=s{( z6h48>O7D7rF0E`*JYslA^R6V#Agbiw+x<`e6$COqG7JCi>-!CWT_z5Rv5fyl4;Hrk z%YZ%{BtyR=%PR11G%-$E`*%ktw<d+acxve^j~m>9bRs_-DKfpDDa8Zw65J{Jv*-Wq dMholi;b+%;xa{z=N(%6GUF+u6VhyX1{{!?kDDwaS diff --git a/ruoyi-ui/src/assets/404_images/404_cloud.png b/ruoyi-ui/src/assets/404_images/404_cloud.png deleted file mode 100644 index c6281d09013e0a2c5f8e699a0a6038d9480291e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4766 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 diff --git a/ruoyi-ui/src/assets/icons/index.js b/ruoyi-ui/src/assets/icons/index.js deleted file mode 100644 index 2c6b309..0000000 --- a/ruoyi-ui/src/assets/icons/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import Vue from 'vue' -import SvgIcon from '@/components/SvgIcon'// svg component - -// register globally -Vue.component('svg-icon', SvgIcon) - -const req = require.context('./svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys().map(requireContext) -requireAll(req) diff --git a/ruoyi-ui/src/assets/icons/svg/404.svg b/ruoyi-ui/src/assets/icons/svg/404.svg deleted file mode 100644 index 6df5019..0000000 --- a/ruoyi-ui/src/assets/icons/svg/404.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/bug.svg b/ruoyi-ui/src/assets/icons/svg/bug.svg deleted file mode 100644 index 05a150d..0000000 --- a/ruoyi-ui/src/assets/icons/svg/bug.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M127.88 73.143c0 1.412-.506 2.635-1.518 3.669-1.011 1.033-2.209 1.55-3.592 1.55h-17.887c0 9.296-1.783 17.178-5.35 23.645l16.609 17.044c1.011 1.034 1.517 2.257 1.517 3.67 0 1.412-.506 2.635-1.517 3.668-.958 1.033-2.155 1.55-3.593 1.55-1.438 0-2.635-.517-3.593-1.55l-15.811-16.063a15.49 15.49 0 0 1-1.196 1.06c-.532.434-1.65 1.208-3.353 2.322a50.104 50.104 0 0 1-5.192 2.974c-1.758.87-3.94 1.658-6.546 2.364-2.607.706-5.189 1.06-7.748 1.06V47.044H58.89v73.062c-2.716 0-5.417-.367-8.106-1.102-2.688-.734-5.003-1.631-6.945-2.692a66.769 66.769 0 0 1-5.268-3.179c-1.571-1.057-2.73-1.94-3.476-2.65L33.9 109.34l-14.611 16.877c-1.066 1.14-2.344 1.711-3.833 1.711-1.277 0-2.422-.434-3.434-1.304-1.012-.978-1.557-2.187-1.635-3.627-.079-1.44.333-2.705 1.236-3.794l16.129-18.51c-3.087-6.197-4.63-13.644-4.63-22.342H5.235c-1.383 0-2.58-.517-3.592-1.55S.125 74.545.125 73.132c0-1.412.506-2.635 1.518-3.668 1.012-1.034 2.21-1.55 3.592-1.55h17.887V43.939L9.308 29.833c-1.012-1.033-1.517-2.256-1.517-3.669 0-1.412.505-2.635 1.517-3.668 1.012-1.034 2.21-1.55 3.593-1.55s2.58.516 3.593 1.55l13.813 14.106h67.396l13.814-14.106c1.012-1.034 2.21-1.55 3.592-1.55 1.384 0 2.581.516 3.593 1.55 1.012 1.033 1.518 2.256 1.518 3.668 0 1.413-.506 2.636-1.518 3.67l-13.814 14.105v23.975h17.887c1.383 0 2.58.516 3.593 1.55 1.011 1.033 1.517 2.256 1.517 3.668l-.005.01zM89.552 26.175H38.448c0-7.23 2.489-13.386 7.466-18.469C50.892 2.623 56.92.082 64 .082c7.08 0 13.108 2.541 18.086 7.624 4.977 5.083 7.466 11.24 7.466 18.469z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/build.svg b/ruoyi-ui/src/assets/icons/svg/build.svg deleted file mode 100644 index 97c4688..0000000 --- a/ruoyi-ui/src/assets/icons/svg/build.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899741379" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2054" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M960 591.424V368.96c0-0.288 0.16-0.512 0.16-0.768S960 367.68 960 367.424V192a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v175.424c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768v222.464c0 0.288-0.16 0.512-0.16 0.768s0.16 0.48 0.16 0.768V864a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32v-271.04c0-0.288 0.16-0.512 0.16-0.768S960 591.68 960 591.424z m-560-31.232v-160H608v160h-208z m208 64V832h-208v-207.808H608z m-480-224h208v160H128v-160z m544 0h224v160h-224v-160zM896 224v112.192H128V224h768zM128 624.192h208V832H128v-207.808zM672 832v-207.808h224V832h-224z" p-id="2055"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/button.svg b/ruoyi-ui/src/assets/icons/svg/button.svg deleted file mode 100644 index 904fddc..0000000 --- a/ruoyi-ui/src/assets/icons/svg/button.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1588670460195" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1314" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M230.4 307.712c13.824 0 25.088-11.264 25.088-25.088 0-100.352 81.92-182.272 182.272-182.272s182.272 81.408 182.272 182.272c0 13.824 11.264 25.088 25.088 25.088s25.088-11.264 24.576-25.088c0-127.488-103.936-231.936-231.936-231.936S205.824 154.624 205.824 282.624c-0.512 14.336 10.752 25.088 24.576 25.088z m564.736 234.496c-11.264 0-21.504 2.048-31.232 6.144 0-44.544-40.448-81.92-88.064-81.92-14.848 0-28.16 3.584-39.936 10.24-13.824-28.16-44.544-48.128-78.848-48.128-12.288 0-24.576 2.56-35.328 7.68V284.16c0-45.568-37.888-81.92-84.48-81.92s-84.48 36.864-84.48 81.92v348.672l-69.12-112.64c-18.432-28.16-58.368-36.864-91.136-19.968-26.624 14.336-46.592 47.104-30.208 88.064 3.072 8.192 76.8 205.312 171.52 311.296 0 0 28.16 24.576 43.008 58.88 4.096 9.728 13.312 15.36 22.528 15.36 3.072 0 6.656-0.512 9.728-2.048 12.288-5.12 18.432-19.968 12.8-32.256-19.456-44.544-53.76-74.752-53.76-74.752C281.6 768 209.408 573.44 208.384 570.88c-5.12-12.8-2.56-20.992 7.168-26.112 9.216-4.608 21.504-4.608 26.112 2.56l113.152 184.32c4.096 8.704 12.8 14.336 22.528 14.336 13.824 0 25.088-10.752 25.088-25.088V284.16c0-17.92 15.36-32.256 34.816-32.256s34.816 14.336 34.816 32.256v284.16c0 13.824 10.24 25.088 24.576 25.088 13.824 0 25.088-11.264 25.088-25.088v-57.344c0-17.92 15.36-32.768 34.816-32.768 19.968 0 37.376 15.36 37.376 32.768v95.232c0 7.168 3.072 13.312 7.68 17.92 4.608 4.608 10.752 7.168 17.92 7.168 13.824 0 24.576-11.264 24.576-25.088V547.84c0-18.432 13.824-32.256 32.256-32.256 20.48 0 38.912 15.36 38.912 32.256v95.232c0 13.824 11.264 25.088 25.088 25.088s24.576-11.264 25.088-25.088v-18.944c0-18.944 12.8-32.256 30.72-32.256 18.432 0 22.528 18.944 22.528 31.744 0 1.024-11.776 99.84-50.688 173.056-30.72 58.368-45.056 112.128-51.2 146.944-2.56 13.312 6.656 26.112 19.968 28.672 1.536 0 3.072 0.512 4.608 0.512 11.776 0 22.016-8.192 24.064-20.48 5.632-31.232 18.432-79.36 46.08-132.608 43.52-81.92 55.808-186.88 56.32-193.536-0.512-50.688-29.696-83.968-72.704-83.968z"></path></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/cascader.svg b/ruoyi-ui/src/assets/icons/svg/cascader.svg deleted file mode 100644 index e256024..0000000 --- a/ruoyi-ui/src/assets/icons/svg/cascader.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1576153230908" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="971" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M772.87036133 734.06115723c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714843H475.90991211c-56.60705567 0-102.66723633-46.06018067-102.66723633-102.66723633V600.82446289h305.859375c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012S827.9942627 467.50537109 772.87036133 467.50537109c-43.34106445 0-80.00793458 27.93273926-93.76831055 66.57714844H373.24267578V401.01062011h321.92687989c55.12390137 0 99.94812012-44.82421875 99.94812011-99.94812011V190.07312011C795.11767578 134.94921875 750.29345703 90.125 695.16955567 90.125H251.12963867C196.0057373 90.125 151.18151855 134.94921875 151.18151855 190.07312011V301.0625c0 55.12390137 44.82421875 99.94812012 99.94812012 99.94812012h55.53588867v296.96044921c0 93.35632325 75.97045898 169.32678223 169.32678224 169.32678223h203.19213866c13.76037598 38.64440918 50.42724609 66.57714844 93.76831055 66.57714844 55.12390137 0 99.94812012-44.82421875 99.94812012-99.94812012s-44.90661622-99.86572266-100.03051758-99.86572265z m0-199.89624024c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857423s-14.91394043 33.28857422-33.28857422 33.28857421-33.28857422-14.91394043-33.28857422-33.28857421 14.91394043-33.28857422 33.28857422-33.28857422zM217.75866699 301.0625V190.07312011c0-18.37463379 14.91394043-33.28857422 33.28857423-33.28857421h444.03991698c18.37463379 0 33.28857422 14.91394043 33.28857422 33.28857422V301.0625c0 18.37463379-14.91394043 33.28857422-33.28857422 33.28857422H251.12963867c-18.37463379 0-33.37097168-14.91394043-33.37097168-33.28857422z m555.11169434 566.23535156c-18.37463379 0-33.28857422-14.91394043-33.28857422-33.28857422 0-18.37463379 14.91394043-33.28857422 33.28857422-33.28857422s33.28857422 14.91394043 33.28857422 33.28857422c0.08239747 18.29223633-14.91394043 33.28857422-33.28857422 33.28857422z" p-id="972"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/chart.svg b/ruoyi-ui/src/assets/icons/svg/chart.svg deleted file mode 100644 index 27728fb..0000000 --- a/ruoyi-ui/src/assets/icons/svg/chart.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h36.571V128H0V54.857zM91.429 27.43H128V128H91.429V27.429zM45.714 0h36.572v128H45.714V0z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/checkbox.svg b/ruoyi-ui/src/assets/icons/svg/checkbox.svg deleted file mode 100644 index 013fd3a..0000000 --- a/ruoyi-ui/src/assets/icons/svg/checkbox.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575982282951" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="902" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M828.40625 90.125H195.59375C137.375 90.125 90.125 137.375 90.125 195.59375v632.8125c0 58.21875 47.25 105.46875 105.46875 105.46875h632.8125c58.21875 0 105.46875-47.25 105.46875-105.46875V195.59375c0-58.21875-47.25-105.46875-105.46875-105.46875z m52.734375 738.28125c0 29.16-23.57015625 52.734375-52.734375 52.734375H195.59375c-29.109375 0-52.734375-23.574375-52.734375-52.734375V195.59375c0-29.109375 23.625-52.734375 52.734375-52.734375h632.8125c29.16 0 52.734375 23.625 52.734375 52.734375v632.8125z" p-id="903"></path><path d="M421.52890625 709.55984375a36.28125 36.28125 0 0 1-27.55265625-12.66890625L205.17453125 476.613125a36.28546875 36.28546875 0 0 1 55.10109375-47.22890625l164.986875 192.4846875 342.16171875-298.48078125a36.2896875 36.2896875 0 0 1 47.70984375 54.68765625L445.3859375 700.6203125a36.3234375 36.3234375 0 0 1-23.85703125 8.93953125z" p-id="904"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/clipboard.svg b/ruoyi-ui/src/assets/icons/svg/clipboard.svg deleted file mode 100644 index 90923ff..0000000 --- a/ruoyi-ui/src/assets/icons/svg/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.857 118.857h64V73.143H89.143c-1.902 0-3.52-.668-4.855-2.002-1.335-1.335-2.002-2.954-2.002-4.855V36.57H54.857v82.286zM73.143 16v-4.571a2.2 2.2 0 0 0-.677-1.61 2.198 2.198 0 0 0-1.609-.676H20.571c-.621 0-1.158.225-1.609.676a2.198 2.198 0 0 0-.676 1.61V16a2.2 2.2 0 0 0 .676 1.61c.451.45.988.676 1.61.676h50.285c.622 0 1.158-.226 1.61-.677.45-.45.676-.987.676-1.609zm18.286 48h21.357L91.43 42.642V64zM128 73.143v48c0 1.902-.667 3.52-2.002 4.855-1.335 1.335-2.953 2.002-4.855 2.002H52.57c-1.901 0-3.52-.667-4.854-2.002-1.335-1.335-2.003-2.953-2.003-4.855v-11.429H6.857c-1.902 0-3.52-.667-4.855-2.002C.667 106.377 0 104.759 0 102.857v-96c0-1.902.667-3.52 2.002-4.855C3.337.667 4.955 0 6.857 0h77.714c1.902 0 3.52.667 4.855 2.002 1.335 1.335 2.003 2.953 2.003 4.855V30.29c1 .622 1.856 1.29 2.569 2.003l29.147 29.147c1.335 1.335 2.478 3.145 3.429 5.43.95 2.287 1.426 4.383 1.426 6.291v-.018z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/code.svg b/ruoyi-ui/src/assets/icons/svg/code.svg deleted file mode 100644 index 5f9c5ab..0000000 --- a/ruoyi-ui/src/assets/icons/svg/code.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1546567861908" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2422" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M318.577778 819.2L17.066667 512l301.511111-307.2 45.511111 45.511111L96.711111 512l267.377778 261.688889zM705.422222 819.2l-45.511111-45.511111L927.288889 512l-267.377778-261.688889 45.511111-45.511111L1006.933333 512zM540.785778 221.866667l55.751111 11.150222L483.157333 802.133333l-55.751111-11.093333z" p-id="2423"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/color.svg b/ruoyi-ui/src/assets/icons/svg/color.svg deleted file mode 100644 index 44a81aa..0000000 --- a/ruoyi-ui/src/assets/icons/svg/color.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577252187056" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2508" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M747.59340925 691.12859384c11.51396329 0.25305413 22.43746719-0.21087818 40.74171707-1.51832482 29.35428085-2.10878421 35.84933734-2.36183835 46.47761114-0.8856895 24.71495444 3.37405491 41.12129828 21.76265671 32.47528161 47.95376084-85.57447632 258.19957947-442.00123984 249.76444099-628.67084683 50.73735554-153.47733892-159.33976008-153.09775772-414.41833795 0.92786545-573.42069196 159.71934128-162.67163983 424.03439521-166.59397897 565.78689185 0.63263534 80.38686649 94.81095318 108.34934958 169.16669549 89.11723508 230.57450162-15.01454608 47.99593598-50.61082928 77.68762207-119.77896259 114.63352789-4.89237973 2.65706845-29.35428085 15.52065436-35.84933652 19.02123633-46.94154346 25.30541465-63.51659033 41.20565021-62.20914449 58.45550757 2.95229856 39.13904114 24.16667102 52.7196135 70.98168823 53.81618115z m44.41100207 50.10472101c-19.82257471 1.43397372-32.05352527 1.940082-45.63409763 1.6448519-70.34905207-1.60267593-115.98314969-30.91478165-121.38163769-101.64341492-3.45840683-46.05585397 24.7571304-73.13264758 89.24376132-107.96976837 6.7902866-3.66928501 31.37871396-16.57504688 36.06021551-19.06341229 57.69634516-30.83042972 85.15271997-53.73183005 94.76877722-84.47790866 12.77923398-40.78389304-9.10994898-98.94417051-79.24812286-181.6507002-121.17075953-142.97559219-350.14258521-139.60153647-489.2380134 2.06660824-134.49827774 138.84237405-134.79350784 362.12048163-0.42175717 501.637667 158.53842169 168.99799328 451.9968783 181.18676788 534.57688175-11.80919339-4.68150156 0.2952301-10.71262573 0.67481131-18.72600705 1.26527069z" p-id="2509"></path><path d="M346.03865637 637.18588562a78.82636652 78.82636652 0 0 0 78.32025825-79.29029883c0-43.69401562-35.005823-79.29029883-78.32025825-79.29029882a78.82636652 78.82636652 0 0 0-78.36243338 79.29029882c0 43.69401562 35.005823 79.29029883 78.36243338 79.29029883z m0-51.7495729a27.07679361 27.07679361 0 0 1-26.5706845-27.54072593c0-15.30977536 11.97789643-27.54072593 26.5706845-27.54072592 14.55061295 0 26.57068533 12.23095057 26.57068533 27.54072592a27.07679361 27.07679361 0 0 1-26.57068533 27.54072593zM475.7289063 807.11174353a78.82636652 78.82636652 0 0 0 78.3624334-79.29029882c0-43.69401562-34.96364785-79.29029883-78.32025825-79.29029883a78.82636652 78.82636652 0 0 0-78.32025742 79.29029883c0 43.69401562 34.96364785 79.29029883 78.32025742 79.29029882z m0-51.74957208a27.07679361 27.07679361 0 0 1-26.57068532-27.54072674c0-15.30977536 12.06224753-27.54072593 26.57068532-27.54072593 14.59278892 0 26.57068533 12.23095057 26.57068453 27.54072593a27.07679361 27.07679361 0 0 1-26.57068453 27.54072674zM601.24376214 377.21492718a78.82636652 78.82636652 0 0 0 78.32025742-79.29029883c0-43.69401562-34.96364785-79.29029883-78.32025742-79.29029882a78.82636652 78.82636652 0 0 0-78.32025823 79.29029883c0 43.69401562 34.96364785 79.29029883 78.32025824 79.29029883z m1e-8-51.74957208a27.07679361 27.07679361 0 0 1-26.57068534-27.54072675c0-15.30977536 11.97789643-27.54072593 26.57068534-27.54072591 14.55061295 0 26.57068533 12.23095057 26.57068451 27.54072592a27.07679361 27.07679361 0 0 1-26.57068451 27.54072674zM378.80916809 433.85687983a78.82636652 78.82636652 0 0 0 78.32025824-79.29029883c0-43.69401562-34.96364785-79.29029883-78.32025824-79.29029802a78.82636652 78.82636652 0 0 0-78.32025742 79.29029802c0 43.69401562 34.96364785 79.29029883 78.32025742 79.29029883z m0-51.74957209a27.07679361 27.07679361 0 0 1-26.57068451-27.54072674c0-15.30977536 11.97789643-27.54072593 26.57068451-27.54072593 14.55061295 0 26.57068533 12.23095057 26.57068533 27.54072593a27.07679361 27.07679361 0 0 1-26.57068533 27.54072674z" p-id="2510"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/component.svg b/ruoyi-ui/src/assets/icons/svg/component.svg deleted file mode 100644 index 29c3458..0000000 --- a/ruoyi-ui/src/assets/icons/svg/component.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575804206892" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3145" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M826.56 470.016c-32.896 0-64.384 12.288-89.984 35.52l0-104.96c0-62.208-50.496-112.832-112.64-113.088L623.936 287.04 519.552 287.104C541.824 262.72 554.56 230.72 554.56 197.12c0-73.536-59.904-133.44-133.504-133.44-73.472 0-133.376 59.904-133.376 133.44 0 32.896 12.224 64.256 35.52 89.984L175.232 287.104l0 0.576C113.728 288.704 64 338.88 64 400.576l0.32 0 0.32 116.48C60.864 544.896 70.592 577.728 100.8 588.48c12.736 4.608 37.632 7.488 60.864-25.28 12.992-18.368 34.24-29.248 56.64-29.248 38.336 0 69.504 31.104 69.504 69.312 0 38.4-31.168 69.504-69.504 69.504-22.656 0-44.032-11.264-57.344-30.4C138.688 610.112 112.576 615.36 102.464 619.136c-29.824 10.752-39.104 43.776-38.144 67.392l0 160.384L64 846.912C64 909.248 114.752 960 177.216 960l446.272 0c62.4 0 113.152-50.752 113.152-113.152l0-145.024c24.384 22.272 56.384 35.008 89.984 35.008 73.536 0 133.44-59.904 133.44-133.504C960 529.92 900.096 470.016 826.56 470.016zM826.56 672.896c-22.72 0-44.032-11.264-57.344-30.4-22.272-32.384-48.448-27.136-58.56-23.36-29.824 10.752-39.04 43.776-38.08 67.392l0 160.384c0 27.136-22.016 49.152-49.152 49.152L177.216 896.064C150.08 896 128 873.984 128 846.848l0.32 0 0-145.024c24.384 22.272 56.384 35.008 89.984 35.008 73.6 0 133.504-59.904 133.504-133.504 0-73.472-59.904-133.376-133.504-133.376-32.896 0-64.32 12.288-89.984 35.52l0-104.96L128 400.512c0-27.072 22.08-49.152 49.216-49.152L177.216 351.04 334.656 350.72c3.776 0.512 7.616 0.832 11.52 0.832 24.896 0 50.752-10.816 60.032-37.056 4.544-12.736 7.424-37.568-25.344-60.736C362.624 240.768 351.68 219.52 351.68 197.12c0-38.272 31.104-69.44 69.376-69.44 38.336 0 69.504 31.168 69.504 69.44 0 22.72-11.264 44.032-30.528 57.472C427.968 276.736 433.088 302.784 436.8 313.024c10.752 29.888 43.072 39.232 67.392 38.08l119.232 0 0 0.384c27.136 0 49.152 22.08 49.152 49.152l0.256 116.48c-3.776 27.84 6.016 60.736 36.224 71.488 12.736 4.608 37.632 7.488 60.8-25.28 13.056-18.368 34.24-29.248 56.704-29.248C864.832 534.016 896 565.12 896 603.392 896 641.728 864.832 672.896 826.56 672.896z" p-id="3146"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dashboard.svg b/ruoyi-ui/src/assets/icons/svg/dashboard.svg deleted file mode 100644 index 5317d37..0000000 --- a/ruoyi-ui/src/assets/icons/svg/dashboard.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="100" xmlns="http://www.w3.org/2000/svg"><path d="M27.429 63.638c0-2.508-.893-4.65-2.679-6.424-1.786-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.465 2.662-1.785 1.774-2.678 3.916-2.678 6.424 0 2.508.893 4.65 2.678 6.424 1.786 1.775 3.94 2.662 6.465 2.662 2.524 0 4.678-.887 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm13.714-31.801c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM71.714 65.98l7.215-27.116c.285-1.23.107-2.378-.536-3.443-.643-1.064-1.56-1.762-2.75-2.094-1.19-.33-2.333-.177-3.429.462-1.095.639-1.81 1.573-2.143 2.804l-7.214 27.116c-2.857.237-5.405 1.266-7.643 3.088-2.238 1.822-3.738 4.152-4.5 6.992-.952 3.644-.476 7.098 1.429 10.364 1.905 3.265 4.69 5.37 8.357 6.317 3.667.947 7.143.474 10.429-1.42 3.285-1.892 5.404-4.66 6.357-8.305.762-2.84.619-5.607-.429-8.305-1.047-2.697-2.762-4.85-5.143-6.46zm47.143-2.342c0-2.508-.893-4.65-2.678-6.424-1.786-1.775-3.94-2.662-6.465-2.662-2.524 0-4.678.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.786 1.775 3.94 2.662 6.464 2.662 2.524 0 4.679-.887 6.465-2.662 1.785-1.775 2.678-3.916 2.678-6.424zm-45.714-45.43c0-2.509-.893-4.65-2.679-6.425C68.68 10.01 66.524 9.122 64 9.122c-2.524 0-4.679.887-6.464 2.661-1.786 1.775-2.679 3.916-2.679 6.425 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zm32 13.629c0-2.508-.893-4.65-2.679-6.424-1.785-1.775-3.94-2.662-6.464-2.662-2.524 0-4.679.887-6.464 2.662-1.786 1.774-2.679 3.916-2.679 6.424 0 2.508.893 4.65 2.679 6.424 1.785 1.774 3.94 2.662 6.464 2.662 2.524 0 4.679-.888 6.464-2.662 1.786-1.775 2.679-3.916 2.679-6.424zM128 63.638c0 12.351-3.357 23.78-10.071 34.286-.905 1.372-2.19 2.058-3.858 2.058H13.93c-1.667 0-2.953-.686-3.858-2.058C3.357 87.465 0 76.037 0 63.638c0-8.613 1.69-16.847 5.071-24.703C8.452 31.08 13 24.312 18.714 18.634c5.715-5.68 12.524-10.199 20.429-13.559C47.048 1.715 55.333.035 64 .035c8.667 0 16.952 1.68 24.857 5.04 7.905 3.36 14.714 7.88 20.429 13.559 5.714 5.678 10.262 12.446 13.643 20.301 3.38 7.856 5.071 16.09 5.071 24.703z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date-range.svg b/ruoyi-ui/src/assets/icons/svg/date-range.svg deleted file mode 100644 index fda571e..0000000 --- a/ruoyi-ui/src/assets/icons/svg/date-range.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1579774833889" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1376" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M887.466667 192.853333h-100.693334V119.466667c0-10.24-6.826667-17.066667-17.066666-17.066667s-17.066667 6.826667-17.066667 17.066667v73.386666H303.786667V119.466667c0-10.24-6.826667-17.066667-17.066667-17.066667s-17.066667 6.826667-17.066667 17.066667v73.386666H168.96c-46.08 0-85.333333 37.546667-85.333333 85.333334V836.266667c0 46.08 37.546667 85.333333 85.333333 85.333333H887.466667c46.08 0 85.333333-37.546667 85.333333-85.333333V278.186667c0-47.786667-37.546667-85.333333-85.333333-85.333334z m-718.506667 34.133334h100.693333v66.56c0 10.24 6.826667 17.066667 17.066667 17.066666s17.066667-6.826667 17.066667-17.066666v-66.56h450.56v66.56c0 10.24 6.826667 17.066667 17.066666 17.066666s17.066667-6.826667 17.066667-17.066666v-66.56H887.466667c27.306667 0 51.2 22.186667 51.2 51.2v88.746666H117.76v-88.746666c0-29.013333 22.186667-51.2 51.2-51.2zM887.466667 887.466667H168.96c-27.306667 0-51.2-22.186667-51.2-51.2V401.066667H938.666667V836.266667c0 27.306667-22.186667 51.2-51.2 51.2z" p-id="1377"></path><path d="M858.453333 493.226667H327.68c-10.24 0-17.066667 6.826667-17.066667 17.066666v114.346667h-116.053333c-10.24 0-17.066667 6.826667-17.066667 17.066667v133.12c0 10.24 6.826667 17.066667 17.066667 17.066666H460.8c10.24 0 17.066667-6.826667 17.066667-17.066666v-114.346667h380.586666c10.24 0 17.066667-6.826667 17.066667-17.066667v-133.12c0-10.24-6.826667-17.066667-17.066667-17.066666z m-413.013333 34.133333v97.28h-98.986667v-97.28h98.986667z m-230.4 131.413333h98.986667v98.986667h-98.986667v-98.986667z m131.413333 97.28v-97.28h98.986667v97.28h-98.986667z m133.12-228.693333h97.28v98.986667h-97.28v-98.986667z m131.413334 0h98.986666v98.986667h-98.986666v-98.986667z m230.4 97.28h-98.986667v-98.986667h98.986667v98.986667z" p-id="1378"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date.svg b/ruoyi-ui/src/assets/icons/svg/date.svg deleted file mode 100644 index 52dc73e..0000000 --- a/ruoyi-ui/src/assets/icons/svg/date.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577186573535" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1068" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M479.85714249 608.42857168h64.28571502c19.28571417 0 32.14285751-12.85714249 32.14285664-32.14285751s-12.85714249-32.14285751-32.14285664-32.14285664h-64.28571504c-19.28571417 0-32.14285751 12.85714249-32.14285664 32.14285662s12.85714249 32.14285751 32.14285664 32.14285753z m-2e-8 122.14285665h64.28571504c19.28571417 0 32.14285751-12.85714249 32.14285664-32.14285665s-12.85714249-32.14285751-32.14285664-32.14285751h-64.28571504c-19.28571417 0-32.14285751 12.85714249-32.14285664 32.14285751s12.85714249 32.14285751 32.14285664 32.14285664z m353.57142921-559.28571416h-128.57142921v-32.14285664c0-19.28571417-12.85714249-32.14285751-32.14285664-32.14285753s-32.14285751 12.85714249-32.14285751 32.14285753v32.14285664h-257.14285665v-32.14285664c0-19.28571417-12.85714249-32.14285751-32.14285752-32.14285753s-32.14285751 12.85714249-32.14285664 32.14285753v32.14285664h-128.57142919c-70.71428585 0-128.57142832 57.85714249-128.57142832 122.14285751v501.42857081c0 70.71428585 57.85714249 128.57142832 128.57142832 122.14285751h642.85714335c70.71428585 0 128.57142832-57.85714249 128.57142833-122.14285751v-501.42857081c0-70.71428585-57.85714249-122.14285753-128.57142833-122.14285751z m64.28571415 623.57142832c0 32.14285751-32.14285751 64.28571415-64.28571416 64.28571504h-642.85714335c-32.14285751 0-64.28571415-25.71428583-64.28571417-64.28571504v-372.85714249h771.42857168v372.85714249z m0-437.14285664h-771.42857168v-64.28571417c0-32.14285751 32.14285751-64.28571415 64.28571417-64.28571415h128.57142919v32.14285664c0 19.28571417 12.85714249 32.14285751 32.14285664 32.14285751s32.14285751-12.85714249 32.14285753-32.14285751v-32.14285664h257.14285665v32.14285664c0 19.28571417 12.85714249 32.14285751 32.1428575 32.14285751s32.14285751-12.85714249 32.14285664-32.14285751v-32.14285664h128.57142921c32.14285751 0 64.28571415 25.71428583 64.28571415 64.28571415v64.28571417z m-610.71428583 372.85714247h64.28571415c19.28571417 0 32.14285751-12.85714249 32.14285753-32.14285664s-12.85714249-32.14285751-32.14285753-32.14285751h-64.28571415c-19.28571417 0-32.14285751 12.85714249-32.14285751 32.14285751s12.85714249 32.14285751 32.14285751 32.14285665z m385.71428583-122.14285664h64.28571417c19.28571417 0 32.14285751-12.85714249 32.14285751-32.14285751s-12.85714249-32.14285751-32.14285751-32.14285664h-64.28571415c-19.28571417 0-32.14285751 12.85714249-32.14285753 32.14285664s12.85714249 32.14285751 32.14285753 32.14285751z m-385.71428583 0h64.28571415c19.28571417 0 32.14285751-12.85714249 32.14285753-32.14285751s-12.85714249-32.14285751-32.14285753-32.14285664h-64.28571415c-19.28571417 0-32.14285751 12.85714249-32.14285751 32.14285664s12.85714249 32.14285751 32.14285751 32.14285751z m385.71428583 122.14285665h64.28571417c19.28571417 0 32.14285751-12.85714249 32.14285751-32.14285665s-12.85714249-32.14285751-32.14285751-32.14285751h-64.28571415c-19.28571417 0-32.14285751 12.85714249-32.14285753 32.14285751s12.85714249 32.14285751 32.14285753 32.14285665z" p-id="1069"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dict.svg b/ruoyi-ui/src/assets/icons/svg/dict.svg deleted file mode 100644 index 4849377..0000000 --- a/ruoyi-ui/src/assets/icons/svg/dict.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035680909" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3601" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M1002.0848 744.672l-33.568 10.368c0.96 7.264 2.144 14.304 2.144 21.76 0 7.328-1.184 14.432-2.368 21.568l33.792 10.56c7.936 2.24 14.496 7.616 18.336 14.752 3.84 7.328 4.672 15.808 1.952 23.552-5.376 16-23.168 24.672-39.936 19.68l-34.176-10.624c-7.136 12.8-15.776 24.672-26.208 35.2l20.8 27.488a28.96 28.96 0 0 1 5.824 22.816 29.696 29.696 0 0 1-12.704 19.616 32.544 32.544 0 0 1-44.416-6.752l-20.8-27.552c-13.696 6.56-28.192 11.2-43.008 13.888v33.632c0 16.736-14.112 30.432-31.648 30.432-17.6 0-31.872-13.696-31.872-30.432v-33.632a167.616 167.616 0 0 1-42.88-13.888l-20.928 27.552c-10.72 13.76-30.08 16.64-44.288 6.752a29.632 29.632 0 0 1-12.704-19.616 29.28 29.28 0 0 1 5.696-22.816l20.896-27.808a166.72 166.72 0 0 1-27.008-34.688l-33.376 10.432c-16.8 5.184-34.56-3.552-39.936-19.616a29.824 29.824 0 0 1 20.224-38.24l33.472-10.432c-0.8-7.264-2.016-14.304-2.016-21.824 0-7.36 1.184-14.496 2.304-21.632l-33.792-10.368c-16.672-5.376-25.632-22.496-20.224-38.432 5.376-16 23.136-24.672 39.936-19.68l34.016 10.752c7.328-12.672 15.84-24.8 26.336-35.328l-20.8-27.552a29.44 29.44 0 0 1 6.944-42.432 32.704 32.704 0 0 1 44.384 6.752l20.832 27.616c13.696-6.432 28.224-11.2 43.104-13.952v-33.568c0-16.736 14.048-30.432 31.648-30.432 17.536 0 31.808 13.568 31.808 30.432v33.504c15.072 2.688 29.344 7.808 42.848 14.016l20.992-27.616a32.48 32.48 0 0 1 44.224-6.752 29.568 29.568 0 0 1 7.136 42.432l-21.024 27.808c10.432 10.432 19.872 21.888 27.04 34.752l33.376-10.432c16.768-5.12 34.56 3.68 39.936 19.68 5.536 15.936-3.712 33.056-20.32 38.304z m-206.016-74.432c-61.344 0-111.136 47.808-111.136 106.56 0 58.88 49.792 106.496 111.136 106.496 61.312 0 111.104-47.616 111.104-106.496 0-58.752-49.792-106.56-111.104-106.56z" p-id="3602"></path><path d="M802.7888 57.152h-76.448c0-22.08-21.024-38.24-42.848-38.24H39.3968a39.68 39.68 0 0 0-39.36 40.032v795.616s41.888 120.192 110.752 120.192H673.2848a227.488 227.488 0 0 1-107.04-97.44H117.6368s-40.608-13.696-40.608-41.248l470.304-0.256 1.664 3.36a227.68 227.68 0 0 1-12.64-73.632c0-60.576 24-118.624 66.88-161.44a228.352 228.352 0 0 1 123.552-63.392l-3.2 0.288 2.144-424.672h38.208l0.576 421.024c27.04 0 52.672 4.8 76.64 13.344V101.536c0.032 0-6.304-44.384-38.368-44.384zM149.7648 514.336H72.3888v-77.408H149.7648v77.408z m0-144.32H72.3888v-77.44H149.7648v77.44z m0-137.248H72.3888v-77.44H149.7648v77.44z m501.856 281.568H206.0848v-77.408h445.536v77.408z m0-144.32H206.0848v-77.44h445.536v77.44z m0-137.248H206.0848v-77.44h445.536v77.44z" p-id="3603"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/documentation.svg b/ruoyi-ui/src/assets/icons/svg/documentation.svg deleted file mode 100644 index 7043122..0000000 --- a/ruoyi-ui/src/assets/icons/svg/documentation.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M71.984 44.815H115.9L71.984 9.642v35.173zM16.094.05h63.875l47.906 38.37v76.74c0 3.392-1.682 6.645-4.677 9.044-2.995 2.399-7.056 3.746-11.292 3.746H16.094c-4.236 0-8.297-1.347-11.292-3.746-2.995-2.399-4.677-5.652-4.677-9.044V12.84C.125 5.742 7.23.05 16.094.05zm71.86 102.32V89.58h-71.86v12.79h71.86zm23.952-25.58V64H16.094v12.79h95.812z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/download.svg b/ruoyi-ui/src/assets/icons/svg/download.svg deleted file mode 100644 index c896951..0000000 --- a/ruoyi-ui/src/assets/icons/svg/download.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569915748289" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3062" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M768.35456 416a256 256 0 1 0-512 0 192 192 0 1 0 0 384v64a256 256 0 0 1-58.88-505.216 320.128 320.128 0 0 1 629.76 0A256.128 256.128 0 0 1 768.35456 864v-64a192 192 0 0 0 0-384z m-512 384h64v64H256.35456v-64z m448 0h64v64h-64v-64z" fill="#333333" p-id="3063"></path><path d="M539.04256 845.248V512.192a32.448 32.448 0 0 0-32-32.192c-17.664 0-32 14.912-32 32.192v333.056l-36.096-36.096a32.192 32.192 0 0 0-45.056 0.192 31.616 31.616 0 0 0-0.192 45.056l90.88 90.944a31.36 31.36 0 0 0 22.528 9.088 30.08 30.08 0 0 0 22.4-9.088l90.88-90.88a32.192 32.192 0 0 0-0.192-45.12 31.616 31.616 0 0 0-45.056-0.192l-36.096 36.096z" fill="#333333" p-id="3064"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/drag.svg b/ruoyi-ui/src/assets/icons/svg/drag.svg deleted file mode 100644 index 4185d3c..0000000 --- a/ruoyi-ui/src/assets/icons/svg/drag.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M73.137 29.08h-9.209 29.7L63.886.093 34.373 29.08h20.49v27.035H27.238v17.948h27.625v27.133h18.274V74.063h27.41V56.115h-27.41V29.08zm-9.245 98.827l27.518-26.711H36.59l27.302 26.71zM.042 64.982l27.196 27.029V38.167L.042 64.982zm100.505-26.815V92.01l27.41-27.029-27.41-26.815z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/druid.svg b/ruoyi-ui/src/assets/icons/svg/druid.svg deleted file mode 100644 index a2b4b4e..0000000 --- a/ruoyi-ui/src/assets/icons/svg/druid.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036347051" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5853" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M832 128H192a64.19 64.19 0 0 0-64 64v640a64.19 64.19 0 0 0 64 64h640a64.19 64.19 0 0 0 64-64V192a64.19 64.19 0 0 0-64-64z m0 703.89l-0.11 0.11H192.11l-0.11-0.11V768h640zM832 544H720L605.6 696.54 442.18 435.07 333.25 544H192v-64h114.75l147.07-147.07L610.4 583.46 688 480h144z m0-288H192v-63.89l0.11-0.11h639.78l0.11 0.11z" p-id="5854"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/edit.svg b/ruoyi-ui/src/assets/icons/svg/edit.svg deleted file mode 100644 index d26101f..0000000 --- a/ruoyi-ui/src/assets/icons/svg/edit.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M106.133 67.2a4.797 4.797 0 0 0-4.8 4.8c0 .187.014.36.027.533h-.027V118.4H9.6V26.667h50.133c2.654 0 4.8-2.147 4.8-4.8 0-2.654-2.146-4.8-4.8-4.8H9.6a9.594 9.594 0 0 0-9.6 9.6V118.4c0 5.307 4.293 9.6 9.6 9.6h91.733c5.307 0 9.6-4.293 9.6-9.6V72.533h-.026c.013-.173.026-.346.026-.533 0-2.653-2.146-4.8-4.8-4.8z"/><path d="M125.16 13.373L114.587 2.8c-3.747-3.747-9.854-3.72-13.6.027l-52.96 52.96a4.264 4.264 0 0 0-.907 1.36L33.813 88.533c-.746 1.76-.226 3.534.907 4.68 1.133 1.147 2.92 1.667 4.693.92l31.4-13.293c.507-.213.96-.52 1.36-.907l52.96-52.96c3.747-3.746 3.774-9.853.027-13.6zM66.107 72.4l-18.32 7.76 7.76-18.32L92.72 24.667l10.56 10.56L66.107 72.4zm52.226-52.227l-8.266 8.267-10.56-10.56 8.266-8.267.027-.026 10.56 10.56-.027.026z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/education.svg b/ruoyi-ui/src/assets/icons/svg/education.svg deleted file mode 100644 index 7bfb01d..0000000 --- a/ruoyi-ui/src/assets/icons/svg/education.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M88.883 119.565c-7.284 0-19.434 2.495-21.333 8.25v.127c-4.232.13-5.222 0-7.108 0-1.895-5.76-14.045-8.256-21.333-8.256H0V0h42.523c9.179 0 17.109 5.47 21.47 13.551C68.352 5.475 76.295 0 85.478 0H128v119.57l-39.113-.005h-.004zM60.442 24.763c0-9.651-8.978-16.507-17.777-16.507H7.108V111.43H39.11c7.054-.14 18.177.082 21.333 6.12v-4.628c-.134-5.722-.004-13.522 0-13.832V27.413l.004-2.655-.004.005zm60.442-16.517h-35.55c-8.802 0-17.78 6.856-17.78 16.493v74.259c.004.32.138 8.115 0 13.813v4.627c3.155-6.022 14.279-6.26 21.333-6.114h32V8.25l-.003-.005z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/email.svg b/ruoyi-ui/src/assets/icons/svg/email.svg deleted file mode 100644 index 74d25e2..0000000 --- a/ruoyi-ui/src/assets/icons/svg/email.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="96" xmlns="http://www.w3.org/2000/svg"><path d="M64.125 56.975L120.188.912A12.476 12.476 0 0 0 115.5 0h-103c-1.588 0-3.113.3-4.513.838l56.138 56.137z"/><path d="M64.125 68.287l-62.3-62.3A12.42 12.42 0 0 0 0 12.5v71C0 90.4 5.6 96 12.5 96h103c6.9 0 12.5-5.6 12.5-12.5v-71a12.47 12.47 0 0 0-1.737-6.35L64.125 68.287z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/example.svg b/ruoyi-ui/src/assets/icons/svg/example.svg deleted file mode 100644 index 46f42b5..0000000 --- a/ruoyi-ui/src/assets/icons/svg/example.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M96.258 57.462h31.421C124.794 27.323 100.426 2.956 70.287.07v31.422a32.856 32.856 0 0 1 25.971 25.97zm-38.796-25.97V.07C27.323 2.956 2.956 27.323.07 57.462h31.422a32.856 32.856 0 0 1 25.97-25.97zm12.825 64.766v31.421c30.46-2.885 54.507-27.253 57.713-57.712H96.579c-2.886 13.466-13.146 23.726-26.292 26.291zM31.492 70.287H.07c2.886 30.46 27.253 54.507 57.713 57.713V96.579c-13.466-2.886-23.726-13.146-26.291-26.292z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/excel.svg b/ruoyi-ui/src/assets/icons/svg/excel.svg deleted file mode 100644 index 74d97b8..0000000 --- a/ruoyi-ui/src/assets/icons/svg/excel.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.208 16.576v8.384h38.72v5.376h-38.72v8.704h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.576h38.72v5.376h-38.72v8.512h38.72v5.376h-38.72v11.136H128v-94.72H78.208zM0 114.368L72.128 128V0L0 13.632v100.736z"/><path d="M28.672 82.56h-11.2l14.784-23.488-14.08-22.592h11.52l8.192 14.976 8.448-14.976h11.136l-14.08 22.208L58.368 82.56H46.656l-8.768-15.68z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg deleted file mode 100644 index 485c128..0000000 --- a/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M49.217 41.329l-.136-35.24c-.06-2.715-2.302-4.345-5.022-4.405h-3.65c-2.712-.06-4.866 2.303-4.806 5.016l.152 19.164-24.151-23.79a6.698 6.698 0 0 0-9.499 0 6.76 6.76 0 0 0 0 9.526l23.93 23.713-18.345.074c-2.712-.069-5.228 1.813-5.64 5.02v3.462c.069 2.721 2.31 4.97 5.022 5.03l35.028-.207c.052.005.087.025.133.025l2.457.054a4.626 4.626 0 0 0 3.436-1.38c.88-.874 1.205-2.096 1.169-3.462l-.262-2.465c0-.048.182-.081.182-.136h.002zm52.523 51.212l18.32-.073c2.713.06 5.224-1.609 5.64-4.815v-3.462c-.068-2.722-2.317-4.97-5.021-5.04l-34.58.21c-.053 0-.086-.021-.138-.021l-2.451-.06a4.64 4.64 0 0 0-3.445 1.381c-.885.868-1.201 2.094-1.174 3.46l.27 2.46c.005.06-.177.095-.177.141l.141 34.697c.069 2.713 2.31 4.338 5.022 4.397l3.45.006c2.705.062 4.867-2.31 4.8-5.026l-.153-18.752 24.151 23.946a6.69 6.69 0 0 0 9.494 0 6.747 6.747 0 0 0 0-9.523L101.74 92.54v.001zM48.125 80.662a4.636 4.636 0 0 0-3.437-1.382l-2.457.06c-.05 0-.082.022-.137.022l-35.025-.21c-2.712.07-4.957 2.318-5.022 5.04v3.462c.409 3.206 2.925 4.874 5.633 4.814l18.554.06-24.132 23.928c-2.62 2.626-2.62 6.89 0 9.524a6.694 6.694 0 0 0 9.496 0l24.155-23.79-.155 18.866c-.06 2.722 2.094 5.093 4.801 5.025h3.65c2.72-.069 4.962-1.685 5.022-4.406l.141-34.956c0-.05-.182-.082-.182-.136l.262-2.46c.03-1.366-.286-2.592-1.166-3.46h-.001zM80.08 47.397a4.62 4.62 0 0 0 3.443 1.374l2.45-.054c.055 0 .088-.02.143-.028l35.08.21c2.712-.062 4.953-2.312 5.021-5.033l.009-3.463c-.417-3.211-2.937-5.084-5.64-5.025l-18.615-.073 23.917-23.715c2.63-2.623 2.63-6.879.008-9.513a6.691 6.691 0 0 0-9.494 0L92.251 26.016l.155-19.312c.065-2.713-2.097-5.085-4.802-5.025h-3.45c-2.713.069-4.954 1.693-5.022 4.406l-.139 35.247c0 .054.18.088.18.136l-.267 2.465c-.028 1.366.288 2.588 1.174 3.463v.001z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye-open.svg b/ruoyi-ui/src/assets/icons/svg/eye-open.svg deleted file mode 100644 index 88dcc98..0000000 --- a/ruoyi-ui/src/assets/icons/svg/eye-open.svg +++ /dev/null @@ -1 +0,0 @@ -<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><defs><style/></defs><path d="M512 128q69.675 0 135.51 21.163t115.498 54.997 93.483 74.837 73.685 82.006 51.67 74.837 32.17 54.827L1024 512q-2.347 4.992-6.315 13.483T998.87 560.17t-31.658 51.669-44.331 59.99-56.832 64.34-69.504 60.16-82.347 51.5-94.848 34.687T512 896q-69.675 0-135.51-21.163t-115.498-54.826-93.483-74.326-73.685-81.493-51.67-74.496-32.17-54.997L0 513.707q2.347-4.992 6.315-13.483t18.816-34.816 31.658-51.84 44.331-60.33 56.832-64.683 69.504-60.331 82.347-51.84 94.848-34.816T512 128.085zm0 85.333q-46.677 0-91.648 12.331t-81.152 31.83-70.656 47.146-59.648 54.485-48.853 57.686-37.675 52.821-26.325 43.99q12.33 21.674 26.325 43.52t37.675 52.351 48.853 57.003 59.648 53.845T339.2 767.02t81.152 31.488T512 810.667t91.648-12.331 81.152-31.659 70.656-46.848 59.648-54.186 48.853-57.344 37.675-52.651T927.957 512q-12.33-21.675-26.325-43.648t-37.675-52.65-48.853-57.345-59.648-54.186-70.656-46.848-81.152-31.659T512 213.334zm0 128q70.656 0 120.661 50.006T682.667 512 632.66 632.661 512 682.667 391.339 632.66 341.333 512t50.006-120.661T512 341.333zm0 85.334q-35.328 0-60.33 25.002T426.666 512t25.002 60.33T512 597.334t60.33-25.002T597.334 512t-25.002-60.33T512 426.666z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye.svg b/ruoyi-ui/src/assets/icons/svg/eye.svg deleted file mode 100644 index 16ed2d8..0000000 --- a/ruoyi-ui/src/assets/icons/svg/eye.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="64" xmlns="http://www.w3.org/2000/svg"><path d="M127.072 7.994c1.37-2.208.914-5.152-.914-6.87-2.056-1.717-4.797-1.226-6.396.982-.229.245-25.586 32.382-55.74 32.382-29.24 0-55.74-32.382-55.968-32.627-1.6-1.963-4.57-2.208-6.397-.49C-.17 3.086-.399 6.275 1.2 8.238c.457.736 5.94 7.36 14.62 14.72L4.17 35.96c-1.828 1.963-1.6 5.152.228 6.87.457.98 1.6 1.471 2.742 1.471s2.284-.49 3.198-1.472l12.564-13.983c5.94 4.416 13.021 8.587 20.788 11.53l-4.797 17.418c-.685 2.699.686 5.397 3.198 6.133h1.37c2.057 0 3.884-1.472 4.341-3.68L52.6 42.83c3.655.736 7.538 1.227 11.422 1.227 3.883 0 7.767-.49 11.422-1.227l4.797 17.173c.457 2.208 2.513 3.68 4.34 3.68.457 0 .914 0 1.143-.246 2.513-.736 3.883-3.434 3.198-6.133l-4.797-17.172c7.767-2.944 14.848-7.114 20.788-11.53l12.336 13.738c.913.981 2.056 1.472 3.198 1.472s2.284-.49 3.198-1.472c1.828-1.963 1.828-4.906.228-6.87l-11.65-13.001c9.366-7.36 14.849-14.474 14.849-14.474z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/form.svg b/ruoyi-ui/src/assets/icons/svg/form.svg deleted file mode 100644 index dcbaa18..0000000 --- a/ruoyi-ui/src/assets/icons/svg/form.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.068 23.784c-1.02 0-1.877-.32-2.572-.96a8.588 8.588 0 0 1-1.738-2.237 11.524 11.524 0 0 1-1.042-2.621c-.232-.895-.348-1.641-.348-2.238V0h.278c.834 0 1.622.085 2.363.256.742.17 1.645.575 2.711 1.214 1.066.64 2.363 1.535 3.892 2.686 1.53 1.15 3.453 2.664 5.77 4.54 2.502 2.045 4.494 3.771 5.977 5.178 1.483 1.406 2.618 2.6 3.406 3.58.787.98 1.274 1.812 1.46 2.494.185.682.277 1.278.277 1.79v2.046H84.068zM127.3 84.01c.278.682.464 1.535.556 2.558.093 1.023-.37 2.003-1.39 2.94-.463.427-.88.832-1.25 1.215-.372.384-.696.704-.974.96a6.69 6.69 0 0 1-.973.767l-11.816-10.741a44.331 44.331 0 0 0 1.877-1.535 31.028 31.028 0 0 1 1.737-1.406c1.112-.938 2.317-1.343 3.615-1.215 1.297.128 2.363.405 3.197.83.927.427 1.923 1.173 2.989 2.239 1.065 1.065 1.876 2.195 2.432 3.388zM78.23 95.902c2.038 0 3.752-.511 5.143-1.534l-26.969 25.83H18.037c-1.761 0-3.684-.47-5.77-1.407a24.549 24.549 0 0 1-5.838-3.709 21.373 21.373 0 0 1-4.518-5.306c-1.204-2.003-1.807-4.07-1.807-6.202V16.495c0-1.79.44-3.665 1.32-5.626A18.41 18.41 0 0 1 5.04 5.562a21.798 21.798 0 0 1 5.213-3.964C12.198.533 14.237 0 16.37 0h53.24v15.984c0 1.62.278 3.367.834 5.242a16.704 16.704 0 0 0 2.572 5.179c1.159 1.577 2.665 2.898 4.518 3.964 1.853 1.066 4.078 1.598 6.673 1.598h20.295v42.325L85.458 92.45c1.02-1.364 1.529-2.856 1.529-4.476 0-2.216-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1c-2.409 0-4.448.789-6.116 2.366-1.668 1.577-2.502 3.474-2.502 5.69 0 2.217.834 4.092 2.502 5.626 1.668 1.535 3.707 2.302 6.117 2.302h52.13zM26.1 47.951c-2.41 0-4.449.789-6.117 2.366-1.668 1.577-2.502 3.473-2.502 5.69 0 2.216.834 4.092 2.502 5.626 1.668 1.534 3.707 2.302 6.117 2.302h52.13c2.409 0 4.47-.768 6.185-2.302 1.715-1.534 2.572-3.41 2.572-5.626 0-2.217-.857-4.113-2.572-5.69-1.714-1.577-3.776-2.366-6.186-2.366H26.1zm52.407 64.063l1.807-1.663 3.476-3.196a479.75 479.75 0 0 0 4.587-4.284 500.757 500.757 0 0 1 5.004-4.667c3.985-3.666 8.48-7.758 13.485-12.276l11.677 10.741-13.485 12.404-5.004 4.603-4.587 4.22a179.46 179.46 0 0 0-3.267 3.068c-.88.853-1.367 1.322-1.46 1.407-.463.341-.973.703-1.529 1.087-.556.383-1.112.703-1.668.959-.556.256-1.413.575-2.572.959a83.5 83.5 0 0 1-3.545 1.087 72.2 72.2 0 0 1-3.475.895c-1.112.256-1.946.426-2.502.511-1.112.17-1.854.043-2.224-.383-.371-.426-.464-1.151-.278-2.174.092-.511.278-1.279.556-2.302.278-1.023.602-2.067.973-3.132l1.042-3.005c.325-.938.58-1.577.765-1.918a10.157 10.157 0 0 1 2.224-2.941z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/fullscreen.svg deleted file mode 100644 index 0e86b6f..0000000 --- a/ruoyi-ui/src/assets/icons/svg/fullscreen.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M38.47 52L52 38.462l-23.648-23.67L43.209 0H.035L0 43.137l14.757-14.865L38.47 52zm74.773 47.726L89.526 76 76 89.536l23.648 23.672L84.795 128h43.174L128 84.863l-14.757 14.863zM89.538 52l23.668-23.648L128 43.207V.038L84.866 0 99.73 14.76 76 38.472 89.538 52zM38.46 76L14.792 99.651 0 84.794v43.173l43.137.033-14.865-14.757L52 89.53 38.46 76z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/github.svg b/ruoyi-ui/src/assets/icons/svg/github.svg deleted file mode 100644 index db0a0d4..0000000 --- a/ruoyi-ui/src/assets/icons/svg/github.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1581238998885" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4187" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M511.542857 14.057143C228.914286 13.942857 0 242.742857 0 525.142857 0 748.457143 143.2 938.285714 342.628571 1008c26.857143 6.742857 22.742857-12.342857 22.742858-25.371429v-88.571428c-155.085714 18.171429-161.371429-84.457143-171.771429-101.6C172.571429 756.571429 122.857143 747.428571 137.714286 730.285714c35.314286-18.171429 71.314286 4.571429 113.028571 66.171429 30.171429 44.685714 89.028571 37.142857 118.857143 29.714286 6.514286-26.857143 20.457143-50.857143 39.657143-69.485715-160.685714-28.8-227.657143-126.857143-227.657143-243.428571 0-56.571429 18.628571-108.571429 55.2-150.514286-23.314286-69.142857 2.171429-128.342857 5.6-137.142857 66.4-5.942857 135.428571 47.542857 140.8 51.771429 37.714286-10.171429 80.8-15.542857 129.028571-15.542858 48.457143 0 91.657143 5.6 129.714286 15.885715 12.914286-9.828571 76.914286-55.771429 138.628572-50.171429 3.314286 8.8 28.228571 66.628571 6.285714 134.857143 37.028571 42.057143 55.885714 94.514286 55.885714 151.2 0 116.8-67.428571 214.971429-228.571428 243.314286a145.714286 145.714286 0 0 1 43.542857 104v128.571428c0.914286 10.285714 0 20.457143 17.142857 20.457143 202.4-68.228571 348.114286-259.428571 348.114286-484.685714 0-282.514286-229.028571-511.2-511.428572-511.2z" p-id="4188"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/guide.svg b/ruoyi-ui/src/assets/icons/svg/guide.svg deleted file mode 100644 index b271001..0000000 --- a/ruoyi-ui/src/assets/icons/svg/guide.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.482 70.131l36.204 16.18 69.932-65.485-61.38 70.594 46.435 18.735c1.119.425 2.397-.17 2.797-1.363v-.085L127.998.047 1.322 65.874c-1.12.597-1.519 1.959-1.04 3.151.32.511.72.937 1.2 1.107zm44.676 57.821L64.22 107.26l-18.062-7.834v28.527z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/icon.svg b/ruoyi-ui/src/assets/icons/svg/icon.svg deleted file mode 100644 index 82be8ee..0000000 --- a/ruoyi-ui/src/assets/icons/svg/icon.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.147.062a13 13 0 0 1 4.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 0 1 2.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/input.svg b/ruoyi-ui/src/assets/icons/svg/input.svg deleted file mode 100644 index ab91381..0000000 --- a/ruoyi-ui/src/assets/icons/svg/input.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575802859706" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3102" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M896 224H128c-35.2 0-64 28.8-64 64v448c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64V288c0-35.2-28.8-64-64-64z m0 480c0 19.2-12.8 32-32 32H160c-19.2 0-32-12.8-32-32V320c0-19.2 12.8-32 32-32h704c19.2 0 32 12.8 32 32v384z" p-id="3103"></path><path d="M224 352c-19.2 0-32 12.8-32 32v256c0 16 12.8 32 32 32s32-12.8 32-32V384c0-16-12.8-32-32-32z" p-id="3104"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/international.svg b/ruoyi-ui/src/assets/icons/svg/international.svg deleted file mode 100644 index e9b56ee..0000000 --- a/ruoyi-ui/src/assets/icons/svg/international.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M83.287 103.01c-1.57-3.84-6.778-10.414-15.447-19.548-2.327-2.444-2.182-4.306-1.338-9.862v-.64c.553-3.81 1.513-6.05 14.313-8.087 6.516-1.018 8.203 1.57 10.589 5.178l.785 1.193a12.625 12.625 0 0 0 6.43 5.207c1.134.524 2.53 1.164 4.421 2.24 4.596 2.53 4.596 5.41 4.596 11.753v.727a26.91 26.91 0 0 1-5.178 17.454 59.055 59.055 0 0 1-19.025 11.026c3.49-6.546.814-14.313 0-16.553l-.146-.087zM64 5.12a58.502 58.502 0 0 1 25.484 5.818 54.313 54.313 0 0 0-12.859 10.327c-.93 1.28-1.716 2.473-2.472 3.579-2.444 3.694-3.637 5.352-5.818 5.614a25.105 25.105 0 0 1-4.219 0c-4.276-.29-10.094-.64-11.956 4.422-1.193 3.23-1.396 11.956 2.444 16.495.66 1.077.778 2.4.32 3.578a7.01 7.01 0 0 1-2.066 3.229 18.938 18.938 0 0 1-2.909-2.91 18.91 18.91 0 0 0-8.32-6.603c-1.25-.349-2.647-.64-3.985-.93-3.782-.786-8.03-1.688-9.019-3.812a14.895 14.895 0 0 1-.727-5.818 21.935 21.935 0 0 0-1.396-9.25 8.873 8.873 0 0 0-5.557-4.946A58.705 58.705 0 0 1 64 5.12zM0 64c0 35.346 28.654 64 64 64 35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/job.svg b/ruoyi-ui/src/assets/icons/svg/job.svg deleted file mode 100644 index 2a93a25..0000000 --- a/ruoyi-ui/src/assets/icons/svg/job.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036191400" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5472" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M934.912 1016.832H192c-14.336 0-25.6-11.264-25.6-25.6v-189.44c0-14.336 11.264-25.6 25.6-25.6s25.6 11.264 25.6 25.6v163.84h691.712V64H217.6v148.48c0 14.336-11.264 25.6-25.6 25.6s-25.6-11.264-25.6-25.6v-174.08c0-14.336 11.264-25.6 25.6-25.6h742.912c14.336 0 25.6 11.264 25.6 25.6v952.832c0 14.336-11.264 25.6-25.6 25.6z" p-id="5473"></path><path d="M232.96 371.2h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM232.96 540.16h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM232.96 698.88h-117.76c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h117.76c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM574.464 762.88c-134.144 0-243.2-109.056-243.2-243.2S440.32 276.48 574.464 276.48s243.2 109.056 243.2 243.2-109.056 243.2-243.2 243.2z m0-435.2c-105.984 0-192 86.016-192 192S468.48 711.68 574.464 711.68s192-86.016 192-192S680.448 327.68 574.464 327.68z" p-id="5474"></path><path d="M663.04 545.28h-87.04c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h87.04c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6z" p-id="5475"></path><path d="M576 545.28c-14.336 0-25.6-11.264-25.6-25.6v-87.04c0-14.336 11.264-25.6 25.6-25.6s25.6 11.264 25.6 25.6v87.04c0 14.336-11.264 25.6-25.6 25.6z" p-id="5476"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/language.svg b/ruoyi-ui/src/assets/icons/svg/language.svg deleted file mode 100644 index 0082b57..0000000 --- a/ruoyi-ui/src/assets/icons/svg/language.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M84.742 36.8c2.398 7.2 5.595 12.8 11.19 18.4 4.795-4.8 7.992-11.2 10.39-18.4h-21.58zm-52.748 40h20.78l-10.39-28-10.39 28z"/><path d="M111.916 0H16.009C7.218 0 .025 7.2.025 16v96c0 8.8 7.193 16 15.984 16h95.907c8.791 0 15.984-7.2 15.984-16V16c0-8.8-6.394-16-15.984-16zM72.754 103.2c-1.598 1.6-3.197 1.6-4.795 1.6-.8 0-2.398 0-3.197-.8-.8-.8-1.599 0-1.599-.8s-.799-1.6-1.598-3.2c-.8-1.6-.8-2.4-1.599-4l-3.196-8.8H28.797L25.6 96c-1.598 3.2-2.398 5.6-3.197 7.2-.8 1.6-2.398 1.6-4.795 1.6-1.599 0-3.197-.8-4.796-1.6-1.598-1.6-2.397-2.4-2.397-4 0-.8 0-1.6.799-3.2.8-1.6.8-2.4 1.598-4l17.583-44.8c.8-1.6.8-3.2 1.599-4.8.799-1.6 1.598-3.2 2.397-4 .8-.8 1.599-2.4 3.197-3.2 1.599-.8 3.197-.8 4.796-.8 1.598 0 3.196 0 4.795.8 1.598.8 2.398 1.6 3.197 3.2.799.8 1.598 2.4 2.397 4 .8 1.6 1.599 3.2 2.398 5.6l17.583 44c1.598 3.2 2.398 5.6 2.398 7.2-.8.8-1.599 2.4-2.398 4zM116.711 72c-8.791-3.2-15.185-7.2-20.78-12-5.594 5.6-12.787 9.6-21.579 12l-2.397-4c8.791-2.4 15.984-5.6 21.579-11.2C87.939 51.2 83.144 44 81.545 36h-7.992v-3.2h21.58c-1.6-2.4-3.198-5.6-4.796-8l2.397-.8c1.599 2.4 3.997 5.6 5.595 8.8h19.98v4h-7.992c-2.397 8-6.393 15.2-11.189 20 5.595 4.8 11.988 8.8 20.78 11.2l-3.197 4z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/link.svg b/ruoyi-ui/src/assets/icons/svg/link.svg deleted file mode 100644 index 48197ba..0000000 --- a/ruoyi-ui/src/assets/icons/svg/link.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.625 127.937H.063V12.375h57.781v12.374H12.438v90.813h90.813V70.156h12.374z"/><path d="M116.426 2.821l8.753 8.753-56.734 56.734-8.753-8.745z"/><path d="M127.893 37.982h-12.375V12.375H88.706V0h39.187z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/list.svg b/ruoyi-ui/src/assets/icons/svg/list.svg deleted file mode 100644 index 20259ed..0000000 --- a/ruoyi-ui/src/assets/icons/svg/list.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M1.585 12.087c0 6.616 3.974 11.98 8.877 11.98 4.902 0 8.877-5.364 8.877-11.98 0-6.616-3.975-11.98-8.877-11.98-4.903 0-8.877 5.364-8.877 11.98zM125.86.107H35.613c-1.268 0-2.114 1.426-2.114 2.852v18.255c0 1.712 1.057 2.853 2.114 2.853h90.247c1.268 0 2.114-1.426 2.114-2.853V2.96c0-1.711-1.057-2.852-2.114-2.852zM.106 62.86c0 6.615 3.974 11.979 8.876 11.979 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zM124.17 50.88H33.921c-1.268 0-2.114 1.425-2.114 2.851v18.256c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852V53.73c0-1.426-.846-2.852-2.114-2.852zM.106 115.913c0 6.616 3.974 11.98 8.876 11.98 4.903 0 8.877-5.364 8.877-11.98 0-6.616-3.974-11.98-8.877-11.98-4.902 0-8.876 5.364-8.876 11.98zm124.064-11.98H33.921c-1.268 0-2.114 1.426-2.114 2.853v18.255c0 1.711 1.057 2.852 2.114 2.852h90.247c1.268 0 2.114-1.426 2.114-2.852v-18.255c0-1.427-.846-2.853-2.114-2.853z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/lock.svg b/ruoyi-ui/src/assets/icons/svg/lock.svg deleted file mode 100644 index 74fee54..0000000 --- a/ruoyi-ui/src/assets/icons/svg/lock.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M119.88 49.674h-7.987V39.52C111.893 17.738 90.45.08 63.996.08 37.543.08 16.1 17.738 16.1 39.52v10.154H8.113c-4.408 0-7.987 2.94-7.987 6.577v65.13c0 3.637 3.57 6.577 7.987 6.577H119.88c4.407 0 7.987-2.94 7.987-6.577v-65.13c-.008-3.636-3.58-6.577-7.987-6.577zm-23.953 0H32.065V39.52c0-14.524 14.301-26.295 31.931-26.295 17.63 0 31.932 11.777 31.932 26.295v10.153z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/log.svg b/ruoyi-ui/src/assets/icons/svg/log.svg deleted file mode 100644 index d879d33..0000000 --- a/ruoyi-ui/src/assets/icons/svg/log.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035943711" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4805" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M208.736 566.336H64.384v59.328h144.352v-59.328z m0-336.096H165.44V74.592c0-7.968 4.896-14.848 10.464-14.848h502.016V0.448H175.936c-38.72 1.248-69.248 34.368-68.192 74.144v155.648H64.384V289.6h144.352V230.24z m0 168.096H64.384v59.328h144.352v-59.328z m714.656 76.576h-57.76v474.496c0 7.936-4.896 14.848-10.464 14.848H175.936c-5.568 0-10.464-6.912-10.464-14.848v-155.68h43.296v-59.296H64.384v59.296h43.328v155.68c-1.024 39.776 29.472 72.896 68.192 74.144h679.232c38.72-1.184 69.248-34.368 68.256-74.144V474.912z m14.944-290.336l-83.072-85.312a71.264 71.264 0 0 0-52.544-21.728 71.52 71.52 0 0 0-51.616 23.872L386.528 507.264a30.496 30.496 0 0 0-6.176 10.72L308.16 740.512a30.016 30.016 0 0 0 6.976 30.24c7.712 7.968 19.2 10.752 29.568 7.2l216.544-74.112a28.736 28.736 0 0 0 12.128-7.936L940.448 287.456a75.552 75.552 0 0 0-2.112-102.88z m-557.12 518.272l39.104-120.64 78.336 80.416-117.44 40.224z m170.048-70.016l-103.552-106.016 200.16-222.4 103.52 106.304-200.128 222.112zM897.952 247.072l-0.256 0.224-107.136 119.168-103.52-106.528 106.432-118.624a14.144 14.144 0 0 1 10.304-4.736 13.44 13.44 0 0 1 10.464 4.288l83.264 85.696c5.472 5.6 5.664 14.72 0.448 20.512z" p-id="4806"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/logininfor.svg b/ruoyi-ui/src/assets/icons/svg/logininfor.svg deleted file mode 100644 index 267f844..0000000 --- a/ruoyi-ui/src/assets/icons/svg/logininfor.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036016814" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5261" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M896 128h-85.333333a42.666667 42.666667 0 0 0 0 85.333333h42.666666v640H170.666667V213.333333h42.666666a42.666667 42.666667 0 0 0 0-85.333333H128a42.666667 42.666667 0 0 0-42.666667 42.666667v725.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h768a42.666667 42.666667 0 0 0 42.666667-42.666667V170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667z" p-id="5262"></path><path d="M341.333333 298.666667a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-85.333333 0v128a42.666667 42.666667 0 0 0 42.666666 42.666667zM512 298.666667a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-85.333334 0v128a42.666667 42.666667 0 0 0 42.666667 42.666667zM682.666667 298.666667a42.666667 42.666667 0 0 0 42.666666-42.666667V128a42.666667 42.666667 0 0 0-85.333333 0v128a42.666667 42.666667 0 0 0 42.666667 42.666667zM341.333333 768a42.666667 42.666667 0 0 0 42.666667-42.666667 128 128 0 0 1 256 0 42.666667 42.666667 0 0 0 85.333333 0 213.333333 213.333333 0 0 0-107.52-184.32A128 128 0 0 0 640 469.333333a128 128 0 0 0-256 0 128 128 0 0 0 22.186667 71.68A213.333333 213.333333 0 0 0 298.666667 725.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z m128-298.666667a42.666667 42.666667 0 1 1 42.666667 42.666667 42.666667 42.666667 0 0 1-42.666667-42.666667z" p-id="5263"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/message.svg b/ruoyi-ui/src/assets/icons/svg/message.svg deleted file mode 100644 index 14ca817..0000000 --- a/ruoyi-ui/src/assets/icons/svg/message.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/money.svg b/ruoyi-ui/src/assets/icons/svg/money.svg deleted file mode 100644 index c1580de..0000000 --- a/ruoyi-ui/src/assets/icons/svg/money.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/monitor.svg b/ruoyi-ui/src/assets/icons/svg/monitor.svg deleted file mode 100644 index bc308cb..0000000 --- a/ruoyi-ui/src/assets/icons/svg/monitor.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827393750" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4695" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; } -</style></defs><path d="M64 64V640H896V64H64zM0 0h960v704H0V0z" p-id="4696"></path><path d="M192 896H768v64H192zM448 640H512v256h-64z" p-id="4697"></path><path d="M479.232 561.604267l309.9904-348.330667-47.803733-42.5472-259.566934 291.669333L303.957333 240.008533 163.208533 438.6048l52.224 37.009067 91.6224-129.28z" p-id="4698"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/nested.svg b/ruoyi-ui/src/assets/icons/svg/nested.svg deleted file mode 100644 index 06713a8..0000000 --- a/ruoyi-ui/src/assets/icons/svg/nested.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.002 9.2c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-5.043-3.58-9.132-7.997-9.132S.002 4.157.002 9.2zM31.997.066h95.981V18.33H31.997V.066zm0 45.669c0 5.044 3.58 9.132 7.998 9.132 4.417 0 7.997-4.088 7.997-9.132 0-3.263-1.524-6.278-3.998-7.91-2.475-1.63-5.524-1.63-7.998 0-2.475 1.632-4 4.647-4 7.91zM63.992 36.6h63.986v18.265H63.992V36.6zm-31.995 82.2c0 5.043 3.58 9.132 7.998 9.132 4.417 0 7.997-4.089 7.997-9.132 0-5.044-3.58-9.133-7.997-9.133s-7.998 4.089-7.998 9.133zm31.995-9.131h63.986v18.265H63.992V109.67zm0-27.404c0 5.044 3.58 9.133 7.998 9.133 4.417 0 7.997-4.089 7.997-9.133 0-3.263-1.524-6.277-3.998-7.909-2.475-1.631-5.524-1.631-7.998 0-2.475 1.632-4 4.646-4 7.91zm31.995-9.13h31.991V91.4H95.987V73.135z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/number.svg b/ruoyi-ui/src/assets/icons/svg/number.svg deleted file mode 100644 index ad5ce9a..0000000 --- a/ruoyi-ui/src/assets/icons/svg/number.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575802851180" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2867" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M279.272727 791.272727h512a46.545455 46.545455 0 0 1 0 93.090909H279.272727a46.545455 46.545455 0 0 1 0-93.090909z m33.838546-617.984V651.636364H193.722182V395.170909c0-37.003636-0.884364-59.298909-2.653091-66.746182a24.948364 24.948364 0 0 0-14.615273-16.989091c-8.005818-3.863273-25.786182-5.771636-53.341091-5.771636h-11.822545v-55.854545c57.716364-12.381091 101.562182-37.888 131.490909-76.520728h70.283636z m303.709091 396.8V651.636364H354.164364v-68.235637c77.777455-127.255273 124.043636-206.010182 138.705454-236.218182 14.661818-30.254545 22.016-53.853091 22.016-70.74909 0-13.032727-2.234182-22.714182-6.656-29.137455-4.421818-6.376727-11.170909-9.588364-20.247273-9.588364a22.248727 22.248727 0 0 0-20.200727 10.612364c-4.468364 7.121455-6.656 21.178182-6.656 42.263273v45.521454H354.164364v-17.454545c0-26.763636 1.396364-47.941818 4.142545-63.348364 2.746182-15.499636 9.541818-30.72 20.386909-45.661091 10.798545-14.987636 24.901818-26.298182 42.216727-33.978182 17.361455-7.68 38.167273-11.543273 62.37091-11.543272 47.476364 0 83.316364 11.776 107.706181 35.328 24.296727 23.552 36.445091 53.341091 36.445091 89.367272 0 27.368727-6.842182 56.32-20.48 86.853819-13.730909 30.533818-54.039273 95.325091-121.018182 194.420363h130.885819z m270.615272-189.393454c18.152727 6.097455 31.650909 16.104727 40.494546 29.975272 8.843636 13.917091 13.312 46.452364 13.312 97.652364 0 38.027636-4.328727 67.490909-13.032727 88.529455-8.657455 20.945455-23.598545 36.910545-44.869819 47.848727-21.271273 10.938182-48.593455 16.384-81.873454 16.384-37.794909 0-67.490909-6.330182-89.088-19.083636-21.550545-12.660364-35.746909-28.253091-42.542546-46.638546-6.795636-18.432-10.193455-50.362182-10.193454-95.883636v-37.841455h119.389091v77.730909c0 20.666182 1.210182 33.838545 3.723636 39.424 2.420364 5.585455 7.912727 8.424727 16.337455 8.424728 9.309091 0 15.36-3.537455 18.338909-10.612364 2.932364-7.121455 4.421818-25.6 4.421818-55.575273v-33.047273c0-18.338909-2.048-31.744-6.190546-40.215272a30.72 30.72 0 0 0-18.338909-16.709818c-8.052364-2.653091-23.738182-4.189091-46.964363-4.561455V357.050182c28.392727 0 45.893818-1.070545 52.596363-3.258182a22.946909 22.946909 0 0 0 14.475637-14.149818c2.932364-7.307636 4.421818-18.711273 4.421818-34.257455v-26.624c0-16.756364-1.722182-27.741091-5.12-33.047272-3.490909-5.352727-8.843636-8.005818-16.151273-8.005819-8.285091 0-13.963636 2.792727-16.989091 8.378182-3.025455 5.632-4.561455 17.640727-4.561454 35.933091v39.284364h-119.389091v-40.773818c0-45.661091 10.472727-76.567273 31.325091-92.625455 20.898909-16.058182 54.085818-24.064 99.607272-24.064 56.878545 0 95.511273 11.170909 115.805091 33.373091 20.293818 22.248727 30.394182 53.201455 30.394182 92.765091 0 26.810182-3.630545 46.173091-10.891636 58.088727-7.307636 11.915636-20.107636 22.807273-38.446546 32.628364z" p-id="2868"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/online.svg b/ruoyi-ui/src/assets/icons/svg/online.svg deleted file mode 100644 index 330a202..0000000 --- a/ruoyi-ui/src/assets/icons/svg/online.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1568899557259" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="535" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M356.246145 681.56286c-68.156286-41.949414-107.246583-103.84102-107.246583-169.805384 0-65.966411 39.090297-127.860063 107.246583-169.809477 12.046361-7.414877 15.800871-23.190165 8.385994-35.236526-7.413853-12.046361-23.191188-15.801894-35.236526-8.387018-39.640836 24.399713-72.539106 56.044434-95.137801 91.515297-23.86657 37.461193-36.481889 79.620385-36.481889 121.917724 0 42.297338 12.615319 84.454484 36.481889 121.914654 22.598694 35.469839 55.496965 67.11456 95.137801 91.51325 4.185322 2.576685 8.821923 3.804652 13.400195 3.804652 8.598842 0 16.998139-4.329609 21.836331-12.190647C372.047016 704.752002 368.291482 688.976714 356.246145 681.56286zM263.943926 754.580874c-92.603071-61.111846-145.713686-149.623739-145.713686-242.840794 0-93.195565 53.094242-181.682899 145.667637-242.774279 11.805884-7.79043 15.061021-23.677259 7.269567-35.483142-7.79043-11.805884-23.677259-15.062044-35.483142-7.269567C128.487861 296.954249 67.006602 401.024489 67.006602 511.74008c0 110.73708 61.496609 214.830857 168.721703 285.593504 4.343935 2.867304 9.240455 4.238534 14.08274 4.238534 8.317433 0 16.476253-4.046153 21.400403-11.507078C279.003923 778.258133 275.748786 762.372328 263.943926 754.580874zM788.660552 226.213092c-11.80486-7.791453-27.692712-4.536316-35.483142 7.269567-7.79043 11.805884-4.536316 27.692712 7.269567 35.483142 92.575442 61.092403 145.670707 149.579737 145.670707 242.774279 0 93.216032-53.111638 181.727924-145.715733 242.840794-11.805884 7.79043-15.059997 23.678282-7.269567 35.484166 4.925173 7.461949 13.081946 11.507078 21.400403 11.507078 4.841262 0 9.739828-1.37123 14.083763-4.238534 107.22714-70.761624 168.724773-174.857447 168.724773-285.593504C957.341323 401.025513 895.860063 296.955272 788.660552 226.213092zM790.090111 633.67213c23.865547-37.459147 36.480866-79.617315 36.480866-121.914654 0-42.298362-12.615319-84.45653-36.480866-121.917724-22.598694-35.470863-55.496965-67.115584-95.139847-91.515297-12.047384-7.413853-27.821649-3.659343-35.236526 8.387018-7.414877 12.045337-3.659343 27.821649 8.385994 35.236526 68.156286 41.949414 107.247606 103.842043 107.247606 169.809477 0 65.964364-39.090297 127.85597-107.247606 169.804361-12.045337 7.414877-15.800871 23.190165-8.385994 35.237549 4.838192 7.861038 13.236466 12.190647 21.835308 12.190647 4.579295 0 9.215896-1.227967 13.400195-3.804652C734.591099 700.786691 767.490394 669.142993 790.090111 633.67213zM567.129086 518.274914c24.12342-17.150612 39.887452-45.305859 39.887452-77.07133 0-52.128241-42.452881-94.538143-94.634334-94.538143-52.18043 0-94.633311 42.408879-94.633311 94.538143 0 31.695886 15.696494 59.797921 39.730886 76.958766-49.875944 21.128203-84.917018 70.234621-84.917018 127.301338 0 2.366907 0.061398 4.762467 0.182149 7.119141l1.249457 24.296359 276.373515 0 1.238201-24.308639c0.119727-2.358721 0.181125-4.750187 0.181125-7.106862C651.786185 588.497255 616.865861 539.465538 567.129086 518.274914zM512.381182 397.889079c23.937179 0 43.411719 19.430538 43.411719 43.314505 0 23.882943-19.47454 43.313481-43.411719 43.313481-23.936155 0-43.409672-19.430538-43.409672-43.313481C468.971509 417.320641 488.445026 397.889079 512.381182 397.889079zM426.08884 625.656573c9.119705-38.542828 44.254923-67.337641 86.085634-67.337641s76.966952 28.794813 86.085634 67.337641L426.08884 625.656573z" p-id="536"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/password.svg b/ruoyi-ui/src/assets/icons/svg/password.svg deleted file mode 100644 index 6c64def..0000000 --- a/ruoyi-ui/src/assets/icons/svg/password.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575802846045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2750" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M868.593046 403.832442c-30.081109-28.844955-70.037123-44.753273-112.624057-44.753273L265.949606 359.079168c-42.554188 0-82.510202 15.908318-112.469538 44.690852-30.236652 28.782533-46.857191 67.222007-46.857191 108.198258l0 294.079782c0 40.977273 16.619516 79.414701 46.702672 108.136859 29.959336 28.844955 70.069869 44.814672 112.624057 44.814672l490.019383 0c42.585911 0 82.696444-15.969717 112.624057-44.814672 30.082132-28.844955 46.579875-67.222007 46.579875-108.136859L915.172921 511.968278C915.171897 471.053426 898.675178 432.677397 868.593046 403.832442zM841.821309 806.049083c0 22.098297-8.882298 42.772152-25.099654 58.306964-16.154935 15.661701-37.81935 24.203238-60.752666 24.203238L265.949606 888.559285c-22.934339 0-44.567032-8.54256-60.877509-24.264637-16.186657-15.474436-25.067932-36.148291-25.067932-58.246589L180.004165 511.968278c0-22.035876 8.881274-42.772152 25.192775-58.307987 16.186657-15.536858 37.81935-24.139793 60.753689-24.139793l490.019383 0c22.933315 0 44.597731 8.602935 60.752666 24.139793 16.21838 15.535835 25.099654 36.272112 25.099654 58.307987L841.822332 806.049083zM510.974136 135.440715c114.914216 0 208.318536 89.75214 208.318536 200.055338l73.350588 0c0-149.113109-126.366036-270.496667-281.669124-270.496667-155.333788 0-281.699824 121.383558-281.699824 270.496667l73.350588 0C302.623877 225.193879 396.059919 135.440715 510.974136 135.440715zM474.299865 747.244792l73.350588 0L547.650453 629.576859l-73.350588 0L474.299865 747.244792z" p-id="2751"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/pdf.svg b/ruoyi-ui/src/assets/icons/svg/pdf.svg deleted file mode 100644 index 957aa0c..0000000 --- a/ruoyi-ui/src/assets/icons/svg/pdf.svg +++ /dev/null @@ -1 +0,0 @@ -<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128"><path d="M869.073 277.307H657.111V65.344l211.962 211.963zm-238.232 26.27V65.344l-476.498-.054v416.957h714.73v-178.67H630.841zm-335.836 360.57c-5.07-3.064-10.944-5.133-17.61-6.201-6.67-1.064-13.603-1.6-20.81-1.6h-48.821v85.641h48.822c7.206 0 14.14-.532 20.81-1.6 6.665-1.065 12.54-3.133 17.609-6.202 5.064-3.063 9.134-7.406 12.208-13.007 3.065-5.602 4.6-12.937 4.6-22.011 0-9.07-1.535-16.408-4.6-22.01-3.074-5.603-7.144-9.94-12.208-13.01zM35.82 541.805v416.904h952.358V541.805H35.821zm331.421 191.179c-3.6 11.071-9.343 20.879-17.209 29.413-7.874 8.542-18.078 15.408-30.617 20.61-12.544 5.206-27.747 7.807-45.621 7.807h-66.036v102.45h-62.831V607.517h128.867c17.874 0 33.077 2.6 45.62 7.802 12.541 5.207 22.745 12.076 30.618 20.615 7.866 8.538 13.604 18.277 17.21 29.212 3.6 10.943 5.401 22.278 5.401 34.018 0 11.477-1.8 22.752-5.402 33.819zM644.9 806.417c-5.343 17.61-13.408 32.818-24.212 45.627-10.807 12.803-24.283 22.879-40.423 30.213-16.146 7.343-35.155 11.007-57.03 11.007h-123.26V607.518h123.26c18.41 0 35.552 2.941 51.428 8.808 15.873 5.869 29.618 14.671 41.22 26.412 11.608 11.744 20.674 26.411 27.217 44.02 6.535 17.61 9.803 38.288 9.803 62.035 0 20.81-2.67 40.02-8.003 57.624zm245.362-146.07h-138.07v66.03h119.66v48.829h-119.66v118.058h-62.83V607.518h200.9v52.829h-.001zm-318.2 25.611c-6.402-8.266-14.877-14.604-25.412-19.01-10.544-4.402-23.551-6.602-39.019-6.602h-44.825v180.088h56.029c9.07 0 17.872-1.463 26.415-4.401 8.535-2.932 16.14-7.802 22.812-14.609 6.665-6.8 12.007-15.667 16.007-26.61 4.003-10.94 6.003-24.275 6.003-40.021 0-14.408-1.4-27.416-4.202-39.019-2.8-11.607-7.406-21.542-13.808-29.816zm0 0"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/people.svg b/ruoyi-ui/src/assets/icons/svg/people.svg deleted file mode 100644 index 2bd54ae..0000000 --- a/ruoyi-ui/src/assets/icons/svg/people.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M104.185 95.254c8.161 7.574 13.145 17.441 13.145 28.28 0 1.508-.098 2.998-.285 4.466h-10.784c.238-1.465.403-2.948.403-4.465 0-8.983-4.36-17.115-11.419-23.216C86 104.66 75.355 107.162 64 107.162c-11.344 0-21.98-2.495-31.22-6.83-7.064 6.099-11.444 14.218-11.444 23.203 0 1.517.165 3 .403 4.465H10.955a35.444 35.444 0 0 1-.285-4.465c0-10.838 4.974-20.713 13.127-28.291C9.294 85.42.003 70.417.003 53.58.003 23.99 28.656.001 64 .001s63.997 23.988 63.997 53.58c0 16.842-9.299 31.85-23.812 41.673zM64 36.867c-29.454 0-53.33-10.077-53.33 15.342 0 25.418 23.876 46.023 53.33 46.023 29.454 0 53.33-20.605 53.33-46.023 0-25.419-23.876-15.342-53.33-15.342zm24.888 25.644c-3.927 0-7.111-2.665-7.111-5.953 0-3.288 3.184-5.954 7.11-5.954 3.928 0 7.111 2.666 7.111 5.954s-3.183 5.953-7.11 5.953zm-3.556 16.372c0 4.11-9.55 7.442-21.332 7.442-11.781 0-21.332-3.332-21.332-7.442 0-1.06.656-2.064 1.8-2.976 3.295 2.626 10.79 4.465 19.532 4.465 8.743 0 16.237-1.84 19.531-4.465 1.145.912 1.801 1.916 1.801 2.976zm-46.22-16.372c-3.927 0-7.11-2.665-7.11-5.953 0-3.288 3.183-5.954 7.11-5.954 3.927 0 7.111 2.666 7.111 5.954s-3.184 5.953-7.11 5.953z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/peoples.svg b/ruoyi-ui/src/assets/icons/svg/peoples.svg deleted file mode 100644 index aab852e..0000000 --- a/ruoyi-ui/src/assets/icons/svg/peoples.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M95.648 118.762c0 5.035-3.563 9.121-7.979 9.121H7.98c-4.416 0-7.979-4.086-7.979-9.121C0 100.519 15.408 83.47 31.152 76.75c-9.099-6.43-15.216-17.863-15.216-30.987v-9.128c0-20.16 14.293-36.518 31.893-36.518s31.894 16.358 31.894 36.518v9.122c0 13.137-6.123 24.556-15.216 30.993 15.738 6.726 31.141 23.769 31.141 42.012z"/><path d="M106.032 118.252h15.867c3.376 0 6.101-3.125 6.101-6.972 0-13.957-11.787-26.984-23.819-32.123 6.955-4.919 11.638-13.66 11.638-23.704v-6.985c0-15.416-10.928-27.926-24.39-27.926-1.674 0-3.306.193-4.89.561 1.936 4.713 3.018 9.974 3.018 15.526v9.121c0 13.137-3.056 23.111-11.066 30.993 14.842 4.41 27.312 23.42 27.541 41.509z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/phone.svg b/ruoyi-ui/src/assets/icons/svg/phone.svg deleted file mode 100644 index ab8e8c4..0000000 --- a/ruoyi-ui/src/assets/icons/svg/phone.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1567417214476" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2266" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M761.503029 2.90619 242.121921 2.90619c-32.405037 0-58.932204 26.060539-58.932204 58.527998l0 902.302287c0 32.156374 26.217105 58.216913 58.932204 58.216913l519.381108 0c32.344662 0 58.591443-26.060539 58.591443-58.216913L820.094472 61.123103C820.094472 28.966729 793.847691 2.90619 761.503029 2.90619M452.878996 61.123103l98.147344 0c6.780427 0 12.31549 5.536087 12.31549 12.253068 0 6.748704-5.535063 12.253068-12.31549 12.253068l-98.147344 0c-6.779404 0-12.345166-5.504364-12.345166-12.253068C440.532807 66.659189 446.099592 61.123103 452.878996 61.123103M501.641583 980.593398c-29.636994 0-53.987588-23.946388-53.987588-53.677527 0-29.356608 24.039509-53.614082 53.987588-53.614082 29.91738 0 53.987588 23.883967 53.987588 53.614082C555.629171 956.647009 531.559986 980.593398 501.641583 980.593398M766.35657 803.142893c0 16.23373-13.186324 29.107945-29.233811 29.107945l-470.618521 0c-16.35755 0-29.325909-13.186324-29.325909-29.107945L237.178329 163.500794c0-16.232706 13.279445-29.138644 29.325909-29.138644l470.246037 0c16.420995 0 29.357632 13.1853 29.357632 29.138644l0 639.642099L766.35657 803.142893zM766.35657 803.142893" p-id="2267"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/post.svg b/ruoyi-ui/src/assets/icons/svg/post.svg deleted file mode 100644 index 2922c61..0000000 --- a/ruoyi-ui/src/assets/icons/svg/post.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566035724641" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3998" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M136.4 434.3h77.7c21.5 0 38.9-17.4 38.9-38.9s-17.4-38.9-38.9-38.9h-77.7c-21.5 0-38.9 17.4-38.9 38.9s17.4 38.9 38.9 38.9zM252.9 628.6c0-21.5-17.4-38.9-38.9-38.9h-77.7c-21.5 0-38.9 17.4-38.9 38.9s17.4 38.9 38.9 38.9H214c21.5-0.1 38.9-17.5 38.9-38.9z" p-id="3999"></path><path d="M874.7 97.5H227c-28.6 0-51.8 23.2-51.8 51.8v194.3h38.9c28.6 0 51.8 23.2 51.8 51.8 0 28.6-23.2 51.8-51.8 51.8h-38.9v129.5h38.9c28.6 0 51.8 23.2 51.8 51.8 0 28.6-23.2 51.8-51.8 51.8h-38.9v194.3c0 28.6 23.2 51.8 51.8 51.8h647.7c28.6 0 51.8-23.2 51.8-51.8V149.3c0-28.6-23.2-51.8-51.8-51.8z m-311.3 723c-15.6 0-146.7-71.6-146.7-91 0-19.4 102-368.6 102-368.6l-83.6-104s-12.3-23.1 24.6-23.1h208.9c36.9 0 18.4 23.1 18.4 23.1l-79 104s102 351.3 102 368.6c0.1 17.3-131 91-146.6 91z m169.2-253.6l-27.9 40.2-74.5-240 103.4 171.7c4.6 7.9 4.2 20.6-1 28.1z" p-id="4000"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/qq.svg b/ruoyi-ui/src/assets/icons/svg/qq.svg deleted file mode 100644 index ee13d4e..0000000 --- a/ruoyi-ui/src/assets/icons/svg/qq.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M18.448 57.545l-.244-.744-.198-.968-.132-.53v-2.181l.236-.859.24-.908.317-.953.428-1.06.561-1.103.794-1.104v-.773l.077-.724.123-.984.34-1.106.313-1.194.25-.548.289-.511.371-.569.405-.423v-2.73l.234-1.407.236-1.633.42-1.955.577-2.035.43-1.118.426-1.217.468-1.135.559-1.216.57-1.332.655-1.247.737-1.331.929-1.33.43-.762.457-.624.995-1.406 1.025-1.403 1.163-1.444 1.246-1.405 1.352-1.384 1.41-1.423 1.708-1.536 1.083-.934 1.322-1.008 1.34-.89 1.448-.855 1.392-.76 1.57-.63 1.667-.775 1.657-.532 1.653-.552 1.787-.548 1.785-.417 1.876-.347L59.128.68l1.879-.245 1.876-.252 2.002-.106h5.912l1.97.243 1.981.231 2.019.207 1.874.441 1.979.413 1.857.475 2.035.53 1.862.646 1.782.738 1.904.78 1.736.853 1.689.95 1.655 1.044 1.425.971.662.548.693.401 1.323 1.1 1.115 1.064 1.112 1.1 1.083 1.214.894 1.178 1.064 1.217.74 1.306.752 1.162.798 1.352.661 1.175 1.113 2.489.546 1.286.428 1.192.428 1.294.384 1.217.267 1.047.347 1.231.607 2.198.388 1.924.253 1.861.217 1.497.342 2.28.077.362.274.41.737 1.18.473.8.42.832.534.892.472 1.07.307 1.093.334 1.2.252 1.232.115.605.106.746v.648l-.106.643v.8l-.192.774-.35 1.5-.403.76-.299.852v.213l.142.264.4.623 1.746 2.53 1.377 1.9.66 1.267.889 1.389.774 1.52.893 1.627.894 1.828 1.006 2.069.567 1.268.518 1.239.447 1.307.44 1.175.336 1.235.342 1.16.432 2.261.343 2.31.235 2.05v2.891l-.158 1.025-.226 1.768-.308 1.59-.48 1.44-.18.588-.336.707-.28.493-.375.607-.33.383-.42.494-.375.4-.401.34-.48.207-.432.207-.355.114h-.543l-.346-.114-.66-.32-.302-.212-.317-.223-.347-.304-.35-.342-.579-.63-.684-.89-.539-.917-.538-.734-.526-.855-.741-1.517-.833-1.579-.098-.055h-.138l-.338.247-.196.415-.326.516-.567 1.533-.856 2.182-1.096 2.626-.824 1.308-.864 1.366-1.027 1.536-1.09 1.503-.557.68-.676.743-1.555 1.497.136.135.21.214.777.446 3.235 1.524 1.41.779 1.347.756 1.332.953 1.187.982.574.443.432.511.445.593.367.643.198.533.242.64.105.554.115.647-.115.433v.44l-.105.454-.242.415-.092.325-.22.394-.587.784-.543.627-.42.47-.35.348-.893.638-1.01.556-1.077.532-1.155.511-1.287.495-.693.207-.608.167-1.496.342-1.545.325-1.552.323-1.689.27-1.74.072-1.785.21h-5.539l-1.998-.114-1.86-.168-2.005-.27-1.99-.209-2.095-.286-2.03-.495-1.981-.374-1.968-.552-2.019-.707-1.98-.585-1.044-.342-.927-.323-.586-.223-.582-.12h-1.647l-1.904-.131-.962-.096-1.24-.135-.795.705-1.085.665-1.471.701-1.628.875-.99.475-1.033.376-2.281.914-1.24.305-1.3.343-1.803.344-1.13.086-1.193.1-1.246.135-1.45.053h-5.926l-3.346-.053-3.25-.321-1.644-.23-1.589-.23-1.546-.227-1.547-.305-1.442-.456-1.434-.325-1.294-.51-1.223-.474-1.142-.533-.99-.583-.984-.71-.336-.343-.44-.415-.334-.362-.3-.417-.278-.415-.215-.42-.311-.89-.109-.46-.138-.51v-.473l.138-.533v-.53l.109-.53v-1.069l.052-.564.259-.647.215-.646.39-.779.286-.3.236-.348.615-.738.49-.38.464-.266.428-.338.676-.21.543-.324.676-.341.77-.227.775-.231.897-.192.85-.11 1.008-.13 1.093-.081.284-.092h.063l.137-.115v-.13l-.2-.266-.58-.27-1.45-1.231-.975-.761-1.127-.967-1.136-1.082-1.181-1.382-1.36-1.558-.508-.843-.672-.87-.58-1.007-.522-1.1-.704-1.047-.459-1.194-.547-1.192-.546-1.33-.397-1.273-.378-1.575-.112-.057h-.115l-.059-.113h-.14l-.23.113-.114.057-.158.264-.057.321-.119.286-.206.477-.664 1.157-.345.701-.546.612-.58.736-.641.816-.677.724-.795.701-.734.658-.814.524-.89.546-.855.325-1.008.247-.99.095h-.233l-.228-.095-.18-.384-.29-.188-.38-.912-.237-.493-.255-.707-.21-.734-.113-.724-.313-1.648-.12-.972v-3.185l.12-2.379.196-1.214.23-1.252.21-1.347.374-1.254.42-1.443.431-1.407.578-1.448.545-1.38.754-1.4.699-1.52.855-1.425 1.006-1.538 1.023-1.382 1.069-1.538.891-1.071 1.142-1.227 1.202-1.237.56-.59.678-.662.985-.836 1.012-.853 1.647-1.446 1.242-.889z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/question.svg b/ruoyi-ui/src/assets/icons/svg/question.svg deleted file mode 100644 index cf75bd4..0000000 --- a/ruoyi-ui/src/assets/icons/svg/question.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1581238842264" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1409" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 0C229.233778 0 0 229.233778 0 512s229.233778 512 512 512 512-229.233778 512-512A512 512 0 0 0 512 0z m0 938.666667C276.366222 938.666667 85.333333 747.633778 85.333333 512 85.333333 276.366222 276.366222 85.333333 512 85.333333c235.633778 0 426.666667 191.032889 426.666667 426.666667a426.666667 426.666667 0 0 1-426.666667 426.666667z m0-717.653334a170.666667 170.666667 0 0 0-170.666667 170.666667 42.666667 42.666667 0 0 0 85.333334 0 85.333333 85.333333 0 1 1 85.333333 85.333333 42.666667 42.666667 0 0 0-42.666667 42.666667v111.36a42.666667 42.666667 0 0 0 85.333334 0v-74.24A170.666667 170.666667 0 0 0 512 221.013333z m-42.666667 542.293334a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 0 0-85.333334 0z" p-id="1410"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/radio.svg b/ruoyi-ui/src/assets/icons/svg/radio.svg deleted file mode 100644 index 0cde345..0000000 --- a/ruoyi-ui/src/assets/icons/svg/radio.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575966775973" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="879" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M507.39346659 71.84873358c241.53533667 0 437.39770766 195.85422109 437.39770767 437.37442191 0 241.53766571-195.86237099 437.38955776-437.39770767 437.38955776-241.50040803 0-437.34997219-195.85189205-437.34997219-437.38955776C70.0434944 267.70295467 265.89189347 71.84873358 507.39346659 71.84873358L507.39346659 71.84873358zM507.39346659 282.81899805c-125.00686734 0-226.37039389 101.38914133-226.37039388 226.41813048 0 125.01268821 101.36352768 226.39717262 226.37039388 226.39717262 125.04295993 0 226.42395136-101.38448441 226.42395136-226.39717262C733.81625401 384.20813938 632.43642653 282.81899805 507.39346659 282.81899805L507.39346659 282.81899805zM507.39346659 120.78172615c-214.46664192 0-388.42047261 173.95150279-388.4204726 388.44026539 0 214.51204949 173.95499463 388.46122325 388.4204726 388.46122325 214.52369237 0 388.46005817-173.94800981 388.46005818-388.46122325C895.85236082 294.73322894 721.91715897 120.78172615 507.39346659 120.78172615z" p-id="880"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/rate.svg b/ruoyi-ui/src/assets/icons/svg/rate.svg deleted file mode 100644 index aa3b14d..0000000 --- a/ruoyi-ui/src/assets/icons/svg/rate.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577246781606" class="icon" viewBox="0 0 1069 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1098" xmlns:xlink="http://www.w3.org/1999/xlink" width="84.5595703125" height="81"><defs><style type="text/css"></style></defs><path d="M633.72929961 378.02038203l9.49872568 18.68789795 20.78025469 2.79745225 206.61592412 27.33248408a11.46496817 11.46496817 0 0 1 6.6095543 19.47324902l-147.2675168 147.35350284-14.89299345 14.89299345 3.8006376 20.68280244 37.84585956 204.89044571a11.46496817 11.46496817 0 0 1-16.4808914 12.2961788L554.68980898 751.84713388l-18.68789794-9.49299345-18.48726123 9.99171915-183.23885392 99.34968163a11.46496817 11.46496817 0 0 1-16.78471347-11.8662416l32.5433127-205.79617881 3.29617793-20.78598692-15.19108243-14.49172002-151.03375839-143.48407587a11.46496817 11.46496817 0 0 1 6.09936328-19.63949062l205.79617881-32.63503185 20.78598691-3.2961788L428.87898125 380.72038203 518.59235674 192.64331182a11.46496817 11.46496817 0 0 1 20.56815264-0.26369385l94.56879023 185.63503183zM496.64840732 85.52038203l-121.75796162 254.98089229L95.76433145 384.76178369A34.3949045 34.3949045 0 0 0 77.46050938 443.66879023l204.87324901 194.66369385-44.16879023 279.1146498a34.3949045 34.3949045 0 0 0 50.36560489 35.61592325l248.4-134.67898038 251.84522285 128.27579591a34.3949045 34.3949045 0 0 0 49.43694287-36.89426777l-51.30573223-277.85350284 199.73120977-199.90891758a34.3949045 34.3949045 0 0 0-19.82866201-58.40827998l-280.11783428-37.03184736L558.32993633 84.71210205a34.3949045 34.3949045 0 0 0-61.68152901 0.80254775z" p-id="1099"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/redis-list.svg b/ruoyi-ui/src/assets/icons/svg/redis-list.svg deleted file mode 100644 index 98a15b2..0000000 --- a/ruoyi-ui/src/assets/icons/svg/redis-list.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1656035183065" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3395" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); } -</style></defs><path d="M958.88 730.06H65.12c-18.28 0-33.12-14.82-33.12-33.12V68.91c0-18.29 14.83-33.12 33.12-33.12h893.77c18.28 0 33.12 14.82 33.12 33.12v628.03c-0.01 18.3-14.84 33.12-33.13 33.12zM98.23 663.83h827.53v-561.8H98.23v561.8z" p-id="3396"></path><path d="M512 954.55c-18.28 0-33.12-14.82-33.12-33.12V733.92c0-18.29 14.83-33.12 33.12-33.12s33.12 14.82 33.12 33.12v187.51c0 18.3-14.84 33.12-33.12 33.12z" p-id="3397"></path><path d="M762.01 988.21H261.99c-18.28 0-33.12-14.82-33.12-33.12 0-18.29 14.83-33.12 33.12-33.12h500.03c18.28 0 33.12 14.82 33.12 33.12-0.01 18.29-14.84 33.12-33.13 33.12zM514.74 578.55c-21.63 0-43.31-3.87-64.21-11.65-45.95-17.13-82.49-51.13-102.86-95.74-5.07-11.08-0.19-24.19 10.89-29.26 11.08-5.09 24.19-0.18 29.26 10.91 15.5 33.88 43.25 59.7 78.14 72.71 34.93 12.99 72.79 11.64 106.66-3.85 33.22-15.17 58.8-42.26 72.03-76.3 4.42-11.37 17.21-17.01 28.57-12.58 11.36 4.42 16.99 17.22 12.57 28.58-17.42 44.82-51.1 80.5-94.82 100.47-24.34 11.12-50.25 16.71-76.23 16.71z" p-id="3398"></path><path d="M325.27 528.78c-1.66 0-3.34-0.18-5.02-0.57-11.88-2.77-19.28-14.63-16.49-26.51l18.84-81c1.34-5.82 5-10.84 10.13-13.92 5.09-3.09 11.3-3.96 17.03-2.41l80.51 21.43c11.79 3.14 18.8 15.23 15.67 27.02-3.15 11.79-15.42 18.75-27.02 15.65l-58.49-15.57-13.69 58.81c-2.37 10.2-11.45 17.07-21.47 17.07zM360.8 351.01c-2.65 0-5.37-0.49-8-1.51-11.36-4.41-16.99-17.21-12.59-28.57 17.4-44.79 51.06-80.47 94.8-100.48 92.15-42.06 201.25-1.39 243.31 90.68 5.07 11.08 0.19 24.19-10.89 29.26-11.13 5.07-24.19 0.17-29.26-10.91-31.97-69.91-114.9-100.82-184.79-68.86-33.22 15.19-58.8 42.28-71.99 76.29-3.41 8.74-11.75 14.1-20.59 14.1z" p-id="3399"></path><path d="M684.68 376.74c-1.47 0-2.95-0.15-4.42-0.44l-81.61-16.68c-11.94-2.45-19.64-14.11-17.21-26.06 2.44-11.96 14.1-19.64 26.04-17.22l59.29 12.12 10.23-59.5c2.05-12 13.52-20.19 25.48-18.01 12.03 2.06 20.09 13.48 18.02 25.5l-14.08 81.96a22.089 22.089 0 0 1-9.29 14.49c-3.7 2.51-8.03 3.84-12.45 3.84z" p-id="3400"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/redis.svg b/ruoyi-ui/src/assets/icons/svg/redis.svg deleted file mode 100644 index 2f1d62d..0000000 --- a/ruoyi-ui/src/assets/icons/svg/redis.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1605865043777" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="856" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M1023.786667 611.84c-0.426667 9.770667-13.354667 20.693333-39.893334 34.56-54.613333 28.458667-337.749333 144.896-397.994666 176.298667-60.288 31.402667-93.738667 31.104-141.354667 8.32-47.616-22.741333-348.842667-144.469333-403.114667-170.368-27.093333-12.970667-40.917333-23.893333-41.386666-34.218667v103.509333c0 10.325333 14.250667 21.290667 41.386666 34.261334 54.272 25.941333 355.541333 147.626667 403.114667 170.368 47.616 22.784 81.066667 23.082667 141.354667-8.362667 60.245333-31.402667 343.338667-147.797333 397.994666-176.298667 27.776-14.464 40.106667-25.728 40.106667-35.925333v-102.058667l-0.213333-0.085333z m0-168.746667c-0.512 9.770667-13.397333 20.650667-39.893334 34.517334-54.613333 28.458667-337.749333 144.896-397.994666 176.298666-60.288 31.402667-93.738667 31.104-141.354667 8.362667-47.616-22.741333-348.842667-144.469333-403.114667-170.410667-27.093333-12.928-40.917333-23.893333-41.386666-34.176v103.509334c0 10.325333 14.250667 21.248 41.386666 34.218666 54.272 25.941333 355.498667 147.626667 403.114667 170.368 47.616 22.784 81.066667 23.082667 141.354667-8.32 60.245333-31.402667 343.338667-147.84 397.994666-176.298666 27.776-14.506667 40.106667-25.770667 40.106667-35.968v-102.058667l-0.256-0.042667z m0-175.018666c0.469333-10.410667-13.141333-19.541333-40.533334-29.610667-53.248-19.498667-334.634667-131.498667-388.522666-151.253333-53.888-19.712-75.818667-18.901333-139.093334 3.84C392.234667 113.706667 92.629333 231.253333 39.338667 252.074667c-26.666667 10.496-39.68 20.181333-39.253334 30.506666V386.133333c0 10.325333 14.250667 21.248 41.386667 34.218667 54.272 25.941333 355.498667 147.669333 403.114667 170.410667 47.616 22.741333 81.066667 23.04 141.354666-8.362667 60.245333-31.402667 343.338667-147.84 397.994667-176.298667 27.776-14.506667 40.106667-25.770667 40.106667-35.968V268.074667h-0.341334zM366.677333 366.08l237.269334-36.437333-71.68 105.088-165.546667-68.650667z m524.8-94.634667l-140.330666 55.466667-15.232 5.973333-140.245334-55.466666 155.392-61.44 140.373334 55.466666z m-411.989333-101.674666l-22.954667-42.325334 71.594667 27.989334 67.498667-22.101334-18.261334 43.733334 68.778667 25.770666-88.704 9.216-19.882667 47.786667-32.085333-53.290667-102.4-9.216 76.416-27.562666z m-176.768 59.733333c70.058667 0 126.805333 21.973333 126.805333 49.109333s-56.746667 49.152-126.805333 49.152-126.848-22.058667-126.848-49.152c0-27.136 56.789333-49.152 126.848-49.152z" p-id="857"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/row.svg b/ruoyi-ui/src/assets/icons/svg/row.svg deleted file mode 100644 index 0780992..0000000 --- a/ruoyi-ui/src/assets/icons/svg/row.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1579339929870" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1182" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M152 854.856875h325.7146875V237.715625H134.856875v600q0 6.99375 5.0746875 12.0684375T152 854.856875z m737.143125-17.1421875v-600H546.284375v617.1421875H872q6.99375 0 12.0684375-5.07375t5.0746875-12.0684375z m68.5715625-651.429375V837.715625q0 35.3821875-25.16625 60.5484375T872 923.4284375H152q-35.383125 0-60.5484375-25.1653125T66.284375 837.7146875V186.284375q0-35.3821875 25.16625-60.5484375T152 100.5715625h720q35.383125 0 60.5484375 25.1653125t25.16625 60.5484375z" p-id="1183"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/search.svg b/ruoyi-ui/src/assets/icons/svg/search.svg deleted file mode 100644 index 84233dd..0000000 --- a/ruoyi-ui/src/assets/icons/svg/search.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M124.884 109.812L94.256 79.166c-.357-.357-.757-.629-1.129-.914a50.366 50.366 0 0 0 8.186-27.59C101.327 22.689 78.656 0 50.67 0 22.685 0 0 22.688 0 50.663c0 27.989 22.685 50.663 50.656 50.663 10.186 0 19.643-3.03 27.6-8.201.286.385.557.771.9 1.114l30.628 30.632a10.633 10.633 0 0 0 7.543 3.129c2.728 0 5.457-1.043 7.543-3.115 4.171-4.157 4.171-10.915.014-15.073M50.671 85.338C31.557 85.338 16 69.78 16 50.663c0-19.102 15.557-34.661 34.67-34.661 19.115 0 34.657 15.559 34.657 34.675 0 19.102-15.557 34.661-34.656 34.661"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/select.svg b/ruoyi-ui/src/assets/icons/svg/select.svg deleted file mode 100644 index d628382..0000000 --- a/ruoyi-ui/src/assets/icons/svg/select.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575803481213" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="804" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M62 511.97954521C62 263.86590869 263.90681826 62 511.97954521 62s449.97954521 201.825 449.97954521 449.97954521c0 248.19545479-201.90681826 449.97954521-449.97954521 449.97954521C263.90681826 962 62 760.175 62 511.97954521M901.98636348 511.97954521c0-215.24318174-175.00909131-390.41590869-390.00681827-390.41590869-215.03863652 0-389.96590869 175.17272695-389.96590868 390.41590869 0 215.28409131 175.00909131 390.45681826 389.96590868 390.45681826C727.01818174 902.47727305 901.98636348 727.30454521 901.98636348 511.97954521M264.17272695 430.28409131c0-5.76818174 2.12727305-11.51590869 6.64772696-15.87272696 8.71363652-8.75454521 22.88863652-8.75454521 31.725 0l209.4340913 208.22727305L721.45454521 414.53409131c8.75454521-8.71363652 22.97045479-8.71363652 31.90909132 0 8.71363652 8.75454521 8.71363652 22.88863652 0 31.60227304L511.97954521 685.74090869 270.71818174 446.01363653C266.27954521 441.77954521 264.17272695 436.05227305 264.17272695 430.28409131" p-id="805"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/server.svg b/ruoyi-ui/src/assets/icons/svg/server.svg deleted file mode 100644 index eb287e3..0000000 --- a/ruoyi-ui/src/assets/icons/svg/server.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1547360688278" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M890 120H134a70 70 0 0 0-70 70v500a70 70 0 0 0 70 70h756a70 70 0 0 0 70-70V190a70 70 0 0 0-70-70z m-10 520a40 40 0 0 1-40 40H712V448a40 40 0 0 0-80 0v232h-80V368a40 40 0 0 0-80 0v312h-80V512a40 40 0 0 0-80 0v168H184a40 40 0 0 1-40-40V240a40 40 0 0 1 40-40h656a40 40 0 0 1 40 40zM696 824H328a40 40 0 0 0 0 80h368a40 40 0 0 0 0-80z" p-id="6718"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/shopping.svg b/ruoyi-ui/src/assets/icons/svg/shopping.svg deleted file mode 100644 index 87513e7..0000000 --- a/ruoyi-ui/src/assets/icons/svg/shopping.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M42.913 101.36c1.642 0 3.198.332 4.667.996a12.28 12.28 0 0 1 3.89 2.772c1.123 1.184 1.987 2.582 2.592 4.193.605 1.612.908 3.318.908 5.118 0 1.8-.303 3.507-.908 5.118-.605 1.611-1.469 3.01-2.593 4.194a13.3 13.3 0 0 1-3.889 2.843 10.582 10.582 0 0 1-4.667 1.066c-1.729 0-3.306-.355-4.732-1.066a13.604 13.604 0 0 1-3.825-2.843c-1.123-1.185-1.988-2.583-2.593-4.194a14.437 14.437 0 0 1-.907-5.118c0-1.8.302-3.506.907-5.118.605-1.61 1.47-3.009 2.593-4.193a12.515 12.515 0 0 1 3.825-2.772c1.426-.664 3.003-.996 4.732-.996zm53.932.285c1.643 0 3.22.331 4.733.995a11.386 11.386 0 0 1 3.889 2.772c1.08 1.185 1.945 2.583 2.593 4.194.648 1.61.972 3.317.972 5.118 0 1.8-.324 3.506-.972 5.117-.648 1.611-1.513 3.01-2.593 4.194a12.253 12.253 0 0 1-3.89 2.843 11 11 0 0 1-4.732 1.066 10.58 10.58 0 0 1-4.667-1.066 12.478 12.478 0 0 1-3.824-2.843c-1.08-1.185-1.945-2.583-2.593-4.194a13.581 13.581 0 0 1-.973-5.117c0-1.801.325-3.507.973-5.118.648-1.611 1.512-3.01 2.593-4.194a11.559 11.559 0 0 1 3.824-2.772 11.212 11.212 0 0 1 4.667-.995zm21.781-80.747c2.42 0 4.3.355 5.64 1.066 1.34.71 2.29 1.587 2.852 2.63a6.427 6.427 0 0 1 .778 3.34c-.044 1.185-.195 2.204-.454 3.057-.26.853-.8 2.606-1.62 5.26a589.268 589.268 0 0 1-2.788 8.743 1236.373 1236.373 0 0 0-3.047 9.453c-.994 3.128-1.75 5.592-2.269 7.393-1.123 3.79-2.55 6.42-4.278 7.89-1.728 1.469-3.846 2.203-6.352 2.203H39.023l1.945 12.795h65.342c4.148 0 6.223 1.943 6.223 5.828 0 1.896-.41 3.53-1.232 4.905-.821 1.374-2.442 2.061-4.862 2.061H38.505c-1.729 0-3.176-.426-4.343-1.28-1.167-.852-2.14-1.966-2.917-3.34a21.277 21.277 0 0 1-1.88-4.478 44.128 44.128 0 0 1-1.102-4.55c-.087-.568-.324-1.942-.713-4.122-.39-2.18-.865-4.904-1.426-8.174l-1.88-10.947c-.692-4.027-1.383-8.079-2.075-12.154-1.642-9.572-3.5-20.234-5.574-31.986H6.87c-1.296 0-2.377-.356-3.24-1.067a9.024 9.024 0 0 1-2.14-2.558 10.416 10.416 0 0 1-1.167-3.2C.108 8.53 0 7.488 0 6.54c0-1.896.583-3.46 1.75-4.69C2.917.615 4.494 0 6.482 0h13.095c1.728 0 3.111.284 4.148.853 1.037.569 1.858 1.28 2.463 2.132a8.548 8.548 0 0 1 1.297 2.701c.26.948.475 1.754.648 2.417.173.758.346 1.825.519 3.199.173 1.374.345 2.772.518 4.193.26 1.706.519 3.507.778 5.403h88.678z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/size.svg b/ruoyi-ui/src/assets/icons/svg/size.svg deleted file mode 100644 index ddb25b8..0000000 --- a/ruoyi-ui/src/assets/icons/svg/size.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h54.796v18.286H36.531V128H18.265V73.143H0V54.857zm127.857-36.571H91.935V128H72.456V18.286H36.534V0h91.326l-.003 18.286z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/skill.svg b/ruoyi-ui/src/assets/icons/svg/skill.svg deleted file mode 100644 index a3b7312..0000000 --- a/ruoyi-ui/src/assets/icons/svg/skill.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M31.652 93.206h33.401c1.44 2.418 3.077 4.663 4.93 6.692h-38.33v-6.692zm0-10.586h28.914a44.8 44.8 0 0 1-1.264-6.688h-27.65v6.688zm0-17.27H59.39c.288-2.286.714-4.532 1.34-6.687H31.65v6.687h.003zm53.913 44.84v5.85c0 2.798-2.095 5.075-4.667 5.075h-70.07c-2.576 0-4.663-2.277-4.663-5.075V31.26l23.22-20.96v22.25H17.16v6.688h18.39V6.688h45.348c2.576 0 4.667 2.277 4.667 5.066v20.009c1.987-.675 4.053-1.128 6.17-1.445v-18.56C91.738 5.28 86.874 0 80.902 0H31.15L0 28.118v87.917c0 6.48 4.859 11.759 10.832 11.759h70.07c5.974 0 10.837-5.27 10.837-11.759v-4.41c-2.117-.312-4.183-.765-6.17-1.435h-.004zM23.279 58.667h-7.96v6.688h7.96v-6.688zm-7.956 41.23h7.96v-6.691h-7.96v6.692zm7.956-23.96h-7.96v6.687h7.96v-6.688zm89.718-15.042l-4.896-4.07-12.447 17.613-11.19-9.305-3.762 5.311 16.091 13.38 16.204-22.929zM128 70.978c0-18.632-13.97-33.782-31.147-33.782-17.168 0-31.135 15.155-31.135 33.782 0 18.628 13.97 33.783 31.135 33.783 17.172 0 31.143-15.15 31.143-33.783H128zm-6.17 0c0 14.933-11.203 27.1-24.981 27.1-13.77 0-24.987-12.158-24.987-27.1 0-14.941 11.195-27.099 24.987-27.099 13.778 0 24.982 12.158 24.982 27.1z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/slider.svg b/ruoyi-ui/src/assets/icons/svg/slider.svg deleted file mode 100644 index fbe4f39..0000000 --- a/ruoyi-ui/src/assets/icons/svg/slider.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577185310368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1238" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M951.453125 476.84375H523.671875a131.8359375 131.8359375 0 0 0-254.1796875 0H72.546875v70.3125h196.9453125a131.8359375 131.8359375 0 0 0 254.1796875 0H951.453125z" p-id="1239"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/star.svg b/ruoyi-ui/src/assets/icons/svg/star.svg deleted file mode 100644 index 6cf86e6..0000000 --- a/ruoyi-ui/src/assets/icons/svg/star.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M70.66 4.328l14.01 29.693c1.088 2.29 3.177 3.882 5.603 4.25l31.347 4.76c6.087.926 8.528 8.756 4.117 13.247L103.05 79.395c-1.75 1.78-2.544 4.352-2.132 6.867l5.352 32.641c1.043 6.337-5.33 11.182-10.778 8.19l-28.039-15.409a7.13 7.13 0 0 0-6.91 0l-28.039 15.41c-5.448 2.99-11.821-1.854-10.777-8.19l5.352-32.642c.415-2.515-.387-5.088-2.136-6.867L2.264 56.278C-2.146 51.787.286 43.957 6.38 43.031l31.343-4.76c2.419-.368 4.51-1.96 5.595-4.25L57.334 4.328c2.728-5.77 10.605-5.77 13.325 0z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/swagger.svg b/ruoyi-ui/src/assets/icons/svg/swagger.svg deleted file mode 100644 index 05d4e7b..0000000 --- a/ruoyi-ui/src/assets/icons/svg/swagger.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1566036776944" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6463" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M64 223.995345h168.001164v47.997673c0 26.428509 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.569164 41.984-47.997673v-47.997673h504.003491a32.004655 32.004655 0 0 0 0-64.009309H455.996509V111.988364c0-26.428509-18.878836-47.997673-41.984-47.997673H273.985164c-23.095855 0-41.984 21.569164-41.984 47.997673v47.997672H64a32.004655 32.004655 0 0 0 0 64.009309zM288.004655 128h111.997672V256H288.004655V128zM960 479.995345H791.998836v-47.997672c0-26.372655-18.878836-47.997673-41.984-47.997673H609.978182c-23.095855 0-41.984 21.634327-41.984 47.997673v47.997672H64a32.004655 32.004655 0 0 0 0 64.00931h504.003491v47.997672c0 26.363345 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.634327 41.984-47.997673v-47.997672h168.001164a32.004655 32.004655 0 1 0-0.009309-64.00931zM735.995345 576H623.997673v-128h111.997672v128zM960 800.293236v-0.288581H455.996509v-47.997673c0-26.363345-18.878836-47.997673-41.984-47.997673H274.050327c-23.105164 0-41.984 21.634327-41.984 47.997673v47.997673H64v0.288581a32.004655 32.004655 0 0 0 0 64.009309c0.986764 0 1.917673-0.195491 2.885818-0.288581h165.115346v47.997672c0 26.363345 18.878836 47.997673 41.984 47.997673h140.036654c23.095855 0 41.984-21.634327 41.984-47.997673v-47.997672h501.108364c0.968145 0.093091 1.899055 0.288582 2.895127 0.288581a32.004655 32.004655 0 1 0-0.009309-64.009309zM400.002327 896H288.004655V768h111.997672v128z" fill="" p-id="6464"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/switch.svg b/ruoyi-ui/src/assets/icons/svg/switch.svg deleted file mode 100644 index 0ba61e3..0000000 --- a/ruoyi-ui/src/assets/icons/svg/switch.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1576042673958" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1110" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M692 792H332c-150 0-270-120-270-270s120-270 270-270h360c150 0 270 120 270 270 0 147-120 270-270 270zM332 312c-117 0-210 93-210 210s93 210 210 210h360c117 0 210-93 210-210s-93-210-210-210H332z" p-id="1111"></path><path d="M341 522m-150 0a150 150 0 1 0 300 0 150 150 0 1 0-300 0Z" p-id="1112"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/system.svg b/ruoyi-ui/src/assets/icons/svg/system.svg deleted file mode 100644 index 5992593..0000000 --- a/ruoyi-ui/src/assets/icons/svg/system.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1543827724451" class="icon" style="" viewBox="0 0 1084 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10233" xmlns:xlink="http://www.w3.org/1999/xlink" width="211.71875" height="200"><defs><style type="text/css">@font-face { font-family: rbicon; src: url("chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2") format("woff2"); font-weight: normal; font-style: normal; } -</style></defs><path d="M1080.09609 434.500756c-4.216302-23.731757-26.9241-47.945376-50.595623-53.185637l-17.648235-4.095836a175.940257 175.940257 0 0 1-101.612877-80.832531 177.807476 177.807476 0 0 1-18.732427-129.801867l5.541425-16.684509c7.10748-23.129428-2.108151-54.992624-20.599646-70.833873 0 0-16.624276-14.094495-63.244529-41.199293-46.800951-26.984332-66.858502-34.513443-66.858502-34.513443-22.76803-8.372371-54.631227-0.361397-71.255503 17.407304l-12.287509 13.251234a173.470708 173.470708 0 0 1-120.465769 48.065842A174.13327 174.13327 0 0 1 421.329029 33.590675L409.583617 20.761071C393.140039 2.99237 361.096144-4.898138 338.267881 3.353767c0 0-20.358715 7.529111-67.099434 34.513443-46.800951 27.34573-63.244529 41.440225-63.244529 41.440225-18.431263 15.66055-27.646894 47.222582-20.539413 70.592941l5.059562 16.865207a178.048407 178.048407 0 0 1-18.672194 129.621169 174.916297 174.916297 0 0 1-102.275439 81.073463l-17.045906 3.854904c-23.310126 5.42096-46.258856 29.333415-50.595623 53.185637 0 0-3.854905 21.382674-3.854905 75.712737 0 54.330062 3.854905 75.712736 3.854905 75.712736 4.216302 23.972688 26.9241 47.945376 50.595623 53.185637l16.624276 3.854905a174.253736 174.253736 0 0 1 102.395904 81.314394c23.310126 40.837896 28.911785 87.337683 18.732427 129.801867l-4.81863 16.443578c-7.10748 23.129428 2.108151 54.992624 20.599646 70.833872 0 0 16.624276 14.094495 63.244529 41.199293 46.800951 27.104798 66.918735 34.513443 66.918735 34.513443 22.707798 8.372371 54.631227 0.361397 71.255503-17.407303l11.624947-12.588673a175.096996 175.096996 0 0 1 242.256662 0.120465l11.624947 12.648906c16.383345 17.708468 48.427239 25.598976 71.255503 17.347071 0 0 20.358715-7.529111 67.159666-34.513443 46.740719-27.104798 63.124063-41.199293 63.124064-41.199293 18.491496-15.600317 27.707127-47.463513 20.599646-70.833873l-5.059562-17.106139a176.723284 176.723284 0 0 1 18.672194-129.139305 176.060722 176.060722 0 0 1 102.395904-81.314394l16.68451-3.854905c23.310126-5.42096 46.258856-29.333415 50.595623-53.185637 0 0 3.854905-21.382674 3.854904-75.712737-0.240932-54.330062-4.095836-75.833202-4.095836-75.833202z m-537.819428 293.334149c-119.261112 0-216.175824-97.336342-216.175824-217.621412a216.657687 216.657687 0 0 1 216.236057-217.320249c119.200879 0 216.115591 97.276109 216.11559 217.56118-0.240932 120.044139-96.974945 217.320248-216.175823 217.320249z" p-id="10234"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tab.svg b/ruoyi-ui/src/assets/icons/svg/tab.svg deleted file mode 100644 index b4b48e4..0000000 --- a/ruoyi-ui/src/assets/icons/svg/tab.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.921.052H49.08c-1.865 0-3.198 1.599-3.198 3.464v6.661c0 1.865 1.6 3.464 3.198 3.464h29.84c1.865 0 3.198-1.599 3.198-3.464V3.516C82.385 1.65 80.786.052 78.92.052zm45.563 0H94.642c-1.865 0-3.464 1.599-3.464 3.464v6.661c0 1.865 1.599 3.464 3.464 3.464h29.842c1.865-.266 3.464-1.599 3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464zm0 22.382H40.02c-1.866 0-3.464-1.599-3.464-3.464V3.516c0-1.865-1.599-3.464-3.464-3.464H3.516C1.65.052.052 1.651.052 3.516V124.75c0 1.598 1.599 3.197 3.464 3.197h120.968c1.865 0 3.464-1.599 3.464-3.464V25.898c0-1.865-1.599-3.464-3.464-3.464z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/table.svg b/ruoyi-ui/src/assets/icons/svg/table.svg deleted file mode 100644 index 0e3dc9d..0000000 --- a/ruoyi-ui/src/assets/icons/svg/table.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/><path d="M.006.064h127.988v31.104H.006V.064zm0 38.016h38.396v41.472H.006V38.08zm0 48.384h38.396v41.472H.006V86.464zM44.802 38.08h38.396v41.472H44.802V38.08zm0 48.384h38.396v41.472H44.802V86.464zM89.598 38.08h38.396v41.472H89.598zm0 48.384h38.396v41.472H89.598z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/textarea.svg b/ruoyi-ui/src/assets/icons/svg/textarea.svg deleted file mode 100644 index 2709f29..0000000 --- a/ruoyi-ui/src/assets/icons/svg/textarea.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575802855098" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2984" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M896 160H128c-35.2 0-64 28.8-64 64v576c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64V224c0-35.2-28.8-64-64-64z m0 608c0 16-12.8 32-32 32H160c-19.2 0-32-12.8-32-32V256c0-16 12.8-32 32-32h704c19.2 0 32 12.8 32 32v512z" p-id="2985"></path><path d="M224 288c-19.2 0-32 12.8-32 32v256c0 16 12.8 32 32 32s32-12.8 32-32V320c0-16-12.8-32-32-32z m608 480c19.2 0 32-12.8 32-32V608L704 768h128z" p-id="2986"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/theme.svg b/ruoyi-ui/src/assets/icons/svg/theme.svg deleted file mode 100644 index 5982a2f..0000000 --- a/ruoyi-ui/src/assets/icons/svg/theme.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M125.5 36.984L95.336 2.83C93.735 1.018 91.565 0 89.3 0c-2.263 0-4.433 1.018-6.033 2.83l-3.786 4.286c-1.6 1.812-3.77 2.83-6.032 2.831H54.553c-2.263 0-4.434-1.018-6.033-2.83L44.734 2.83C43.134 1.018 40.964 0 38.701 0c-2.263 0-4.434 1.018-6.034 2.83L2.5 36.984C.9 38.796 0 41.254 0 43.815c0 2.562.899 5.02 2.5 6.831L14.565 64.31c2.178 2.468 5.367 3.403 8.33 2.444 1.35-.435 2.709.592 2.709 2.18v49.407c0 5.313 3.84 9.66 8.532 9.66h59.726c4.693 0 8.532-4.347 8.532-9.66V68.934c0-1.59 1.36-2.616 2.71-2.181 2.962.96 6.15.024 8.329-2.444L125.5 50.646c1.6-1.811 2.499-4.269 2.499-6.83 0-2.563-.899-5.02-2.5-6.832z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time-range.svg b/ruoyi-ui/src/assets/icons/svg/time-range.svg deleted file mode 100644 index 13c1202..0000000 --- a/ruoyi-ui/src/assets/icons/svg/time-range.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1579774825624" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1248" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M498.595712 482.290351 345.420077 482.290351l0 57.307194 210.477712 0L555.897789 274.196942l-57.301054 0L498.596735 482.290351zM498.595712 482.290351" p-id="1249"></path><path d="M577.685002 644.98478l379.879913 0 0 57.302077L577.685002 702.286858 577.685002 644.98478 577.685002 644.98478zM577.685002 644.98478" p-id="1250"></path><path d="M577.685002 773.764795l379.879913 0 0 57.307194L577.685002 831.071989 577.685002 773.764795 577.685002 773.764795zM577.685002 773.764795" p-id="1251"></path><path d="M577.685002 902.549927l379.879913 0 0 57.307194L577.685002 959.857121 577.685002 902.549927 577.685002 902.549927zM577.685002 902.549927" p-id="1252"></path><path d="M102.523001 382.290823c4.450359 2.615571 9.470699 3.954055 14.530948 3.954055 2.969635 0 5.952572-0.461511 8.836249-1.394766l190.809767-61.886489c15.052834-4.882194 23.297612-21.040199 18.415418-36.08894-4.882194-15.052834-21.040199-23.297612-36.093033-18.415418L175.676092 308.458257c15.994276-26.115797 35.170011-50.537 57.370639-72.743768 73.767074-73.767074 171.845857-114.388237 276.16783-114.388237 104.32095 0 202.39564 40.622186 276.16169 114.388237s114.393353 171.845857 114.393353 276.16783c0 26.427906-2.615571 52.449559-7.709589 77.780481l58.302871 0c4.464685-25.499767 6.708795-51.470255 6.708795-77.780481 0-60.449767-11.845793-119.102608-35.204803-174.336584-22.559808-53.334719-54.850236-101.226472-95.968725-142.349055-41.122583-41.122583-89.017406-73.408917-142.348032-95.968725C628.317169 75.866898 569.659211 64.021106 509.215584 64.021106c-60.448744 0-119.106702 11.845793-174.336584 35.207873-53.334719 22.559808-101.230566 54.846142-142.349055 95.968725-23.980157 23.980157-44.934398 50.278103-62.727647 78.601172l-20.738323-105.655342c-3.043313-15.527648-18.105357-25.642007-33.631982-22.599717-15.527648 3.048429-25.64303 18.105357-22.599717 33.637098l36.102243 183.932126C90.51348 371.153158 95.460142 378.13313 102.523001 382.290823L102.523001 382.290823zM102.523001 382.290823" p-id="1253"></path><path d="M126.020158 587.9416 67.768453 587.9416c5.759167 33.679054 15.368012 66.544579 28.789697 98.278327 22.559808 53.333696 54.850236 101.225449 95.971795 142.348032 41.122583 41.122583 89.014336 73.408917 142.349055 95.968725 54.112432 22.88829 111.517863 34.71157 170.668031 35.18229L505.547031 902.395408c-102.94972-0.941442-199.594851-41.445948-272.499277-114.349351C177.545672 732.543975 140.810003 663.275355 126.020158 587.9416L126.020158 587.9416zM126.020158 587.9416" p-id="1254"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time.svg b/ruoyi-ui/src/assets/icons/svg/time.svg deleted file mode 100644 index b376e32..0000000 --- a/ruoyi-ui/src/assets/icons/svg/time.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577099827399" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1008" xmlns:xlink="http://www.w3.org/1999/xlink" width="81" height="81"><defs><style type="text/css"></style></defs><path d="M520 559h204c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32H488c-17.673 0-32-14.327-32-32 0-0.167 0.001-0.334 0.004-0.5a32.65 32.65 0 0 1-0.004-0.5V277c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v282z m-8 401C264.576 960 64 759.424 64 512S264.576 64 512 64s448 200.576 448 448-200.576 448-448 448z m0-64c212.077 0 384-171.923 384-384S724.077 128 512 128 128 299.923 128 512s171.923 384 384 384z" p-id="1009"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tool.svg b/ruoyi-ui/src/assets/icons/svg/tool.svg deleted file mode 100644 index 48e0e35..0000000 --- a/ruoyi-ui/src/assets/icons/svg/tool.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1553828490559" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1684" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M898.831744 900.517641 103.816972 900.517641c-36.002982 0-65.363683-29.286-65.363683-65.313541l0-554.949184c0-36.041868 29.361725-65.326844 65.363683-65.326844l795.015795 0c36.002982 0 65.198931 29.284977 65.198931 65.326844l0 554.949184C964.030675 871.231641 934.834726 900.517641 898.831744 900.517641L898.831744 900.517641zM103.816972 255.593236c-13.576203 0-24.711821 11.085476-24.711821 24.662703l0 554.949184c0 13.576203 11.136641 24.662703 24.711821 24.662703l795.015795 0c13.577227 0 24.547069-11.086499 24.547069-24.662703l0-554.949184c0-13.577227-10.970866-24.662703-24.547069-24.662703L103.816972 255.593236 103.816972 255.593236zM664.346245 251.774257c-11.161201 0-20.332071-9.080819-20.332071-20.332071l0-101.278661c0-13.576203-11.047614-24.623817-24.699542-24.623817L383.181611 105.539708c-13.576203 0-24.712845 11.04659-24.712845 24.623817l0 101.278661c0 11.252275-9.041934 20.332071-20.332071 20.332071-11.20111 0-20.319791-9.080819-20.319791-20.332071l0-101.278661c0-35.989679 29.323862-65.275679 65.364707-65.275679l236.133022 0c36.06745 0 65.402569 29.284977 65.402569 65.275679l0 101.278661C684.717202 242.694461 675.636383 251.774257 664.346245 251.774257L664.346245 251.774257zM413.233044 521.725502 75.694471 521.725502c-11.163247 0-20.333094-9.117658-20.333094-20.35663 0-11.252275 9.169847-20.332071 20.333094-20.332071l337.538573 0c11.277858 0 20.319791 9.080819 20.319791 20.332071C433.552835 512.607844 424.510902 521.725502 413.233044 521.725502L413.233044 521.725502zM912.894018 521.725502 575.367725 521.725502c-11.213389 0-20.332071-9.117658-20.332071-20.35663 0-11.252275 9.118682-20.332071 20.332071-20.332071l337.526293 0c11.290137 0 20.332071 9.080819 20.332071 20.332071C933.226089 512.607844 924.184155 521.725502 912.894018 521.725502L912.894018 521.725502zM557.56322 634.217552 445.085496 634.217552c-11.213389 0-20.332071-9.079796-20.332071-20.331048l0-168.763658c0-11.251252 9.118682-20.332071 20.332071-20.332071l112.478747 0c11.290137 0 20.370956 9.080819 20.370956 20.332071l0 168.763658C577.934177 625.137757 568.853357 634.217552 557.56322 634.217552L557.56322 634.217552zM465.417567 593.514525l71.827909 0L537.245476 465.454918l-71.827909 0L465.417567 593.514525 465.417567 593.514525z" p-id="1685"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree-table.svg b/ruoyi-ui/src/assets/icons/svg/tree-table.svg deleted file mode 100644 index 8aafdb8..0000000 --- a/ruoyi-ui/src/assets/icons/svg/tree-table.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M44.8 0h79.543C126.78 0 128 1.422 128 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H44.8c-2.438 0-3.657-1.422-3.657-4.267V4.267C41.143 1.422 42.362 0 44.8 0zm22.857 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 80 64 78.578 64 75.733V52.267C64 49.422 65.219 48 67.657 48zm0 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 128 64 126.578 64 123.733v-23.466C64 97.422 65.219 96 67.657 96zM50.286 68.267c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V32h6.4c2.02 0 3.658-1.91 3.658-4.267V4.267C27.429 1.91 25.79 0 23.77 0H3.657C1.637 0 0 1.91 0 4.267v23.466C0 30.09 1.637 32 3.657 32h6.4v80c0 2.356 1.638 4.267 3.657 4.267h36.572c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V68.267h32.915z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree.svg b/ruoyi-ui/src/assets/icons/svg/tree.svg deleted file mode 100644 index dd4b7dd..0000000 --- a/ruoyi-ui/src/assets/icons/svg/tree.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M126.713 90.023c.858.985 1.287 2.134 1.287 3.447v29.553c0 1.423-.429 2.6-1.287 3.53-.858.93-1.907 1.395-3.146 1.395H97.824c-1.145 0-2.146-.465-3.004-1.395-.858-.93-1.287-2.107-1.287-3.53V93.47c0-.875.19-1.696.572-2.462.382-.766.906-1.368 1.573-1.806a3.84 3.84 0 0 1 2.146-.657h9.725V69.007a3.84 3.84 0 0 0-.43-1.806 3.569 3.569 0 0 0-1.143-1.313 2.714 2.714 0 0 0-1.573-.492h-36.47v23.149h9.725c1.144 0 2.145.492 3.004 1.478.858.985 1.287 2.134 1.287 3.447v29.553c0 .876-.191 1.696-.573 2.463-.38.766-.905 1.368-1.573 1.806a3.84 3.84 0 0 1-2.145.656H51.915a3.84 3.84 0 0 1-2.145-.656c-.668-.438-1.216-1.04-1.645-1.806a4.96 4.96 0 0 1-.644-2.463V93.47c0-1.313.43-2.462 1.288-3.447.858-.986 1.907-1.478 3.146-1.478h9.582v-23.15h-37.9c-.953 0-1.74.356-2.359 1.068-.62.711-.93 1.56-.93 2.544v19.538h9.726c1.239 0 2.264.492 3.074 1.478.81.985 1.216 2.134 1.216 3.447v29.553c0 1.423-.405 2.6-1.216 3.53-.81.93-1.835 1.395-3.074 1.395H4.29c-.476 0-.93-.082-1.358-.246a4.1 4.1 0 0 1-1.144-.657 4.658 4.658 0 0 1-.93-1.067 5.186 5.186 0 0 1-.643-1.395 5.566 5.566 0 0 1-.215-1.56V93.47c0-.437.048-.875.143-1.313a3.95 3.95 0 0 1 .429-1.15c.19-.328.429-.656.715-.984.286-.329.572-.602.858-.821.286-.22.62-.383 1.001-.493.382-.11.763-.164 1.144-.164h9.726V61.619c0-.985.31-1.833.93-2.544.619-.712 1.358-1.068 2.216-1.068h44.335V39.62h-9.582c-1.24 0-2.288-.492-3.146-1.477a5.09 5.09 0 0 1-1.287-3.448V5.14c0-1.423.429-2.627 1.287-3.612.858-.985 1.907-1.477 3.146-1.477h25.743c.763 0 1.478.246 2.145.739a5.17 5.17 0 0 1 1.573 1.888c.382.766.573 1.587.573 2.462v29.553c0 1.313-.43 2.463-1.287 3.448-.859.985-1.86 1.477-3.004 1.477h-9.725v18.389h42.762c.954 0 1.74.355 2.36 1.067.62.711.93 1.56.93 2.545v26.925h9.582c1.239 0 2.288.492 3.146 1.478z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/upload.svg b/ruoyi-ui/src/assets/icons/svg/upload.svg deleted file mode 100644 index bae49c0..0000000 --- a/ruoyi-ui/src/assets/icons/svg/upload.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1577540289643" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7922" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M530.944 458.24l4.8 3.456 122.176 106.816a32 32 0 0 1-37.44 51.584l-4.672-3.392L546.56 556.16v280.704a32 32 0 0 1-26.24 31.488l-5.76 0.512a32 32 0 0 1-31.424-26.24l-0.512-5.76-0.064-280.704-69.12 60.48a32 32 0 0 1-40.96 0.896l-4.16-3.968a32 32 0 0 1-0.96-40.96l4.032-4.16 122.176-106.816a32 32 0 0 1 37.312-3.456zM497.92 128c128.128 0 239.168 82.304 275.52 199.04 123.968 11.264 221.312 113.088 221.312 237.44 0 128.128-103.68 232.96-234.88 238.272h-5.888l-35.52 0.192a32 32 0 0 1-0.192-64l35.264-0.128 4.672-0.064c96.384-3.84 172.544-80.896 172.544-174.272 0-96.128-80.512-174.464-179.584-174.464h-1.984a32 32 0 0 1-32-25.28C695.872 264.96 604.736 192 497.92 192 381.824 192 285.44 277.76 274.816 388.48a32 32 0 0 1-28.352 28.8c-83.968 9.152-147.84 78.208-147.84 159.552l0.192 7.936c3.84 85.76 77.056 154.112 166.592 154.112h45.632a32 32 0 0 1 0 64h-45.632C142.016 802.944 40.32 708.032 34.88 586.88l-0.192-9.28c0-106.88 76.352-197.184 179.968-219.904C239.488 226.112 357.76 128 497.856 128z" p-id="7923"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/user.svg b/ruoyi-ui/src/assets/icons/svg/user.svg deleted file mode 100644 index 0ba0716..0000000 --- a/ruoyi-ui/src/assets/icons/svg/user.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/validCode.svg b/ruoyi-ui/src/assets/icons/svg/validCode.svg deleted file mode 100644 index cfb1021..0000000 --- a/ruoyi-ui/src/assets/icons/svg/validCode.svg +++ /dev/null @@ -1 +0,0 @@ -<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569580729849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1939" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M513.3 958.5c-142.2 0-397.9-222.1-401.6-440.5V268c1.7-39.6 31.7-72.3 71.1-77.3 49-4.6 97.1-16.5 142.7-35.3 47.8-14 91.9-38.3 129.4-71.1 30.3-24.4 72.9-26.3 105.3-4.6 39.9 30.7 83.8 55.9 130.5 74.6 48.6 14.7 98.2 25.9 148.4 33.7 38.5 7.6 67.1 40.3 69.5 79.5 3.3 84.9 2.5 169.9-2.6 254.7-33.7 281.6-253.7 436.4-392.7 436.3z m-0.1-813.7c-7.2-0.2-14.3 2-20 6.4-39.7 35.2-86.8 61.1-137.7 75.7-46.8 19.2-96.2 31-146.6 35.2-11 3.2-18.8 13-19.5 24.4v230.1c3.5 180.3 223.3 361 323.9 361s287.3-120.2 317.6-360.5c7.3-142.7 0-228.6 0-229.6-1.3-13.3-11-24.3-24-27.3-49.6-7.7-98.6-19-146.5-33.7-46.3-19.5-89.7-45.3-129-76.7-5.8-3.8-12.7-5.5-19.5-4.9l1.3-0.1z" fill="#C6CCDA" p-id="1940"></path><path d="M750.1 428L490.7 673.2c-11.7 11.1-29.5 12.9-43.1 4.2l-6.8-5.8-141.2-149.4c-9.3-9.3-12.7-22.9-9-35.5 3.8-12.6 14.1-22.1 27-24.8 12.9-2.7 26.1 1.9 34.6 11.9L469 597.5l233.7-221c14.6-12.8 36.8-11.6 49.9 2.7 13.2 14.2 11.5 35.3-2.5 48.8" fill="#C6CCDA" p-id="1941"></path></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/wechat.svg b/ruoyi-ui/src/assets/icons/svg/wechat.svg deleted file mode 100644 index c586e55..0000000 --- a/ruoyi-ui/src/assets/icons/svg/wechat.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="110" xmlns="http://www.w3.org/2000/svg"><path d="M86.635 33.334c1.467 0 2.917.113 4.358.283C87.078 14.392 67.58.111 45.321.111 20.44.111.055 17.987.055 40.687c0 13.104 6.781 23.863 18.115 32.209l-4.527 14.352 15.82-8.364c5.666 1.182 10.207 2.395 15.858 2.395 1.42 0 2.829-.073 4.227-.189-.886-3.19-1.398-6.53-1.398-9.996 0-20.845 16.98-37.76 38.485-37.76zm-24.34-12.936c3.407 0 5.665 2.363 5.665 5.954 0 3.576-2.258 5.97-5.666 5.97-3.392 0-6.795-2.395-6.795-5.97 0-3.591 3.403-5.954 6.795-5.954zM30.616 32.323c-3.393 0-6.818-2.395-6.818-5.971 0-3.591 3.425-5.954 6.818-5.954 3.392 0 5.65 2.363 5.65 5.954 0 3.576-2.258 5.97-5.65 5.97z"/><path d="M127.945 70.52c0-19.075-18.108-34.623-38.448-34.623-21.537 0-38.5 15.548-38.5 34.623 0 19.108 16.963 34.622 38.5 34.622 4.508 0 9.058-1.2 13.584-2.395l12.414 7.167-3.404-11.923c9.087-7.184 15.854-16.712 15.854-27.471zm-50.928-5.97c-2.254 0-4.53-2.362-4.53-4.773 0-2.378 2.276-4.771 4.53-4.771 3.422 0 5.665 2.393 5.665 4.771 0 2.41-2.243 4.773-5.665 4.773zm24.897 0c-2.24 0-4.498-2.362-4.498-4.773 0-2.378 2.258-4.771 4.498-4.771 3.392 0 5.665 2.393 5.665 4.771 0 2.41-2.273 4.773-5.665 4.773z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/zip.svg b/ruoyi-ui/src/assets/icons/svg/zip.svg deleted file mode 100644 index f806fc4..0000000 --- a/ruoyi-ui/src/assets/icons/svg/zip.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M78.527 116.793c.178.008.348.024.527.024h40.233c4.711-.005 8.53-3.677 8.534-8.21V18.895c-.004-4.532-3.823-8.204-8.534-8.209H79.054c-.179 0-.353.016-.527.024V0L0 10.082v107.406l78.527 10.342v-11.037zm0-101.362c.174-.024.348-.052.527-.052h40.233c2.018 0 3.659 1.578 3.659 3.52v89.713c-.003 1.942-1.64 3.517-3.659 3.519H79.054c-.179 0-.353-.028-.527-.052V15.431zM30.262 75.757l-18.721-.46V72.37l11.3-16.673v-.148l-10.266.164v-4.51l17.504-.44v3.264L18.696 70.76v.144l11.566.176v4.678zm9.419.231l-5.823-.144V50.671l5.823-.144v25.461zm22.255-11.632c-2.168 1.922-5.353 2.76-9.02 2.736-.702.004-1.402-.04-2.097-.131v9.303l-5.997-.148V50.743c1.852-.352 4.473-.647 8.218-.743 3.838-.096 6.608.539 8.48 1.913 1.807 1.306 3.032 3.5 3.032 6.112s-.926 4.833-2.612 6.331h-.004zM53.36 54.45c-.856-.01-1.71.083-2.541.275v7.682c.523.116 1.167.152 2.06.152 3.301-.004 5.36-1.614 5.36-4.314 0-2.425-1.772-3.843-4.875-3.791l-.004-.004zm39.847-37.066h9.564v3.795h-9.564v-3.795zm-9.568 5.68h9.564v3.8h-9.564v-3.8zm9.568 6.216h9.564v3.799h-9.564V29.28zm0 12h9.564v3.794h-9.564V41.28zm-9.568-6.096h9.564v3.795h-9.564v-3.795zm9.472 47.064c2.512 0 4.921-.96 6.697-2.67 1.776-1.708 2.773-4.026 2.772-6.442l-1.748-15.263c0-5.033-2.492-9.112-7.725-9.112-5.232 0-7.72 4.079-7.72 9.112l-1.752 15.263c-.001 2.417.996 4.735 2.773 6.444 1.777 1.71 4.187 2.669 6.7 2.668h.003zm-3.135-16.75h6.27v12.743h-6.27V65.5z"/></svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svgo.yml b/ruoyi-ui/src/assets/icons/svgo.yml deleted file mode 100644 index d11906a..0000000 --- a/ruoyi-ui/src/assets/icons/svgo.yml +++ /dev/null @@ -1,22 +0,0 @@ -# replace default config - -# multipass: true -# full: true - -plugins: - - # - name - # - # or: - # - name: false - # - name: true - # - # or: - # - name: - # param1: 1 - # param2: 2 - -- removeAttrs: - attrs: - - 'fill' - - 'fill-rule' diff --git a/ruoyi-ui/src/assets/images/dark.svg b/ruoyi-ui/src/assets/images/dark.svg deleted file mode 100644 index f646bd7..0000000 --- a/ruoyi-ui/src/assets/images/dark.svg +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1"> - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> - <feMerge> - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> - <feMergeNode in="SourceGraphic"></feMergeNode> - </feMerge> - </filter> - <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect> - <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4"> - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> - <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix> - </filter> - </defs> - <g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)"> - <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)"> - <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)"> - <mask id="mask-3" fill="white"> - <use xlink:href="#path-2"></use> - </mask> - <g id="Rectangle-18"> - <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use> - <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use> - </g> - <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect> - <rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect> - </g> - </g> - </g> - </g> -</svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/light.svg b/ruoyi-ui/src/assets/images/light.svg deleted file mode 100644 index ab7cc08..0000000 --- a/ruoyi-ui/src/assets/images/light.svg +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink"> - <defs> - <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1"> - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> - <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix> - <feMerge> - <feMergeNode in="shadowMatrixOuter1"></feMergeNode> - <feMergeNode in="SourceGraphic"></feMergeNode> - </feMerge> - </filter> - <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect> - <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4"> - <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset> - <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur> - <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix> - </filter> - </defs> - <g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)"> - <g id="Group-8" transform="translate(1167.000000, 0.000000)"> - <g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)"> - <mask id="mask-3" fill="white"> - <use xlink:href="#path-2"></use> - </mask> - <g id="Rectangle-18"> - <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use> - <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use> - </g> - <rect id="Rectangle-18" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect> - <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect> - </g> - </g> - </g> - </g> -</svg> \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/login-background.jpg b/ruoyi-ui/src/assets/images/login-background.jpg deleted file mode 100644 index 8a89eb8291d5cb7d9f37ec4f275deab911c9e28e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521275 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¥}>uauIo<NSA^mIi{6P?J9>Y!`8n(7niSl_m2d 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𝔫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⩛TtXwH2N8q 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 XL@8i0W`Lsrl}D;qJ|-Lg^UMDMwcpa% diff --git a/ruoyi-ui/src/assets/images/pay.png b/ruoyi-ui/src/assets/images/pay.png deleted file mode 100644 index bb8b9672381a3e4119fcd33e6ddc21973672e273..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140720 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	vPok;F)*{# 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 DPqhcR diff --git a/ruoyi-ui/src/assets/images/profile.jpg b/ruoyi-ui/src/assets/images/profile.jpg deleted file mode 100644 index b3a940b21cc9dcea01e62d94e243eebcf76d96bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81131 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 z≺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 diff --git a/ruoyi-ui/src/assets/logo/logo.png b/ruoyi-ui/src/assets/logo/logo.png deleted file mode 100644 index e26376026420542212ed58d90d0ed34f554fa4ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5663 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 diff --git a/ruoyi-ui/src/assets/styles/btn.scss b/ruoyi-ui/src/assets/styles/btn.scss deleted file mode 100644 index e6ba1a8..0000000 --- a/ruoyi-ui/src/assets/styles/btn.scss +++ /dev/null @@ -1,99 +0,0 @@ -@import './variables.scss'; - -@mixin colorBtn($color) { - background: $color; - - &:hover { - color: $color; - - &:before, - &:after { - background: $color; - } - } -} - -.blue-btn { - @include colorBtn($blue) -} - -.light-blue-btn { - @include colorBtn($light-blue) -} - -.red-btn { - @include colorBtn($red) -} - -.pink-btn { - @include colorBtn($pink) -} - -.green-btn { - @include colorBtn($green) -} - -.tiffany-btn { - @include colorBtn($tiffany) -} - -.yellow-btn { - @include colorBtn($yellow) -} - -.pan-btn { - font-size: 14px; - color: #fff; - padding: 14px 36px; - border-radius: 8px; - border: none; - outline: none; - transition: 600ms ease all; - position: relative; - display: inline-block; - - &:hover { - background: #fff; - - &:before, - &:after { - width: 100%; - transition: 600ms ease all; - } - } - - &:before, - &:after { - content: ''; - position: absolute; - top: 0; - right: 0; - height: 2px; - width: 0; - transition: 400ms ease all; - } - - &::after { - right: inherit; - top: inherit; - left: 0; - bottom: 0; - } -} - -.custom-button { - display: inline-block; - line-height: 1; - white-space: nowrap; - cursor: pointer; - background: #fff; - color: #fff; - -webkit-appearance: none; - text-align: center; - box-sizing: border-box; - outline: 0; - margin: 0; - padding: 10px 15px; - font-size: 14px; - border-radius: 4px; -} diff --git a/ruoyi-ui/src/assets/styles/element-ui.scss b/ruoyi-ui/src/assets/styles/element-ui.scss deleted file mode 100644 index 363092a..0000000 --- a/ruoyi-ui/src/assets/styles/element-ui.scss +++ /dev/null @@ -1,92 +0,0 @@ -// cover some element-ui styles - -.el-breadcrumb__inner, -.el-breadcrumb__inner a { - font-weight: 400 !important; -} - -.el-upload { - input[type="file"] { - display: none !important; - } -} - -.el-upload__input { - display: none; -} - -.cell { - .el-tag { - margin-right: 0px; - } -} - -.small-padding { - .cell { - padding-left: 5px; - padding-right: 5px; - } -} - -.fixed-width { - .el-button--mini { - padding: 7px 10px; - width: 60px; - } -} - -.status-col { - .cell { - padding: 0 10px; - text-align: center; - - .el-tag { - margin-right: 0px; - } - } -} - -// to fixed https://github.com/ElemeFE/element/issues/2461 -.el-dialog { - transform: none; - left: 0; - position: relative; - margin: 0 auto; -} - -// refine element ui upload -.upload-container { - .el-upload { - width: 100%; - - .el-upload-dragger { - width: 100%; - height: 200px; - } - } -} - -// dropdown -.el-dropdown-menu { - a { - display: block - } -} - -// fix date-picker ui bug in filter-item -.el-range-editor.el-input__inner { - display: inline-flex !important; -} - -// to fix el-date-picker css style -.el-range-separator { - box-sizing: content-box; -} - -.el-menu--collapse - > div - > .el-submenu - > .el-submenu__title - .el-submenu__icon-arrow { - display: none; -} \ No newline at end of file diff --git a/ruoyi-ui/src/assets/styles/element-variables.scss b/ruoyi-ui/src/assets/styles/element-variables.scss deleted file mode 100644 index 1615ff2..0000000 --- a/ruoyi-ui/src/assets/styles/element-variables.scss +++ /dev/null @@ -1,31 +0,0 @@ -/** -* I think element-ui's default theme color is too light for long-term use. -* So I modified the default color and you can modify it to your liking. -**/ - -/* theme color */ -$--color-primary: #1890ff; -$--color-success: #13ce66; -$--color-warning: #ffba00; -$--color-danger: #ff4949; -// $--color-info: #1E1E1E; - -$--button-font-weight: 400; - -// $--color-text-regular: #1f2d3d; - -$--border-color-light: #dfe4ed; -$--border-color-lighter: #e6ebf5; - -$--table-border: 1px solid #dfe6ec; - -/* icon font path, required */ -$--font-path: '~element-ui/lib/theme-chalk/fonts'; - -@import "~element-ui/packages/theme-chalk/src/index"; - -// the :export directive is the magic sauce for webpack -// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass -:export { - theme: $--color-primary; -} diff --git a/ruoyi-ui/src/assets/styles/index.scss b/ruoyi-ui/src/assets/styles/index.scss deleted file mode 100644 index 2f3b9ef..0000000 --- a/ruoyi-ui/src/assets/styles/index.scss +++ /dev/null @@ -1,182 +0,0 @@ -@import './variables.scss'; -@import './mixin.scss'; -@import './transition.scss'; -@import './element-ui.scss'; -@import './sidebar.scss'; -@import './btn.scss'; - -body { - height: 100%; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; -} - -label { - font-weight: 700; -} - -html { - height: 100%; - box-sizing: border-box; -} - -#app { - height: 100%; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} - -.no-padding { - padding: 0px !important; -} - -.padding-content { - padding: 4px 0; -} - -a:focus, -a:active { - outline: none; -} - -a, -a:focus, -a:hover { - cursor: pointer; - color: inherit; - text-decoration: none; -} - -div:focus { - outline: none; -} - -.fr { - float: right; -} - -.fl { - float: left; -} - -.pr-5 { - padding-right: 5px; -} - -.pl-5 { - padding-left: 5px; -} - -.block { - display: block; -} - -.pointer { - cursor: pointer; -} - -.inlineBlock { - display: block; -} - -.clearfix { - &:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; - } -} - -aside { - background: #eef1f6; - padding: 8px 24px; - margin-bottom: 20px; - border-radius: 2px; - display: block; - line-height: 32px; - font-size: 16px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; - color: #2c3e50; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - a { - color: #337ab7; - cursor: pointer; - - &:hover { - color: rgb(32, 160, 255); - } - } -} - -//main-container全局样式 -.app-container { - padding: 20px; -} - -.components-container { - margin: 30px 50px; - position: relative; -} - -.pagination-container { - margin-top: 30px; -} - -.text-center { - text-align: center -} - -.sub-navbar { - height: 50px; - line-height: 50px; - position: relative; - width: 100%; - text-align: right; - padding-right: 20px; - transition: 600ms ease position; - background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); - - .subtitle { - font-size: 20px; - color: #fff; - } - - &.draft { - background: #d0d0d0; - } - - &.deleted { - background: #d0d0d0; - } -} - -.link-type, -.link-type:focus { - color: #337ab7; - cursor: pointer; - - &:hover { - color: rgb(32, 160, 255); - } -} - -.filter-container { - padding-bottom: 10px; - - .filter-item { - display: inline-block; - vertical-align: middle; - margin-bottom: 10px; - } -} diff --git a/ruoyi-ui/src/assets/styles/mixin.scss b/ruoyi-ui/src/assets/styles/mixin.scss deleted file mode 100644 index 06fa061..0000000 --- a/ruoyi-ui/src/assets/styles/mixin.scss +++ /dev/null @@ -1,66 +0,0 @@ -@mixin clearfix { - &:after { - content: ""; - display: table; - clear: both; - } -} - -@mixin scrollBar { - &::-webkit-scrollbar-track-piece { - background: #d3dce6; - } - - &::-webkit-scrollbar { - width: 6px; - } - - &::-webkit-scrollbar-thumb { - background: #99a9bf; - border-radius: 20px; - } -} - -@mixin relative { - position: relative; - width: 100%; - height: 100%; -} - -@mixin pct($pct) { - width: #{$pct}; - position: relative; - margin: 0 auto; -} - -@mixin triangle($width, $height, $color, $direction) { - $width: $width/2; - $color-border-style: $height solid $color; - $transparent-border-style: $width solid transparent; - height: 0; - width: 0; - - @if $direction==up { - border-bottom: $color-border-style; - border-left: $transparent-border-style; - border-right: $transparent-border-style; - } - - @else if $direction==right { - border-left: $color-border-style; - border-top: $transparent-border-style; - border-bottom: $transparent-border-style; - } - - @else if $direction==down { - border-top: $color-border-style; - border-left: $transparent-border-style; - border-right: $transparent-border-style; - } - - @else if $direction==left { - border-right: $color-border-style; - border-top: $transparent-border-style; - border-bottom: $transparent-border-style; - } -} diff --git a/ruoyi-ui/src/assets/styles/ruoyi.scss b/ruoyi-ui/src/assets/styles/ruoyi.scss deleted file mode 100644 index 4e29874..0000000 --- a/ruoyi-ui/src/assets/styles/ruoyi.scss +++ /dev/null @@ -1,291 +0,0 @@ -/** -* 通用css样式布局处理 -* Copyright (c) 2019 ruoyi -*/ - -/** 基础通用 **/ -.pt5 { - padding-top: 5px; -} - -.pr5 { - padding-right: 5px; -} - -.pb5 { - padding-bottom: 5px; -} - -.mt5 { - margin-top: 5px; -} - -.mr5 { - margin-right: 5px; -} - -.mb5 { - margin-bottom: 5px; -} - -.mb8 { - margin-bottom: 8px; -} - -.ml5 { - margin-left: 5px; -} - -.mt10 { - margin-top: 10px; -} - -.mr10 { - margin-right: 10px; -} - -.mb10 { - margin-bottom: 10px; -} -.ml10 { - margin-left: 10px; -} - -.mt20 { - margin-top: 20px; -} - -.mr20 { - margin-right: 20px; -} - -.mb20 { - margin-bottom: 20px; -} -.ml20 { - margin-left: 20px; -} - -.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} - -.el-message-box__status + .el-message-box__message{ - word-break: break-word; -} - -.el-dialog:not(.is-fullscreen) { - margin-top: 6vh !important; -} - -.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { - overflow: auto; - overflow-x: hidden; - max-height: 70vh; - padding: 10px 20px 0; -} - -.el-table { - .el-table__header-wrapper, .el-table__fixed-header-wrapper { - th { - word-break: break-word; - background-color: #f8f8f9; - color: #515a6e; - height: 40px; - font-size: 13px; - } - } - - .el-table__body-wrapper { - .el-button [class*="el-icon-"] + span { - margin-left: 1px; - } - } -} - -/** 表单布局 **/ -.form-header { - font-size: 15px; - color: #6379bb; - border-bottom: 1px solid #ddd; - margin: 8px 10px 25px 10px; - padding-bottom: 5px -} - -/** 表格布局 **/ -.pagination-container { - position: relative; - height: 25px; - margin-bottom: 10px; - margin-top: 15px; - padding: 10px 20px !important; -} - -/* tree border */ -.tree-border { - margin-top: 5px; - border: 1px solid #e5e6e7; - background: #FFFFFF none; - border-radius: 4px; -} - -.pagination-container .el-pagination { - right: 0; - position: absolute; -} - -@media (max-width: 768px) { - .pagination-container .el-pagination > .el-pagination__jump { - display: none !important; - } - .pagination-container .el-pagination > .el-pagination__sizes { - display: none !important; - } -} - -.el-table .fixed-width .el-button--mini { - padding-left: 0; - padding-right: 0; - width: inherit; -} - -/** 表格更多操作下拉样式 */ -.el-table .el-dropdown-link,.el-table .el-dropdown-selfdefine { - cursor: pointer; - margin-left: 5px; -} - -.el-table .el-dropdown, .el-icon-arrow-down { - font-size: 12px; -} - -.el-tree-node__content > .el-checkbox { - margin-right: 8px; -} - -.list-group-striped > .list-group-item { - border-left: 0; - border-right: 0; - border-radius: 0; - padding-left: 0; - padding-right: 0; -} - -.list-group { - padding-left: 0px; - list-style: none; -} - -.list-group-item { - border-bottom: 1px solid #e7eaec; - border-top: 1px solid #e7eaec; - margin-bottom: -1px; - padding: 11px 0px; - font-size: 13px; -} - -.pull-right { - float: right !important; -} - -.el-card__header { - padding: 14px 15px 7px; - min-height: 40px; -} - -.el-card__body { - padding: 15px 20px 20px 20px; -} - -.card-box { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 10px; -} - -/* button color */ -.el-button--cyan.is-active, -.el-button--cyan:active { - background: #20B2AA; - border-color: #20B2AA; - color: #FFFFFF; -} - -.el-button--cyan:focus, -.el-button--cyan:hover { - background: #48D1CC; - border-color: #48D1CC; - color: #FFFFFF; -} - -.el-button--cyan { - background-color: #20B2AA; - border-color: #20B2AA; - color: #FFFFFF; -} - -/* text color */ -.text-navy { - color: #1ab394; -} - -.text-primary { - color: inherit; -} - -.text-success { - color: #1c84c6; -} - -.text-info { - color: #23c6c8; -} - -.text-warning { - color: #f8ac59; -} - -.text-danger { - color: #ed5565; -} - -.text-muted { - color: #888888; -} - -/* image */ -.img-circle { - border-radius: 50%; -} - -.img-lg { - width: 120px; - height: 120px; -} - -.avatar-upload-preview { - position: relative; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 200px; - height: 200px; - border-radius: 50%; - box-shadow: 0 0 4px #ccc; - overflow: hidden; -} - -/* 拖拽列样式 */ -.sortable-ghost { - opacity: .8; - color: #fff !important; - background: #42b983 !important; -} - -.top-right-btn { - position: relative; - float: right; -} diff --git a/ruoyi-ui/src/assets/styles/sidebar.scss b/ruoyi-ui/src/assets/styles/sidebar.scss deleted file mode 100644 index abe5b63..0000000 --- a/ruoyi-ui/src/assets/styles/sidebar.scss +++ /dev/null @@ -1,227 +0,0 @@ -#app { - - .main-container { - height: 100%; - transition: margin-left .28s; - margin-left: $base-sidebar-width; - position: relative; - } - - .sidebarHide { - margin-left: 0!important; - } - - .sidebar-container { - -webkit-transition: width .28s; - transition: width 0.28s; - width: $base-sidebar-width !important; - background-color: $base-menu-background; - height: 100%; - position: fixed; - font-size: 0px; - top: 0; - bottom: 0; - left: 0; - z-index: 1001; - overflow: hidden; - -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); - box-shadow: 2px 0 6px rgba(0,21,41,.35); - - // reset element-ui css - .horizontal-collapse-transition { - transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; - } - - .scrollbar-wrapper { - overflow-x: hidden !important; - } - - .el-scrollbar__bar.is-vertical { - right: 0px; - } - - .el-scrollbar { - height: 100%; - } - - &.has-logo { - .el-scrollbar { - height: calc(100% - 50px); - } - } - - .is-horizontal { - display: none; - } - - a { - display: inline-block; - width: 100%; - overflow: hidden; - } - - .svg-icon { - margin-right: 16px; - } - - .el-menu { - border: none; - height: 100%; - width: 100% !important; - } - - .el-menu-item, .el-submenu__title { - overflow: hidden !important; - text-overflow: ellipsis !important; - white-space: nowrap !important; - } - - // menu hover - .submenu-title-noDropdown, - .el-submenu__title { - &:hover { - background-color: rgba(0, 0, 0, 0.06) !important; - } - } - - & .theme-dark .is-active > .el-submenu__title { - color: $base-menu-color-active !important; - } - - & .nest-menu .el-submenu>.el-submenu__title, - & .el-submenu .el-menu-item { - min-width: $base-sidebar-width !important; - - &:hover { - background-color: rgba(0, 0, 0, 0.06) !important; - } - } - - & .theme-dark .nest-menu .el-submenu>.el-submenu__title, - & .theme-dark .el-submenu .el-menu-item { - background-color: $base-sub-menu-background !important; - - &:hover { - background-color: $base-sub-menu-hover !important; - } - } - } - - .hideSidebar { - .sidebar-container { - width: 54px !important; - } - - .main-container { - margin-left: 54px; - } - - .submenu-title-noDropdown { - padding: 0 !important; - position: relative; - - .el-tooltip { - padding: 0 !important; - - .svg-icon { - margin-left: 20px; - } - } - } - - .el-submenu { - overflow: hidden; - - &>.el-submenu__title { - padding: 0 !important; - - .svg-icon { - margin-left: 20px; - } - - } - } - - .el-menu--collapse { - .el-submenu { - &>.el-submenu__title { - &>span { - height: 0; - width: 0; - overflow: hidden; - visibility: hidden; - display: inline-block; - } - } - } - } - } - - .el-menu--collapse .el-menu .el-submenu { - min-width: $base-sidebar-width !important; - } - - // mobile responsive - .mobile { - .main-container { - margin-left: 0px; - } - - .sidebar-container { - transition: transform .28s; - width: $base-sidebar-width !important; - } - - &.hideSidebar { - .sidebar-container { - pointer-events: none; - transition-duration: 0.3s; - transform: translate3d(-$base-sidebar-width, 0, 0); - } - } - } - - .withoutAnimation { - - .main-container, - .sidebar-container { - transition: none; - } - } -} - -// when menu collapsed -.el-menu--vertical { - &>.el-menu { - .svg-icon { - margin-right: 16px; - } - } - - .nest-menu .el-submenu>.el-submenu__title, - .el-menu-item { - &:hover { - // you can use $subMenuHover - background-color: rgba(0, 0, 0, 0.06) !important; - } - } - - // the scroll bar appears when the subMenu is too long - >.el-menu--popup { - max-height: 100vh; - overflow-y: auto; - - &::-webkit-scrollbar-track-piece { - background: #d3dce6; - } - - &::-webkit-scrollbar { - width: 6px; - } - - &::-webkit-scrollbar-thumb { - background: #99a9bf; - border-radius: 20px; - } - } -} diff --git a/ruoyi-ui/src/assets/styles/transition.scss b/ruoyi-ui/src/assets/styles/transition.scss deleted file mode 100644 index 073f8c6..0000000 --- a/ruoyi-ui/src/assets/styles/transition.scss +++ /dev/null @@ -1,49 +0,0 @@ -// global transition css - -/* fade */ -.fade-enter-active, -.fade-leave-active { - transition: opacity 0.28s; -} - -.fade-enter, -.fade-leave-active { - opacity: 0; -} - -/* fade-transform */ -.fade-transform--move, -.fade-transform-leave-active, -.fade-transform-enter-active { - transition: all .5s; -} - -.fade-transform-enter { - opacity: 0; - transform: translateX(-30px); -} - -.fade-transform-leave-to { - opacity: 0; - transform: translateX(30px); -} - -/* breadcrumb transition */ -.breadcrumb-enter-active, -.breadcrumb-leave-active { - transition: all .5s; -} - -.breadcrumb-enter, -.breadcrumb-leave-active { - opacity: 0; - transform: translateX(20px); -} - -.breadcrumb-move { - transition: all .5s; -} - -.breadcrumb-leave-active { - position: absolute; -} diff --git a/ruoyi-ui/src/assets/styles/variables.scss b/ruoyi-ui/src/assets/styles/variables.scss deleted file mode 100644 index 34484d4..0000000 --- a/ruoyi-ui/src/assets/styles/variables.scss +++ /dev/null @@ -1,54 +0,0 @@ -// base color -$blue:#324157; -$light-blue:#3A71A8; -$red:#C03639; -$pink: #E65D6E; -$green: #30B08F; -$tiffany: #4AB7BD; -$yellow:#FEC171; -$panGreen: #30B08F; - -// 默认菜单主题风格 -$base-menu-color:#bfcbd9; -$base-menu-color-active:#f4f4f5; -$base-menu-background:#304156; -$base-logo-title-color: #ffffff; - -$base-menu-light-color:rgba(0,0,0,.70); -$base-menu-light-background:#ffffff; -$base-logo-light-title-color: #001529; - -$base-sub-menu-background:#1f2d3d; -$base-sub-menu-hover:#001528; - -// 自定义暗色菜单风格 -/** -$base-menu-color:hsla(0,0%,100%,.65); -$base-menu-color-active:#fff; -$base-menu-background:#001529; -$base-logo-title-color: #ffffff; - -$base-menu-light-color:rgba(0,0,0,.70); -$base-menu-light-background:#ffffff; -$base-logo-light-title-color: #001529; - -$base-sub-menu-background:#000c17; -$base-sub-menu-hover:#001528; -*/ - -$base-sidebar-width: 200px; - -// the :export directive is the magic sauce for webpack -// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass -:export { - menuColor: $base-menu-color; - menuLightColor: $base-menu-light-color; - menuColorActive: $base-menu-color-active; - menuBackground: $base-menu-background; - menuLightBackground: $base-menu-light-background; - subMenuBackground: $base-sub-menu-background; - subMenuHover: $base-sub-menu-hover; - sideBarWidth: $base-sidebar-width; - logoTitleColor: $base-logo-title-color; - logoLightTitleColor: $base-logo-light-title-color -} diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue deleted file mode 100644 index 1696f54..0000000 --- a/ruoyi-ui/src/components/Breadcrumb/index.vue +++ /dev/null @@ -1,74 +0,0 @@ -<template> - <el-breadcrumb class="app-breadcrumb" separator="/"> - <transition-group name="breadcrumb"> - <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path"> - <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span> - <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a> - </el-breadcrumb-item> - </transition-group> - </el-breadcrumb> -</template> - -<script> -export default { - data() { - return { - levelList: null - } - }, - watch: { - $route(route) { - // if you go to the redirect page, do not update the breadcrumbs - if (route.path.startsWith('/redirect/')) { - return - } - this.getBreadcrumb() - } - }, - created() { - this.getBreadcrumb() - }, - methods: { - getBreadcrumb() { - // only show routes with meta.title - let matched = this.$route.matched.filter(item => item.meta && item.meta.title) - const first = matched[0] - - if (!this.isDashboard(first)) { - matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched) - } - - this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) - }, - isDashboard(route) { - const name = route && route.name - if (!name) { - return false - } - return name.trim() === 'Index' - }, - handleLink(item) { - const { redirect, path } = item - if (redirect) { - this.$router.push(redirect) - return - } - this.$router.push(path) - } - } -} -</script> - -<style lang="scss" scoped> -.app-breadcrumb.el-breadcrumb { - display: inline-block; - font-size: 14px; - line-height: 50px; - margin-left: 8px; - - .no-redirect { - color: #97a8be; - cursor: text; - } -} -</style> diff --git a/ruoyi-ui/src/components/Crontab/day.vue b/ruoyi-ui/src/components/Crontab/day.vue deleted file mode 100644 index fe3eaf0..0000000 --- a/ruoyi-ui/src/components/Crontab/day.vue +++ /dev/null @@ -1,161 +0,0 @@ -<template> - <el-form size="small"> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 日,允许的通配符[, - * ? / L W] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 不指定 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 周期从 - <el-input-number v-model='cycle01' :min="1" :max="30" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 2" :max="31" /> 日 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 从 - <el-input-number v-model='average01' :min="1" :max="30" /> 号开始,每 - <el-input-number v-model='average02' :min="1" :max="31 - average01 || 1" /> 日执行一次 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="5"> - 每月 - <el-input-number v-model='workday' :min="1" :max="31" /> 号最近的那个工作日 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="6"> - 本月最后一天 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="7"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="item in 31" :key="item" :value="item">{{item}}</el-option> - </el-select> - </el-radio> - </el-form-item> - </el-form> -</template> - -<script> -export default { - data() { - return { - radioValue: 1, - workday: 1, - cycle01: 1, - cycle02: 2, - average01: 1, - average02: 1, - checkboxList: [], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-day', - props: ['check', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - ('day rachange'); - if (this.radioValue !== 2 && this.cron.week !== '?') { - this.$emit('update', 'week', '?', 'day') - } - - switch (this.radioValue) { - case 1: - this.$emit('update', 'day', '*'); - break; - case 2: - this.$emit('update', 'day', '?'); - break; - case 3: - this.$emit('update', 'day', this.cycleTotal); - break; - case 4: - this.$emit('update', 'day', this.averageTotal); - break; - case 5: - this.$emit('update', 'day', this.workday + 'W'); - break; - case 6: - this.$emit('update', 'day', 'L'); - break; - case 7: - this.$emit('update', 'day', this.checkboxString); - break; - } - ('day rachange end'); - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '3') { - this.$emit('update', 'day', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '4') { - this.$emit('update', 'day', this.averageTotal); - } - }, - // 最近工作日值变化时 - workdayChange() { - if (this.radioValue == '5') { - this.$emit('update', 'day', this.workdayCheck + 'W'); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '7') { - this.$emit('update', 'day', this.checkboxString); - } - } - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'workdayCheck': 'workdayChange', - 'checkboxString': 'checkboxChange', - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, 1, 30) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 2, 31, 31) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, 1, 30) - const average02 = this.checkNum(this.average02, 1, 31 - average01 || 0) - return average01 + '/' + average02; - }, - // 计算工作日格式 - workdayCheck: function () { - const workday = this.checkNum(this.workday, 1, 31) - return workday; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> diff --git a/ruoyi-ui/src/components/Crontab/hour.vue b/ruoyi-ui/src/components/Crontab/hour.vue deleted file mode 100644 index 4b1f1fc..0000000 --- a/ruoyi-ui/src/components/Crontab/hour.vue +++ /dev/null @@ -1,114 +0,0 @@ -<template> - <el-form size="small"> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 小时,允许的通配符[, - * /] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 周期从 - <el-input-number v-model='cycle01' :min="0" :max="22" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="23" /> 小时 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 从 - <el-input-number v-model='average01' :min="0" :max="22" /> 小时开始,每 - <el-input-number v-model='average02' :min="1" :max="23 - average01 || 0" /> 小时执行一次 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="item in 24" :key="item" :value="item-1">{{item-1}}</el-option> - </el-select> - </el-radio> - </el-form-item> - </el-form> -</template> - -<script> -export default { - data() { - return { - radioValue: 1, - cycle01: 0, - cycle02: 1, - average01: 0, - average02: 1, - checkboxList: [], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-hour', - props: ['check', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - switch (this.radioValue) { - case 1: - this.$emit('update', 'hour', '*') - break; - case 2: - this.$emit('update', 'hour', this.cycleTotal); - break; - case 3: - this.$emit('update', 'hour', this.averageTotal); - break; - case 4: - this.$emit('update', 'hour', this.checkboxString); - break; - } - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '2') { - this.$emit('update', 'hour', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '3') { - this.$emit('update', 'hour', this.averageTotal); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '4') { - this.$emit('update', 'hour', this.checkboxString); - } - } - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'checkboxString': 'checkboxChange' - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, 0, 22) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 23) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, 0, 22) - const average02 = this.checkNum(this.average02, 1, 23 - average01 || 0) - return average01 + '/' + average02; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> diff --git a/ruoyi-ui/src/components/Crontab/index.vue b/ruoyi-ui/src/components/Crontab/index.vue deleted file mode 100644 index 3963df2..0000000 --- a/ruoyi-ui/src/components/Crontab/index.vue +++ /dev/null @@ -1,430 +0,0 @@ -<template> - <div> - <el-tabs type="border-card"> - <el-tab-pane label="秒" v-if="shouldHide('second')"> - <CrontabSecond - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronsecond" - /> - </el-tab-pane> - - <el-tab-pane label="分钟" v-if="shouldHide('min')"> - <CrontabMin - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronmin" - /> - </el-tab-pane> - - <el-tab-pane label="小时" v-if="shouldHide('hour')"> - <CrontabHour - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronhour" - /> - </el-tab-pane> - - <el-tab-pane label="日" v-if="shouldHide('day')"> - <CrontabDay - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronday" - /> - </el-tab-pane> - - <el-tab-pane label="月" v-if="shouldHide('month')"> - <CrontabMonth - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronmonth" - /> - </el-tab-pane> - - <el-tab-pane label="周" v-if="shouldHide('week')"> - <CrontabWeek - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronweek" - /> - </el-tab-pane> - - <el-tab-pane label="年" v-if="shouldHide('year')"> - <CrontabYear - @update="updateCrontabValue" - :check="checkNumber" - :cron="crontabValueObj" - ref="cronyear" - /> - </el-tab-pane> - </el-tabs> - - <div class="popup-main"> - <div class="popup-result"> - <p class="title">时间表达式</p> - <table> - <thead> - <th v-for="item of tabTitles" width="40" :key="item">{{item}}</th> - <th>Cron 表达式</th> - </thead> - <tbody> - <td> - <span>{{crontabValueObj.second}}</span> - </td> - <td> - <span>{{crontabValueObj.min}}</span> - </td> - <td> - <span>{{crontabValueObj.hour}}</span> - </td> - <td> - <span>{{crontabValueObj.day}}</span> - </td> - <td> - <span>{{crontabValueObj.month}}</span> - </td> - <td> - <span>{{crontabValueObj.week}}</span> - </td> - <td> - <span>{{crontabValueObj.year}}</span> - </td> - <td> - <span>{{crontabValueString}}</span> - </td> - </tbody> - </table> - </div> - <CrontabResult :ex="crontabValueString"></CrontabResult> - - <div class="pop_btn"> - <el-button size="small" type="primary" @click="submitFill">确定</el-button> - <el-button size="small" type="warning" @click="clearCron">重置</el-button> - <el-button size="small" @click="hidePopup">取消</el-button> - </div> - </div> - </div> -</template> - -<script> -import CrontabSecond from "./second.vue"; -import CrontabMin from "./min.vue"; -import CrontabHour from "./hour.vue"; -import CrontabDay from "./day.vue"; -import CrontabMonth from "./month.vue"; -import CrontabWeek from "./week.vue"; -import CrontabYear from "./year.vue"; -import CrontabResult from "./result.vue"; - -export default { - data() { - return { - tabTitles: ["秒", "分钟", "小时", "日", "月", "周", "年"], - tabActive: 0, - myindex: 0, - crontabValueObj: { - second: "*", - min: "*", - hour: "*", - day: "*", - month: "*", - week: "?", - year: "", - }, - }; - }, - name: "vcrontab", - props: ["expression", "hideComponent"], - methods: { - shouldHide(key) { - if (this.hideComponent && this.hideComponent.includes(key)) return false; - return true; - }, - resolveExp() { - // 反解析 表达式 - if (this.expression) { - let arr = this.expression.split(" "); - if (arr.length >= 6) { - //6 位以上是合法表达式 - let obj = { - second: arr[0], - min: arr[1], - hour: arr[2], - day: arr[3], - month: arr[4], - week: arr[5], - year: arr[6] ? arr[6] : "", - }; - this.crontabValueObj = { - ...obj, - }; - for (let i in obj) { - if (obj[i]) this.changeRadio(i, obj[i]); - } - } - } else { - // 没有传入的表达式 则还原 - this.clearCron(); - } - }, - // tab切换值 - tabCheck(index) { - this.tabActive = index; - }, - // 由子组件触发,更改表达式组成的字段值 - updateCrontabValue(name, value, from) { - "updateCrontabValue", name, value, from; - this.crontabValueObj[name] = value; - if (from && from !== name) { - console.log(`来自组件 ${from} 改变了 ${name} ${value}`); - this.changeRadio(name, value); - } - }, - // 赋值到组件 - changeRadio(name, value) { - let arr = ["second", "min", "hour", "month"], - refName = "cron" + name, - insValue; - - if (!this.$refs[refName]) return; - - if (arr.includes(name)) { - if (value === "*") { - insValue = 1; - } else if (value.indexOf("-") > -1) { - let indexArr = value.split("-"); - isNaN(indexArr[0]) - ? (this.$refs[refName].cycle01 = 0) - : (this.$refs[refName].cycle01 = indexArr[0]); - this.$refs[refName].cycle02 = indexArr[1]; - insValue = 2; - } else if (value.indexOf("/") > -1) { - let indexArr = value.split("/"); - isNaN(indexArr[0]) - ? (this.$refs[refName].average01 = 0) - : (this.$refs[refName].average01 = indexArr[0]); - this.$refs[refName].average02 = indexArr[1]; - insValue = 3; - } else { - insValue = 4; - this.$refs[refName].checkboxList = value.split(","); - } - } else if (name == "day") { - if (value === "*") { - insValue = 1; - } else if (value == "?") { - insValue = 2; - } else if (value.indexOf("-") > -1) { - let indexArr = value.split("-"); - isNaN(indexArr[0]) - ? (this.$refs[refName].cycle01 = 0) - : (this.$refs[refName].cycle01 = indexArr[0]); - this.$refs[refName].cycle02 = indexArr[1]; - insValue = 3; - } else if (value.indexOf("/") > -1) { - let indexArr = value.split("/"); - isNaN(indexArr[0]) - ? (this.$refs[refName].average01 = 0) - : (this.$refs[refName].average01 = indexArr[0]); - this.$refs[refName].average02 = indexArr[1]; - insValue = 4; - } else if (value.indexOf("W") > -1) { - let indexArr = value.split("W"); - isNaN(indexArr[0]) - ? (this.$refs[refName].workday = 0) - : (this.$refs[refName].workday = indexArr[0]); - insValue = 5; - } else if (value === "L") { - insValue = 6; - } else { - this.$refs[refName].checkboxList = value.split(","); - insValue = 7; - } - } else if (name == "week") { - if (value === "*") { - insValue = 1; - } else if (value == "?") { - insValue = 2; - } else if (value.indexOf("-") > -1) { - let indexArr = value.split("-"); - isNaN(indexArr[0]) - ? (this.$refs[refName].cycle01 = 0) - : (this.$refs[refName].cycle01 = indexArr[0]); - this.$refs[refName].cycle02 = indexArr[1]; - insValue = 3; - } else if (value.indexOf("#") > -1) { - let indexArr = value.split("#"); - isNaN(indexArr[0]) - ? (this.$refs[refName].average01 = 1) - : (this.$refs[refName].average01 = indexArr[0]); - this.$refs[refName].average02 = indexArr[1]; - insValue = 4; - } else if (value.indexOf("L") > -1) { - let indexArr = value.split("L"); - isNaN(indexArr[0]) - ? (this.$refs[refName].weekday = 1) - : (this.$refs[refName].weekday = indexArr[0]); - insValue = 5; - } else { - this.$refs[refName].checkboxList = value.split(","); - insValue = 6; - } - } else if (name == "year") { - if (value == "") { - insValue = 1; - } else if (value == "*") { - insValue = 2; - } else if (value.indexOf("-") > -1) { - insValue = 3; - } else if (value.indexOf("/") > -1) { - insValue = 4; - } else { - this.$refs[refName].checkboxList = value.split(","); - insValue = 5; - } - } - this.$refs[refName].radioValue = insValue; - }, - // 表单选项的子组件校验数字格式(通过-props传递) - checkNumber(value, minLimit, maxLimit) { - // 检查必须为整数 - value = Math.floor(value); - if (value < minLimit) { - value = minLimit; - } else if (value > maxLimit) { - value = maxLimit; - } - return value; - }, - // 隐藏弹窗 - hidePopup() { - this.$emit("hide"); - }, - // 填充表达式 - submitFill() { - this.$emit("fill", this.crontabValueString); - this.hidePopup(); - }, - clearCron() { - // 还原选择项 - ("准备还原"); - this.crontabValueObj = { - second: "*", - min: "*", - hour: "*", - day: "*", - month: "*", - week: "?", - year: "", - }; - for (let j in this.crontabValueObj) { - this.changeRadio(j, this.crontabValueObj[j]); - } - }, - }, - computed: { - crontabValueString: function() { - let obj = this.crontabValueObj; - let str = - obj.second + - " " + - obj.min + - " " + - obj.hour + - " " + - obj.day + - " " + - obj.month + - " " + - obj.week + - (obj.year == "" ? "" : " " + obj.year); - return str; - }, - }, - components: { - CrontabSecond, - CrontabMin, - CrontabHour, - CrontabDay, - CrontabMonth, - CrontabWeek, - CrontabYear, - CrontabResult, - }, - watch: { - expression: "resolveExp", - hideComponent(value) { - // 隐藏部分组件 - }, - }, - mounted: function() { - this.resolveExp(); - }, -}; -</script> -<style scoped> -.pop_btn { - text-align: center; - margin-top: 20px; -} -.popup-main { - position: relative; - margin: 10px auto; - background: #fff; - border-radius: 5px; - font-size: 12px; - overflow: hidden; -} -.popup-title { - overflow: hidden; - line-height: 34px; - padding-top: 6px; - background: #f2f2f2; -} -.popup-result { - box-sizing: border-box; - line-height: 24px; - margin: 25px auto; - padding: 15px 10px 10px; - border: 1px solid #ccc; - position: relative; -} -.popup-result .title { - position: absolute; - top: -28px; - left: 50%; - width: 140px; - font-size: 14px; - margin-left: -70px; - text-align: center; - line-height: 30px; - background: #fff; -} -.popup-result table { - text-align: center; - width: 100%; - margin: 0 auto; -} -.popup-result table span { - display: block; - width: 100%; - font-family: arial; - line-height: 30px; - height: 30px; - white-space: nowrap; - overflow: hidden; - border: 1px solid #e8e8e8; -} -.popup-result-scroll { - font-size: 12px; - line-height: 24px; - height: 10em; - overflow-y: auto; -} -</style> diff --git a/ruoyi-ui/src/components/Crontab/min.vue b/ruoyi-ui/src/components/Crontab/min.vue deleted file mode 100644 index 43cab90..0000000 --- a/ruoyi-ui/src/components/Crontab/min.vue +++ /dev/null @@ -1,116 +0,0 @@ -<template> - <el-form size="small"> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 分钟,允许的通配符[, - * /] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 周期从 - <el-input-number v-model='cycle01' :min="0" :max="58" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 分钟 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 从 - <el-input-number v-model='average01' :min="0" :max="58" /> 分钟开始,每 - <el-input-number v-model='average02' :min="1" :max="59 - average01 || 0" /> 分钟执行一次 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option> - </el-select> - </el-radio> - </el-form-item> - </el-form> - -</template> - -<script> -export default { - data() { - return { - radioValue: 1, - cycle01: 1, - cycle02: 2, - average01: 0, - average02: 1, - checkboxList: [], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-min', - props: ['check', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - switch (this.radioValue) { - case 1: - this.$emit('update', 'min', '*', 'min'); - break; - case 2: - this.$emit('update', 'min', this.cycleTotal, 'min'); - break; - case 3: - this.$emit('update', 'min', this.averageTotal, 'min'); - break; - case 4: - this.$emit('update', 'min', this.checkboxString, 'min'); - break; - } - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '2') { - this.$emit('update', 'min', this.cycleTotal, 'min'); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '3') { - this.$emit('update', 'min', this.averageTotal, 'min'); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '4') { - this.$emit('update', 'min', this.checkboxString, 'min'); - } - }, - - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'checkboxString': 'checkboxChange', - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, 0, 58) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 59) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, 0, 58) - const average02 = this.checkNum(this.average02, 1, 59 - average01 || 0) - return average01 + '/' + average02; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/components/Crontab/month.vue b/ruoyi-ui/src/components/Crontab/month.vue deleted file mode 100644 index fd0ac38..0000000 --- a/ruoyi-ui/src/components/Crontab/month.vue +++ /dev/null @@ -1,114 +0,0 @@ -<template> - <el-form size='small'> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 月,允许的通配符[, - * /] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 周期从 - <el-input-number v-model='cycle01' :min="1" :max="11" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 2" :max="12" /> 月 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 从 - <el-input-number v-model='average01' :min="1" :max="11" /> 月开始,每 - <el-input-number v-model='average02' :min="1" :max="12 - average01 || 0" /> 月月执行一次 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="item in 12" :key="item" :value="item">{{item}}</el-option> - </el-select> - </el-radio> - </el-form-item> - </el-form> -</template> - -<script> -export default { - data() { - return { - radioValue: 1, - cycle01: 1, - cycle02: 2, - average01: 1, - average02: 1, - checkboxList: [], - checkNum: this.check - } - }, - name: 'crontab-month', - props: ['check', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - switch (this.radioValue) { - case 1: - this.$emit('update', 'month', '*'); - break; - case 2: - this.$emit('update', 'month', this.cycleTotal); - break; - case 3: - this.$emit('update', 'month', this.averageTotal); - break; - case 4: - this.$emit('update', 'month', this.checkboxString); - break; - } - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '2') { - this.$emit('update', 'month', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '3') { - this.$emit('update', 'month', this.averageTotal); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '4') { - this.$emit('update', 'month', this.checkboxString); - } - } - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'checkboxString': 'checkboxChange' - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, 1, 11) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 2, 12) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, 1, 11) - const average02 = this.checkNum(this.average02, 1, 12 - average01 || 0) - return average01 + '/' + average02; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> diff --git a/ruoyi-ui/src/components/Crontab/result.vue b/ruoyi-ui/src/components/Crontab/result.vue deleted file mode 100644 index aea6e0e..0000000 --- a/ruoyi-ui/src/components/Crontab/result.vue +++ /dev/null @@ -1,559 +0,0 @@ -<template> - <div class="popup-result"> - <p class="title">最近5次运行时间</p> - <ul class="popup-result-scroll"> - <template v-if='isShow'> - <li v-for='item in resultList' :key="item">{{item}}</li> - </template> - <li v-else>计算结果中...</li> - </ul> - </div> -</template> - -<script> -export default { - data() { - return { - dayRule: '', - dayRuleSup: '', - dateArr: [], - resultList: [], - isShow: false - } - }, - name: 'crontab-result', - methods: { - // 表达式值变化时,开始去计算结果 - expressionChange() { - - // 计算开始-隐藏结果 - this.isShow = false; - // 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年] - let ruleArr = this.$options.propsData.ex.split(' '); - // 用于记录进入循环的次数 - let nums = 0; - // 用于暂时存符号时间规则结果的数组 - let resultArr = []; - // 获取当前时间精确至[年、月、日、时、分、秒] - let nTime = new Date(); - let nYear = nTime.getFullYear(); - let nMonth = nTime.getMonth() + 1; - let nDay = nTime.getDate(); - let nHour = nTime.getHours(); - let nMin = nTime.getMinutes(); - let nSecond = nTime.getSeconds(); - // 根据规则获取到近100年可能年数组、月数组等等 - this.getSecondArr(ruleArr[0]); - this.getMinArr(ruleArr[1]); - this.getHourArr(ruleArr[2]); - this.getDayArr(ruleArr[3]); - this.getMonthArr(ruleArr[4]); - this.getWeekArr(ruleArr[5]); - this.getYearArr(ruleArr[6], nYear); - // 将获取到的数组赋值-方便使用 - let sDate = this.dateArr[0]; - let mDate = this.dateArr[1]; - let hDate = this.dateArr[2]; - let DDate = this.dateArr[3]; - let MDate = this.dateArr[4]; - let YDate = this.dateArr[5]; - // 获取当前时间在数组中的索引 - let sIdx = this.getIndex(sDate, nSecond); - let mIdx = this.getIndex(mDate, nMin); - let hIdx = this.getIndex(hDate, nHour); - let DIdx = this.getIndex(DDate, nDay); - let MIdx = this.getIndex(MDate, nMonth); - let YIdx = this.getIndex(YDate, nYear); - // 重置月日时分秒的函数(后面用的比较多) - const resetSecond = function () { - sIdx = 0; - nSecond = sDate[sIdx] - } - const resetMin = function () { - mIdx = 0; - nMin = mDate[mIdx] - resetSecond(); - } - const resetHour = function () { - hIdx = 0; - nHour = hDate[hIdx] - resetMin(); - } - const resetDay = function () { - DIdx = 0; - nDay = DDate[DIdx] - resetHour(); - } - const resetMonth = function () { - MIdx = 0; - nMonth = MDate[MIdx] - resetDay(); - } - // 如果当前年份不为数组中当前值 - if (nYear !== YDate[YIdx]) { - resetMonth(); - } - // 如果当前月份不为数组中当前值 - if (nMonth !== MDate[MIdx]) { - resetDay(); - } - // 如果当前“日”不为数组中当前值 - if (nDay !== DDate[DIdx]) { - resetHour(); - } - // 如果当前“时”不为数组中当前值 - if (nHour !== hDate[hIdx]) { - resetMin(); - } - // 如果当前“分”不为数组中当前值 - if (nMin !== mDate[mIdx]) { - resetSecond(); - } - - // 循环年份数组 - goYear: for (let Yi = YIdx; Yi < YDate.length; Yi++) { - let YY = YDate[Yi]; - // 如果到达最大值时 - if (nMonth > MDate[MDate.length - 1]) { - resetMonth(); - continue; - } - // 循环月份数组 - goMonth: for (let Mi = MIdx; Mi < MDate.length; Mi++) { - // 赋值、方便后面运算 - let MM = MDate[Mi]; - MM = MM < 10 ? '0' + MM : MM; - // 如果到达最大值时 - if (nDay > DDate[DDate.length - 1]) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue; - } - // 循环日期数组 - goDay: for (let Di = DIdx; Di < DDate.length; Di++) { - // 赋值、方便后面运算 - let DD = DDate[Di]; - let thisDD = DD < 10 ? '0' + DD : DD; - - // 如果到达最大值时 - if (nHour > hDate[hDate.length - 1]) { - resetHour(); - if (Di == DDate.length - 1) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue goMonth; - } - continue; - } - - // 判断日期的合法性,不合法的话也是跳出当前循环 - if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && this.dayRule !== 'workDay' && this.dayRule !== 'lastWeek' && this.dayRule !== 'lastDay') { - resetDay(); - continue goMonth; - } - // 如果日期规则中有值时 - if (this.dayRule == 'lastDay') { - // 如果不是合法日期则需要将前将日期调到合法日期即月末最后一天 - - if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - DD--; - - thisDD = DD < 10 ? '0' + DD : DD; - } - } - } else if (this.dayRule == 'workDay') { - // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底 - if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - DD--; - thisDD = DD < 10 ? '0' + DD : DD; - } - } - // 获取达到条件的日期是星期X - let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week'); - // 当星期日时 - if (thisWeek == 1) { - // 先找下一个日,并判断是否为月底 - DD++; - thisDD = DD < 10 ? '0' + DD : DD; - // 判断下一日已经不是合法日期 - if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - DD -= 3; - } - } else if (thisWeek == 7) { - // 当星期6时只需判断不是1号就可进行操作 - if (this.dayRuleSup !== 1) { - DD--; - } else { - DD += 2; - } - } - } else if (this.dayRule == 'weekDay') { - // 如果指定了是星期几 - // 获取当前日期是属于星期几 - let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week'); - // 校验当前星期是否在星期池(dayRuleSup)中 - if (this.dayRuleSup.indexOf(thisWeek) < 0) { - // 如果到达最大值时 - if (Di == DDate.length - 1) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue goMonth; - } - continue; - } - } else if (this.dayRule == 'assWeek') { - // 如果指定了是第几周的星期几 - // 获取每月1号是属于星期几 - let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week'); - if (this.dayRuleSup[1] >= thisWeek) { - DD = (this.dayRuleSup[0] - 1) * 7 + this.dayRuleSup[1] - thisWeek + 1; - } else { - DD = this.dayRuleSup[0] * 7 + this.dayRuleSup[1] - thisWeek + 1; - } - } else if (this.dayRule == 'lastWeek') { - // 如果指定了每月最后一个星期几 - // 校验并调整如果是2月30号这种日期传进来时需调整至正常月底 - if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) { - DD--; - thisDD = DD < 10 ? '0' + DD : DD; - } - } - // 获取月末最后一天是星期几 - let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week'); - // 找到要求中最近的那个星期几 - if (this.dayRuleSup < thisWeek) { - DD -= thisWeek - this.dayRuleSup; - } else if (this.dayRuleSup > thisWeek) { - DD -= 7 - (this.dayRuleSup - thisWeek) - } - } - // 判断时间值是否小于10置换成“05”这种格式 - DD = DD < 10 ? '0' + DD : DD; - - // 循环“时”数组 - goHour: for (let hi = hIdx; hi < hDate.length; hi++) { - let hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi] - - // 如果到达最大值时 - if (nMin > mDate[mDate.length - 1]) { - resetMin(); - if (hi == hDate.length - 1) { - resetHour(); - if (Di == DDate.length - 1) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue goMonth; - } - continue goDay; - } - continue; - } - // 循环"分"数组 - goMin: for (let mi = mIdx; mi < mDate.length; mi++) { - let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi]; - - // 如果到达最大值时 - if (nSecond > sDate[sDate.length - 1]) { - resetSecond(); - if (mi == mDate.length - 1) { - resetMin(); - if (hi == hDate.length - 1) { - resetHour(); - if (Di == DDate.length - 1) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue goMonth; - } - continue goDay; - } - continue goHour; - } - continue; - } - // 循环"秒"数组 - goSecond: for (let si = sIdx; si <= sDate.length - 1; si++) { - let ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si]; - // 添加当前时间(时间合法性在日期循环时已经判断) - if (MM !== '00' && DD !== '00') { - resultArr.push(YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss) - nums++; - } - // 如果条数满了就退出循环 - if (nums == 5) break goYear; - // 如果到达最大值时 - if (si == sDate.length - 1) { - resetSecond(); - if (mi == mDate.length - 1) { - resetMin(); - if (hi == hDate.length - 1) { - resetHour(); - if (Di == DDate.length - 1) { - resetDay(); - if (Mi == MDate.length - 1) { - resetMonth(); - continue goYear; - } - continue goMonth; - } - continue goDay; - } - continue goHour; - } - continue goMin; - } - } //goSecond - } //goMin - }//goHour - }//goDay - }//goMonth - } - // 判断100年内的结果条数 - if (resultArr.length == 0) { - this.resultList = ['没有达到条件的结果!']; - } else { - this.resultList = resultArr; - if (resultArr.length !== 5) { - this.resultList.push('最近100年内只有上面' + resultArr.length + '条结果!') - } - } - // 计算完成-显示结果 - this.isShow = true; - - - }, - // 用于计算某位数字在数组中的索引 - getIndex(arr, value) { - if (value <= arr[0] || value > arr[arr.length - 1]) { - return 0; - } else { - for (let i = 0; i < arr.length - 1; i++) { - if (value > arr[i] && value <= arr[i + 1]) { - return i + 1; - } - } - } - }, - // 获取"年"数组 - getYearArr(rule, year) { - this.dateArr[5] = this.getOrderArr(year, year + 100); - if (rule !== undefined) { - if (rule.indexOf('-') >= 0) { - this.dateArr[5] = this.getCycleArr(rule, year + 100, false) - } else if (rule.indexOf('/') >= 0) { - this.dateArr[5] = this.getAverageArr(rule, year + 100) - } else if (rule !== '*') { - this.dateArr[5] = this.getAssignArr(rule) - } - } - }, - // 获取"月"数组 - getMonthArr(rule) { - this.dateArr[4] = this.getOrderArr(1, 12); - if (rule.indexOf('-') >= 0) { - this.dateArr[4] = this.getCycleArr(rule, 12, false) - } else if (rule.indexOf('/') >= 0) { - this.dateArr[4] = this.getAverageArr(rule, 12) - } else if (rule !== '*') { - this.dateArr[4] = this.getAssignArr(rule) - } - }, - // 获取"日"数组-主要为日期规则 - getWeekArr(rule) { - // 只有当日期规则的两个值均为“”时则表达日期是有选项的 - if (this.dayRule == '' && this.dayRuleSup == '') { - if (rule.indexOf('-') >= 0) { - this.dayRule = 'weekDay'; - this.dayRuleSup = this.getCycleArr(rule, 7, false) - } else if (rule.indexOf('#') >= 0) { - this.dayRule = 'assWeek'; - let matchRule = rule.match(/[0-9]{1}/g); - this.dayRuleSup = [Number(matchRule[1]), Number(matchRule[0])]; - this.dateArr[3] = [1]; - if (this.dayRuleSup[1] == 7) { - this.dayRuleSup[1] = 0; - } - } else if (rule.indexOf('L') >= 0) { - this.dayRule = 'lastWeek'; - this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0]); - this.dateArr[3] = [31]; - if (this.dayRuleSup == 7) { - this.dayRuleSup = 0; - } - } else if (rule !== '*' && rule !== '?') { - this.dayRule = 'weekDay'; - this.dayRuleSup = this.getAssignArr(rule) - } - } - }, - // 获取"日"数组-少量为日期规则 - getDayArr(rule) { - this.dateArr[3] = this.getOrderArr(1, 31); - this.dayRule = ''; - this.dayRuleSup = ''; - if (rule.indexOf('-') >= 0) { - this.dateArr[3] = this.getCycleArr(rule, 31, false) - this.dayRuleSup = 'null'; - } else if (rule.indexOf('/') >= 0) { - this.dateArr[3] = this.getAverageArr(rule, 31) - this.dayRuleSup = 'null'; - } else if (rule.indexOf('W') >= 0) { - this.dayRule = 'workDay'; - this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0]); - this.dateArr[3] = [this.dayRuleSup]; - } else if (rule.indexOf('L') >= 0) { - this.dayRule = 'lastDay'; - this.dayRuleSup = 'null'; - this.dateArr[3] = [31]; - } else if (rule !== '*' && rule !== '?') { - this.dateArr[3] = this.getAssignArr(rule) - this.dayRuleSup = 'null'; - } else if (rule == '*') { - this.dayRuleSup = 'null'; - } - }, - // 获取"时"数组 - getHourArr(rule) { - this.dateArr[2] = this.getOrderArr(0, 23); - if (rule.indexOf('-') >= 0) { - this.dateArr[2] = this.getCycleArr(rule, 24, true) - } else if (rule.indexOf('/') >= 0) { - this.dateArr[2] = this.getAverageArr(rule, 23) - } else if (rule !== '*') { - this.dateArr[2] = this.getAssignArr(rule) - } - }, - // 获取"分"数组 - getMinArr(rule) { - this.dateArr[1] = this.getOrderArr(0, 59); - if (rule.indexOf('-') >= 0) { - this.dateArr[1] = this.getCycleArr(rule, 60, true) - } else if (rule.indexOf('/') >= 0) { - this.dateArr[1] = this.getAverageArr(rule, 59) - } else if (rule !== '*') { - this.dateArr[1] = this.getAssignArr(rule) - } - }, - // 获取"秒"数组 - getSecondArr(rule) { - this.dateArr[0] = this.getOrderArr(0, 59); - if (rule.indexOf('-') >= 0) { - this.dateArr[0] = this.getCycleArr(rule, 60, true) - } else if (rule.indexOf('/') >= 0) { - this.dateArr[0] = this.getAverageArr(rule, 59) - } else if (rule !== '*') { - this.dateArr[0] = this.getAssignArr(rule) - } - }, - // 根据传进来的min-max返回一个顺序的数组 - getOrderArr(min, max) { - let arr = []; - for (let i = min; i <= max; i++) { - arr.push(i); - } - return arr; - }, - // 根据规则中指定的零散值返回一个数组 - getAssignArr(rule) { - let arr = []; - let assiginArr = rule.split(','); - for (let i = 0; i < assiginArr.length; i++) { - arr[i] = Number(assiginArr[i]) - } - arr.sort(this.compare) - return arr; - }, - // 根据一定算术规则计算返回一个数组 - getAverageArr(rule, limit) { - let arr = []; - let agArr = rule.split('/'); - let min = Number(agArr[0]); - let step = Number(agArr[1]); - while (min <= limit) { - arr.push(min); - min += step; - } - return arr; - }, - // 根据规则返回一个具有周期性的数组 - getCycleArr(rule, limit, status) { - // status--表示是否从0开始(则从1开始) - let arr = []; - let cycleArr = rule.split('-'); - let min = Number(cycleArr[0]); - let max = Number(cycleArr[1]); - if (min > max) { - max += limit; - } - for (let i = min; i <= max; i++) { - let add = 0; - if (status == false && i % limit == 0) { - add = limit; - } - arr.push(Math.round(i % limit + add)) - } - arr.sort(this.compare) - return arr; - }, - // 比较数字大小(用于Array.sort) - compare(value1, value2) { - if (value2 - value1 > 0) { - return -1; - } else { - return 1; - } - }, - // 格式化日期格式如:2017-9-19 18:04:33 - formatDate(value, type) { - // 计算日期相关值 - let time = typeof value == 'number' ? new Date(value) : value; - let Y = time.getFullYear(); - let M = time.getMonth() + 1; - let D = time.getDate(); - let h = time.getHours(); - let m = time.getMinutes(); - let s = time.getSeconds(); - let week = time.getDay(); - // 如果传递了type的话 - if (type == undefined) { - return Y + '-' + (M < 10 ? '0' + M : M) + '-' + (D < 10 ? '0' + D : D) + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s); - } else if (type == 'week') { - // 在quartz中 1为星期日 - return week + 1; - } - }, - // 检查日期是否存在 - checkDate(value) { - let time = new Date(value); - let format = this.formatDate(time) - return value === format; - } - }, - watch: { - 'ex': 'expressionChange' - }, - props: ['ex'], - mounted: function () { - // 初始化 获取一次结果 - this.expressionChange(); - } -} - -</script> diff --git a/ruoyi-ui/src/components/Crontab/second.vue b/ruoyi-ui/src/components/Crontab/second.vue deleted file mode 100644 index e7b7761..0000000 --- a/ruoyi-ui/src/components/Crontab/second.vue +++ /dev/null @@ -1,117 +0,0 @@ -<template> - <el-form size="small"> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 秒,允许的通配符[, - * /] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 周期从 - <el-input-number v-model='cycle01' :min="0" :max="58" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 秒 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 从 - <el-input-number v-model='average01' :min="0" :max="58" /> 秒开始,每 - <el-input-number v-model='average02' :min="1" :max="59 - average01 || 0" /> 秒执行一次 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option> - </el-select> - </el-radio> - </el-form-item> - </el-form> -</template> - -<script> -export default { - data() { - return { - radioValue: 1, - cycle01: 1, - cycle02: 2, - average01: 0, - average02: 1, - checkboxList: [], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-second', - props: ['check', 'radioParent'], - methods: { - // 单选按钮值变化时 - radioChange() { - switch (this.radioValue) { - case 1: - this.$emit('update', 'second', '*', 'second'); - break; - case 2: - this.$emit('update', 'second', this.cycleTotal); - break; - case 3: - this.$emit('update', 'second', this.averageTotal); - break; - case 4: - this.$emit('update', 'second', this.checkboxString); - break; - } - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '2') { - this.$emit('update', 'second', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '3') { - this.$emit('update', 'second', this.averageTotal); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '4') { - this.$emit('update', 'second', this.checkboxString); - } - } - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'checkboxString': 'checkboxChange', - radioParent() { - this.radioValue = this.radioParent - } - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, 0, 58) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 59) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, 0, 58) - const average02 = this.checkNum(this.average02, 1, 59 - average01 || 0) - return average01 + '/' + average02; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> diff --git a/ruoyi-ui/src/components/Crontab/week.vue b/ruoyi-ui/src/components/Crontab/week.vue deleted file mode 100644 index 1cec700..0000000 --- a/ruoyi-ui/src/components/Crontab/week.vue +++ /dev/null @@ -1,202 +0,0 @@ -<template> - <el-form size='small'> - <el-form-item> - <el-radio v-model='radioValue' :label="1"> - 周,允许的通配符[, - * ? / L #] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="2"> - 不指定 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="3"> - 周期从星期 - <el-select clearable v-model="cycle01"> - <el-option - v-for="(item,index) of weekList" - :key="index" - :label="item.value" - :value="item.key" - :disabled="item.key === 1" - >{{item.value}}</el-option> - </el-select> - - - <el-select clearable v-model="cycle02"> - <el-option - v-for="(item,index) of weekList" - :key="index" - :label="item.value" - :value="item.key" - :disabled="item.key < cycle01 && item.key !== 1" - >{{item.value}}</el-option> - </el-select> - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="4"> - 第 - <el-input-number v-model='average01' :min="1" :max="4" /> 周的星期 - <el-select clearable v-model="average02"> - <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">{{item.value}}</el-option> - </el-select> - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="5"> - 本月最后一个星期 - <el-select clearable v-model="weekday"> - <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">{{item.value}}</el-option> - </el-select> - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio v-model='radioValue' :label="6"> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%"> - <el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="String(item.key)">{{item.value}}</el-option> - </el-select> - </el-radio> - </el-form-item> - - </el-form> -</template> - -<script> -export default { - data() { - return { - radioValue: 2, - weekday: 2, - cycle01: 2, - cycle02: 3, - average01: 1, - average02: 2, - checkboxList: [], - weekList: [ - { - key: 2, - value: '星期一' - }, - { - key: 3, - value: '星期二' - }, - { - key: 4, - value: '星期三' - }, - { - key: 5, - value: '星期四' - }, - { - key: 6, - value: '星期五' - }, - { - key: 7, - value: '星期六' - }, - { - key: 1, - value: '星期日' - } - ], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-week', - props: ['check', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - if (this.radioValue !== 2 && this.cron.day !== '?') { - this.$emit('update', 'day', '?', 'week'); - } - switch (this.radioValue) { - case 1: - this.$emit('update', 'week', '*'); - break; - case 2: - this.$emit('update', 'week', '?'); - break; - case 3: - this.$emit('update', 'week', this.cycleTotal); - break; - case 4: - this.$emit('update', 'week', this.averageTotal); - break; - case 5: - this.$emit('update', 'week', this.weekdayCheck + 'L'); - break; - case 6: - this.$emit('update', 'week', this.checkboxString); - break; - } - }, - - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '3') { - this.$emit('update', 'week', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '4') { - this.$emit('update', 'week', this.averageTotal); - } - }, - // 最近工作日值变化时 - weekdayChange() { - if (this.radioValue == '5') { - this.$emit('update', 'week', this.weekday + 'L'); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '6') { - this.$emit('update', 'week', this.checkboxString); - } - }, - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'weekdayCheck': 'weekdayChange', - 'checkboxString': 'checkboxChange', - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - this.cycle01 = this.checkNum(this.cycle01, 1, 7) - this.cycle02 = this.checkNum(this.cycle02, 1, 7) - return this.cycle01 + '-' + this.cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - this.average01 = this.checkNum(this.average01, 1, 4) - this.average02 = this.checkNum(this.average02, 1, 7) - return this.average02 + '#' + this.average01; - }, - // 最近的工作日(格式) - weekdayCheck: function () { - this.weekday = this.checkNum(this.weekday, 1, 7) - return this.weekday; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str == '' ? '*' : str; - } - } -} -</script> diff --git a/ruoyi-ui/src/components/Crontab/year.vue b/ruoyi-ui/src/components/Crontab/year.vue deleted file mode 100644 index 5487a6c..0000000 --- a/ruoyi-ui/src/components/Crontab/year.vue +++ /dev/null @@ -1,131 +0,0 @@ -<template> - <el-form size="small"> - <el-form-item> - <el-radio :label="1" v-model='radioValue'> - 不填,允许的通配符[, - * /] - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio :label="2" v-model='radioValue'> - 每年 - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio :label="3" v-model='radioValue'> - 周期从 - <el-input-number v-model='cycle01' :min='fullYear' :max="2098" /> - - <el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099" /> - </el-radio> - </el-form-item> - - <el-form-item> - <el-radio :label="4" v-model='radioValue'> - 从 - <el-input-number v-model='average01' :min='fullYear' :max="2098"/> 年开始,每 - <el-input-number v-model='average02' :min="1" :max="2099 - average01 || fullYear" /> 年执行一次 - </el-radio> - - </el-form-item> - - <el-form-item> - <el-radio :label="5" v-model='radioValue'> - 指定 - <el-select clearable v-model="checkboxList" placeholder="可多选" multiple> - <el-option v-for="item in 9" :key="item" :value="item - 1 + fullYear" :label="item -1 + fullYear" /> - </el-select> - </el-radio> - </el-form-item> - </el-form> -</template> - -<script> -export default { - data() { - return { - fullYear: 0, - radioValue: 1, - cycle01: 0, - cycle02: 0, - average01: 0, - average02: 1, - checkboxList: [], - checkNum: this.$options.propsData.check - } - }, - name: 'crontab-year', - props: ['check', 'month', 'cron'], - methods: { - // 单选按钮值变化时 - radioChange() { - switch (this.radioValue) { - case 1: - this.$emit('update', 'year', ''); - break; - case 2: - this.$emit('update', 'year', '*'); - break; - case 3: - this.$emit('update', 'year', this.cycleTotal); - break; - case 4: - this.$emit('update', 'year', this.averageTotal); - break; - case 5: - this.$emit('update', 'year', this.checkboxString); - break; - } - }, - // 周期两个值变化时 - cycleChange() { - if (this.radioValue == '3') { - this.$emit('update', 'year', this.cycleTotal); - } - }, - // 平均两个值变化时 - averageChange() { - if (this.radioValue == '4') { - this.$emit('update', 'year', this.averageTotal); - } - }, - // checkbox值变化时 - checkboxChange() { - if (this.radioValue == '5') { - this.$emit('update', 'year', this.checkboxString); - } - } - }, - watch: { - 'radioValue': 'radioChange', - 'cycleTotal': 'cycleChange', - 'averageTotal': 'averageChange', - 'checkboxString': 'checkboxChange' - }, - computed: { - // 计算两个周期值 - cycleTotal: function () { - const cycle01 = this.checkNum(this.cycle01, this.fullYear, 2098) - const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : this.fullYear + 1, 2099) - return cycle01 + '-' + cycle02; - }, - // 计算平均用到的值 - averageTotal: function () { - const average01 = this.checkNum(this.average01, this.fullYear, 2098) - const average02 = this.checkNum(this.average02, 1, 2099 - average01 || this.fullYear) - return average01 + '/' + average02; - }, - // 计算勾选的checkbox值合集 - checkboxString: function () { - let str = this.checkboxList.join(); - return str; - } - }, - mounted: function () { - // 仅获取当前年份 - this.fullYear = Number(new Date().getFullYear()); - this.cycle01 = this.fullYear - this.average01 = this.fullYear - } -} -</script> diff --git a/ruoyi-ui/src/components/DictData/index.js b/ruoyi-ui/src/components/DictData/index.js deleted file mode 100644 index 7b85d4a..0000000 --- a/ruoyi-ui/src/components/DictData/index.js +++ /dev/null @@ -1,49 +0,0 @@ -import Vue from 'vue' -import store from '@/store' -import DataDict from '@/utils/dict' -import { getDicts as getDicts } from '@/api/system/dict/data' - -function searchDictByKey(dict, key) { - if (key == null && key == "") { - return null - } - try { - for (let i = 0; i < dict.length; i++) { - if (dict[i].key == key) { - return dict[i].value - } - } - } catch (e) { - return null - } -} - -function install() { - Vue.use(DataDict, { - metas: { - '*': { - labelField: 'dictLabel', - valueField: 'dictValue', - request(dictMeta) { - const storeDict = searchDictByKey(store.getters.dict, dictMeta.type) - if (storeDict) { - return new Promise(resolve => { resolve(storeDict) }) - } else { - return new Promise((resolve, reject) => { - getDicts(dictMeta.type).then(res => { - store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data }) - resolve(res.data) - }).catch(error => { - reject(error) - }) - }) - } - }, - }, - }, - }) -} - -export default { - install, -} \ No newline at end of file diff --git a/ruoyi-ui/src/components/DictTag/index.vue b/ruoyi-ui/src/components/DictTag/index.vue deleted file mode 100644 index 6b5b230..0000000 --- a/ruoyi-ui/src/components/DictTag/index.vue +++ /dev/null @@ -1,89 +0,0 @@ -<template> - <div> - <template v-for="(item, index) in options"> - <template v-if="values.includes(item.value)"> - <span - v-if="(item.raw.listClass == 'default' || item.raw.listClass == '') && (item.raw.cssClass == '' || item.raw.cssClass == null)" - :key="item.value" - :index="index" - :class="item.raw.cssClass" - >{{ item.label + ' ' }}</span - > - <el-tag - v-else - :disable-transitions="true" - :key="item.value" - :index="index" - :type="item.raw.listClass == 'primary' ? '' : item.raw.listClass" - :class="item.raw.cssClass" - > - {{ item.label + ' ' }} - </el-tag> - </template> - </template> - <template v-if="unmatch && showValue"> - {{ unmatchArray | handleArray }} - </template> - </div> -</template> - -<script> -export default { - name: "DictTag", - props: { - options: { - type: Array, - default: null, - }, - value: [Number, String, Array], - // 当未找到匹配的数据时,显示value - showValue: { - type: Boolean, - default: true, - }, - separator: { - type: String, - default: "," - } - }, - data() { - return { - unmatchArray: [], // 记录未匹配的项 - } - }, - computed: { - values() { - if (this.value === null || typeof this.value === 'undefined' || this.value === '') return [] - return Array.isArray(this.value) ? this.value.map(item => '' + item) : String(this.value).split(this.separator) - }, - unmatch() { - this.unmatchArray = [] - // 没有value不显示 - if (this.value === null || typeof this.value === 'undefined' || this.value === '' || this.options.length === 0) return false - // 传入值为数组 - let unmatch = false // 添加一个标志来判断是否有未匹配项 - this.values.forEach(item => { - if (!this.options.some(v => v.value === item)) { - this.unmatchArray.push(item) - unmatch = true // 如果有未匹配项,将标志设置为true - } - }) - return unmatch // 返回标志的值 - }, - - }, - filters: { - handleArray(array) { - if (array.length === 0) return ''; - return array.reduce((pre, cur) => { - return pre + ' ' + cur; - }) - }, - } -}; -</script> -<style scoped> -.el-tag + .el-tag { - margin-left: 10px; -} -</style> diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue deleted file mode 100644 index 8981d76..0000000 --- a/ruoyi-ui/src/components/Editor/index.vue +++ /dev/null @@ -1,274 +0,0 @@ -<template> - <div> - <el-upload - :action="uploadUrl" - :before-upload="handleBeforeUpload" - :on-success="handleUploadSuccess" - :on-error="handleUploadError" - name="file" - :show-file-list="false" - :headers="headers" - style="display: none" - ref="upload" - v-if="this.type == 'url'" - > - </el-upload> - <div class="editor" ref="editor" :style="styles"></div> - </div> -</template> - -<script> -import Quill from "quill"; -import "quill/dist/quill.core.css"; -import "quill/dist/quill.snow.css"; -import "quill/dist/quill.bubble.css"; -import { getToken } from "@/utils/auth"; - -export default { - name: "Editor", - props: { - /* 编辑器的内容 */ - value: { - type: String, - default: "", - }, - /* 高度 */ - height: { - type: Number, - default: null, - }, - /* 最小高度 */ - minHeight: { - type: Number, - default: null, - }, - /* 只读 */ - readOnly: { - type: Boolean, - default: false, - }, - /* 上传文件大小限制(MB) */ - fileSize: { - type: Number, - default: 5, - }, - /* 类型(base64格式、url格式) */ - type: { - type: String, - default: "url", - } - }, - data() { - return { - uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 - headers: { - Authorization: "Bearer " + getToken() - }, - Quill: null, - currentValue: "", - options: { - theme: "snow", - bounds: document.body, - debug: "warn", - modules: { - // 工具栏配置 - toolbar: [ - ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线 - ["blockquote", "code-block"], // 引用 代码块 - [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表 - [{ indent: "-1" }, { indent: "+1" }], // 缩进 - [{ size: ["small", false, "large", "huge"] }], // 字体大小 - [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题 - [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色 - [{ align: [] }], // 对齐方式 - ["clean"], // 清除文本格式 - ["link", "image", "video"] // 链接、图片、视频 - ], - }, - placeholder: "请输入内容", - readOnly: this.readOnly, - }, - }; - }, - computed: { - styles() { - let style = {}; - if (this.minHeight) { - style.minHeight = `${this.minHeight}px`; - } - if (this.height) { - style.height = `${this.height}px`; - } - return style; - }, - }, - watch: { - value: { - handler(val) { - if (val !== this.currentValue) { - this.currentValue = val === null ? "" : val; - if (this.Quill) { - this.Quill.pasteHTML(this.currentValue); - } - } - }, - immediate: true, - }, - }, - mounted() { - this.init(); - }, - beforeDestroy() { - this.Quill = null; - }, - methods: { - init() { - const editor = this.$refs.editor; - this.Quill = new Quill(editor, this.options); - // 如果设置了上传地址则自定义图片上传事件 - if (this.type == 'url') { - let toolbar = this.Quill.getModule("toolbar"); - toolbar.addHandler("image", (value) => { - if (value) { - this.$refs.upload.$children[0].$refs.input.click(); - } else { - this.quill.format("image", false); - } - }); - } - this.Quill.pasteHTML(this.currentValue); - this.Quill.on("text-change", (delta, oldDelta, source) => { - const html = this.$refs.editor.children[0].innerHTML; - const text = this.Quill.getText(); - const quill = this.Quill; - this.currentValue = html; - this.$emit("input", html); - this.$emit("on-change", { html, text, quill }); - }); - this.Quill.on("text-change", (delta, oldDelta, source) => { - this.$emit("on-text-change", delta, oldDelta, source); - }); - this.Quill.on("selection-change", (range, oldRange, source) => { - this.$emit("on-selection-change", range, oldRange, source); - }); - this.Quill.on("editor-change", (eventName, ...args) => { - this.$emit("on-editor-change", eventName, ...args); - }); - }, - // 上传前校检格式和大小 - handleBeforeUpload(file) { - const type = ["image/jpeg", "image/jpg", "image/png", "image/svg"]; - const isJPG = type.includes(file.type); - // 检验文件格式 - if (!isJPG) { - this.$message.error(`图片格式错误!`); - return false; - } - // 校检文件大小 - if (this.fileSize) { - const isLt = file.size / 1024 / 1024 < this.fileSize; - if (!isLt) { - this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`); - return false; - } - } - return true; - }, - handleUploadSuccess(res, file) { - // 如果上传成功 - if (res.code == 200) { - // 获取富文本组件实例 - let quill = this.Quill; - // 获取光标所在位置 - let length = quill.getSelection().index; - // 插入图片 res.url为服务器返回的图片地址 - quill.insertEmbed(length, "image", process.env.VUE_APP_BASE_API + res.fileName); - // 调整光标到最后 - quill.setSelection(length + 1); - } else { - this.$message.error("图片插入失败"); - } - }, - handleUploadError() { - this.$message.error("图片插入失败"); - }, - }, -}; -</script> - -<style> -.editor, .ql-toolbar { - white-space: pre-wrap !important; - line-height: normal !important; -} -.quill-img { - display: none; -} -.ql-snow .ql-tooltip[data-mode="link"]::before { - content: "请输入链接地址:"; -} -.ql-snow .ql-tooltip.ql-editing a.ql-action::after { - border-right: 0px; - content: "保存"; - padding-right: 0px; -} -.ql-snow .ql-tooltip[data-mode="video"]::before { - content: "请输入视频地址:"; -} -.ql-snow .ql-picker.ql-size .ql-picker-label::before, -.ql-snow .ql-picker.ql-size .ql-picker-item::before { - content: "14px"; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before { - content: "10px"; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before { - content: "18px"; -} -.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before, -.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before { - content: "32px"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label::before, -.ql-snow .ql-picker.ql-header .ql-picker-item::before { - content: "文本"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { - content: "标题1"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { - content: "标题2"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { - content: "标题3"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { - content: "标题4"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { - content: "标题5"; -} -.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, -.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { - content: "标题6"; -} -.ql-snow .ql-picker.ql-font .ql-picker-label::before, -.ql-snow .ql-picker.ql-font .ql-picker-item::before { - content: "标准字体"; -} -.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before, -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before { - content: "衬线字体"; -} -.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before, -.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before { - content: "等宽字体"; -} -</style> diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue deleted file mode 100644 index c7f6b0a..0000000 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ /dev/null @@ -1,216 +0,0 @@ -<template> - <div class="upload-file"> - <el-upload - multiple - :action="uploadFileUrl" - :before-upload="handleBeforeUpload" - :file-list="fileList" - :limit="limit" - :on-error="handleUploadError" - :on-exceed="handleExceed" - :on-success="handleUploadSuccess" - :show-file-list="false" - :headers="headers" - class="upload-file-uploader" - ref="fileUpload" - > - <!-- 上传按钮 --> - <el-button size="mini" type="primary">选取文件</el-button> - <!-- 上传提示 --> - <div class="el-upload__tip" slot="tip" v-if="showTip"> - 请上传 - <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> - <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> - 的文件 - </div> - </el-upload> - - <!-- 文件列表 --> - <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul"> - <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList"> - <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank"> - <span class="el-icon-document"> {{ getFileName(file.name) }} </span> - </el-link> - <div class="ele-upload-list__item-content-action"> - <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link> - </div> - </li> - </transition-group> - </div> -</template> - -<script> -import { getToken } from "@/utils/auth"; - -export default { - name: "FileUpload", - props: { - // 值 - value: [String, Object, Array], - // 数量限制 - limit: { - type: Number, - default: 5, - }, - // 大小限制(MB) - fileSize: { - type: Number, - default: 5, - }, - // 文件类型, 例如['png', 'jpg', 'jpeg'] - fileType: { - type: Array, - default: () => ["doc", "xls", "ppt", "txt", "pdf"], - }, - // 是否显示提示 - isShowTip: { - type: Boolean, - default: true - } - }, - data() { - return { - number: 0, - uploadList: [], - baseUrl: process.env.VUE_APP_BASE_API, - uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传文件服务器地址 - headers: { - Authorization: "Bearer " + getToken(), - }, - fileList: [], - }; - }, - watch: { - value: { - handler(val) { - if (val) { - let temp = 1; - // 首先将值转为数组 - const list = Array.isArray(val) ? val : this.value.split(','); - // 然后将数组转为对象数组 - this.fileList = list.map(item => { - if (typeof item === "string") { - item = { name: item, url: item }; - } - item.uid = item.uid || new Date().getTime() + temp++; - return item; - }); - } else { - this.fileList = []; - return []; - } - }, - deep: true, - immediate: true - } - }, - computed: { - // 是否显示提示 - showTip() { - return this.isShowTip && (this.fileType || this.fileSize); - }, - }, - methods: { - // 上传前校检格式和大小 - handleBeforeUpload(file) { - // 校检文件类型 - if (this.fileType) { - const fileName = file.name.split('.'); - const fileExt = fileName[fileName.length - 1]; - const isTypeOk = this.fileType.indexOf(fileExt) >= 0; - if (!isTypeOk) { - this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`); - return false; - } - } - // 校检文件大小 - if (this.fileSize) { - const isLt = file.size / 1024 / 1024 < this.fileSize; - if (!isLt) { - this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`); - return false; - } - } - this.$modal.loading("正在上传文件,请稍候..."); - this.number++; - return true; - }, - // 文件个数超出 - handleExceed() { - this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`); - }, - // 上传失败 - handleUploadError(err) { - this.$modal.msgError("上传文件失败,请重试"); - this.$modal.closeLoading(); - }, - // 上传成功回调 - handleUploadSuccess(res, file) { - if (res.code === 200) { - this.uploadList.push({ name: res.fileName, url: res.fileName }); - this.uploadedSuccessfully(); - } else { - this.number--; - this.$modal.closeLoading(); - this.$modal.msgError(res.msg); - this.$refs.fileUpload.handleRemove(file); - this.uploadedSuccessfully(); - } - }, - // 删除文件 - handleDelete(index) { - this.fileList.splice(index, 1); - this.$emit("input", this.listToString(this.fileList)); - }, - // 上传结束处理 - uploadedSuccessfully() { - if (this.number > 0 && this.uploadList.length === this.number) { - this.fileList = this.fileList.concat(this.uploadList); - this.uploadList = []; - this.number = 0; - this.$emit("input", this.listToString(this.fileList)); - this.$modal.closeLoading(); - } - }, - // 获取文件名称 - getFileName(name) { - // 如果是url那么取最后的名字 如果不是直接返回 - if (name.lastIndexOf("/") > -1) { - return name.slice(name.lastIndexOf("/") + 1); - } else { - return name; - } - }, - // 对象转成指定字符串分隔 - listToString(list, separator) { - let strs = ""; - separator = separator || ","; - for (let i in list) { - strs += list[i].url + separator; - } - return strs != '' ? strs.substr(0, strs.length - 1) : ''; - } - } -}; -</script> - -<style scoped lang="scss"> -.upload-file-uploader { - margin-bottom: 5px; -} -.upload-file-list .el-upload-list__item { - border: 1px solid #e4e7ed; - line-height: 2; - margin-bottom: 10px; - position: relative; -} -.upload-file-list .ele-upload-list__item-content { - display: flex; - justify-content: space-between; - align-items: center; - color: inherit; -} -.ele-upload-list__item-content-action .el-link { - margin-right: 10px; -} -</style> diff --git a/ruoyi-ui/src/components/Hamburger/index.vue b/ruoyi-ui/src/components/Hamburger/index.vue deleted file mode 100644 index 368b002..0000000 --- a/ruoyi-ui/src/components/Hamburger/index.vue +++ /dev/null @@ -1,44 +0,0 @@ -<template> - <div style="padding: 0 15px;" @click="toggleClick"> - <svg - :class="{'is-active':isActive}" - class="hamburger" - viewBox="0 0 1024 1024" - xmlns="http://www.w3.org/2000/svg" - width="64" - height="64" - > - <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" /> - </svg> - </div> -</template> - -<script> -export default { - name: 'Hamburger', - props: { - isActive: { - type: Boolean, - default: false - } - }, - methods: { - toggleClick() { - this.$emit('toggleClick') - } - } -} -</script> - -<style scoped> -.hamburger { - display: inline-block; - vertical-align: middle; - width: 20px; - height: 20px; -} - -.hamburger.is-active { - transform: rotate(180deg); -} -</style> diff --git a/ruoyi-ui/src/components/HeaderSearch/index.vue b/ruoyi-ui/src/components/HeaderSearch/index.vue deleted file mode 100644 index 7d6780b..0000000 --- a/ruoyi-ui/src/components/HeaderSearch/index.vue +++ /dev/null @@ -1,198 +0,0 @@ -<template> - <div :class="{'show':show}" class="header-search"> - <svg-icon class-name="search-icon" icon-class="search" @click.stop="click" /> - <el-select - ref="headerSearchSelect" - v-model="search" - :remote-method="querySearch" - filterable - default-first-option - remote - placeholder="Search" - class="header-search-select" - @change="change" - > - <el-option v-for="option in options" :key="option.item.path" :value="option.item" :label="option.item.title.join(' > ')" /> - </el-select> - </div> -</template> - -<script> -// fuse is a lightweight fuzzy-search module -// make search results more in line with expectations -import Fuse from 'fuse.js/dist/fuse.min.js' -import path from 'path' - -export default { - name: 'HeaderSearch', - data() { - return { - search: '', - options: [], - searchPool: [], - show: false, - fuse: undefined - } - }, - computed: { - routes() { - return this.$store.getters.permission_routes - } - }, - watch: { - routes() { - this.searchPool = this.generateRoutes(this.routes) - }, - searchPool(list) { - this.initFuse(list) - }, - show(value) { - if (value) { - document.body.addEventListener('click', this.close) - } else { - document.body.removeEventListener('click', this.close) - } - } - }, - mounted() { - this.searchPool = this.generateRoutes(this.routes) - }, - methods: { - click() { - this.show = !this.show - if (this.show) { - this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus() - } - }, - close() { - this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur() - this.options = [] - this.show = false - }, - change(val) { - const path = val.path; - const query = val.query; - if(this.ishttp(val.path)) { - // http(s):// 路径新窗口打开 - const pindex = path.indexOf("http"); - window.open(path.substr(pindex, path.length), "_blank"); - } else { - if (query) { - this.$router.push({ path: path, query: JSON.parse(query) }); - } else { - this.$router.push(path) - } - } - this.search = '' - this.options = [] - this.$nextTick(() => { - this.show = false - }) - }, - initFuse(list) { - this.fuse = new Fuse(list, { - shouldSort: true, - threshold: 0.4, - location: 0, - distance: 100, - minMatchCharLength: 1, - keys: [{ - name: 'title', - weight: 0.7 - }, { - name: 'path', - weight: 0.3 - }] - }) - }, - // Filter out the routes that can be displayed in the sidebar - // And generate the internationalized title - generateRoutes(routes, basePath = '/', prefixTitle = []) { - let res = [] - - for (const router of routes) { - // skip hidden router - if (router.hidden) { continue } - - const data = { - path: !this.ishttp(router.path) ? path.resolve(basePath, router.path) : router.path, - title: [...prefixTitle] - } - - if (router.meta && router.meta.title) { - data.title = [...data.title, router.meta.title] - - if (router.redirect !== 'noRedirect') { - // only push the routes with title - // special case: need to exclude parent router without redirect - res.push(data) - } - } - - if (router.query) { - data.query = router.query - } - - // recursive child routes - if (router.children) { - const tempRoutes = this.generateRoutes(router.children, data.path, data.title) - if (tempRoutes.length >= 1) { - res = [...res, ...tempRoutes] - } - } - } - return res - }, - querySearch(query) { - if (query !== '') { - this.options = this.fuse.search(query) - } else { - this.options = [] - } - }, - ishttp(url) { - return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1 - } - } -} -</script> - -<style lang="scss" scoped> -.header-search { - font-size: 0 !important; - - .search-icon { - cursor: pointer; - font-size: 18px; - vertical-align: middle; - } - - .header-search-select { - font-size: 18px; - transition: width 0.2s; - width: 0; - overflow: hidden; - background: transparent; - border-radius: 0; - display: inline-block; - vertical-align: middle; - - ::v-deep .el-input__inner { - border-radius: 0; - border: 0; - padding-left: 0; - padding-right: 0; - box-shadow: none !important; - border-bottom: 1px solid #d9d9d9; - vertical-align: middle; - } - } - - &.show { - .header-search-select { - width: 210px; - margin-left: 10px; - } - } -} -</style> diff --git a/ruoyi-ui/src/components/IconSelect/index.vue b/ruoyi-ui/src/components/IconSelect/index.vue deleted file mode 100644 index 8dadc02..0000000 --- a/ruoyi-ui/src/components/IconSelect/index.vue +++ /dev/null @@ -1,104 +0,0 @@ -<!-- @author zhengjie --> -<template> - <div class="icon-body"> - <el-input v-model="name" class="icon-search" clearable placeholder="请输入图标名称" @clear="filterIcons" @input="filterIcons"> - <i slot="suffix" class="el-icon-search el-input__icon" /> - </el-input> - <div class="icon-list"> - <div class="list-container"> - <div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)"> - <div :class="['icon-item', { active: activeIcon === item }]"> - <svg-icon :icon-class="item" class-name="icon" style="height: 25px;width: 16px;"/> - <span>{{ item }}</span> - </div> - </div> - </div> - </div> - </div> -</template> - -<script> -import icons from './requireIcons' -export default { - name: 'IconSelect', - props: { - activeIcon: { - type: String - } - }, - data() { - return { - name: '', - iconList: icons - } - }, - methods: { - filterIcons() { - this.iconList = icons - if (this.name) { - this.iconList = this.iconList.filter(item => item.includes(this.name)) - } - }, - selectedIcon(name) { - this.$emit('selected', name) - document.body.click() - }, - reset() { - this.name = '' - this.iconList = icons - } - } -} -</script> - -<style rel="stylesheet/scss" lang="scss" scoped> - .icon-body { - width: 100%; - padding: 10px; - .icon-search { - position: relative; - margin-bottom: 5px; - } - .icon-list { - height: 200px; - overflow: auto; - .list-container { - display: flex; - flex-wrap: wrap; - .icon-item-wrapper { - width: calc(100% / 3); - height: 25px; - line-height: 25px; - cursor: pointer; - display: flex; - .icon-item { - display: flex; - max-width: 100%; - height: 100%; - padding: 0 5px; - &:hover { - background: #ececec; - border-radius: 5px; - } - .icon { - flex-shrink: 0; - } - span { - display: inline-block; - vertical-align: -0.15em; - fill: currentColor; - padding-left: 2px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - } - .icon-item.active { - background: #ececec; - border-radius: 5px; - } - } - } - } - } -</style> diff --git a/ruoyi-ui/src/components/IconSelect/requireIcons.js b/ruoyi-ui/src/components/IconSelect/requireIcons.js deleted file mode 100644 index 99e5c54..0000000 --- a/ruoyi-ui/src/components/IconSelect/requireIcons.js +++ /dev/null @@ -1,11 +0,0 @@ - -const req = require.context('../../assets/icons/svg', false, /\.svg$/) -const requireAll = requireContext => requireContext.keys() - -const re = /\.\/(.*)\.svg/ - -const icons = requireAll(req).map(i => { - return i.match(re)[1] -}) - -export default icons diff --git a/ruoyi-ui/src/components/ImagePreview/index.vue b/ruoyi-ui/src/components/ImagePreview/index.vue deleted file mode 100644 index 3c770c7..0000000 --- a/ruoyi-ui/src/components/ImagePreview/index.vue +++ /dev/null @@ -1,90 +0,0 @@ -<template> - <el-image - :src="`${realSrc}`" - fit="cover" - :style="`width:${realWidth};height:${realHeight};`" - :preview-src-list="realSrcList" - > - <div slot="error" class="image-slot"> - <i class="el-icon-picture-outline"></i> - </div> - </el-image> -</template> - -<script> -import { isExternal } from "@/utils/validate"; - -export default { - name: "ImagePreview", - props: { - src: { - type: String, - default: "" - }, - width: { - type: [Number, String], - default: "" - }, - height: { - type: [Number, String], - default: "" - } - }, - computed: { - realSrc() { - if (!this.src) { - return; - } - let real_src = this.src.split(",")[0]; - if (isExternal(real_src)) { - return real_src; - } - return process.env.VUE_APP_BASE_API + real_src; - }, - realSrcList() { - if (!this.src) { - return; - } - let real_src_list = this.src.split(","); - let srcList = []; - real_src_list.forEach(item => { - if (isExternal(item)) { - return srcList.push(item); - } - return srcList.push(process.env.VUE_APP_BASE_API + item); - }); - return srcList; - }, - realWidth() { - return typeof this.width == "string" ? this.width : `${this.width}px`; - }, - realHeight() { - return typeof this.height == "string" ? this.height : `${this.height}px`; - } - }, -}; -</script> - -<style lang="scss" scoped> -.el-image { - border-radius: 5px; - background-color: #ebeef5; - box-shadow: 0 0 5px 1px #ccc; - ::v-deep .el-image__inner { - transition: all 0.3s; - cursor: pointer; - &:hover { - transform: scale(1.2); - } - } - ::v-deep .image-slot { - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - color: #909399; - font-size: 30px; - } -} -</style> diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue deleted file mode 100644 index 2e64c9b..0000000 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ /dev/null @@ -1,226 +0,0 @@ -<template> - <div class="component-upload-image"> - <el-upload - multiple - :action="uploadImgUrl" - list-type="picture-card" - :on-success="handleUploadSuccess" - :before-upload="handleBeforeUpload" - :limit="limit" - :on-error="handleUploadError" - :on-exceed="handleExceed" - ref="imageUpload" - :on-remove="handleDelete" - :show-file-list="true" - :headers="headers" - :file-list="fileList" - :on-preview="handlePictureCardPreview" - :class="{hide: this.fileList.length >= this.limit}" - > - <i class="el-icon-plus"></i> - </el-upload> - - <!-- 上传提示 --> - <div class="el-upload__tip" slot="tip" v-if="showTip"> - 请上传 - <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> - <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> - 的文件 - </div> - - <el-dialog - :visible.sync="dialogVisible" - title="预览" - width="800" - append-to-body - > - <img - :src="dialogImageUrl" - style="display: block; max-width: 100%; margin: 0 auto" - /> - </el-dialog> - </div> -</template> - -<script> -import { getToken } from "@/utils/auth"; - -export default { - props: { - value: [String, Object, Array], - // 图片数量限制 - limit: { - type: Number, - default: 5, - }, - // 大小限制(MB) - fileSize: { - type: Number, - default: 5, - }, - // 文件类型, 例如['png', 'jpg', 'jpeg'] - fileType: { - type: Array, - default: () => ["png", "jpg", "jpeg"], - }, - // 是否显示提示 - isShowTip: { - type: Boolean, - default: true - } - }, - data() { - return { - number: 0, - uploadList: [], - dialogImageUrl: "", - dialogVisible: false, - hideUpload: false, - baseUrl: process.env.VUE_APP_BASE_API, - uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址 - headers: { - Authorization: "Bearer " + getToken(), - }, - fileList: [] - }; - }, - watch: { - value: { - handler(val) { - if (val) { - // 首先将值转为数组 - const list = Array.isArray(val) ? val : this.value.split(','); - // 然后将数组转为对象数组 - this.fileList = list.map(item => { - if (typeof item === "string") { - if (item.indexOf(this.baseUrl) === -1) { - item = { name: this.baseUrl + item, url: this.baseUrl + item }; - } else { - item = { name: item, url: item }; - } - } - return item; - }); - } else { - this.fileList = []; - return []; - } - }, - deep: true, - immediate: true - } - }, - computed: { - // 是否显示提示 - showTip() { - return this.isShowTip && (this.fileType || this.fileSize); - }, - }, - methods: { - // 上传前loading加载 - handleBeforeUpload(file) { - let isImg = false; - if (this.fileType.length) { - let fileExtension = ""; - if (file.name.lastIndexOf(".") > -1) { - fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1); - } - isImg = this.fileType.some(type => { - if (file.type.indexOf(type) > -1) return true; - if (fileExtension && fileExtension.indexOf(type) > -1) return true; - return false; - }); - } else { - isImg = file.type.indexOf("image") > -1; - } - - if (!isImg) { - this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`); - return false; - } - if (this.fileSize) { - const isLt = file.size / 1024 / 1024 < this.fileSize; - if (!isLt) { - this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`); - return false; - } - } - this.$modal.loading("正在上传图片,请稍候..."); - this.number++; - }, - // 文件个数超出 - handleExceed() { - this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`); - }, - // 上传成功回调 - handleUploadSuccess(res, file) { - if (res.code === 200) { - this.uploadList.push({ name: res.fileName, url: res.fileName }); - this.uploadedSuccessfully(); - } else { - this.number--; - this.$modal.closeLoading(); - this.$modal.msgError(res.msg); - this.$refs.imageUpload.handleRemove(file); - this.uploadedSuccessfully(); - } - }, - // 删除图片 - handleDelete(file) { - const findex = this.fileList.map(f => f.name).indexOf(file.name); - if (findex > -1) { - this.fileList.splice(findex, 1); - this.$emit("input", this.listToString(this.fileList)); - } - }, - // 上传失败 - handleUploadError() { - this.$modal.msgError("上传图片失败,请重试"); - this.$modal.closeLoading(); - }, - // 上传结束处理 - uploadedSuccessfully() { - if (this.number > 0 && this.uploadList.length === this.number) { - this.fileList = this.fileList.concat(this.uploadList); - this.uploadList = []; - this.number = 0; - this.$emit("input", this.listToString(this.fileList)); - this.$modal.closeLoading(); - } - }, - // 预览 - handlePictureCardPreview(file) { - this.dialogImageUrl = file.url; - this.dialogVisible = true; - }, - // 对象转成指定字符串分隔 - listToString(list, separator) { - let strs = ""; - separator = separator || ","; - for (let i in list) { - if (list[i].url) { - strs += list[i].url.replace(this.baseUrl, "") + separator; - } - } - return strs != '' ? strs.substr(0, strs.length - 1) : ''; - } - } -}; -</script> -<style scoped lang="scss"> -// .el-upload--picture-card 控制加号部分 -::v-deep.hide .el-upload--picture-card { - display: none; -} -// 去掉动画效果 -::v-deep .el-list-enter-active, -::v-deep .el-list-leave-active { - transition: all 0s; -} - -::v-deep .el-list-enter, .el-list-leave-active { - opacity: 0; - transform: translateY(0); -} -</style> - diff --git a/ruoyi-ui/src/components/Pagination/index.vue b/ruoyi-ui/src/components/Pagination/index.vue deleted file mode 100644 index 56f5a6b..0000000 --- a/ruoyi-ui/src/components/Pagination/index.vue +++ /dev/null @@ -1,114 +0,0 @@ -<template> - <div :class="{'hidden':hidden}" class="pagination-container"> - <el-pagination - :background="background" - :current-page.sync="currentPage" - :page-size.sync="pageSize" - :layout="layout" - :page-sizes="pageSizes" - :pager-count="pagerCount" - :total="total" - v-bind="$attrs" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> -</template> - -<script> -import { scrollTo } from '@/utils/scroll-to' - -export default { - name: 'Pagination', - props: { - total: { - required: true, - type: Number - }, - page: { - type: Number, - default: 1 - }, - limit: { - type: Number, - default: 20 - }, - pageSizes: { - type: Array, - default() { - return [10, 20, 30, 50] - } - }, - // 移动端页码按钮的数量端默认值5 - pagerCount: { - type: Number, - default: document.body.clientWidth < 992 ? 5 : 7 - }, - layout: { - type: String, - default: 'total, sizes, prev, pager, next, jumper' - }, - background: { - type: Boolean, - default: true - }, - autoScroll: { - type: Boolean, - default: true - }, - hidden: { - type: Boolean, - default: false - } - }, - data() { - return { - }; - }, - computed: { - currentPage: { - get() { - return this.page - }, - set(val) { - this.$emit('update:page', val) - } - }, - pageSize: { - get() { - return this.limit - }, - set(val) { - this.$emit('update:limit', val) - } - } - }, - methods: { - handleSizeChange(val) { - if (this.currentPage * val > this.total) { - this.currentPage = 1 - } - this.$emit('pagination', { page: this.currentPage, limit: val }) - if (this.autoScroll) { - scrollTo(0, 800) - } - }, - handleCurrentChange(val) { - this.$emit('pagination', { page: val, limit: this.pageSize }) - if (this.autoScroll) { - scrollTo(0, 800) - } - } - } -} -</script> - -<style scoped> -.pagination-container { - background: #fff; - padding: 32px 16px; -} -.pagination-container.hidden { - display: none; -} -</style> diff --git a/ruoyi-ui/src/components/PanThumb/index.vue b/ruoyi-ui/src/components/PanThumb/index.vue deleted file mode 100644 index 1bcf417..0000000 --- a/ruoyi-ui/src/components/PanThumb/index.vue +++ /dev/null @@ -1,142 +0,0 @@ -<template> - <div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item"> - <div class="pan-info"> - <div class="pan-info-roles-container"> - <slot /> - </div> - </div> - <!-- eslint-disable-next-line --> - <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div> - </div> -</template> - -<script> -export default { - name: 'PanThumb', - props: { - image: { - type: String, - required: true - }, - zIndex: { - type: Number, - default: 1 - }, - width: { - type: String, - default: '150px' - }, - height: { - type: String, - default: '150px' - } - } -} -</script> - -<style scoped> -.pan-item { - width: 200px; - height: 200px; - border-radius: 50%; - display: inline-block; - position: relative; - cursor: default; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); -} - -.pan-info-roles-container { - padding: 20px; - text-align: center; -} - -.pan-thumb { - width: 100%; - height: 100%; - background-position: center center; - background-size: cover; - border-radius: 50%; - overflow: hidden; - position: absolute; - transform-origin: 95% 40%; - transition: all 0.3s ease-in-out; -} - -/* .pan-thumb:after { - content: ''; - width: 8px; - height: 8px; - position: absolute; - border-radius: 50%; - top: 40%; - left: 95%; - margin: -4px 0 0 -4px; - background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%); - box-shadow: 0 0 1px rgba(255, 255, 255, 0.9); -} */ - -.pan-info { - position: absolute; - width: inherit; - height: inherit; - border-radius: 50%; - overflow: hidden; - box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05); -} - -.pan-info h3 { - color: #fff; - text-transform: uppercase; - position: relative; - letter-spacing: 2px; - font-size: 18px; - margin: 0 60px; - padding: 22px 0 0 0; - height: 85px; - font-family: 'Open Sans', Arial, sans-serif; - text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3); -} - -.pan-info p { - color: #fff; - padding: 10px 5px; - font-style: italic; - margin: 0 30px; - font-size: 12px; - border-top: 1px solid rgba(255, 255, 255, 0.5); -} - -.pan-info p a { - display: block; - color: #333; - width: 80px; - height: 80px; - background: rgba(255, 255, 255, 0.3); - border-radius: 50%; - color: #fff; - font-style: normal; - font-weight: 700; - text-transform: uppercase; - font-size: 9px; - letter-spacing: 1px; - padding-top: 24px; - margin: 7px auto 0; - font-family: 'Open Sans', Arial, sans-serif; - opacity: 0; - transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s, background 0.2s linear 0s; - transform: translateX(60px) rotate(90deg); -} - -.pan-info p a:hover { - background: rgba(255, 255, 255, 0.5); -} - -.pan-item:hover .pan-thumb { - transform: rotate(-110deg); -} - -.pan-item:hover .pan-info p a { - opacity: 1; - transform: translateX(0px) rotate(0deg); -} -</style> diff --git a/ruoyi-ui/src/components/ParentView/index.vue b/ruoyi-ui/src/components/ParentView/index.vue deleted file mode 100644 index 7bf6148..0000000 --- a/ruoyi-ui/src/components/ParentView/index.vue +++ /dev/null @@ -1,3 +0,0 @@ -<template > - <router-view /> -</template> diff --git a/ruoyi-ui/src/components/RightPanel/index.vue b/ruoyi-ui/src/components/RightPanel/index.vue deleted file mode 100644 index 5abeecb..0000000 --- a/ruoyi-ui/src/components/RightPanel/index.vue +++ /dev/null @@ -1,106 +0,0 @@ -<template> - <div ref="rightPanel" class="rightPanel-container"> - <div class="rightPanel-background" /> - <div class="rightPanel"> - <div class="rightPanel-items"> - <slot /> - </div> - </div> - </div> -</template> - -<script> -export default { - name: 'RightPanel', - props: { - clickNotClose: { - default: false, - type: Boolean - } - }, - computed: { - show: { - get() { - return this.$store.state.settings.showSettings - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'showSettings', - value: val - }) - } - } - }, - watch: { - show(value) { - if (value && !this.clickNotClose) { - this.addEventClick() - } - } - }, - mounted() { - this.addEventClick() - }, - beforeDestroy() { - const elx = this.$refs.rightPanel - elx.remove() - }, - methods: { - addEventClick() { - window.addEventListener('click', this.closeSidebar) - }, - closeSidebar(evt) { - const parent = evt.target.closest('.el-drawer__body') - if (!parent) { - this.show = false - window.removeEventListener('click', this.closeSidebar) - } - } - } -} -</script> - -<style lang="scss" scoped> -.rightPanel-background { - position: fixed; - top: 0; - left: 0; - opacity: 0; - transition: opacity .3s cubic-bezier(.7, .3, .1, 1); - background: rgba(0, 0, 0, .2); - z-index: -1; -} - -.rightPanel { - width: 100%; - max-width: 260px; - height: 100vh; - position: fixed; - top: 0; - right: 0; - box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, .05); - transition: all .25s cubic-bezier(.7, .3, .1, 1); - transform: translate(100%); - background: #fff; - z-index: 40000; -} - -.handle-button { - width: 48px; - height: 48px; - position: absolute; - left: -48px; - text-align: center; - font-size: 24px; - border-radius: 6px 0 0 6px !important; - z-index: 0; - pointer-events: auto; - cursor: pointer; - color: #fff; - line-height: 48px; - i { - font-size: 24px; - line-height: 48px; - } -} -</style> diff --git a/ruoyi-ui/src/components/RightToolbar/index.vue b/ruoyi-ui/src/components/RightToolbar/index.vue deleted file mode 100644 index 67da293..0000000 --- a/ruoyi-ui/src/components/RightToolbar/index.vue +++ /dev/null @@ -1,129 +0,0 @@ -<template> - <div class="top-right-btn" :style="style"> - <el-row> - <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top" v-if="search"> - <el-button size="mini" circle icon="el-icon-search" @click="toggleSearch()" /> - </el-tooltip> - <el-tooltip class="item" effect="dark" content="刷新" placement="top"> - <el-button size="mini" circle icon="el-icon-refresh" @click="refresh()" /> - </el-tooltip> - <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="columns"> - <el-button size="mini" circle icon="el-icon-menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/> - <el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'"> - <el-button size="mini" circle icon="el-icon-menu" /> - <el-dropdown-menu slot="dropdown"> - <template v-for="item in columns"> - <el-dropdown-item :key="item.key"> - <el-checkbox :checked="item.visible" @change="checkboxChange($event, item.label)" :label="item.label" /> - </el-dropdown-item> - </template> - </el-dropdown-menu> - </el-dropdown> - </el-tooltip> - </el-row> - <el-dialog :title="title" :visible.sync="open" append-to-body> - <el-transfer - :titles="['显示', '隐藏']" - v-model="value" - :data="columns" - @change="dataChange" - ></el-transfer> - </el-dialog> - </div> -</template> -<script> -export default { - name: "RightToolbar", - data() { - return { - // 显隐数据 - value: [], - // 弹出层标题 - title: "显示/隐藏", - // 是否显示弹出层 - open: false, - }; - }, - props: { - /* 是否显示检索条件 */ - showSearch: { - type: Boolean, - default: true, - }, - /* 显隐列信息 */ - columns: { - type: Array, - }, - /* 是否显示检索图标 */ - search: { - type: Boolean, - default: true, - }, - /* 显隐列类型(transfer穿梭框、checkbox复选框) */ - showColumnsType: { - type: String, - default: "checkbox", - }, - /* 右外边距 */ - gutter: { - type: Number, - default: 10, - }, - }, - computed: { - style() { - const ret = {}; - if (this.gutter) { - ret.marginRight = `${this.gutter / 2}px`; - } - return ret; - } - }, - created() { - if (this.showColumnsType == 'transfer') { - // 显隐列初始默认隐藏列 - for (let item in this.columns) { - if (this.columns[item].visible === false) { - this.value.push(parseInt(item)); - } - } - } - }, - methods: { - // 搜索 - toggleSearch() { - this.$emit("update:showSearch", !this.showSearch); - }, - // 刷新 - refresh() { - this.$emit("queryTable"); - }, - // 右侧列表元素变化 - dataChange(data) { - for (let item in this.columns) { - const key = this.columns[item].key; - this.columns[item].visible = !data.includes(key); - } - }, - // 打开显隐列dialog - showColumn() { - this.open = true; - }, - // 勾选 - checkboxChange(event, label) { - this.columns.filter(item => item.label == label)[0].visible = event; - } - }, -}; -</script> -<style lang="scss" scoped> -::v-deep .el-transfer__button { - border-radius: 50%; - padding: 12px; - display: block; - margin-left: 0px; -} -::v-deep .el-transfer__button:first-child { - margin-bottom: 10px; -} -</style> diff --git a/ruoyi-ui/src/components/RuoYi/Doc/index.vue b/ruoyi-ui/src/components/RuoYi/Doc/index.vue deleted file mode 100644 index 75fa864..0000000 --- a/ruoyi-ui/src/components/RuoYi/Doc/index.vue +++ /dev/null @@ -1,21 +0,0 @@ -<template> - <div> - <svg-icon icon-class="question" @click="goto" /> - </div> -</template> - -<script> -export default { - name: 'RuoYiDoc', - data() { - return { - url: 'http://doc.ruoyi.vip/ruoyi-vue' - } - }, - methods: { - goto() { - window.open(this.url) - } - } -} -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/components/RuoYi/Git/index.vue b/ruoyi-ui/src/components/RuoYi/Git/index.vue deleted file mode 100644 index bdafbae..0000000 --- a/ruoyi-ui/src/components/RuoYi/Git/index.vue +++ /dev/null @@ -1,21 +0,0 @@ -<template> - <div> - <svg-icon icon-class="github" @click="goto" /> - </div> -</template> - -<script> -export default { - name: 'RuoYiGit', - data() { - return { - url: 'https://gitee.com/y_project/RuoYi-Vue' - } - }, - methods: { - goto() { - window.open(this.url) - } - } -} -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/components/Screenfull/index.vue b/ruoyi-ui/src/components/Screenfull/index.vue deleted file mode 100644 index d4e539c..0000000 --- a/ruoyi-ui/src/components/Screenfull/index.vue +++ /dev/null @@ -1,57 +0,0 @@ -<template> - <div> - <svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" /> - </div> -</template> - -<script> -import screenfull from 'screenfull' - -export default { - name: 'Screenfull', - data() { - return { - isFullscreen: false - } - }, - mounted() { - this.init() - }, - beforeDestroy() { - this.destroy() - }, - methods: { - click() { - if (!screenfull.isEnabled) { - this.$message({ message: '你的浏览器不支持全屏', type: 'warning' }) - return false - } - screenfull.toggle() - }, - change() { - this.isFullscreen = screenfull.isFullscreen - }, - init() { - if (screenfull.isEnabled) { - screenfull.on('change', this.change) - } - }, - destroy() { - if (screenfull.isEnabled) { - screenfull.off('change', this.change) - } - } - } -} -</script> - -<style scoped> -.screenfull-svg { - display: inline-block; - cursor: pointer; - fill: #5a5e66;; - width: 20px; - height: 20px; - vertical-align: 10px; -} -</style> diff --git a/ruoyi-ui/src/components/SizeSelect/index.vue b/ruoyi-ui/src/components/SizeSelect/index.vue deleted file mode 100644 index 069b5de..0000000 --- a/ruoyi-ui/src/components/SizeSelect/index.vue +++ /dev/null @@ -1,56 +0,0 @@ -<template> - <el-dropdown trigger="click" @command="handleSetSize"> - <div> - <svg-icon class-name="size-icon" icon-class="size" /> - </div> - <el-dropdown-menu slot="dropdown"> - <el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value"> - {{ item.label }} - </el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> -</template> - -<script> -export default { - data() { - return { - sizeOptions: [ - { label: 'Default', value: 'default' }, - { label: 'Medium', value: 'medium' }, - { label: 'Small', value: 'small' }, - { label: 'Mini', value: 'mini' } - ] - } - }, - computed: { - size() { - return this.$store.getters.size - } - }, - methods: { - handleSetSize(size) { - this.$ELEMENT.size = size - this.$store.dispatch('app/setSize', size) - this.refreshView() - this.$message({ - message: 'Switch Size Success', - type: 'success' - }) - }, - refreshView() { - // In order to make the cached page re-rendered - this.$store.dispatch('tagsView/delAllCachedViews', this.$route) - - const { fullPath } = this.$route - - this.$nextTick(() => { - this.$router.replace({ - path: '/redirect' + fullPath - }) - }) - } - } - -} -</script> diff --git a/ruoyi-ui/src/components/SvgIcon/index.vue b/ruoyi-ui/src/components/SvgIcon/index.vue deleted file mode 100644 index e4bf5ad..0000000 --- a/ruoyi-ui/src/components/SvgIcon/index.vue +++ /dev/null @@ -1,61 +0,0 @@ -<template> - <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" /> - <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners"> - <use :xlink:href="iconName" /> - </svg> -</template> - -<script> -import { isExternal } from '@/utils/validate' - -export default { - name: 'SvgIcon', - props: { - iconClass: { - type: String, - required: true - }, - className: { - type: String, - default: '' - } - }, - computed: { - isExternal() { - return isExternal(this.iconClass) - }, - iconName() { - return `#icon-${this.iconClass}` - }, - svgClass() { - if (this.className) { - return 'svg-icon ' + this.className - } else { - return 'svg-icon' - } - }, - styleExternalIcon() { - return { - mask: `url(${this.iconClass}) no-repeat 50% 50%`, - '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%` - } - } - } -} -</script> - -<style scoped> -.svg-icon { - width: 1em; - height: 1em; - vertical-align: -0.15em; - fill: currentColor; - overflow: hidden; -} - -.svg-external-icon { - background-color: currentColor; - mask-size: cover!important; - display: inline-block; -} -</style> diff --git a/ruoyi-ui/src/components/ThemePicker/index.vue b/ruoyi-ui/src/components/ThemePicker/index.vue deleted file mode 100644 index 1714e1f..0000000 --- a/ruoyi-ui/src/components/ThemePicker/index.vue +++ /dev/null @@ -1,173 +0,0 @@ -<template> - <el-color-picker - v-model="theme" - :predefine="['#409EFF', '#1890ff', '#304156','#212121','#11a983', '#13c2c2', '#6959CD', '#f5222d', ]" - class="theme-picker" - popper-class="theme-picker-dropdown" - /> -</template> - -<script> -const version = require('element-ui/package.json').version // element-ui version from node_modules -const ORIGINAL_THEME = '#409EFF' // default color - -export default { - data() { - return { - chalk: '', // content of theme-chalk css - theme: '' - } - }, - computed: { - defaultTheme() { - return this.$store.state.settings.theme - } - }, - watch: { - defaultTheme: { - handler: function(val, oldVal) { - this.theme = val - }, - immediate: true - }, - async theme(val) { - await this.setTheme(val) - } - }, - created() { - if(this.defaultTheme !== ORIGINAL_THEME) { - this.setTheme(this.defaultTheme) - } - }, - - methods: { - async setTheme(val) { - const oldVal = this.chalk ? this.theme : ORIGINAL_THEME - if (typeof val !== 'string') return - const themeCluster = this.getThemeCluster(val.replace('#', '')) - const originalCluster = this.getThemeCluster(oldVal.replace('#', '')) - - const getHandler = (variable, id) => { - return () => { - const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', '')) - const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster) - - let styleTag = document.getElementById(id) - if (!styleTag) { - styleTag = document.createElement('style') - styleTag.setAttribute('id', id) - document.head.appendChild(styleTag) - } - styleTag.innerText = newStyle - } - } - - if (!this.chalk) { - const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css` - await this.getCSSString(url, 'chalk') - } - - const chalkHandler = getHandler('chalk', 'chalk-style') - - chalkHandler() - - const styles = [].slice.call(document.querySelectorAll('style')) - .filter(style => { - const text = style.innerText - return new RegExp(oldVal, 'i').test(text) && !/Chalk Variables/.test(text) - }) - styles.forEach(style => { - const { innerText } = style - if (typeof innerText !== 'string') return - style.innerText = this.updateStyle(innerText, originalCluster, themeCluster) - }) - - this.$emit('change', val) - }, - - updateStyle(style, oldCluster, newCluster) { - let newStyle = style - oldCluster.forEach((color, index) => { - newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index]) - }) - return newStyle - }, - - getCSSString(url, variable) { - return new Promise(resolve => { - const xhr = new XMLHttpRequest() - xhr.onreadystatechange = () => { - if (xhr.readyState === 4 && xhr.status === 200) { - this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '') - resolve() - } - } - xhr.open('GET', url) - xhr.send() - }) - }, - - getThemeCluster(theme) { - const tintColor = (color, tint) => { - let red = parseInt(color.slice(0, 2), 16) - let green = parseInt(color.slice(2, 4), 16) - let blue = parseInt(color.slice(4, 6), 16) - - if (tint === 0) { // when primary color is in its rgb space - return [red, green, blue].join(',') - } else { - red += Math.round(tint * (255 - red)) - green += Math.round(tint * (255 - green)) - blue += Math.round(tint * (255 - blue)) - - red = red.toString(16) - green = green.toString(16) - blue = blue.toString(16) - - return `#${red}${green}${blue}` - } - } - - const shadeColor = (color, shade) => { - let red = parseInt(color.slice(0, 2), 16) - let green = parseInt(color.slice(2, 4), 16) - let blue = parseInt(color.slice(4, 6), 16) - - red = Math.round((1 - shade) * red) - green = Math.round((1 - shade) * green) - blue = Math.round((1 - shade) * blue) - - red = red.toString(16) - green = green.toString(16) - blue = blue.toString(16) - - return `#${red}${green}${blue}` - } - - const clusters = [theme] - for (let i = 0; i <= 9; i++) { - clusters.push(tintColor(theme, Number((i / 10).toFixed(2)))) - } - clusters.push(shadeColor(theme, 0.1)) - return clusters - } - } -} -</script> - -<style> -.theme-message, -.theme-picker-dropdown { - z-index: 99999 !important; -} - -.theme-picker .el-color-picker__trigger { - height: 26px !important; - width: 26px !important; - padding: 2px; -} - -.theme-picker-dropdown .el-color-dropdown__link-btn { - display: none; -} -</style> diff --git a/ruoyi-ui/src/components/TopNav/index.vue b/ruoyi-ui/src/components/TopNav/index.vue deleted file mode 100644 index 86a91c4..0000000 --- a/ruoyi-ui/src/components/TopNav/index.vue +++ /dev/null @@ -1,195 +0,0 @@ -<template> - <el-menu - :default-active="activeMenu" - mode="horizontal" - @select="handleSelect" - > - <template v-for="(item, index) in topMenus"> - <el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber"> - <svg-icon - v-if="item.meta && item.meta.icon && item.meta.icon !== '#'" - :icon-class="item.meta.icon"/> - {{ item.meta.title }} - </el-menu-item> - </template> - - <!-- 顶部菜单超出数量折叠 --> - <el-submenu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber"> - <template slot="title">更多菜单</template> - <template v-for="(item, index) in topMenus"> - <el-menu-item - :index="item.path" - :key="index" - v-if="index >= visibleNumber"> - <svg-icon - v-if="item.meta && item.meta.icon && item.meta.icon !== '#'" - :icon-class="item.meta.icon"/> - {{ item.meta.title }} - </el-menu-item> - </template> - </el-submenu> - </el-menu> -</template> - -<script> -import { constantRoutes } from "@/router"; - -// 隐藏侧边栏路由 -const hideList = ['/index', '/user/profile']; - -export default { - data() { - return { - // 顶部栏初始数 - visibleNumber: 5, - // 当前激活菜单的 index - currentIndex: undefined - }; - }, - computed: { - theme() { - return this.$store.state.settings.theme; - }, - // 顶部显示菜单 - topMenus() { - let topMenus = []; - this.routers.map((menu) => { - if (menu.hidden !== true) { - // 兼容顶部栏一级菜单内部跳转 - if (menu.path === "/") { - topMenus.push(menu.children[0]); - } else { - topMenus.push(menu); - } - } - }); - return topMenus; - }, - // 所有的路由信息 - routers() { - return this.$store.state.permission.topbarRouters; - }, - // 设置子路由 - childrenMenus() { - var childrenMenus = []; - this.routers.map((router) => { - for (var item in router.children) { - if (router.children[item].parentPath === undefined) { - if(router.path === "/") { - router.children[item].path = "/" + router.children[item].path; - } else { - if(!this.ishttp(router.children[item].path)) { - router.children[item].path = router.path + "/" + router.children[item].path; - } - } - router.children[item].parentPath = router.path; - } - childrenMenus.push(router.children[item]); - } - }); - return constantRoutes.concat(childrenMenus); - }, - // 默认激活的菜单 - activeMenu() { - const path = this.$route.path; - let activePath = path; - if (path !== undefined && path.lastIndexOf("/") > 0 && hideList.indexOf(path) === -1) { - const tmpPath = path.substring(1, path.length); - activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/")); - if (!this.$route.meta.link) { - this.$store.dispatch('app/toggleSideBarHide', false); - } - } else if(!this.$route.children) { - activePath = path; - this.$store.dispatch('app/toggleSideBarHide', true); - } - this.activeRoutes(activePath); - return activePath; - }, - }, - beforeMount() { - window.addEventListener('resize', this.setVisibleNumber) - }, - beforeDestroy() { - window.removeEventListener('resize', this.setVisibleNumber) - }, - mounted() { - this.setVisibleNumber(); - }, - methods: { - // 根据宽度计算设置显示栏数 - setVisibleNumber() { - const width = document.body.getBoundingClientRect().width / 3; - this.visibleNumber = parseInt(width / 85); - }, - // 菜单选择事件 - handleSelect(key, keyPath) { - this.currentIndex = key; - const route = this.routers.find(item => item.path === key); - if (this.ishttp(key)) { - // http(s):// 路径新窗口打开 - window.open(key, "_blank"); - } else if (!route || !route.children) { - // 没有子路由路径内部打开 - const routeMenu = this.childrenMenus.find(item => item.path === key); - if (routeMenu && routeMenu.query) { - let query = JSON.parse(routeMenu.query); - this.$router.push({ path: key, query: query }); - } else { - this.$router.push({ path: key }); - } - this.$store.dispatch('app/toggleSideBarHide', true); - } else { - // 显示左侧联动菜单 - this.activeRoutes(key); - this.$store.dispatch('app/toggleSideBarHide', false); - } - }, - // 当前激活的路由 - activeRoutes(key) { - var routes = []; - if (this.childrenMenus && this.childrenMenus.length > 0) { - this.childrenMenus.map((item) => { - if (key == item.parentPath || (key == "index" && "" == item.path)) { - routes.push(item); - } - }); - } - if(routes.length > 0) { - this.$store.commit("SET_SIDEBAR_ROUTERS", routes); - } else { - this.$store.dispatch('app/toggleSideBarHide', true); - } - }, - ishttp(url) { - return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1 - } - }, -}; -</script> - -<style lang="scss"> -.topmenu-container.el-menu--horizontal > .el-menu-item { - float: left; - height: 50px !important; - line-height: 50px !important; - color: #999093 !important; - padding: 0 5px !important; - margin: 0 10px !important; -} - -.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-submenu.is-active .el-submenu__title { - border-bottom: 2px solid #{'var(--theme)'} !important; - color: #303133; -} - -/* submenu item */ -.topmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title { - float: left; - height: 50px !important; - line-height: 50px !important; - color: #999093 !important; - padding: 0 5px !important; - margin: 0 10px !important; -} -</style> diff --git a/ruoyi-ui/src/components/iFrame/index.vue b/ruoyi-ui/src/components/iFrame/index.vue deleted file mode 100644 index 426857f..0000000 --- a/ruoyi-ui/src/components/iFrame/index.vue +++ /dev/null @@ -1,36 +0,0 @@ -<template> - <div v-loading="loading" :style="'height:' + height"> - <iframe - :src="src" - frameborder="no" - style="width: 100%; height: 100%" - scrolling="auto" - /> - </div> -</template> -<script> -export default { - props: { - src: { - type: String, - required: true - }, - }, - data() { - return { - height: document.documentElement.clientHeight - 94.5 + "px;", - loading: true, - url: this.src - }; - }, - mounted: function () { - setTimeout(() => { - this.loading = false; - }, 300); - const that = this; - window.onresize = function temp() { - that.height = document.documentElement.clientHeight - 94.5 + "px;"; - }; - } -}; -</script> diff --git a/ruoyi-ui/src/directive/dialog/drag.js b/ruoyi-ui/src/directive/dialog/drag.js deleted file mode 100644 index 2e82346..0000000 --- a/ruoyi-ui/src/directive/dialog/drag.js +++ /dev/null @@ -1,64 +0,0 @@ -/** -* v-dialogDrag 弹窗拖拽 -* Copyright (c) 2019 ruoyi -*/ - -export default { - bind(el, binding, vnode, oldVnode) { - const value = binding.value - if (value == false) return - // 获取拖拽内容头部 - const dialogHeaderEl = el.querySelector('.el-dialog__header'); - const dragDom = el.querySelector('.el-dialog'); - dialogHeaderEl.style.cursor = 'move'; - // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null); - const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null); - dragDom.style.position = 'absolute'; - dragDom.style.marginTop = 0; - let width = dragDom.style.width; - if (width.includes('%')) { - width = +document.body.clientWidth * (+width.replace(/\%/g, '') / 100); - } else { - width = +width.replace(/\px/g, ''); - } - dragDom.style.left = `${(document.body.clientWidth - width) / 2}px`; - // 鼠标按下事件 - dialogHeaderEl.onmousedown = (e) => { - // 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离) - const disX = e.clientX - dialogHeaderEl.offsetLeft; - const disY = e.clientY - dialogHeaderEl.offsetTop; - - // 获取到的值带px 正则匹配替换 - let styL, styT; - - // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px - if (sty.left.includes('%')) { - styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100); - styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100); - } else { - styL = +sty.left.replace(/\px/g, ''); - styT = +sty.top.replace(/\px/g, ''); - }; - - // 鼠标拖拽事件 - document.onmousemove = function (e) { - // 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离) - const l = e.clientX - disX; - const t = e.clientY - disY; - - let finallyL = l + styL - let finallyT = t + styT - - // 移动当前元素 - dragDom.style.left = `${finallyL}px`; - dragDom.style.top = `${finallyT}px`; - - }; - - document.onmouseup = function (e) { - document.onmousemove = null; - document.onmouseup = null; - }; - } - } -}; \ No newline at end of file diff --git a/ruoyi-ui/src/directive/dialog/dragHeight.js b/ruoyi-ui/src/directive/dialog/dragHeight.js deleted file mode 100644 index 97e5305..0000000 --- a/ruoyi-ui/src/directive/dialog/dragHeight.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * v-dialogDragWidth 可拖动弹窗高度(右下角) - * Copyright (c) 2019 ruoyi - */ - -export default { - bind(el) { - const dragDom = el.querySelector('.el-dialog'); - const lineEl = document.createElement('div'); - lineEl.style = 'width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;'; - lineEl.addEventListener('mousedown', - function(e) { - // 鼠标按下,计算当前元素距离可视区的距离 - const disX = e.clientX - el.offsetLeft; - const disY = e.clientY - el.offsetTop; - // 当前宽度 高度 - const curWidth = dragDom.offsetWidth; - const curHeight = dragDom.offsetHeight; - document.onmousemove = function(e) { - e.preventDefault(); // 移动时禁用默认事件 - // 通过事件委托,计算移动的距离 - const xl = e.clientX - disX; - const yl = e.clientY - disY - dragDom.style.width = `${curWidth + xl}px`; - dragDom.style.height = `${curHeight + yl}px`; - }; - document.onmouseup = function(e) { - document.onmousemove = null; - document.onmouseup = null; - }; - }, false); - dragDom.appendChild(lineEl); - } -} diff --git a/ruoyi-ui/src/directive/dialog/dragWidth.js b/ruoyi-ui/src/directive/dialog/dragWidth.js deleted file mode 100644 index 2df0867..0000000 --- a/ruoyi-ui/src/directive/dialog/dragWidth.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * v-dialogDragWidth 可拖动弹窗宽度(右侧边) - * Copyright (c) 2019 ruoyi - */ - -export default { - bind(el) { - const dragDom = el.querySelector('.el-dialog'); - const lineEl = document.createElement('div'); - lineEl.style = 'width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;'; - lineEl.addEventListener('mousedown', - function (e) { - // 鼠标按下,计算当前元素距离可视区的距离 - const disX = e.clientX - el.offsetLeft; - // 当前宽度 - const curWidth = dragDom.offsetWidth; - document.onmousemove = function (e) { - e.preventDefault(); // 移动时禁用默认事件 - // 通过事件委托,计算移动的距离 - const l = e.clientX - disX; - dragDom.style.width = `${curWidth + l}px`; - }; - document.onmouseup = function (e) { - document.onmousemove = null; - document.onmouseup = null; - }; - }, false); - dragDom.appendChild(lineEl); - } -} diff --git a/ruoyi-ui/src/directive/index.js b/ruoyi-ui/src/directive/index.js deleted file mode 100644 index b9b07da..0000000 --- a/ruoyi-ui/src/directive/index.js +++ /dev/null @@ -1,23 +0,0 @@ -import hasRole from './permission/hasRole' -import hasPermi from './permission/hasPermi' -import dialogDrag from './dialog/drag' -import dialogDragWidth from './dialog/dragWidth' -import dialogDragHeight from './dialog/dragHeight' -import clipboard from './module/clipboard' - -const install = function(Vue) { - Vue.directive('hasRole', hasRole) - Vue.directive('hasPermi', hasPermi) - Vue.directive('clipboard', clipboard) - Vue.directive('dialogDrag', dialogDrag) - Vue.directive('dialogDragWidth', dialogDragWidth) - Vue.directive('dialogDragHeight', dialogDragHeight) -} - -if (window.Vue) { - window['hasRole'] = hasRole - window['hasPermi'] = hasPermi - Vue.use(install); // eslint-disable-line -} - -export default install diff --git a/ruoyi-ui/src/directive/module/clipboard.js b/ruoyi-ui/src/directive/module/clipboard.js deleted file mode 100644 index 635315a..0000000 --- a/ruoyi-ui/src/directive/module/clipboard.js +++ /dev/null @@ -1,54 +0,0 @@ -/** -* v-clipboard 文字复制剪贴 -* Copyright (c) 2021 ruoyi -*/ - -import Clipboard from 'clipboard' -export default { - bind(el, binding, vnode) { - switch (binding.arg) { - case 'success': - el._vClipBoard_success = binding.value; - break; - case 'error': - el._vClipBoard_error = binding.value; - break; - default: { - const clipboard = new Clipboard(el, { - text: () => binding.value, - action: () => binding.arg === 'cut' ? 'cut' : 'copy' - }); - clipboard.on('success', e => { - const callback = el._vClipBoard_success; - callback && callback(e); - }); - clipboard.on('error', e => { - const callback = el._vClipBoard_error; - callback && callback(e); - }); - el._vClipBoard = clipboard; - } - } - }, - update(el, binding) { - if (binding.arg === 'success') { - el._vClipBoard_success = binding.value; - } else if (binding.arg === 'error') { - el._vClipBoard_error = binding.value; - } else { - el._vClipBoard.text = function () { return binding.value; }; - el._vClipBoard.action = () => binding.arg === 'cut' ? 'cut' : 'copy'; - } - }, - unbind(el, binding) { - if (!el._vClipboard) return - if (binding.arg === 'success') { - delete el._vClipBoard_success; - } else if (binding.arg === 'error') { - delete el._vClipBoard_error; - } else { - el._vClipBoard.destroy(); - delete el._vClipBoard; - } - } -} diff --git a/ruoyi-ui/src/directive/permission/hasPermi.js b/ruoyi-ui/src/directive/permission/hasPermi.js deleted file mode 100644 index 7101e3e..0000000 --- a/ruoyi-ui/src/directive/permission/hasPermi.js +++ /dev/null @@ -1,28 +0,0 @@ - /** - * v-hasPermi 操作权限处理 - * Copyright (c) 2019 ruoyi - */ - -import store from '@/store' - -export default { - inserted(el, binding, vnode) { - const { value } = binding - const all_permission = "*:*:*"; - const permissions = store.getters && store.getters.permissions - - if (value && value instanceof Array && value.length > 0) { - const permissionFlag = value - - const hasPermissions = permissions.some(permission => { - return all_permission === permission || permissionFlag.includes(permission) - }) - - if (!hasPermissions) { - el.parentNode && el.parentNode.removeChild(el) - } - } else { - throw new Error(`请设置操作权限标签值`) - } - } -} diff --git a/ruoyi-ui/src/directive/permission/hasRole.js b/ruoyi-ui/src/directive/permission/hasRole.js deleted file mode 100644 index ad9d4d7..0000000 --- a/ruoyi-ui/src/directive/permission/hasRole.js +++ /dev/null @@ -1,28 +0,0 @@ - /** - * v-hasRole 角色权限处理 - * Copyright (c) 2019 ruoyi - */ - -import store from '@/store' - -export default { - inserted(el, binding, vnode) { - const { value } = binding - const super_admin = "admin"; - const roles = store.getters && store.getters.roles - - if (value && value instanceof Array && value.length > 0) { - const roleFlag = value - - const hasRole = roles.some(role => { - return super_admin === role || roleFlag.includes(role) - }) - - if (!hasRole) { - el.parentNode && el.parentNode.removeChild(el) - } - } else { - throw new Error(`请设置角色权限标签值"`) - } - } -} diff --git a/ruoyi-ui/src/layout/components/AppMain.vue b/ruoyi-ui/src/layout/components/AppMain.vue deleted file mode 100644 index a25c562..0000000 --- a/ruoyi-ui/src/layout/components/AppMain.vue +++ /dev/null @@ -1,75 +0,0 @@ -<template> - <section class="app-main"> - <transition name="fade-transform" mode="out-in"> - <keep-alive :include="cachedViews"> - <router-view v-if="!$route.meta.link" :key="key" /> - </keep-alive> - </transition> - <iframe-toggle /> - </section> -</template> - -<script> -import iframeToggle from "./IframeToggle/index" - -export default { - name: 'AppMain', - components: { iframeToggle }, - computed: { - cachedViews() { - return this.$store.state.tagsView.cachedViews - }, - key() { - return this.$route.path - } - } -} -</script> - -<style lang="scss" scoped> -.app-main { - /* 50= navbar 50 */ - min-height: calc(100vh - 50px); - width: 100%; - position: relative; - overflow: hidden; -} - -.fixed-header + .app-main { - padding-top: 50px; -} - -.hasTagsView { - .app-main { - /* 84 = navbar + tags-view = 50 + 34 */ - min-height: calc(100vh - 84px); - } - - .fixed-header + .app-main { - padding-top: 84px; - } -} -</style> - -<style lang="scss"> -// fix css style bug in open el-dialog -.el-popup-parent--hidden { - .fixed-header { - padding-right: 6px; - } -} - -::-webkit-scrollbar { - width: 6px; - height: 6px; -} - -::-webkit-scrollbar-track { - background-color: #f1f1f1; -} - -::-webkit-scrollbar-thumb { - background-color: #c0c0c0; - border-radius: 3px; -} -</style> diff --git a/ruoyi-ui/src/layout/components/IframeToggle/index.vue b/ruoyi-ui/src/layout/components/IframeToggle/index.vue deleted file mode 100644 index 39ad15b..0000000 --- a/ruoyi-ui/src/layout/components/IframeToggle/index.vue +++ /dev/null @@ -1,33 +0,0 @@ -<template> - <transition-group name="fade-transform" mode="out-in"> - <inner-link - v-for="(item, index) in iframeViews" - :key="item.path" - :iframeId="'iframe' + index" - v-show="$route.path === item.path" - :src="iframeUrl(item.meta.link, item.query)" - ></inner-link> - </transition-group> -</template> - -<script> -import InnerLink from "../InnerLink/index"; - -export default { - components: { InnerLink }, - computed: { - iframeViews() { - return this.$store.state.tagsView.iframeViews; - } - }, - methods: { - iframeUrl(url, query) { - if (Object.keys(query).length > 0) { - let params = Object.keys(query).map((key) => key + "=" + query[key]).join("&"); - return url + "?" + params; - } - return url; - } - } -} -</script> diff --git a/ruoyi-ui/src/layout/components/InnerLink/index.vue b/ruoyi-ui/src/layout/components/InnerLink/index.vue deleted file mode 100644 index badefc5..0000000 --- a/ruoyi-ui/src/layout/components/InnerLink/index.vue +++ /dev/null @@ -1,47 +0,0 @@ -<template> - <div :style="'height:' + height" v-loading="loading" element-loading-text="正在加载页面,请稍候!"> - <iframe - :id="iframeId" - style="width: 100%; height: 100%" - :src="src" - frameborder="no" - ></iframe> - </div> -</template> - -<script> -export default { - props: { - src: { - type: String, - default: "/" - }, - iframeId: { - type: String - } - }, - data() { - return { - loading: false, - height: document.documentElement.clientHeight - 94.5 + "px;" - }; - }, - mounted() { - var _this = this; - const iframeId = ("#" + this.iframeId).replace(/\//g, "\\/"); - const iframe = document.querySelector(iframeId); - // iframe页面loading控制 - if (iframe.attachEvent) { - this.loading = true; - iframe.attachEvent("onload", function () { - _this.loading = false; - }); - } else { - this.loading = true; - iframe.onload = function () { - _this.loading = false; - }; - } - } -}; -</script> diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue deleted file mode 100644 index 466cd98..0000000 --- a/ruoyi-ui/src/layout/components/Navbar.vue +++ /dev/null @@ -1,200 +0,0 @@ -<template> - <div class="navbar"> - <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> - - <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/> - <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/> - - <div class="right-menu"> - <template v-if="device!=='mobile'"> - <search id="header-search" class="right-menu-item" /> - - <el-tooltip content="源码地址" effect="dark" placement="bottom"> - <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" /> - </el-tooltip> - - <el-tooltip content="文档地址" effect="dark" placement="bottom"> - <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" /> - </el-tooltip> - - <screenfull id="screenfull" class="right-menu-item hover-effect" /> - - <el-tooltip content="布局大小" effect="dark" placement="bottom"> - <size-select id="size-select" class="right-menu-item hover-effect" /> - </el-tooltip> - - </template> - - <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"> - <div class="avatar-wrapper"> - <img :src="avatar" class="user-avatar"> - <i class="el-icon-caret-bottom" /> - </div> - <el-dropdown-menu slot="dropdown"> - <router-link to="/user/profile"> - <el-dropdown-item>个人中心</el-dropdown-item> - </router-link> - <el-dropdown-item @click.native="setting = true"> - <span>布局设置</span> - </el-dropdown-item> - <el-dropdown-item divided @click.native="logout"> - <span>退出登录</span> - </el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - </div> - </div> -</template> - -<script> -import { mapGetters } from 'vuex' -import Breadcrumb from '@/components/Breadcrumb' -import TopNav from '@/components/TopNav' -import Hamburger from '@/components/Hamburger' -import Screenfull from '@/components/Screenfull' -import SizeSelect from '@/components/SizeSelect' -import Search from '@/components/HeaderSearch' -import RuoYiGit from '@/components/RuoYi/Git' -import RuoYiDoc from '@/components/RuoYi/Doc' - -export default { - components: { - Breadcrumb, - TopNav, - Hamburger, - Screenfull, - SizeSelect, - Search, - RuoYiGit, - RuoYiDoc - }, - computed: { - ...mapGetters([ - 'sidebar', - 'avatar', - 'device' - ]), - setting: { - get() { - return this.$store.state.settings.showSettings - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'showSettings', - value: val - }) - } - }, - topNav: { - get() { - return this.$store.state.settings.topNav - } - } - }, - methods: { - toggleSideBar() { - this.$store.dispatch('app/toggleSideBar') - }, - async logout() { - this.$confirm('确定注销并退出系统吗?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(() => { - this.$store.dispatch('LogOut').then(() => { - location.href = '/index'; - }) - }).catch(() => {}); - } - } -} -</script> - -<style lang="scss" scoped> -.navbar { - height: 50px; - overflow: hidden; - position: relative; - background: #fff; - box-shadow: 0 1px 4px rgba(0,21,41,.08); - - .hamburger-container { - line-height: 46px; - height: 100%; - float: left; - cursor: pointer; - transition: background .3s; - -webkit-tap-highlight-color:transparent; - - &:hover { - background: rgba(0, 0, 0, .025) - } - } - - .breadcrumb-container { - float: left; - } - - .topmenu-container { - position: absolute; - left: 50px; - } - - .errLog-container { - display: inline-block; - vertical-align: top; - } - - .right-menu { - float: right; - height: 100%; - line-height: 50px; - - &:focus { - outline: none; - } - - .right-menu-item { - display: inline-block; - padding: 0 8px; - height: 100%; - font-size: 18px; - color: #5a5e66; - vertical-align: text-bottom; - - &.hover-effect { - cursor: pointer; - transition: background .3s; - - &:hover { - background: rgba(0, 0, 0, .025) - } - } - } - - .avatar-container { - margin-right: 30px; - - .avatar-wrapper { - margin-top: 5px; - position: relative; - - .user-avatar { - cursor: pointer; - width: 40px; - height: 40px; - border-radius: 10px; - } - - .el-icon-caret-bottom { - cursor: pointer; - position: absolute; - right: -20px; - top: 25px; - font-size: 12px; - } - } - } - } -} -</style> diff --git a/ruoyi-ui/src/layout/components/Settings/index.vue b/ruoyi-ui/src/layout/components/Settings/index.vue deleted file mode 100644 index bb3c9ce..0000000 --- a/ruoyi-ui/src/layout/components/Settings/index.vue +++ /dev/null @@ -1,260 +0,0 @@ -<template> - <el-drawer size="280px" :visible="visible" :with-header="false" :append-to-body="true" :show-close="false"> - <div class="drawer-container"> - <div> - <div class="setting-drawer-content"> - <div class="setting-drawer-title"> - <h3 class="drawer-title">主题风格设置</h3> - </div> - <div class="setting-drawer-block-checbox"> - <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-dark')"> - <img src="@/assets/images/dark.svg" alt="dark"> - <div v-if="sideTheme === 'theme-dark'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> - <i aria-label="图标: check" class="anticon anticon-check"> - <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class=""> - <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"/> - </svg> - </i> - </div> - </div> - <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-light')"> - <img src="@/assets/images/light.svg" alt="light"> - <div v-if="sideTheme === 'theme-light'" class="setting-drawer-block-checbox-selectIcon" style="display: block;"> - <i aria-label="图标: check" class="anticon anticon-check"> - <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme" aria-hidden="true" focusable="false" class=""> - <path d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"/> - </svg> - </i> - </div> - </div> - </div> - - <div class="drawer-item"> - <span>主题颜色</span> - <theme-picker style="float: right;height: 26px;margin: -3px 8px 0 0;" @change="themeChange" /> - </div> - </div> - - <el-divider/> - - <h3 class="drawer-title">系统布局配置</h3> - - <div class="drawer-item"> - <span>开启 TopNav</span> - <el-switch v-model="topNav" class="drawer-switch" /> - </div> - - <div class="drawer-item"> - <span>开启 Tags-Views</span> - <el-switch v-model="tagsView" class="drawer-switch" /> - </div> - - <div class="drawer-item"> - <span>固定 Header</span> - <el-switch v-model="fixedHeader" class="drawer-switch" /> - </div> - - <div class="drawer-item"> - <span>显示 Logo</span> - <el-switch v-model="sidebarLogo" class="drawer-switch" /> - </div> - - <div class="drawer-item"> - <span>动态标题</span> - <el-switch v-model="dynamicTitle" class="drawer-switch" /> - </div> - - <el-divider/> - - <el-button size="small" type="primary" plain icon="el-icon-document-add" @click="saveSetting">保存配置</el-button> - <el-button size="small" plain icon="el-icon-refresh" @click="resetSetting">重置配置</el-button> - </div> - </div> - </el-drawer> -</template> - -<script> -import ThemePicker from '@/components/ThemePicker' - -export default { - components: { ThemePicker }, - data() { - return { - theme: this.$store.state.settings.theme, - sideTheme: this.$store.state.settings.sideTheme - }; - }, - computed: { - visible: { - get() { - return this.$store.state.settings.showSettings - } - }, - fixedHeader: { - get() { - return this.$store.state.settings.fixedHeader - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'fixedHeader', - value: val - }) - } - }, - topNav: { - get() { - return this.$store.state.settings.topNav - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'topNav', - value: val - }) - if (!val) { - this.$store.dispatch('app/toggleSideBarHide', false); - this.$store.commit("SET_SIDEBAR_ROUTERS", this.$store.state.permission.defaultRoutes); - } - } - }, - tagsView: { - get() { - return this.$store.state.settings.tagsView - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'tagsView', - value: val - }) - } - }, - sidebarLogo: { - get() { - return this.$store.state.settings.sidebarLogo - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'sidebarLogo', - value: val - }) - } - }, - dynamicTitle: { - get() { - return this.$store.state.settings.dynamicTitle - }, - set(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'dynamicTitle', - value: val - }) - } - }, - }, - methods: { - themeChange(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'theme', - value: val - }) - this.theme = val; - }, - handleTheme(val) { - this.$store.dispatch('settings/changeSetting', { - key: 'sideTheme', - value: val - }) - this.sideTheme = val; - }, - saveSetting() { - this.$modal.loading("正在保存到本地,请稍候..."); - this.$cache.local.set( - "layout-setting", - `{ - "topNav":${this.topNav}, - "tagsView":${this.tagsView}, - "fixedHeader":${this.fixedHeader}, - "sidebarLogo":${this.sidebarLogo}, - "dynamicTitle":${this.dynamicTitle}, - "sideTheme":"${this.sideTheme}", - "theme":"${this.theme}" - }` - ); - setTimeout(this.$modal.closeLoading(), 1000) - }, - resetSetting() { - this.$modal.loading("正在清除设置缓存并刷新,请稍候..."); - this.$cache.local.remove("layout-setting") - setTimeout("window.location.reload()", 1000) - } - } -} -</script> - -<style lang="scss" scoped> - .setting-drawer-content { - .setting-drawer-title { - margin-bottom: 12px; - color: rgba(0, 0, 0, .85); - font-size: 14px; - line-height: 22px; - font-weight: bold; - } - - .setting-drawer-block-checbox { - display: flex; - justify-content: flex-start; - align-items: center; - margin-top: 10px; - margin-bottom: 20px; - - .setting-drawer-block-checbox-item { - position: relative; - margin-right: 16px; - border-radius: 2px; - cursor: pointer; - - img { - width: 48px; - height: 48px; - } - - .setting-drawer-block-checbox-selectIcon { - position: absolute; - top: 0; - right: 0; - width: 100%; - height: 100%; - padding-top: 15px; - padding-left: 24px; - color: #1890ff; - font-weight: 700; - font-size: 14px; - } - } - } - } - - .drawer-container { - padding: 20px; - font-size: 14px; - line-height: 1.5; - word-wrap: break-word; - - .drawer-title { - margin-bottom: 12px; - color: rgba(0, 0, 0, .85); - font-size: 14px; - line-height: 22px; - } - - .drawer-item { - color: rgba(0, 0, 0, .65); - font-size: 14px; - padding: 12px 0; - } - - .drawer-switch { - float: right - } - } -</style> diff --git a/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js b/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js deleted file mode 100644 index 6823726..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js +++ /dev/null @@ -1,25 +0,0 @@ -export default { - computed: { - device() { - return this.$store.state.app.device - } - }, - mounted() { - // In order to fix the click on menu on the ios device will trigger the mouseleave bug - this.fixBugIniOS() - }, - methods: { - fixBugIniOS() { - const $subMenu = this.$refs.subMenu - if ($subMenu) { - const handleMouseleave = $subMenu.handleMouseleave - $subMenu.handleMouseleave = (e) => { - if (this.device === 'mobile') { - return - } - handleMouseleave(e) - } - } - } - } -} diff --git a/ruoyi-ui/src/layout/components/Sidebar/Item.vue b/ruoyi-ui/src/layout/components/Sidebar/Item.vue deleted file mode 100644 index be3285d..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/Item.vue +++ /dev/null @@ -1,33 +0,0 @@ -<script> -export default { - name: 'MenuItem', - functional: true, - props: { - icon: { - type: String, - default: '' - }, - title: { - type: String, - default: '' - } - }, - render(h, context) { - const { icon, title } = context.props - const vnodes = [] - - if (icon) { - vnodes.push(<svg-icon icon-class={icon}/>) - } - - if (title) { - if (title.length > 5) { - vnodes.push(<span slot='title' title={(title)}>{(title)}</span>) - } else { - vnodes.push(<span slot='title'>{(title)}</span>) - } - } - return vnodes - } -} -</script> diff --git a/ruoyi-ui/src/layout/components/Sidebar/Link.vue b/ruoyi-ui/src/layout/components/Sidebar/Link.vue deleted file mode 100644 index 8b0bc93..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/Link.vue +++ /dev/null @@ -1,43 +0,0 @@ -<template> - <component :is="type" v-bind="linkProps(to)"> - <slot /> - </component> -</template> - -<script> -import { isExternal } from '@/utils/validate' - -export default { - props: { - to: { - type: [String, Object], - required: true - } - }, - computed: { - isExternal() { - return isExternal(this.to) - }, - type() { - if (this.isExternal) { - return 'a' - } - return 'router-link' - } - }, - methods: { - linkProps(to) { - if (this.isExternal) { - return { - href: to, - target: '_blank', - rel: 'noopener' - } - } - return { - to: to - } - } - } -} -</script> diff --git a/ruoyi-ui/src/layout/components/Sidebar/Logo.vue b/ruoyi-ui/src/layout/components/Sidebar/Logo.vue deleted file mode 100644 index 2774cc8..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/Logo.vue +++ /dev/null @@ -1,93 +0,0 @@ -<template> - <div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> - <transition name="sidebarLogoFade"> - <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> - <img v-if="logo" :src="logo" class="sidebar-logo" /> - <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> - </router-link> - <router-link v-else key="expand" class="sidebar-logo-link" to="/"> - <img v-if="logo" :src="logo" class="sidebar-logo" /> - <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> - </router-link> - </transition> - </div> -</template> - -<script> -import logoImg from '@/assets/logo/logo.png' -import variables from '@/assets/styles/variables.scss' - -export default { - name: 'SidebarLogo', - props: { - collapse: { - type: Boolean, - required: true - } - }, - computed: { - variables() { - return variables; - }, - sideTheme() { - return this.$store.state.settings.sideTheme - } - }, - data() { - return { - title: process.env.VUE_APP_TITLE, - logo: logoImg - } - } -} -</script> - -<style lang="scss" scoped> -.sidebarLogoFade-enter-active { - transition: opacity 1.5s; -} - -.sidebarLogoFade-enter, -.sidebarLogoFade-leave-to { - opacity: 0; -} - -.sidebar-logo-container { - position: relative; - width: 100%; - height: 50px; - line-height: 50px; - background: #2b2f3a; - text-align: center; - overflow: hidden; - - & .sidebar-logo-link { - height: 100%; - width: 100%; - - & .sidebar-logo { - width: 32px; - height: 32px; - vertical-align: middle; - margin-right: 12px; - } - - & .sidebar-title { - display: inline-block; - margin: 0; - color: #fff; - font-weight: 600; - line-height: 50px; - font-size: 14px; - font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; - vertical-align: middle; - } - } - - &.collapse { - .sidebar-logo { - margin-right: 0px; - } - } -} -</style> diff --git a/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue b/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue deleted file mode 100644 index 82ba407..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue +++ /dev/null @@ -1,100 +0,0 @@ -<template> - <div v-if="!item.hidden"> - <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow"> - <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)"> - <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}"> - <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> - </el-menu-item> - </app-link> - </template> - - <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> - <template slot="title"> - <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> - </template> - <sidebar-item - v-for="(child, index) in item.children" - :key="child.path + index" - :is-nest="true" - :item="child" - :base-path="resolvePath(child.path)" - class="nest-menu" - /> - </el-submenu> - </div> -</template> - -<script> -import path from 'path' -import { isExternal } from '@/utils/validate' -import Item from './Item' -import AppLink from './Link' -import FixiOSBug from './FixiOSBug' - -export default { - name: 'SidebarItem', - components: { Item, AppLink }, - mixins: [FixiOSBug], - props: { - // route object - item: { - type: Object, - required: true - }, - isNest: { - type: Boolean, - default: false - }, - basePath: { - type: String, - default: '' - } - }, - data() { - this.onlyOneChild = null - return {} - }, - methods: { - hasOneShowingChild(children = [], parent) { - if (!children) { - children = []; - } - const showingChildren = children.filter(item => { - if (item.hidden) { - return false - } else { - // Temp set(will be used if only has one showing child) - this.onlyOneChild = item - return true - } - }) - - // When there is only one child router, the child router is displayed by default - if (showingChildren.length === 1) { - return true - } - - // Show parent if there are no child router to display - if (showingChildren.length === 0) { - this.onlyOneChild = { ... parent, path: '', noShowingChildren: true } - return true - } - - return false - }, - resolvePath(routePath, routeQuery) { - if (isExternal(routePath)) { - return routePath - } - if (isExternal(this.basePath)) { - return this.basePath - } - if (routeQuery) { - let query = JSON.parse(routeQuery); - return { path: path.resolve(this.basePath, routePath), query: query } - } - return path.resolve(this.basePath, routePath) - } - } -} -</script> diff --git a/ruoyi-ui/src/layout/components/Sidebar/index.vue b/ruoyi-ui/src/layout/components/Sidebar/index.vue deleted file mode 100644 index 51d0839..0000000 --- a/ruoyi-ui/src/layout/components/Sidebar/index.vue +++ /dev/null @@ -1,57 +0,0 @@ -<template> - <div :class="{'has-logo':showLogo}" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> - <logo v-if="showLogo" :collapse="isCollapse" /> - <el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper"> - <el-menu - :default-active="activeMenu" - :collapse="isCollapse" - :background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground" - :text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor" - :unique-opened="true" - :active-text-color="settings.theme" - :collapse-transition="false" - mode="vertical" - > - <sidebar-item - v-for="(route, index) in sidebarRouters" - :key="route.path + index" - :item="route" - :base-path="route.path" - /> - </el-menu> - </el-scrollbar> - </div> -</template> - -<script> -import { mapGetters, mapState } from "vuex"; -import Logo from "./Logo"; -import SidebarItem from "./SidebarItem"; -import variables from "@/assets/styles/variables.scss"; - -export default { - components: { SidebarItem, Logo }, - computed: { - ...mapState(["settings"]), - ...mapGetters(["sidebarRouters", "sidebar"]), - activeMenu() { - const route = this.$route; - const { meta, path } = route; - // if set path, the sidebar will highlight the path you set - if (meta.activeMenu) { - return meta.activeMenu; - } - return path; - }, - showLogo() { - return this.$store.state.settings.sidebarLogo; - }, - variables() { - return variables; - }, - isCollapse() { - return !this.sidebar.opened; - } - } -}; -</script> diff --git a/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue b/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue deleted file mode 100644 index bb753a1..0000000 --- a/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue +++ /dev/null @@ -1,94 +0,0 @@ -<template> - <el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll"> - <slot /> - </el-scrollbar> -</template> - -<script> -const tagAndTagSpacing = 4 // tagAndTagSpacing - -export default { - name: 'ScrollPane', - data() { - return { - left: 0 - } - }, - computed: { - scrollWrapper() { - return this.$refs.scrollContainer.$refs.wrap - } - }, - mounted() { - this.scrollWrapper.addEventListener('scroll', this.emitScroll, true) - }, - beforeDestroy() { - this.scrollWrapper.removeEventListener('scroll', this.emitScroll) - }, - methods: { - handleScroll(e) { - const eventDelta = e.wheelDelta || -e.deltaY * 40 - const $scrollWrapper = this.scrollWrapper - $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4 - }, - emitScroll() { - this.$emit('scroll') - }, - moveToTarget(currentTag) { - const $container = this.$refs.scrollContainer.$el - const $containerWidth = $container.offsetWidth - const $scrollWrapper = this.scrollWrapper - const tagList = this.$parent.$refs.tag - - let firstTag = null - let lastTag = null - - // find first tag and last tag - if (tagList.length > 0) { - firstTag = tagList[0] - lastTag = tagList[tagList.length - 1] - } - - if (firstTag === currentTag) { - $scrollWrapper.scrollLeft = 0 - } else if (lastTag === currentTag) { - $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth - } else { - // find preTag and nextTag - const currentIndex = tagList.findIndex(item => item === currentTag) - const prevTag = tagList[currentIndex - 1] - const nextTag = tagList[currentIndex + 1] - - // the tag's offsetLeft after of nextTag - const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing - - // the tag's offsetLeft before of prevTag - const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing - - if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) { - $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth - } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) { - $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft - } - } - } - } -} -</script> - -<style lang="scss" scoped> -.scroll-container { - white-space: nowrap; - position: relative; - overflow: hidden; - width: 100%; - ::v-deep { - .el-scrollbar__bar { - bottom: 0px; - } - .el-scrollbar__wrap { - height: 49px; - } - } -} -</style> diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue deleted file mode 100644 index 96585a5..0000000 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ /dev/null @@ -1,332 +0,0 @@ -<template> - <div id="tags-view-container" class="tags-view-container"> - <scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll"> - <router-link - v-for="tag in visitedViews" - ref="tag" - :key="tag.path" - :class="isActive(tag)?'active':''" - :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" - tag="span" - class="tags-view-item" - :style="activeStyle(tag)" - @click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" - @contextmenu.prevent.native="openMenu(tag,$event)" - > - {{ tag.title }} - <span v-if="!isAffix(tag)" class="el-icon-close" @click.prevent.stop="closeSelectedTag(tag)" /> - </router-link> - </scroll-pane> - <ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu"> - <li @click="refreshSelectedTag(selectedTag)"><i class="el-icon-refresh-right"></i> 刷新页面</li> - <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)"><i class="el-icon-close"></i> 关闭当前</li> - <li @click="closeOthersTags"><i class="el-icon-circle-close"></i> 关闭其他</li> - <li v-if="!isFirstView()" @click="closeLeftTags"><i class="el-icon-back"></i> 关闭左侧</li> - <li v-if="!isLastView()" @click="closeRightTags"><i class="el-icon-right"></i> 关闭右侧</li> - <li @click="closeAllTags(selectedTag)"><i class="el-icon-circle-close"></i> 全部关闭</li> - </ul> - </div> -</template> - -<script> -import ScrollPane from './ScrollPane' -import path from 'path' - -export default { - components: { ScrollPane }, - data() { - return { - visible: false, - top: 0, - left: 0, - selectedTag: {}, - affixTags: [] - } - }, - computed: { - visitedViews() { - return this.$store.state.tagsView.visitedViews - }, - routes() { - return this.$store.state.permission.routes - }, - theme() { - return this.$store.state.settings.theme; - } - }, - watch: { - $route() { - this.addTags() - this.moveToCurrentTag() - }, - visible(value) { - if (value) { - document.body.addEventListener('click', this.closeMenu) - } else { - document.body.removeEventListener('click', this.closeMenu) - } - } - }, - mounted() { - this.initTags() - this.addTags() - }, - methods: { - isActive(route) { - return route.path === this.$route.path - }, - activeStyle(tag) { - if (!this.isActive(tag)) return {}; - return { - "background-color": this.theme, - "border-color": this.theme - }; - }, - isAffix(tag) { - return tag.meta && tag.meta.affix - }, - isFirstView() { - try { - return this.selectedTag.fullPath === '/index' || this.selectedTag.fullPath === this.visitedViews[1].fullPath - } catch (err) { - return false - } - }, - isLastView() { - try { - return this.selectedTag.fullPath === this.visitedViews[this.visitedViews.length - 1].fullPath - } catch (err) { - return false - } - }, - filterAffixTags(routes, basePath = '/') { - let tags = [] - routes.forEach(route => { - if (route.meta && route.meta.affix) { - const tagPath = path.resolve(basePath, route.path) - tags.push({ - fullPath: tagPath, - path: tagPath, - name: route.name, - meta: { ...route.meta } - }) - } - if (route.children) { - const tempTags = this.filterAffixTags(route.children, route.path) - if (tempTags.length >= 1) { - tags = [...tags, ...tempTags] - } - } - }) - return tags - }, - initTags() { - const affixTags = this.affixTags = this.filterAffixTags(this.routes) - for (const tag of affixTags) { - // Must have tag name - if (tag.name) { - this.$store.dispatch('tagsView/addVisitedView', tag) - } - } - }, - addTags() { - const { name } = this.$route - if (name) { - this.$store.dispatch('tagsView/addView', this.$route) - if (this.$route.meta.link) { - this.$store.dispatch('tagsView/addIframeView', this.$route) - } - } - return false - }, - moveToCurrentTag() { - const tags = this.$refs.tag - this.$nextTick(() => { - for (const tag of tags) { - if (tag.to.path === this.$route.path) { - this.$refs.scrollPane.moveToTarget(tag) - // when query is different then update - if (tag.to.fullPath !== this.$route.fullPath) { - this.$store.dispatch('tagsView/updateVisitedView', this.$route) - } - break - } - } - }) - }, - refreshSelectedTag(view) { - this.$tab.refreshPage(view); - if (this.$route.meta.link) { - this.$store.dispatch('tagsView/delIframeView', this.$route) - } - }, - closeSelectedTag(view) { - this.$tab.closePage(view).then(({ visitedViews }) => { - if (this.isActive(view)) { - this.toLastView(visitedViews, view) - } - }) - }, - closeRightTags() { - this.$tab.closeRightPage(this.selectedTag).then(visitedViews => { - if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { - this.toLastView(visitedViews) - } - }) - }, - closeLeftTags() { - this.$tab.closeLeftPage(this.selectedTag).then(visitedViews => { - if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { - this.toLastView(visitedViews) - } - }) - }, - closeOthersTags() { - this.$router.push(this.selectedTag.fullPath).catch(()=>{}); - this.$tab.closeOtherPage(this.selectedTag).then(() => { - this.moveToCurrentTag() - }) - }, - closeAllTags(view) { - this.$tab.closeAllPage().then(({ visitedViews }) => { - if (this.affixTags.some(tag => tag.path === this.$route.path)) { - return - } - this.toLastView(visitedViews, view) - }) - }, - toLastView(visitedViews, view) { - const latestView = visitedViews.slice(-1)[0] - if (latestView) { - this.$router.push(latestView.fullPath) - } else { - // now the default is to redirect to the home page if there is no tags-view, - // you can adjust it according to your needs. - if (view.name === 'Dashboard') { - // to reload home page - this.$router.replace({ path: '/redirect' + view.fullPath }) - } else { - this.$router.push('/') - } - } - }, - openMenu(tag, e) { - const menuMinWidth = 105 - const offsetLeft = this.$el.getBoundingClientRect().left // container margin left - const offsetWidth = this.$el.offsetWidth // container width - const maxLeft = offsetWidth - menuMinWidth // left boundary - const left = e.clientX - offsetLeft + 15 // 15: margin right - - if (left > maxLeft) { - this.left = maxLeft - } else { - this.left = left - } - - this.top = e.clientY - this.visible = true - this.selectedTag = tag - }, - closeMenu() { - this.visible = false - }, - handleScroll() { - this.closeMenu() - } - } -} -</script> - -<style lang="scss" scoped> -.tags-view-container { - height: 34px; - width: 100%; - background: #fff; - border-bottom: 1px solid #d8dce5; - box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); - .tags-view-wrapper { - .tags-view-item { - display: inline-block; - position: relative; - cursor: pointer; - height: 26px; - line-height: 26px; - border: 1px solid #d8dce5; - color: #495060; - background: #fff; - padding: 0 8px; - font-size: 12px; - margin-left: 5px; - margin-top: 4px; - &:first-of-type { - margin-left: 15px; - } - &:last-of-type { - margin-right: 15px; - } - &.active { - background-color: #42b983; - color: #fff; - border-color: #42b983; - &::before { - content: ''; - background: #fff; - display: inline-block; - width: 8px; - height: 8px; - border-radius: 50%; - position: relative; - margin-right: 2px; - } - } - } - } - .contextmenu { - margin: 0; - background: #fff; - z-index: 3000; - position: absolute; - list-style-type: none; - padding: 5px 0; - border-radius: 4px; - font-size: 12px; - font-weight: 400; - color: #333; - box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3); - li { - margin: 0; - padding: 7px 16px; - cursor: pointer; - &:hover { - background: #eee; - } - } - } -} -</style> - -<style lang="scss"> -//reset element css of el-icon-close -.tags-view-wrapper { - .tags-view-item { - .el-icon-close { - width: 16px; - height: 16px; - vertical-align: 2px; - border-radius: 50%; - text-align: center; - transition: all .3s cubic-bezier(.645, .045, .355, 1); - transform-origin: 100% 50%; - &:before { - transform: scale(.6); - display: inline-block; - vertical-align: -3px; - } - &:hover { - background-color: #b4bccc; - color: #fff; - } - } - } -} -</style> diff --git a/ruoyi-ui/src/layout/components/index.js b/ruoyi-ui/src/layout/components/index.js deleted file mode 100644 index 104bd3a..0000000 --- a/ruoyi-ui/src/layout/components/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export { default as AppMain } from './AppMain' -export { default as Navbar } from './Navbar' -export { default as Settings } from './Settings' -export { default as Sidebar } from './Sidebar/index.vue' -export { default as TagsView } from './TagsView/index.vue' diff --git a/ruoyi-ui/src/layout/index.vue b/ruoyi-ui/src/layout/index.vue deleted file mode 100644 index dba4393..0000000 --- a/ruoyi-ui/src/layout/index.vue +++ /dev/null @@ -1,111 +0,0 @@ -<template> - <div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}"> - <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/> - <sidebar v-if="!sidebar.hide" class="sidebar-container"/> - <div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide}" class="main-container"> - <div :class="{'fixed-header':fixedHeader}"> - <navbar/> - <tags-view v-if="needTagsView"/> - </div> - <app-main/> - <right-panel> - <settings/> - </right-panel> - </div> - </div> -</template> - -<script> -import RightPanel from '@/components/RightPanel' -import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components' -import ResizeMixin from './mixin/ResizeHandler' -import { mapState } from 'vuex' -import variables from '@/assets/styles/variables.scss' - -export default { - name: 'Layout', - components: { - AppMain, - Navbar, - RightPanel, - Settings, - Sidebar, - TagsView - }, - mixins: [ResizeMixin], - computed: { - ...mapState({ - theme: state => state.settings.theme, - sideTheme: state => state.settings.sideTheme, - sidebar: state => state.app.sidebar, - device: state => state.app.device, - needTagsView: state => state.settings.tagsView, - fixedHeader: state => state.settings.fixedHeader - }), - classObj() { - return { - hideSidebar: !this.sidebar.opened, - openSidebar: this.sidebar.opened, - withoutAnimation: this.sidebar.withoutAnimation, - mobile: this.device === 'mobile' - } - }, - variables() { - return variables; - } - }, - methods: { - handleClickOutside() { - this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) - } - } -} -</script> - -<style lang="scss" scoped> - @import "~@/assets/styles/mixin.scss"; - @import "~@/assets/styles/variables.scss"; - - .app-wrapper { - @include clearfix; - position: relative; - height: 100%; - width: 100%; - - &.mobile.openSidebar { - position: fixed; - top: 0; - } - } - - .drawer-bg { - background: #000; - opacity: 0.3; - width: 100%; - top: 0; - height: 100%; - position: absolute; - z-index: 999; - } - - .fixed-header { - position: fixed; - top: 0; - right: 0; - z-index: 9; - width: calc(100% - #{$base-sidebar-width}); - transition: width 0.28s; - } - - .hideSidebar .fixed-header { - width: calc(100% - 54px); - } - - .sidebarHide .fixed-header { - width: 100%; - } - - .mobile .fixed-header { - width: 100%; - } -</style> diff --git a/ruoyi-ui/src/layout/mixin/ResizeHandler.js b/ruoyi-ui/src/layout/mixin/ResizeHandler.js deleted file mode 100644 index e8d0df8..0000000 --- a/ruoyi-ui/src/layout/mixin/ResizeHandler.js +++ /dev/null @@ -1,45 +0,0 @@ -import store from '@/store' - -const { body } = document -const WIDTH = 992 // refer to Bootstrap's responsive design - -export default { - watch: { - $route(route) { - if (this.device === 'mobile' && this.sidebar.opened) { - store.dispatch('app/closeSideBar', { withoutAnimation: false }) - } - } - }, - beforeMount() { - window.addEventListener('resize', this.$_resizeHandler) - }, - beforeDestroy() { - window.removeEventListener('resize', this.$_resizeHandler) - }, - mounted() { - const isMobile = this.$_isMobile() - if (isMobile) { - store.dispatch('app/toggleDevice', 'mobile') - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - }, - methods: { - // use $_ for mixins properties - // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential - $_isMobile() { - const rect = body.getBoundingClientRect() - return rect.width - 1 < WIDTH - }, - $_resizeHandler() { - if (!document.hidden) { - const isMobile = this.$_isMobile() - store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') - - if (isMobile) { - store.dispatch('app/closeSideBar', { withoutAnimation: true }) - } - } - } - } -} diff --git a/ruoyi-ui/src/main.js b/ruoyi-ui/src/main.js deleted file mode 100644 index 13c6cf2..0000000 --- a/ruoyi-ui/src/main.js +++ /dev/null @@ -1,86 +0,0 @@ -import Vue from 'vue' - -import Cookies from 'js-cookie' - -import Element from 'element-ui' -import './assets/styles/element-variables.scss' - -import '@/assets/styles/index.scss' // global css -import '@/assets/styles/ruoyi.scss' // ruoyi css -import App from './App' -import store from './store' -import router from './router' -import directive from './directive' // directive -import plugins from './plugins' // plugins -import { download } from '@/utils/request' - -import './assets/icons' // icon -import './permission' // permission control -import { getDicts } from "@/api/system/dict/data"; -import { getConfigKey } from "@/api/system/config"; -import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"; -// 分页组件 -import Pagination from "@/components/Pagination"; -// 自定义表格工具组件 -import RightToolbar from "@/components/RightToolbar" -// 富文本组件 -import Editor from "@/components/Editor" -// 文件上传组件 -import FileUpload from "@/components/FileUpload" -// 图片上传组件 -import ImageUpload from "@/components/ImageUpload" -// 图片预览组件 -import ImagePreview from "@/components/ImagePreview" -// 字典标签组件 -import DictTag from '@/components/DictTag' -// 头部标签组件 -import VueMeta from 'vue-meta' -// 字典数据组件 -import DictData from '@/components/DictData' - -// 全局方法挂载 -Vue.prototype.getDicts = getDicts -Vue.prototype.getConfigKey = getConfigKey -Vue.prototype.parseTime = parseTime -Vue.prototype.resetForm = resetForm -Vue.prototype.addDateRange = addDateRange -Vue.prototype.selectDictLabel = selectDictLabel -Vue.prototype.selectDictLabels = selectDictLabels -Vue.prototype.download = download -Vue.prototype.handleTree = handleTree - -// 全局组件挂载 -Vue.component('DictTag', DictTag) -Vue.component('Pagination', Pagination) -Vue.component('RightToolbar', RightToolbar) -Vue.component('Editor', Editor) -Vue.component('FileUpload', FileUpload) -Vue.component('ImageUpload', ImageUpload) -Vue.component('ImagePreview', ImagePreview) - -Vue.use(directive) -Vue.use(plugins) -Vue.use(VueMeta) -DictData.install() - -/** - * If you don't want to use mock-server - * you want to use MockJs for mock api - * you can execute: mockXHR() - * - * Currently MockJs will be used in the production environment, - * please remove it before going online! ! ! - */ - -Vue.use(Element, { - size: Cookies.get('size') || 'medium' // set element-ui default size -}) - -Vue.config.productionTip = false - -new Vue({ - el: '#app', - router, - store, - render: h => h(App) -}) diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js deleted file mode 100644 index c568979..0000000 --- a/ruoyi-ui/src/permission.js +++ /dev/null @@ -1,58 +0,0 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' -import 'nprogress/nprogress.css' -import { getToken } from '@/utils/auth' -import { isRelogin } from '@/utils/request' - -NProgress.configure({ showSpinner: false }) - -const whiteList = ['/login', '/register'] - -router.beforeEach((to, from, next) => { - NProgress.start() - if (getToken()) { - to.meta.title && store.dispatch('settings/setTitle', to.meta.title) - /* has token*/ - if (to.path === '/login') { - next({ path: '/' }) - NProgress.done() - } else if (whiteList.indexOf(to.path) !== -1) { - next() - } else { - if (store.getters.roles.length === 0) { - isRelogin.show = true - // 判断当前用户是否已拉取完user_info信息 - store.dispatch('GetInfo').then(() => { - isRelogin.show = false - store.dispatch('GenerateRoutes').then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - router.addRoutes(accessRoutes) // 动态添加可访问路由表 - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 - }) - }).catch(err => { - store.dispatch('LogOut').then(() => { - Message.error(err) - next({ path: '/' }) - }) - }) - } else { - next() - } - } - } else { - // 没有token - if (whiteList.indexOf(to.path) !== -1) { - // 在免登录白名单,直接进入 - next() - } else { - next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页 - NProgress.done() - } - } -}) - -router.afterEach(() => { - NProgress.done() -}) diff --git a/ruoyi-ui/src/plugins/auth.js b/ruoyi-ui/src/plugins/auth.js deleted file mode 100644 index 6c6bc24..0000000 --- a/ruoyi-ui/src/plugins/auth.js +++ /dev/null @@ -1,60 +0,0 @@ -import store from '@/store' - -function authPermission(permission) { - const all_permission = "*:*:*"; - const permissions = store.getters && store.getters.permissions - if (permission && permission.length > 0) { - return permissions.some(v => { - return all_permission === v || v === permission - }) - } else { - return false - } -} - -function authRole(role) { - const super_admin = "admin"; - const roles = store.getters && store.getters.roles - if (role && role.length > 0) { - return roles.some(v => { - return super_admin === v || v === role - }) - } else { - return false - } -} - -export default { - // 验证用户是否具备某权限 - hasPermi(permission) { - return authPermission(permission); - }, - // 验证用户是否含有指定权限,只需包含其中一个 - hasPermiOr(permissions) { - return permissions.some(item => { - return authPermission(item) - }) - }, - // 验证用户是否含有指定权限,必须全部拥有 - hasPermiAnd(permissions) { - return permissions.every(item => { - return authPermission(item) - }) - }, - // 验证用户是否具备某角色 - hasRole(role) { - return authRole(role); - }, - // 验证用户是否含有指定角色,只需包含其中一个 - hasRoleOr(roles) { - return roles.some(item => { - return authRole(item) - }) - }, - // 验证用户是否含有指定角色,必须全部拥有 - hasRoleAnd(roles) { - return roles.every(item => { - return authRole(item) - }) - } -} diff --git a/ruoyi-ui/src/plugins/cache.js b/ruoyi-ui/src/plugins/cache.js deleted file mode 100644 index 6b5c00b..0000000 --- a/ruoyi-ui/src/plugins/cache.js +++ /dev/null @@ -1,77 +0,0 @@ -const sessionCache = { - set (key, value) { - if (!sessionStorage) { - return - } - if (key != null && value != null) { - sessionStorage.setItem(key, value) - } - }, - get (key) { - if (!sessionStorage) { - return null - } - if (key == null) { - return null - } - return sessionStorage.getItem(key) - }, - setJSON (key, jsonValue) { - if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) - } - }, - getJSON (key) { - const value = this.get(key) - if (value != null) { - return JSON.parse(value) - } - }, - remove (key) { - sessionStorage.removeItem(key); - } -} -const localCache = { - set (key, value) { - if (!localStorage) { - return - } - if (key != null && value != null) { - localStorage.setItem(key, value) - } - }, - get (key) { - if (!localStorage) { - return null - } - if (key == null) { - return null - } - return localStorage.getItem(key) - }, - setJSON (key, jsonValue) { - if (jsonValue != null) { - this.set(key, JSON.stringify(jsonValue)) - } - }, - getJSON (key) { - const value = this.get(key) - if (value != null) { - return JSON.parse(value) - } - }, - remove (key) { - localStorage.removeItem(key); - } -} - -export default { - /** - * 会话级缓存 - */ - session: sessionCache, - /** - * 本地缓存 - */ - local: localCache -} diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js deleted file mode 100644 index 42acd00..0000000 --- a/ruoyi-ui/src/plugins/download.js +++ /dev/null @@ -1,79 +0,0 @@ -import axios from 'axios' -import {Loading, Message} from 'element-ui' -import { saveAs } from 'file-saver' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' -import { blobValidate } from "@/utils/ruoyi"; - -const baseURL = process.env.VUE_APP_BASE_API -let downloadLoadingInstance; - -export default { - name(name, isDelete = true) { - var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - resource(resource) { - var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource); - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) - } else { - this.printErrMsg(res.data); - } - }) - }, - zip(url, name) { - var url = baseURL + url - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) - axios({ - method: 'get', - url: url, - responseType: 'blob', - headers: { 'Authorization': 'Bearer ' + getToken() } - }).then((res) => { - const isBlob = blobValidate(res.data); - if (isBlob) { - const blob = new Blob([res.data], { type: 'application/zip' }) - this.saveAs(blob, name) - } else { - this.printErrMsg(res.data); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) - }, - saveAs(text, name, opts) { - saveAs(text, name, opts); - }, - async printErrMsg(data) { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } -} - diff --git a/ruoyi-ui/src/plugins/index.js b/ruoyi-ui/src/plugins/index.js deleted file mode 100644 index d000f2d..0000000 --- a/ruoyi-ui/src/plugins/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import tab from './tab' -import auth from './auth' -import cache from './cache' -import modal from './modal' -import download from './download' - -export default { - install(Vue) { - // 页签操作 - Vue.prototype.$tab = tab - // 认证对象 - Vue.prototype.$auth = auth - // 缓存对象 - Vue.prototype.$cache = cache - // 模态框对象 - Vue.prototype.$modal = modal - // 下载文件 - Vue.prototype.$download = download - } -} diff --git a/ruoyi-ui/src/plugins/modal.js b/ruoyi-ui/src/plugins/modal.js deleted file mode 100644 index b37ca14..0000000 --- a/ruoyi-ui/src/plugins/modal.js +++ /dev/null @@ -1,83 +0,0 @@ -import { Message, MessageBox, Notification, Loading } from 'element-ui' - -let loadingInstance; - -export default { - // 消息提示 - msg(content) { - Message.info(content) - }, - // 错误消息 - msgError(content) { - Message.error(content) - }, - // 成功消息 - msgSuccess(content) { - Message.success(content) - }, - // 警告消息 - msgWarning(content) { - Message.warning(content) - }, - // 弹出提示 - alert(content) { - MessageBox.alert(content, "系统提示") - }, - // 错误提示 - alertError(content) { - MessageBox.alert(content, "系统提示", { type: 'error' }) - }, - // 成功提示 - alertSuccess(content) { - MessageBox.alert(content, "系统提示", { type: 'success' }) - }, - // 警告提示 - alertWarning(content) { - MessageBox.alert(content, "系统提示", { type: 'warning' }) - }, - // 通知提示 - notify(content) { - Notification.info(content) - }, - // 错误通知 - notifyError(content) { - Notification.error(content); - }, - // 成功通知 - notifySuccess(content) { - Notification.success(content) - }, - // 警告通知 - notifyWarning(content) { - Notification.warning(content) - }, - // 确认窗体 - confirm(content) { - return MessageBox.confirm(content, "系统提示", { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning", - }) - }, - // 提交内容 - prompt(content) { - return MessageBox.prompt(content, "系统提示", { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning", - }) - }, - // 打开遮罩层 - loading(content) { - loadingInstance = Loading.service({ - lock: true, - text: content, - spinner: "el-icon-loading", - background: "rgba(0, 0, 0, 0.7)", - }) - }, - // 关闭遮罩层 - closeLoading() { - loadingInstance.close(); - } -} diff --git a/ruoyi-ui/src/plugins/tab.js b/ruoyi-ui/src/plugins/tab.js deleted file mode 100644 index fcde419..0000000 --- a/ruoyi-ui/src/plugins/tab.js +++ /dev/null @@ -1,71 +0,0 @@ -import store from '@/store' -import router from '@/router'; - -export default { - // 刷新当前tab页签 - refreshPage(obj) { - const { path, query, matched } = router.currentRoute; - if (obj === undefined) { - matched.forEach((m) => { - if (m.components && m.components.default && m.components.default.name) { - if (!['Layout', 'ParentView'].includes(m.components.default.name)) { - obj = { name: m.components.default.name, path: path, query: query }; - } - } - }); - } - return store.dispatch('tagsView/delCachedView', obj).then(() => { - const { path, query } = obj - router.replace({ - path: '/redirect' + path, - query: query - }) - }) - }, - // 关闭当前tab页签,打开新页签 - closeOpenPage(obj) { - store.dispatch("tagsView/delView", router.currentRoute); - if (obj !== undefined) { - return router.push(obj); - } - }, - // 关闭指定tab页签 - closePage(obj) { - if (obj === undefined) { - return store.dispatch('tagsView/delView', router.currentRoute).then(({ visitedViews }) => { - const latestView = visitedViews.slice(-1)[0] - if (latestView) { - return router.push(latestView.fullPath) - } - return router.push('/'); - }); - } - return store.dispatch('tagsView/delView', obj); - }, - // 关闭所有tab页签 - closeAllPage() { - return store.dispatch('tagsView/delAllViews'); - }, - // 关闭左侧tab页签 - closeLeftPage(obj) { - return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute); - }, - // 关闭右侧tab页签 - closeRightPage(obj) { - return store.dispatch('tagsView/delRightTags', obj || router.currentRoute); - }, - // 关闭其他tab页签 - closeOtherPage(obj) { - return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); - }, - // 添加tab页签 - openPage(title, url, params) { - const obj = { path: url, meta: { title: title } } - store.dispatch('tagsView/addView', obj); - return router.push({ path: url, query: params }); - }, - // 修改tab页签 - updatePage(obj) { - return store.dispatch('tagsView/updateVisitedView', obj); - } -} diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js deleted file mode 100644 index 71907b6..0000000 --- a/ruoyi-ui/src/router/index.js +++ /dev/null @@ -1,183 +0,0 @@ -import Vue from 'vue' -import Router from 'vue-router' - -Vue.use(Router) - -/* Layout */ -import Layout from '@/layout' - -/** - * Note: 路由配置项 - * - * hidden: true // 当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1 - * alwaysShow: true // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 - * // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面 - * // 若你想不管路由下面的 children 声明的个数都显示你的根路由 - * // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由 - * redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 - * name:'router-name' // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题 - * query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数 - * roles: ['admin', 'common'] // 访问路由的角色权限 - * permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限 - * meta : { - noCache: true // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false) - title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字 - icon: 'svg-name' // 设置该路由的图标,对应路径src/assets/icons/svg - breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示 - activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 - } - */ - -// 公共路由 -export const constantRoutes = [ - { - path: '/redirect', - component: Layout, - hidden: true, - children: [ - { - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect') - } - ] - }, - { - path: '/login', - component: () => import('@/views/login'), - hidden: true - }, - { - path: '/register', - component: () => import('@/views/register'), - hidden: true - }, - { - path: '/404', - component: () => import('@/views/error/404'), - hidden: true - }, - { - path: '/401', - component: () => import('@/views/error/401'), - hidden: true - }, - { - path: '', - component: Layout, - redirect: 'index', - children: [ - { - path: 'index', - component: () => import('@/views/index'), - name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } - } - ] - }, - { - path: '/user', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [ - { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - } - ] - } -] - -// 动态路由,基于用户权限动态去加载 -export const dynamicRoutes = [ - { - path: '/system/user-auth', - component: Layout, - hidden: true, - permissions: ['system:user:edit'], - children: [ - { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] - }, - { - path: '/system/role-auth', - component: Layout, - hidden: true, - permissions: ['system:role:edit'], - children: [ - { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] - }, - { - path: '/system/dict-data', - component: Layout, - hidden: true, - permissions: ['system:dict:list'], - children: [ - { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] - }, - { - path: '/monitor/job-log', - component: Layout, - hidden: true, - permissions: ['monitor:job:list'], - children: [ - { - path: 'index/:jobId(\\d+)', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { title: '调度日志', activeMenu: '/monitor/job' } - } - ] - }, - { - path: '/tool/gen-edit', - component: Layout, - hidden: true, - permissions: ['tool:gen:edit'], - children: [ - { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] - -// 防止连续点击多次路由报错 -let routerPush = Router.prototype.push; -let routerReplace = Router.prototype.replace; -// push -Router.prototype.push = function push(location) { - return routerPush.call(this, location).catch(err => err) -} -// replace -Router.prototype.replace = function push(location) { - return routerReplace.call(this, location).catch(err => err) -} - -export default new Router({ - mode: 'history', // 去掉url中的# - scrollBehavior: () => ({ y: 0 }), - routes: constantRoutes -}) diff --git a/ruoyi-ui/src/settings.js b/ruoyi-ui/src/settings.js deleted file mode 100644 index 6a0b09f..0000000 --- a/ruoyi-ui/src/settings.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports = { - /** - * 侧边栏主题 深色主题theme-dark,浅色主题theme-light - */ - sideTheme: 'theme-dark', - - /** - * 是否系统布局配置 - */ - showSettings: false, - - /** - * 是否显示顶部导航 - */ - topNav: false, - - /** - * 是否显示 tagsView - */ - tagsView: true, - - /** - * 是否固定头部 - */ - fixedHeader: false, - - /** - * 是否显示logo - */ - sidebarLogo: true, - - /** - * 是否显示动态标题 - */ - dynamicTitle: false, - - /** - * @type {string | array} 'production' | ['production', 'development'] - * @description Need show err logs component. - * The default is only used in the production env - * If you want to also use it in dev, you can pass ['production', 'development'] - */ - errorLog: 'production' -} diff --git a/ruoyi-ui/src/store/getters.js b/ruoyi-ui/src/store/getters.js deleted file mode 100644 index 8adb1b6..0000000 --- a/ruoyi-ui/src/store/getters.js +++ /dev/null @@ -1,19 +0,0 @@ -const getters = { - sidebar: state => state.app.sidebar, - size: state => state.app.size, - device: state => state.app.device, - dict: state => state.dict.dict, - visitedViews: state => state.tagsView.visitedViews, - cachedViews: state => state.tagsView.cachedViews, - token: state => state.user.token, - avatar: state => state.user.avatar, - name: state => state.user.name, - introduction: state => state.user.introduction, - roles: state => state.user.roles, - permissions: state => state.user.permissions, - permission_routes: state => state.permission.routes, - topbarRouters:state => state.permission.topbarRouters, - defaultRoutes:state => state.permission.defaultRoutes, - sidebarRouters:state => state.permission.sidebarRouters, -} -export default getters diff --git a/ruoyi-ui/src/store/index.js b/ruoyi-ui/src/store/index.js deleted file mode 100644 index 97aaef8..0000000 --- a/ruoyi-ui/src/store/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import app from './modules/app' -import dict from './modules/dict' -import user from './modules/user' -import tagsView from './modules/tagsView' -import permission from './modules/permission' -import settings from './modules/settings' -import getters from './getters' - -Vue.use(Vuex) - -const store = new Vuex.Store({ - modules: { - app, - dict, - user, - tagsView, - permission, - settings - }, - getters -}) - -export default store diff --git a/ruoyi-ui/src/store/modules/app.js b/ruoyi-ui/src/store/modules/app.js deleted file mode 100644 index 3e22d1c..0000000 --- a/ruoyi-ui/src/store/modules/app.js +++ /dev/null @@ -1,66 +0,0 @@ -import Cookies from 'js-cookie' - -const state = { - sidebar: { - opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, - withoutAnimation: false, - hide: false - }, - device: 'desktop', - size: Cookies.get('size') || 'medium' -} - -const mutations = { - TOGGLE_SIDEBAR: state => { - if (state.sidebar.hide) { - return false; - } - state.sidebar.opened = !state.sidebar.opened - state.sidebar.withoutAnimation = false - if (state.sidebar.opened) { - Cookies.set('sidebarStatus', 1) - } else { - Cookies.set('sidebarStatus', 0) - } - }, - CLOSE_SIDEBAR: (state, withoutAnimation) => { - Cookies.set('sidebarStatus', 0) - state.sidebar.opened = false - state.sidebar.withoutAnimation = withoutAnimation - }, - TOGGLE_DEVICE: (state, device) => { - state.device = device - }, - SET_SIZE: (state, size) => { - state.size = size - Cookies.set('size', size) - }, - SET_SIDEBAR_HIDE: (state, status) => { - state.sidebar.hide = status - } -} - -const actions = { - toggleSideBar({ commit }) { - commit('TOGGLE_SIDEBAR') - }, - closeSideBar({ commit }, { withoutAnimation }) { - commit('CLOSE_SIDEBAR', withoutAnimation) - }, - toggleDevice({ commit }, device) { - commit('TOGGLE_DEVICE', device) - }, - setSize({ commit }, size) { - commit('SET_SIZE', size) - }, - toggleSideBarHide({ commit }, status) { - commit('SET_SIDEBAR_HIDE', status) - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} diff --git a/ruoyi-ui/src/store/modules/dict.js b/ruoyi-ui/src/store/modules/dict.js deleted file mode 100644 index 7a1b2f0..0000000 --- a/ruoyi-ui/src/store/modules/dict.js +++ /dev/null @@ -1,50 +0,0 @@ -const state = { - dict: new Array() -} -const mutations = { - SET_DICT: (state, { key, value }) => { - if (key !== null && key !== "") { - state.dict.push({ - key: key, - value: value - }) - } - }, - REMOVE_DICT: (state, key) => { - try { - for (let i = 0; i < state.dict.length; i++) { - if (state.dict[i].key == key) { - state.dict.splice(i, 1) - return true - } - } - } catch (e) { - } - }, - CLEAN_DICT: (state) => { - state.dict = new Array() - } -} - -const actions = { - // 设置字典 - setDict({ commit }, data) { - commit('SET_DICT', data) - }, - // 删除字典 - removeDict({ commit }, key) { - commit('REMOVE_DICT', key) - }, - // 清空字典 - cleanDict({ commit }) { - commit('CLEAN_DICT') - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js deleted file mode 100644 index b3c216a..0000000 --- a/ruoyi-ui/src/store/modules/permission.js +++ /dev/null @@ -1,137 +0,0 @@ -import auth from '@/plugins/auth' -import router, { constantRoutes, dynamicRoutes } from '@/router' -import { getRouters } from '@/api/menu' -import Layout from '@/layout/index' -import ParentView from '@/components/ParentView' -import InnerLink from '@/layout/components/InnerLink' - -const permission = { - state: { - routes: [], - addRoutes: [], - defaultRoutes: [], - topbarRouters: [], - sidebarRouters: [] - }, - mutations: { - SET_ROUTES: (state, routes) => { - state.addRoutes = routes - state.routes = constantRoutes.concat(routes) - }, - SET_DEFAULT_ROUTES: (state, routes) => { - state.defaultRoutes = constantRoutes.concat(routes) - }, - SET_TOPBAR_ROUTES: (state, routes) => { - state.topbarRouters = routes - }, - SET_SIDEBAR_ROUTERS: (state, routes) => { - state.sidebarRouters = routes - }, - }, - actions: { - // 生成路由 - GenerateRoutes({ commit }) { - return new Promise(resolve => { - // 向后端请求路由数据 - getRouters().then(res => { - const sdata = JSON.parse(JSON.stringify(res.data)) - const rdata = JSON.parse(JSON.stringify(res.data)) - const sidebarRoutes = filterAsyncRouter(sdata) - const rewriteRoutes = filterAsyncRouter(rdata, false, true) - const asyncRoutes = filterDynamicRoutes(dynamicRoutes); - rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) - router.addRoutes(asyncRoutes); - commit('SET_ROUTES', rewriteRoutes) - commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) - commit('SET_DEFAULT_ROUTES', sidebarRoutes) - commit('SET_TOPBAR_ROUTES', sidebarRoutes) - resolve(rewriteRoutes) - }) - }) - } - } -} - -// 遍历后台传来的路由字符串,转换为组件对象 -function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { - return asyncRouterMap.filter(route => { - if (type && route.children) { - route.children = filterChildren(route.children) - } - if (route.component) { - // Layout ParentView 组件特殊处理 - if (route.component === 'Layout') { - route.component = Layout - } else if (route.component === 'ParentView') { - route.component = ParentView - } else if (route.component === 'InnerLink') { - route.component = InnerLink - } else { - route.component = loadView(route.component) - } - } - if (route.children != null && route.children && route.children.length) { - route.children = filterAsyncRouter(route.children, route, type) - } else { - delete route['children'] - delete route['redirect'] - } - return true - }) -} - -function filterChildren(childrenMap, lastRouter = false) { - var children = [] - childrenMap.forEach((el, index) => { - if (el.children && el.children.length) { - if (el.component === 'ParentView' && !lastRouter) { - el.children.forEach(c => { - c.path = el.path + '/' + c.path - if (c.children && c.children.length) { - children = children.concat(filterChildren(c.children, c)) - return - } - children.push(c) - }) - return - } - } - if (lastRouter) { - el.path = lastRouter.path + '/' + el.path - if (el.children && el.children.length) { - children = children.concat(filterChildren(el.children, el)) - return - } - } - children = children.concat(el) - }) - return children -} - -// 动态路由遍历,验证是否具备权限 -export function filterDynamicRoutes(routes) { - const res = [] - routes.forEach(route => { - if (route.permissions) { - if (auth.hasPermiOr(route.permissions)) { - res.push(route) - } - } else if (route.roles) { - if (auth.hasRoleOr(route.roles)) { - res.push(route) - } - } - }) - return res -} - -export const loadView = (view) => { - if (process.env.NODE_ENV === 'development') { - return (resolve) => require([`@/views/${view}`], resolve) - } else { - // 使用 import 实现生产环境的路由懒加载 - return () => import(`@/views/${view}`) - } -} - -export default permission diff --git a/ruoyi-ui/src/store/modules/settings.js b/ruoyi-ui/src/store/modules/settings.js deleted file mode 100644 index 2455a1e..0000000 --- a/ruoyi-ui/src/store/modules/settings.js +++ /dev/null @@ -1,42 +0,0 @@ -import defaultSettings from '@/settings' - -const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings - -const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' -const state = { - title: '', - theme: storageSetting.theme || '#409EFF', - sideTheme: storageSetting.sideTheme || sideTheme, - showSettings: showSettings, - topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, - tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, - fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, - sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, - dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle -} -const mutations = { - CHANGE_SETTING: (state, { key, value }) => { - if (state.hasOwnProperty(key)) { - state[key] = value - } - } -} - -const actions = { - // 修改布局设置 - changeSetting({ commit }, data) { - commit('CHANGE_SETTING', data) - }, - // 设置网页标题 - setTitle({ commit }, title) { - state.title = title - } -} - -export default { - namespaced: true, - state, - mutations, - actions -} - diff --git a/ruoyi-ui/src/store/modules/tagsView.js b/ruoyi-ui/src/store/modules/tagsView.js deleted file mode 100644 index 5fc011c..0000000 --- a/ruoyi-ui/src/store/modules/tagsView.js +++ /dev/null @@ -1,228 +0,0 @@ -const state = { - visitedViews: [], - cachedViews: [], - iframeViews: [] -} - -const mutations = { - ADD_IFRAME_VIEW: (state, view) => { - if (state.iframeViews.some(v => v.path === view.path)) return - state.iframeViews.push( - Object.assign({}, view, { - title: view.meta.title || 'no-name' - }) - ) - }, - ADD_VISITED_VIEW: (state, view) => { - if (state.visitedViews.some(v => v.path === view.path)) return - state.visitedViews.push( - Object.assign({}, view, { - title: view.meta.title || 'no-name' - }) - ) - }, - ADD_CACHED_VIEW: (state, view) => { - if (state.cachedViews.includes(view.name)) return - if (view.meta && !view.meta.noCache) { - state.cachedViews.push(view.name) - } - }, - DEL_VISITED_VIEW: (state, view) => { - for (const [i, v] of state.visitedViews.entries()) { - if (v.path === view.path) { - state.visitedViews.splice(i, 1) - break - } - } - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) - }, - DEL_IFRAME_VIEW: (state, view) => { - state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) - }, - DEL_CACHED_VIEW: (state, view) => { - const index = state.cachedViews.indexOf(view.name) - index > -1 && state.cachedViews.splice(index, 1) - }, - - DEL_OTHERS_VISITED_VIEWS: (state, view) => { - state.visitedViews = state.visitedViews.filter(v => { - return v.meta.affix || v.path === view.path - }) - state.iframeViews = state.iframeViews.filter(item => item.path === view.path) - }, - DEL_OTHERS_CACHED_VIEWS: (state, view) => { - const index = state.cachedViews.indexOf(view.name) - if (index > -1) { - state.cachedViews = state.cachedViews.slice(index, index + 1) - } else { - state.cachedViews = [] - } - }, - DEL_ALL_VISITED_VIEWS: state => { - // keep affix tags - const affixTags = state.visitedViews.filter(tag => tag.meta.affix) - state.visitedViews = affixTags - state.iframeViews = [] - }, - DEL_ALL_CACHED_VIEWS: state => { - state.cachedViews = [] - }, - UPDATE_VISITED_VIEW: (state, view) => { - for (let v of state.visitedViews) { - if (v.path === view.path) { - v = Object.assign(v, view) - break - } - } - }, - DEL_RIGHT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) - if (index === -1) { - return - } - state.visitedViews = state.visitedViews.filter((item, idx) => { - if (idx <= index || (item.meta && item.meta.affix)) { - return true - } - const i = state.cachedViews.indexOf(item.name) - if (i > -1) { - state.cachedViews.splice(i, 1) - } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) - } - return false - }) - }, - DEL_LEFT_VIEWS: (state, view) => { - const index = state.visitedViews.findIndex(v => v.path === view.path) - if (index === -1) { - return - } - state.visitedViews = state.visitedViews.filter((item, idx) => { - if (idx >= index || (item.meta && item.meta.affix)) { - return true - } - const i = state.cachedViews.indexOf(item.name) - if (i > -1) { - state.cachedViews.splice(i, 1) - } - if(item.meta.link) { - const fi = state.iframeViews.findIndex(v => v.path === item.path) - state.iframeViews.splice(fi, 1) - } - return false - }) - } -} - -const actions = { - addView({ dispatch }, view) { - dispatch('addVisitedView', view) - dispatch('addCachedView', view) - }, - addIframeView({ commit }, view) { - commit('ADD_IFRAME_VIEW', view) - }, - addVisitedView({ commit }, view) { - commit('ADD_VISITED_VIEW', view) - }, - addCachedView({ commit }, view) { - commit('ADD_CACHED_VIEW', view) - }, - delView({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delVisitedView', view) - dispatch('delCachedView', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delVisitedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_VISITED_VIEW', view) - resolve([...state.visitedViews]) - }) - }, - delIframeView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_IFRAME_VIEW', view) - resolve([...state.iframeViews]) - }) - }, - delCachedView({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_CACHED_VIEW', view) - resolve([...state.cachedViews]) - }) - }, - delOthersViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delOthersVisitedViews', view) - dispatch('delOthersCachedViews', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delOthersVisitedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_VISITED_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, - delOthersCachedViews({ commit, state }, view) { - return new Promise(resolve => { - commit('DEL_OTHERS_CACHED_VIEWS', view) - resolve([...state.cachedViews]) - }) - }, - delAllViews({ dispatch, state }, view) { - return new Promise(resolve => { - dispatch('delAllVisitedViews', view) - dispatch('delAllCachedViews', view) - resolve({ - visitedViews: [...state.visitedViews], - cachedViews: [...state.cachedViews] - }) - }) - }, - delAllVisitedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_VISITED_VIEWS') - resolve([...state.visitedViews]) - }) - }, - delAllCachedViews({ commit, state }) { - return new Promise(resolve => { - commit('DEL_ALL_CACHED_VIEWS') - resolve([...state.cachedViews]) - }) - }, - updateVisitedView({ commit }, view) { - commit('UPDATE_VISITED_VIEW', view) - }, - delRightTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_RIGHT_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, - delLeftTags({ commit }, view) { - return new Promise(resolve => { - commit('DEL_LEFT_VIEWS', view) - resolve([...state.visitedViews]) - }) - }, -} - -export default { - namespaced: true, - state, - mutations, - actions -} diff --git a/ruoyi-ui/src/store/modules/user.js b/ruoyi-ui/src/store/modules/user.js deleted file mode 100644 index cdbab1e..0000000 --- a/ruoyi-ui/src/store/modules/user.js +++ /dev/null @@ -1,101 +0,0 @@ -import { login, logout, getInfo } from '@/api/login' -import { getToken, setToken, removeToken } from '@/utils/auth' - -const user = { - state: { - token: getToken(), - id: '', - name: '', - avatar: '', - roles: [], - permissions: [] - }, - - mutations: { - SET_TOKEN: (state, token) => { - state.token = token - }, - SET_ID: (state, id) => { - state.id = id - }, - SET_NAME: (state, name) => { - state.name = name - }, - SET_AVATAR: (state, avatar) => { - state.avatar = avatar - }, - SET_ROLES: (state, roles) => { - state.roles = roles - }, - SET_PERMISSIONS: (state, permissions) => { - state.permissions = permissions - } - }, - - actions: { - // 登录 - Login({ commit }, userInfo) { - const username = userInfo.username.trim() - const password = userInfo.password - const code = userInfo.code - const uuid = userInfo.uuid - return new Promise((resolve, reject) => { - login(username, password, code, uuid).then(res => { - setToken(res.token) - commit('SET_TOKEN', res.token) - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // 获取用户信息 - GetInfo({ commit, state }) { - return new Promise((resolve, reject) => { - getInfo().then(res => { - const user = res.user - const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - commit('SET_ROLES', res.roles) - commit('SET_PERMISSIONS', res.permissions) - } else { - commit('SET_ROLES', ['ROLE_DEFAULT']) - } - commit('SET_ID', user.userId) - commit('SET_NAME', user.userName) - commit('SET_AVATAR', avatar) - resolve(res) - }).catch(error => { - reject(error) - }) - }) - }, - - // 退出系统 - LogOut({ commit, state }) { - return new Promise((resolve, reject) => { - logout(state.token).then(() => { - commit('SET_TOKEN', '') - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // 前端 登出 - FedLogOut({ commit }) { - return new Promise(resolve => { - commit('SET_TOKEN', '') - removeToken() - resolve() - }) - } - } -} - -export default user diff --git a/ruoyi-ui/src/utils/auth.js b/ruoyi-ui/src/utils/auth.js deleted file mode 100644 index 08a43d6..0000000 --- a/ruoyi-ui/src/utils/auth.js +++ /dev/null @@ -1,15 +0,0 @@ -import Cookies from 'js-cookie' - -const TokenKey = 'Admin-Token' - -export function getToken() { - return Cookies.get(TokenKey) -} - -export function setToken(token) { - return Cookies.set(TokenKey, token) -} - -export function removeToken() { - return Cookies.remove(TokenKey) -} diff --git a/ruoyi-ui/src/utils/dict/Dict.js b/ruoyi-ui/src/utils/dict/Dict.js deleted file mode 100644 index 104bd6e..0000000 --- a/ruoyi-ui/src/utils/dict/Dict.js +++ /dev/null @@ -1,82 +0,0 @@ -import Vue from 'vue' -import { mergeRecursive } from "@/utils/ruoyi"; -import DictMeta from './DictMeta' -import DictData from './DictData' - -const DEFAULT_DICT_OPTIONS = { - types: [], -} - -/** - * @classdesc 字典 - * @property {Object} label 标签对象,内部属性名为字典类型名称 - * @property {Object} dict 字段数组,内部属性名为字典类型名称 - * @property {Array.<DictMeta>} _dictMetas 字典元数据数组 - */ -export default class Dict { - constructor() { - this.owner = null - this.label = {} - this.type = {} - } - - init(options) { - if (options instanceof Array) { - options = { types: options } - } - const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options) - if (opts.types === undefined) { - throw new Error('need dict types') - } - const ps = [] - this._dictMetas = opts.types.map(t => DictMeta.parse(t)) - this._dictMetas.forEach(dictMeta => { - const type = dictMeta.type - Vue.set(this.label, type, {}) - Vue.set(this.type, type, []) - if (dictMeta.lazy) { - return - } - ps.push(loadDict(this, dictMeta)) - }) - return Promise.all(ps) - } - - /** - * 重新加载字典 - * @param {String} type 字典类型 - */ - reloadDict(type) { - const dictMeta = this._dictMetas.find(e => e.type === type) - if (dictMeta === undefined) { - return Promise.reject(`the dict meta of ${type} was not found`) - } - return loadDict(this, dictMeta) - } -} - -/** - * 加载字典 - * @param {Dict} dict 字典 - * @param {DictMeta} dictMeta 字典元数据 - * @returns {Promise} - */ -function loadDict(dict, dictMeta) { - return dictMeta.request(dictMeta) - .then(response => { - const type = dictMeta.type - let dicts = dictMeta.responseConverter(response, dictMeta) - if (!(dicts instanceof Array)) { - console.error('the return of responseConverter must be Array.<DictData>') - dicts = [] - } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) { - console.error('the type of elements in dicts must be DictData') - dicts = [] - } - dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts) - dicts.forEach(d => { - Vue.set(dict.label[type], d.value, d.label) - }) - return dicts - }) -} diff --git a/ruoyi-ui/src/utils/dict/DictConverter.js b/ruoyi-ui/src/utils/dict/DictConverter.js deleted file mode 100644 index 0cf5df8..0000000 --- a/ruoyi-ui/src/utils/dict/DictConverter.js +++ /dev/null @@ -1,17 +0,0 @@ -import DictOptions from './DictOptions' -import DictData from './DictData' - -export default function(dict, dictMeta) { - const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) - const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) - return new DictData(dict[label], dict[value], dict) -} - -/** - * 确定字典字段 - * @param {DictData} dict - * @param {...String} fields - */ -function determineDictField(dict, ...fields) { - return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) -} diff --git a/ruoyi-ui/src/utils/dict/DictData.js b/ruoyi-ui/src/utils/dict/DictData.js deleted file mode 100644 index afc763e..0000000 --- a/ruoyi-ui/src/utils/dict/DictData.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @classdesc 字典数据 - * @property {String} label 标签 - * @property {*} value 标签 - * @property {Object} raw 原始数据 - */ -export default class DictData { - constructor(label, value, raw) { - this.label = label - this.value = value - this.raw = raw - } -} diff --git a/ruoyi-ui/src/utils/dict/DictMeta.js b/ruoyi-ui/src/utils/dict/DictMeta.js deleted file mode 100644 index 9779daa..0000000 --- a/ruoyi-ui/src/utils/dict/DictMeta.js +++ /dev/null @@ -1,38 +0,0 @@ -import { mergeRecursive } from "@/utils/ruoyi"; -import DictOptions from './DictOptions' - -/** - * @classdesc 字典元数据 - * @property {String} type 类型 - * @property {Function} request 请求 - * @property {String} label 标签字段 - * @property {String} value 值字段 - */ -export default class DictMeta { - constructor(options) { - this.type = options.type - this.request = options.request - this.responseConverter = options.responseConverter - this.labelField = options.labelField - this.valueField = options.valueField - this.lazy = options.lazy === true - } -} - - -/** - * 解析字典元数据 - * @param {Object} options - * @returns {DictMeta} - */ -DictMeta.parse= function(options) { - let opts = null - if (typeof options === 'string') { - opts = DictOptions.metas[options] || {} - opts.type = options - } else if (typeof options === 'object') { - opts = options - } - opts = mergeRecursive(DictOptions.metas['*'], opts) - return new DictMeta(opts) -} diff --git a/ruoyi-ui/src/utils/dict/DictOptions.js b/ruoyi-ui/src/utils/dict/DictOptions.js deleted file mode 100644 index 338a94e..0000000 --- a/ruoyi-ui/src/utils/dict/DictOptions.js +++ /dev/null @@ -1,51 +0,0 @@ -import { mergeRecursive } from "@/utils/ruoyi"; -import dictConverter from './DictConverter' - -export const options = { - metas: { - '*': { - /** - * 字典请求,方法签名为function(dictMeta: DictMeta): Promise - */ - request: (dictMeta) => { - console.log(`load dict ${dictMeta.type}`) - return Promise.resolve([]) - }, - /** - * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData - */ - responseConverter, - labelField: 'label', - valueField: 'value', - }, - }, - /** - * 默认标签字段 - */ - DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'], - /** - * 默认值字段 - */ - DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'], -} - -/** - * 映射字典 - * @param {Object} response 字典数据 - * @param {DictMeta} dictMeta 字典元数据 - * @returns {DictData} - */ -function responseConverter(response, dictMeta) { - const dicts = response.content instanceof Array ? response.content : response - if (dicts === undefined) { - console.warn(`no dict data of "${dictMeta.type}" found in the response`) - return [] - } - return dicts.map(d => dictConverter(d, dictMeta)) -} - -export function mergeOptions(src) { - mergeRecursive(options, src) -} - -export default options diff --git a/ruoyi-ui/src/utils/dict/index.js b/ruoyi-ui/src/utils/dict/index.js deleted file mode 100644 index 215eb9e..0000000 --- a/ruoyi-ui/src/utils/dict/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import Dict from './Dict' -import { mergeOptions } from './DictOptions' - -export default function(Vue, options) { - mergeOptions(options) - Vue.mixin({ - data() { - if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) { - return {} - } - const dict = new Dict() - dict.owner = this - return { - dict - } - }, - created() { - if (!(this.dict instanceof Dict)) { - return - } - options.onCreated && options.onCreated(this.dict) - this.dict.init(this.$options.dicts).then(() => { - options.onReady && options.onReady(this.dict) - this.$nextTick(() => { - this.$emit('dictReady', this.dict) - if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) { - this.$options.methods.onDictReady.call(this, this.dict) - } - }) - }) - }, - }) -} diff --git a/ruoyi-ui/src/utils/errorCode.js b/ruoyi-ui/src/utils/errorCode.js deleted file mode 100644 index d2111ee..0000000 --- a/ruoyi-ui/src/utils/errorCode.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - '401': '认证失败,无法访问系统资源', - '403': '当前操作没有权限', - '404': '访问资源不存在', - 'default': '系统未知错误,请反馈给管理员' -} diff --git a/ruoyi-ui/src/utils/generator/config.js b/ruoyi-ui/src/utils/generator/config.js deleted file mode 100644 index 7abf227..0000000 --- a/ruoyi-ui/src/utils/generator/config.js +++ /dev/null @@ -1,438 +0,0 @@ -export const formConf = { - formRef: 'elForm', - formModel: 'formData', - size: 'medium', - labelPosition: 'right', - labelWidth: 100, - formRules: 'rules', - gutter: 15, - disabled: false, - span: 24, - formBtns: true -} - -export const inputComponents = [ - { - label: '单行文本', - tag: 'el-input', - tagIcon: 'input', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': '', - 'suffix-icon': '', - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '多行文本', - tag: 'el-input', - tagIcon: 'textarea', - type: 'textarea', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - labelWidth: null, - autosize: { - minRows: 4, - maxRows: 4 - }, - style: { width: '100%' }, - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '密码', - tag: 'el-input', - tagIcon: 'password', - placeholder: '请输入', - defaultValue: undefined, - span: 24, - 'show-password': true, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': '', - 'suffix-icon': '', - maxlength: null, - 'show-word-limit': false, - readonly: false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input' - }, - { - label: '计数器', - tag: 'el-input-number', - tagIcon: 'number', - placeholder: '', - defaultValue: undefined, - span: 24, - labelWidth: null, - min: undefined, - max: undefined, - step: undefined, - 'step-strictly': false, - precision: undefined, - 'controls-position': '', - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/input-number' - } -] - -export const selectComponents = [ - { - label: '下拉选择', - tag: 'el-select', - tagIcon: 'select', - placeholder: '请选择', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: { width: '100%' }, - clearable: true, - disabled: false, - required: true, - filterable: false, - multiple: false, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/select' - }, - { - label: '级联选择', - tag: 'el-cascader', - tagIcon: 'cascader', - placeholder: '请选择', - defaultValue: [], - span: 24, - labelWidth: null, - style: { width: '100%' }, - props: { - props: { - multiple: false - } - }, - 'show-all-levels': true, - disabled: false, - clearable: true, - filterable: false, - required: true, - options: [{ - id: 1, - value: 1, - label: '选项1', - children: [{ - id: 2, - value: 2, - label: '选项1-1' - }] - }], - dataType: 'dynamic', - labelKey: 'label', - valueKey: 'value', - childrenKey: 'children', - separator: '/', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/cascader' - }, - { - label: '单选框组', - tag: 'el-radio-group', - tagIcon: 'radio', - defaultValue: undefined, - span: 24, - labelWidth: null, - style: {}, - optionType: 'default', - border: false, - size: 'medium', - disabled: false, - required: true, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/radio' - }, - { - label: '多选框组', - tag: 'el-checkbox-group', - tagIcon: 'checkbox', - defaultValue: [], - span: 24, - labelWidth: null, - style: {}, - optionType: 'default', - border: false, - size: 'medium', - disabled: false, - required: true, - options: [{ - label: '选项一', - value: 1 - }, { - label: '选项二', - value: 2 - }], - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/checkbox' - }, - { - label: '开关', - tag: 'el-switch', - tagIcon: 'switch', - defaultValue: false, - span: 24, - labelWidth: null, - style: {}, - disabled: false, - required: true, - 'active-text': '', - 'inactive-text': '', - 'active-color': null, - 'inactive-color': null, - 'active-value': true, - 'inactive-value': false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/switch' - }, - { - label: '滑块', - tag: 'el-slider', - tagIcon: 'slider', - defaultValue: null, - span: 24, - labelWidth: null, - disabled: false, - required: true, - min: 0, - max: 100, - step: 1, - 'show-stops': false, - range: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/slider' - }, - { - label: '时间选择', - tag: 'el-time-picker', - tagIcon: 'time', - placeholder: '请选择', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - 'picker-options': { - selectableRange: '00:00:00-23:59:59' - }, - format: 'HH:mm:ss', - 'value-format': 'HH:mm:ss', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' - }, - { - label: '时间范围', - tag: 'el-time-picker', - tagIcon: 'time-range', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - 'is-range': true, - 'range-separator': '至', - 'start-placeholder': '开始时间', - 'end-placeholder': '结束时间', - format: 'HH:mm:ss', - 'value-format': 'HH:mm:ss', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' - }, - { - label: '日期选择', - tag: 'el-date-picker', - tagIcon: 'date', - placeholder: '请选择', - defaultValue: null, - type: 'date', - span: 24, - labelWidth: null, - style: { width: '100%' }, - disabled: false, - clearable: true, - required: true, - format: 'yyyy-MM-dd', - 'value-format': 'yyyy-MM-dd', - readonly: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' - }, - { - label: '日期范围', - tag: 'el-date-picker', - tagIcon: 'date-range', - defaultValue: null, - span: 24, - labelWidth: null, - style: { width: '100%' }, - type: 'daterange', - 'range-separator': '至', - 'start-placeholder': '开始日期', - 'end-placeholder': '结束日期', - disabled: false, - clearable: true, - required: true, - format: 'yyyy-MM-dd', - 'value-format': 'yyyy-MM-dd', - readonly: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' - }, - { - label: '评分', - tag: 'el-rate', - tagIcon: 'rate', - defaultValue: 0, - span: 24, - labelWidth: null, - style: {}, - max: 5, - 'allow-half': false, - 'show-text': false, - 'show-score': false, - disabled: false, - required: true, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/rate' - }, - { - label: '颜色选择', - tag: 'el-color-picker', - tagIcon: 'color', - defaultValue: null, - labelWidth: null, - 'show-alpha': false, - 'color-format': '', - disabled: false, - required: true, - size: 'medium', - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/color-picker' - }, - { - label: '上传', - tag: 'el-upload', - tagIcon: 'upload', - action: 'https://jsonplaceholder.typicode.com/posts/', - defaultValue: null, - labelWidth: null, - disabled: false, - required: true, - accept: '', - name: 'file', - 'auto-upload': true, - showTip: false, - buttonText: '点击上传', - fileSize: 2, - sizeUnit: 'MB', - 'list-type': 'text', - multiple: false, - regList: [], - changeTag: true, - document: 'https://element.eleme.cn/#/zh-CN/component/upload' - } -] - -export const layoutComponents = [ - { - layout: 'rowFormItem', - tagIcon: 'row', - type: 'default', - justify: 'start', - align: 'top', - label: '行容器', - layoutTree: true, - children: [], - document: 'https://element.eleme.cn/#/zh-CN/component/layout' - }, - { - layout: 'colFormItem', - label: '按钮', - changeTag: true, - labelWidth: null, - tag: 'el-button', - tagIcon: 'button', - span: 24, - default: '主要按钮', - type: 'primary', - icon: 'el-icon-search', - size: 'medium', - disabled: false, - document: 'https://element.eleme.cn/#/zh-CN/component/button' - } -] - -// 组件rule的触发方式,无触发方式的组件不生成rule -export const trigger = { - 'el-input': 'blur', - 'el-input-number': 'blur', - 'el-select': 'change', - 'el-radio-group': 'change', - 'el-checkbox-group': 'change', - 'el-cascader': 'change', - 'el-time-picker': 'change', - 'el-date-picker': 'change', - 'el-rate': 'change' -} diff --git a/ruoyi-ui/src/utils/generator/css.js b/ruoyi-ui/src/utils/generator/css.js deleted file mode 100644 index c1c62e6..0000000 --- a/ruoyi-ui/src/utils/generator/css.js +++ /dev/null @@ -1,18 +0,0 @@ -const styles = { - 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}', - 'el-upload': '.el-upload__tip{line-height: 1.2;}' -} - -function addCss(cssList, el) { - const css = styles[el.tag] - css && cssList.indexOf(css) === -1 && cssList.push(css) - if (el.children) { - el.children.forEach(el2 => addCss(cssList, el2)) - } -} - -export function makeUpCss(conf) { - const cssList = [] - conf.fields.forEach(el => addCss(cssList, el)) - return cssList.join('\n') -} diff --git a/ruoyi-ui/src/utils/generator/drawingDefault.js b/ruoyi-ui/src/utils/generator/drawingDefault.js deleted file mode 100644 index 09f133c..0000000 --- a/ruoyi-ui/src/utils/generator/drawingDefault.js +++ /dev/null @@ -1,29 +0,0 @@ -export default [ - { - layout: 'colFormItem', - tagIcon: 'input', - label: '手机号', - vModel: 'mobile', - formId: 6, - tag: 'el-input', - placeholder: '请输入手机号', - defaultValue: '', - span: 24, - style: { width: '100%' }, - clearable: true, - prepend: '', - append: '', - 'prefix-icon': 'el-icon-mobile', - 'suffix-icon': '', - maxlength: 11, - 'show-word-limit': true, - readonly: false, - disabled: false, - required: true, - changeTag: true, - regList: [{ - pattern: '/^1(3|4|5|7|8|9)\\d{9}$/', - message: '手机号格式错误' - }] - } -] diff --git a/ruoyi-ui/src/utils/generator/html.js b/ruoyi-ui/src/utils/generator/html.js deleted file mode 100644 index 9bcc536..0000000 --- a/ruoyi-ui/src/utils/generator/html.js +++ /dev/null @@ -1,359 +0,0 @@ -/* eslint-disable max-len */ -import { trigger } from './config' - -let confGlobal -let someSpanIsNot24 - -export function dialogWrapper(str) { - return `<el-dialog v-bind="$attrs" v-on="$listeners" @open="onOpen" @close="onClose" title="Dialog Title"> - ${str} - <div slot="footer"> - <el-button @click="close">取消</el-button> - <el-button type="primary" @click="handleConfirm">确定</el-button> - </div> - </el-dialog>` -} - -export function vueTemplate(str) { - return `<template> - <div> - ${str} - </div> - </template>` -} - -export function vueScript(str) { - return `<script> - ${str} - </script>` -} - -export function cssStyle(cssStr) { - return `<style> - ${cssStr} - </style>` -} - -function buildFormTemplate(conf, child, type) { - let labelPosition = '' - if (conf.labelPosition !== 'right') { - labelPosition = `label-position="${conf.labelPosition}"` - } - const disabled = conf.disabled ? `:disabled="${conf.disabled}"` : '' - let str = `<el-form ref="${conf.formRef}" :model="${conf.formModel}" :rules="${conf.formRules}" size="${conf.size}" ${disabled} label-width="${conf.labelWidth}px" ${labelPosition}> - ${child} - ${buildFromBtns(conf, type)} - </el-form>` - if (someSpanIsNot24) { - str = `<el-row :gutter="${conf.gutter}"> - ${str} - </el-row>` - } - return str -} - -function buildFromBtns(conf, type) { - let str = '' - if (conf.formBtns && type === 'file') { - str = `<el-form-item size="large"> - <el-button type="primary" @click="submitForm">提交</el-button> - <el-button @click="resetForm">重置</el-button> - </el-form-item>` - if (someSpanIsNot24) { - str = `<el-col :span="24"> - ${str} - </el-col>` - } - } - return str -} - -// span不为24的用el-col包裹 -function colWrapper(element, str) { - if (someSpanIsNot24 || element.span !== 24) { - return `<el-col :span="${element.span}"> - ${str} - </el-col>` - } - return str -} - -const layouts = { - colFormItem(element) { - let labelWidth = '' - if (element.labelWidth && element.labelWidth !== confGlobal.labelWidth) { - labelWidth = `label-width="${element.labelWidth}px"` - } - const required = !trigger[element.tag] && element.required ? 'required' : '' - const tagDom = tags[element.tag] ? tags[element.tag](element) : null - let str = `<el-form-item ${labelWidth} label="${element.label}" prop="${element.vModel}" ${required}> - ${tagDom} - </el-form-item>` - str = colWrapper(element, str) - return str - }, - rowFormItem(element) { - const type = element.type === 'default' ? '' : `type="${element.type}"` - const justify = element.type === 'default' ? '' : `justify="${element.justify}"` - const align = element.type === 'default' ? '' : `align="${element.align}"` - const gutter = element.gutter ? `gutter="${element.gutter}"` : '' - const children = element.children.map(el => layouts[el.layout](el)) - let str = `<el-row ${type} ${justify} ${align} ${gutter}> - ${children.join('\n')} - </el-row>` - str = colWrapper(element, str) - return str - } -} - -const tags = { - 'el-button': el => { - const { - tag, disabled - } = attrBuilder(el) - const type = el.type ? `type="${el.type}"` : '' - const icon = el.icon ? `icon="${el.icon}"` : '' - const size = el.size ? `size="${el.size}"` : '' - let child = buildElButtonChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${type} ${icon} ${size} ${disabled}>${child}</${el.tag}>` - }, - 'el-input': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : '' - const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : '' - const readonly = el.readonly ? 'readonly' : '' - const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : '' - const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : '' - const showPassword = el['show-password'] ? 'show-password' : '' - const type = el.type ? `type="${el.type}"` : '' - const autosize = el.autosize && el.autosize.minRows - ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"` - : '' - let child = buildElInputChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}</${el.tag}>` - }, - 'el-input-number': el => { - const { disabled, vModel, placeholder } = attrBuilder(el) - const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : '' - const min = el.min ? `:min='${el.min}'` : '' - const max = el.max ? `:max='${el.max}'` : '' - const step = el.step ? `:step='${el.step}'` : '' - const stepStrictly = el['step-strictly'] ? 'step-strictly' : '' - const precision = el.precision ? `:precision='${el.precision}'` : '' - - return `<${el.tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}></${el.tag}>` - }, - 'el-select': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const filterable = el.filterable ? 'filterable' : '' - const multiple = el.multiple ? 'multiple' : '' - let child = buildElSelectChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}</${el.tag}>` - }, - 'el-radio-group': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - let child = buildElRadioGroupChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${size} ${disabled}>${child}</${el.tag}>` - }, - 'el-checkbox-group': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - const min = el.min ? `:min="${el.min}"` : '' - const max = el.max ? `:max="${el.max}"` : '' - let child = buildElCheckboxGroupChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}</${el.tag}>` - }, - 'el-switch': el => { - const { disabled, vModel } = attrBuilder(el) - const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : '' - const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : '' - const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : '' - const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : '' - const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : '' - const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : '' - - return `<${el.tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}></${el.tag}>` - }, - 'el-cascader': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const options = el.options ? `:options="${el.vModel}Options"` : '' - const props = el.props ? `:props="${el.vModel}Props"` : '' - const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"' - const filterable = el.filterable ? 'filterable' : '' - const separator = el.separator === '/' ? '' : `separator="${el.separator}"` - - return `<${el.tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}></${el.tag}>` - }, - 'el-slider': el => { - const { disabled, vModel } = attrBuilder(el) - const min = el.min ? `:min='${el.min}'` : '' - const max = el.max ? `:max='${el.max}'` : '' - const step = el.step ? `:step='${el.step}'` : '' - const range = el.range ? 'range' : '' - const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : '' - - return `<${el.tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}></${el.tag}>` - }, - 'el-time-picker': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' - const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' - const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' - const isRange = el['is-range'] ? 'is-range' : '' - const format = el.format ? `format="${el.format}"` : '' - const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' - const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : '' - - return `<${el.tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}></${el.tag}>` - }, - 'el-date-picker': el => { - const { - disabled, vModel, clearable, placeholder, width - } = attrBuilder(el) - const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' - const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' - const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' - const format = el.format ? `format="${el.format}"` : '' - const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' - const type = el.type === 'date' ? '' : `type="${el.type}"` - const readonly = el.readonly ? 'readonly' : '' - - return `<${el.tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}></${el.tag}>` - }, - 'el-rate': el => { - const { disabled, vModel } = attrBuilder(el) - const max = el.max ? `:max='${el.max}'` : '' - const allowHalf = el['allow-half'] ? 'allow-half' : '' - const showText = el['show-text'] ? 'show-text' : '' - const showScore = el['show-score'] ? 'show-score' : '' - - return `<${el.tag} ${vModel} ${allowHalf} ${showText} ${showScore} ${disabled}></${el.tag}>` - }, - 'el-color-picker': el => { - const { disabled, vModel } = attrBuilder(el) - const size = `size="${el.size}"` - const showAlpha = el['show-alpha'] ? 'show-alpha' : '' - const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : '' - - return `<${el.tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}></${el.tag}>` - }, - 'el-upload': el => { - const disabled = el.disabled ? ':disabled=\'true\'' : '' - const action = el.action ? `:action="${el.vModel}Action"` : '' - const multiple = el.multiple ? 'multiple' : '' - const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : '' - const accept = el.accept ? `accept="${el.accept}"` : '' - const name = el.name !== 'file' ? `name="${el.name}"` : '' - const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : '' - const beforeUpload = `:before-upload="${el.vModel}BeforeUpload"` - const fileList = `:file-list="${el.vModel}fileList"` - const ref = `ref="${el.vModel}"` - let child = buildElUploadChild(el) - - if (child) child = `\n${child}\n` // 换行 - return `<${el.tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}</${el.tag}>` - } -} - -function attrBuilder(el) { - return { - vModel: `v-model="${confGlobal.formModel}.${el.vModel}"`, - clearable: el.clearable ? 'clearable' : '', - placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '', - width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '', - disabled: el.disabled ? ':disabled=\'true\'' : '' - } -} - -// el-buttin 子级 -function buildElButtonChild(conf) { - const children = [] - if (conf.default) { - children.push(conf.default) - } - return children.join('\n') -} - -// el-input innerHTML -function buildElInputChild(conf) { - const children = [] - if (conf.prepend) { - children.push(`<template slot="prepend">${conf.prepend}</template>`) - } - if (conf.append) { - children.push(`<template slot="append">${conf.append}</template>`) - } - return children.join('\n') -} - -function buildElSelectChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - children.push(`<el-option v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>`) - } - return children.join('\n') -} - -function buildElRadioGroupChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - const tag = conf.optionType === 'button' ? 'el-radio-button' : 'el-radio' - const border = conf.border ? 'border' : '' - children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}</${tag}>`) - } - return children.join('\n') -} - -function buildElCheckboxGroupChild(conf) { - const children = [] - if (conf.options && conf.options.length) { - const tag = conf.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox' - const border = conf.border ? 'border' : '' - children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}</${tag}>`) - } - return children.join('\n') -} - -function buildElUploadChild(conf) { - const list = [] - if (conf['list-type'] === 'picture-card') list.push('<i class="el-icon-plus"></i>') - else list.push(`<el-button size="small" type="primary" icon="el-icon-upload">${conf.buttonText}</el-button>`) - if (conf.showTip) list.push(`<div slot="tip" class="el-upload__tip">只能上传不超过 ${conf.fileSize}${conf.sizeUnit} 的${conf.accept}文件</div>`) - return list.join('\n') -} - -export function makeUpHtml(conf, type) { - const htmlList = [] - confGlobal = conf - someSpanIsNot24 = conf.fields.some(item => item.span !== 24) - conf.fields.forEach(el => { - htmlList.push(layouts[el.layout](el)) - }) - const htmlStr = htmlList.join('\n') - - let temp = buildFormTemplate(conf, htmlStr, type) - if (type === 'dialog') { - temp = dialogWrapper(temp) - } - confGlobal = null - return temp -} diff --git a/ruoyi-ui/src/utils/generator/icon.json b/ruoyi-ui/src/utils/generator/icon.json deleted file mode 100644 index 2d9999a..0000000 --- a/ruoyi-ui/src/utils/generator/icon.json +++ /dev/null @@ -1 +0,0 @@ -["platform-eleme","eleme","delete-solid","delete","s-tools","setting","user-solid","user","phone","phone-outline","more","more-outline","star-on","star-off","s-goods","goods","warning","warning-outline","question","info","remove","circle-plus","success","error","zoom-in","zoom-out","remove-outline","circle-plus-outline","circle-check","circle-close","s-help","help","minus","plus","check","close","picture","picture-outline","picture-outline-round","upload","upload2","download","camera-solid","camera","video-camera-solid","video-camera","message-solid","bell","s-cooperation","s-order","s-platform","s-fold","s-unfold","s-operation","s-promotion","s-home","s-release","s-ticket","s-management","s-open","s-shop","s-marketing","s-flag","s-comment","s-finance","s-claim","s-custom","s-opportunity","s-data","s-check","s-grid","menu","share","d-caret","caret-left","caret-right","caret-bottom","caret-top","bottom-left","bottom-right","back","right","bottom","top","top-left","top-right","arrow-left","arrow-right","arrow-down","arrow-up","d-arrow-left","d-arrow-right","video-pause","video-play","refresh","refresh-right","refresh-left","finished","sort","sort-up","sort-down","rank","loading","view","c-scale-to-original","date","edit","edit-outline","folder","folder-opened","folder-add","folder-remove","folder-delete","folder-checked","tickets","document-remove","document-delete","document-copy","document-checked","document","document-add","printer","paperclip","takeaway-box","search","monitor","attract","mobile","scissors","umbrella","headset","brush","mouse","coordinate","magic-stick","reading","data-line","data-board","pie-chart","data-analysis","collection-tag","film","suitcase","suitcase-1","receiving","collection","files","notebook-1","notebook-2","toilet-paper","office-building","school","table-lamp","house","no-smoking","smoking","shopping-cart-full","shopping-cart-1","shopping-cart-2","shopping-bag-1","shopping-bag-2","sold-out","sell","present","box","bank-card","money","coin","wallet","discount","price-tag","news","guide","male","female","thumb","cpu","link","connection","open","turn-off","set-up","chat-round","chat-line-round","chat-square","chat-dot-round","chat-dot-square","chat-line-square","message","postcard","position","turn-off-microphone","microphone","close-notification","bangzhu","time","odometer","crop","aim","switch-button","full-screen","copy-document","mic","stopwatch","medal-1","medal","trophy","trophy-1","first-aid-kit","discover","place","location","location-outline","location-information","add-location","delete-location","map-location","alarm-clock","timer","watch-1","watch","lock","unlock","key","service","mobile-phone","bicycle","truck","ship","basketball","football","soccer","baseball","wind-power","light-rain","lightning","heavy-rain","sunrise","sunrise-1","sunset","sunny","cloudy","partly-cloudy","cloudy-and-sunny","moon","moon-night","dish","dish-1","food","chicken","fork-spoon","knife-fork","burger","tableware","sugar","dessert","ice-cream","hot-water","water-cup","coffee-cup","cold-drink","goblet","goblet-full","goblet-square","goblet-square-full","refrigerator","grape","watermelon","cherry","apple","pear","orange","coffee","ice-tea","ice-drink","milk-tea","potato-strips","lollipop","ice-cream-square","ice-cream-round"] \ No newline at end of file diff --git a/ruoyi-ui/src/utils/generator/js.js b/ruoyi-ui/src/utils/generator/js.js deleted file mode 100644 index ee8668d..0000000 --- a/ruoyi-ui/src/utils/generator/js.js +++ /dev/null @@ -1,235 +0,0 @@ -import { exportDefault, titleCase } from '@/utils/index' -import { trigger } from './config' - -const units = { - KB: '1024', - MB: '1024 / 1024', - GB: '1024 / 1024 / 1024' -} -let confGlobal -const inheritAttrs = { - file: '', - dialog: 'inheritAttrs: false,' -} - - -export function makeUpJs(conf, type) { - confGlobal = conf = JSON.parse(JSON.stringify(conf)) - const dataList = [] - const ruleList = [] - const optionsList = [] - const propsList = [] - const methodList = mixinMethod(type) - const uploadVarList = [] - - conf.fields.forEach(el => { - buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) - }) - - const script = buildexport( - conf, - type, - dataList.join('\n'), - ruleList.join('\n'), - optionsList.join('\n'), - uploadVarList.join('\n'), - propsList.join('\n'), - methodList.join('\n') - ) - confGlobal = null - return script -} - -function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) { - buildData(el, dataList) - buildRules(el, ruleList) - - if (el.options && el.options.length) { - buildOptions(el, optionsList) - if (el.dataType === 'dynamic') { - const model = `${el.vModel}Options` - const options = titleCase(model) - buildOptionMethod(`get${options}`, model, methodList) - } - } - - if (el.props && el.props.props) { - buildProps(el, propsList) - } - - if (el.action && el.tag === 'el-upload') { - uploadVarList.push( - `${el.vModel}Action: '${el.action}', - ${el.vModel}fileList: [],` - ) - methodList.push(buildBeforeUpload(el)) - if (!el['auto-upload']) { - methodList.push(buildSubmitUpload(el)) - } - } - - if (el.children) { - el.children.forEach(el2 => { - buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) - }) - } -} - -function mixinMethod(type) { - const list = []; const - minxins = { - file: confGlobal.formBtns ? { - submitForm: `submitForm() { - this.$refs['${confGlobal.formRef}'].validate(valid => { - if(!valid) return - // TODO 提交表单 - }) - },`, - resetForm: `resetForm() { - this.$refs['${confGlobal.formRef}'].resetFields() - },` - } : null, - dialog: { - onOpen: 'onOpen() {},', - onClose: `onClose() { - this.$refs['${confGlobal.formRef}'].resetFields() - },`, - close: `close() { - this.$emit('update:visible', false) - },`, - handleConfirm: `handleConfirm() { - this.$refs['${confGlobal.formRef}'].validate(valid => { - if(!valid) return - this.close() - }) - },` - } - } - - const methods = minxins[type] - if (methods) { - Object.keys(methods).forEach(key => { - list.push(methods[key]) - }) - } - - return list -} - -function buildData(conf, dataList) { - if (conf.vModel === undefined) return - let defaultValue - if (typeof (conf.defaultValue) === 'string' && !conf.multiple) { - defaultValue = `'${conf.defaultValue}'` - } else { - defaultValue = `${JSON.stringify(conf.defaultValue)}` - } - dataList.push(`${conf.vModel}: ${defaultValue},`) -} - -function buildRules(conf, ruleList) { - if (conf.vModel === undefined) return - const rules = [] - if (trigger[conf.tag]) { - if (conf.required) { - const type = Array.isArray(conf.defaultValue) ? 'type: \'array\',' : '' - let message = Array.isArray(conf.defaultValue) ? `请至少选择一个${conf.vModel}` : conf.placeholder - if (message === undefined) message = `${conf.label}不能为空` - rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`) - } - if (conf.regList && Array.isArray(conf.regList)) { - conf.regList.forEach(item => { - if (item.pattern) { - rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`) - } - }) - } - ruleList.push(`${conf.vModel}: [${rules.join(',')}],`) - } -} - -function buildOptions(conf, optionsList) { - if (conf.vModel === undefined) return - if (conf.dataType === 'dynamic') { conf.options = [] } - const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},` - optionsList.push(str) -} - -function buildProps(conf, propsList) { - if (conf.dataType === 'dynamic') { - conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey) - conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey) - conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey) - } - const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},` - propsList.push(str) -} - -function buildBeforeUpload(conf) { - const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const - returnList = [] - if (conf.fileSize) { - rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize} - if(!isRightSize){ - this.$message.error('文件大小超过 ${conf.fileSize}${conf.sizeUnit}') - }` - returnList.push('isRightSize') - } - if (conf.accept) { - acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type) - if(!isAccept){ - this.$message.error('应该选择${conf.accept}类型的文件') - }` - returnList.push('isAccept') - } - const str = `${conf.vModel}BeforeUpload(file) { - ${rightSizeCode} - ${acceptCode} - return ${returnList.join('&&')} - },` - return returnList.length ? str : '' -} - -function buildSubmitUpload(conf) { - const str = `submitUpload() { - this.$refs['${conf.vModel}'].submit() - },` - return str -} - -function buildOptionMethod(methodName, model, methodList) { - const str = `${methodName}() { - // TODO 发起请求获取数据 - this.${model} - },` - methodList.push(str) -} - -function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) { - const str = `${exportDefault}{ - ${inheritAttrs[type]} - components: {}, - props: [], - data () { - return { - ${conf.formModel}: { - ${data} - }, - ${conf.formRules}: { - ${rules} - }, - ${uploadVar} - ${selectOptions} - ${props} - } - }, - computed: {}, - watch: {}, - created () {}, - mounted () {}, - methods: { - ${methods} - } -}` - return str -} diff --git a/ruoyi-ui/src/utils/generator/render.js b/ruoyi-ui/src/utils/generator/render.js deleted file mode 100644 index e8640f0..0000000 --- a/ruoyi-ui/src/utils/generator/render.js +++ /dev/null @@ -1,126 +0,0 @@ -import { makeMap } from '@/utils/index' - -// 参考https://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js -const isAttr = makeMap( - 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' - + 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' - + 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' - + 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' - + 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' - + 'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' - + 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' - + 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' - + 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' - + 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' - + 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' - + 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' - + 'target,title,type,usemap,value,width,wrap' -) - -function vModel(self, dataObject, defaultValue) { - dataObject.props.value = defaultValue - - dataObject.on.input = val => { - self.$emit('input', val) - } -} - -const componentChild = { - 'el-button': { - default(h, conf, key) { - return conf[key] - }, - }, - 'el-input': { - prepend(h, conf, key) { - return <template slot="prepend">{conf[key]}</template> - }, - append(h, conf, key) { - return <template slot="append">{conf[key]}</template> - } - }, - 'el-select': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - list.push(<el-option label={item.label} value={item.value} disabled={item.disabled}></el-option>) - }) - return list - } - }, - 'el-radio-group': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - if (conf.optionType === 'button') list.push(<el-radio-button label={item.value}>{item.label}</el-radio-button>) - else list.push(<el-radio label={item.value} border={conf.border}>{item.label}</el-radio>) - }) - return list - } - }, - 'el-checkbox-group': { - options(h, conf, key) { - const list = [] - conf.options.forEach(item => { - if (conf.optionType === 'button') { - list.push(<el-checkbox-button label={item.value}>{item.label}</el-checkbox-button>) - } else { - list.push(<el-checkbox label={item.value} border={conf.border}>{item.label}</el-checkbox>) - } - }) - return list - } - }, - 'el-upload': { - 'list-type': (h, conf, key) => { - const list = [] - if (conf['list-type'] === 'picture-card') { - list.push(<i class="el-icon-plus"></i>) - } else { - list.push(<el-button size="small" type="primary" icon="el-icon-upload">{conf.buttonText}</el-button>) - } - if (conf.showTip) { - list.push(<div slot="tip" class="el-upload__tip">只能上传不超过 {conf.fileSize}{conf.sizeUnit} 的{conf.accept}文件</div>) - } - return list - } - } -} - -export default { - render(h) { - const dataObject = { - attrs: {}, - props: {}, - on: {}, - style: {} - } - const confClone = JSON.parse(JSON.stringify(this.conf)) - const children = [] - - const childObjs = componentChild[confClone.tag] - if (childObjs) { - Object.keys(childObjs).forEach(key => { - const childFunc = childObjs[key] - if (confClone[key]) { - children.push(childFunc(h, confClone, key)) - } - }) - } - - Object.keys(confClone).forEach(key => { - const val = confClone[key] - if (key === 'vModel') { - vModel(this, dataObject, confClone.defaultValue) - } else if (dataObject[key]) { - dataObject[key] = val - } else if (!isAttr(key)) { - dataObject.props[key] = val - } else { - dataObject.attrs[key] = val - } - }) - return h(this.conf.tag, dataObject, children) - }, - props: ['conf'] -} diff --git a/ruoyi-ui/src/utils/index.js b/ruoyi-ui/src/utils/index.js deleted file mode 100644 index df5db12..0000000 --- a/ruoyi-ui/src/utils/index.js +++ /dev/null @@ -1,390 +0,0 @@ -import { parseTime } from './ruoyi' - -/** - * 表格时间格式化 - */ -export function formatDate(cellValue) { - if (cellValue == null || cellValue == "") return ""; - var date = new Date(cellValue) - var year = date.getFullYear() - var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 - var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() - var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() - var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() - var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() - return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds -} - -/** - * @param {number} time - * @param {string} option - * @returns {string} - */ -export function formatTime(time, option) { - if (('' + time).length === 10) { - time = parseInt(time) * 1000 - } else { - time = +time - } - const d = new Date(time) - const now = Date.now() - - const diff = (now - d) / 1000 - - if (diff < 30) { - return '刚刚' - } else if (diff < 3600) { - // less 1 hour - return Math.ceil(diff / 60) + '分钟前' - } else if (diff < 3600 * 24) { - return Math.ceil(diff / 3600) + '小时前' - } else if (diff < 3600 * 24 * 2) { - return '1天前' - } - if (option) { - return parseTime(time, option) - } else { - return ( - d.getMonth() + - 1 + - '月' + - d.getDate() + - '日' + - d.getHours() + - '时' + - d.getMinutes() + - '分' - ) - } -} - -/** - * @param {string} url - * @returns {Object} - */ -export function getQueryObject(url) { - url = url == null ? window.location.href : url - const search = url.substring(url.lastIndexOf('?') + 1) - const obj = {} - const reg = /([^?&=]+)=([^?&=]*)/g - search.replace(reg, (rs, $1, $2) => { - const name = decodeURIComponent($1) - let val = decodeURIComponent($2) - val = String(val) - obj[name] = val - return rs - }) - return obj -} - -/** - * @param {string} input value - * @returns {number} output value - */ -export function byteLength(str) { - // returns the byte length of an utf8 string - let s = str.length - for (var i = str.length - 1; i >= 0; i--) { - const code = str.charCodeAt(i) - if (code > 0x7f && code <= 0x7ff) s++ - else if (code > 0x7ff && code <= 0xffff) s += 2 - if (code >= 0xDC00 && code <= 0xDFFF) i-- - } - return s -} - -/** - * @param {Array} actual - * @returns {Array} - */ -export function cleanArray(actual) { - const newArray = [] - for (let i = 0; i < actual.length; i++) { - if (actual[i]) { - newArray.push(actual[i]) - } - } - return newArray -} - -/** - * @param {Object} json - * @returns {Array} - */ -export function param(json) { - if (!json) return '' - return cleanArray( - Object.keys(json).map(key => { - if (json[key] === undefined) return '' - return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) - }) - ).join('&') -} - -/** - * @param {string} url - * @returns {Object} - */ -export function param2Obj(url) { - const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') - if (!search) { - return {} - } - const obj = {} - const searchArr = search.split('&') - searchArr.forEach(v => { - const index = v.indexOf('=') - if (index !== -1) { - const name = v.substring(0, index) - const val = v.substring(index + 1, v.length) - obj[name] = val - } - }) - return obj -} - -/** - * @param {string} val - * @returns {string} - */ -export function html2Text(val) { - const div = document.createElement('div') - div.innerHTML = val - return div.textContent || div.innerText -} - -/** - * Merges two objects, giving the last one precedence - * @param {Object} target - * @param {(Object|Array)} source - * @returns {Object} - */ -export function objectMerge(target, source) { - if (typeof target !== 'object') { - target = {} - } - if (Array.isArray(source)) { - return source.slice() - } - Object.keys(source).forEach(property => { - const sourceProperty = source[property] - if (typeof sourceProperty === 'object') { - target[property] = objectMerge(target[property], sourceProperty) - } else { - target[property] = sourceProperty - } - }) - return target -} - -/** - * @param {HTMLElement} element - * @param {string} className - */ -export function toggleClass(element, className) { - if (!element || !className) { - return - } - let classString = element.className - const nameIndex = classString.indexOf(className) - if (nameIndex === -1) { - classString += '' + className - } else { - classString = - classString.substr(0, nameIndex) + - classString.substr(nameIndex + className.length) - } - element.className = classString -} - -/** - * @param {string} type - * @returns {Date} - */ -export function getTime(type) { - if (type === 'start') { - return new Date().getTime() - 3600 * 1000 * 24 * 90 - } else { - return new Date(new Date().toDateString()) - } -} - -/** - * @param {Function} func - * @param {number} wait - * @param {boolean} immediate - * @return {*} - */ -export function debounce(func, wait, immediate) { - let timeout, args, context, timestamp, result - - const later = function() { - // 据上一次触发时间间隔 - const last = +new Date() - timestamp - - // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait - if (last < wait && last > 0) { - timeout = setTimeout(later, wait - last) - } else { - timeout = null - // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 - if (!immediate) { - result = func.apply(context, args) - if (!timeout) context = args = null - } - } - } - - return function(...args) { - context = this - timestamp = +new Date() - const callNow = immediate && !timeout - // 如果延时不存在,重新设定延时 - if (!timeout) timeout = setTimeout(later, wait) - if (callNow) { - result = func.apply(context, args) - context = args = null - } - - return result - } -} - -/** - * This is just a simple version of deep copy - * Has a lot of edge cases bug - * If you want to use a perfect deep copy, use lodash's _.cloneDeep - * @param {Object} source - * @returns {Object} - */ -export function deepClone(source) { - if (!source && typeof source !== 'object') { - throw new Error('error arguments', 'deepClone') - } - const targetObj = source.constructor === Array ? [] : {} - Object.keys(source).forEach(keys => { - if (source[keys] && typeof source[keys] === 'object') { - targetObj[keys] = deepClone(source[keys]) - } else { - targetObj[keys] = source[keys] - } - }) - return targetObj -} - -/** - * @param {Array} arr - * @returns {Array} - */ -export function uniqueArr(arr) { - return Array.from(new Set(arr)) -} - -/** - * @returns {string} - */ -export function createUniqueString() { - const timestamp = +new Date() + '' - const randomNum = parseInt((1 + Math.random()) * 65536) + '' - return (+(randomNum + timestamp)).toString(32) -} - -/** - * Check if an element has a class - * @param {HTMLElement} elm - * @param {string} cls - * @returns {boolean} - */ -export function hasClass(ele, cls) { - return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) -} - -/** - * Add class to element - * @param {HTMLElement} elm - * @param {string} cls - */ -export function addClass(ele, cls) { - if (!hasClass(ele, cls)) ele.className += ' ' + cls -} - -/** - * Remove class from element - * @param {HTMLElement} elm - * @param {string} cls - */ -export function removeClass(ele, cls) { - if (hasClass(ele, cls)) { - const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') - ele.className = ele.className.replace(reg, ' ') - } -} - -export function makeMap(str, expectsLowerCase) { - const map = Object.create(null) - const list = str.split(',') - for (let i = 0; i < list.length; i++) { - map[list[i]] = true - } - return expectsLowerCase - ? val => map[val.toLowerCase()] - : val => map[val] -} - -export const exportDefault = 'export default ' - -export const beautifierConf = { - html: { - indent_size: '2', - indent_char: ' ', - max_preserve_newlines: '-1', - preserve_newlines: false, - keep_array_indentation: false, - break_chained_methods: false, - indent_scripts: 'separate', - brace_style: 'end-expand', - space_before_conditional: true, - unescape_strings: false, - jslint_happy: false, - end_with_newline: true, - wrap_line_length: '110', - indent_inner_html: true, - comma_first: false, - e4x: true, - indent_empty_lines: true - }, - js: { - indent_size: '2', - indent_char: ' ', - max_preserve_newlines: '-1', - preserve_newlines: false, - keep_array_indentation: false, - break_chained_methods: false, - indent_scripts: 'normal', - brace_style: 'end-expand', - space_before_conditional: true, - unescape_strings: false, - jslint_happy: true, - end_with_newline: true, - wrap_line_length: '110', - indent_inner_html: true, - comma_first: false, - e4x: true, - indent_empty_lines: true - } -} - -// 首字母大小 -export function titleCase(str) { - return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) -} - -// 下划转驼峰 -export function camelCase(str) { - return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()) -} - -export function isNumberStr(str) { - return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) -} - diff --git a/ruoyi-ui/src/utils/jsencrypt.js b/ruoyi-ui/src/utils/jsencrypt.js deleted file mode 100644 index 78d9523..0000000 --- a/ruoyi-ui/src/utils/jsencrypt.js +++ /dev/null @@ -1,30 +0,0 @@ -import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' - -// 密钥对生成 http://web.chacuo.net/netrsakeypair - -const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + - 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' - -const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + - '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + - 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + - 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + - 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + - 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + - 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + - 'UP8iWi1Qw0Y=' - -// 加密 -export function encrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPublicKey(publicKey) // 设置公钥 - return encryptor.encrypt(txt) // 对数据进行加密 -} - -// 解密 -export function decrypt(txt) { - const encryptor = new JSEncrypt() - encryptor.setPrivateKey(privateKey) // 设置私钥 - return encryptor.decrypt(txt) // 对数据进行解密 -} - diff --git a/ruoyi-ui/src/utils/permission.js b/ruoyi-ui/src/utils/permission.js deleted file mode 100644 index 189a716..0000000 --- a/ruoyi-ui/src/utils/permission.js +++ /dev/null @@ -1,47 +0,0 @@ -import store from '@/store' - -/** - * 字符权限校验 - * @param {Array} value 校验值 - * @returns {Boolean} - */ -export function checkPermi(value) { - if (value && value instanceof Array && value.length > 0) { - const permissions = store.getters && store.getters.permissions - const permissionDatas = value - const all_permission = "*:*:*"; - - const hasPermission = permissions.some(permission => { - return all_permission === permission || permissionDatas.includes(permission) - }) - - return hasPermission; - - } else { - console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) - return false - } -} - -/** - * 角色权限校验 - * @param {Array} value 校验值 - * @returns {Boolean} - */ -export function checkRole(value) { - if (value && value instanceof Array && value.length > 0) { - const roles = store.getters && store.getters.roles - const permissionRoles = value - const super_admin = "admin"; - - const hasRole = roles.some(role => { - return super_admin === role || permissionRoles.includes(role) - }) - - return hasRole; - - } else { - console.error(`need roles! Like checkRole="['admin','editor']"`) - return false - } -} \ No newline at end of file diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js deleted file mode 100644 index ffb0d21..0000000 --- a/ruoyi-ui/src/utils/request.js +++ /dev/null @@ -1,152 +0,0 @@ -import axios from 'axios' -import { Notification, MessageBox, Message, Loading } from 'element-ui' -import store from '@/store' -import { getToken } from '@/utils/auth' -import errorCode from '@/utils/errorCode' -import { tansParams, blobValidate } from "@/utils/ruoyi"; -import cache from '@/plugins/cache' -import { saveAs } from 'file-saver' - -let downloadLoadingInstance; -// 是否显示重新登录 -export let isRelogin = { show: false }; - -axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' -// 创建axios实例 -const service = axios.create({ - // axios中请求配置有baseURL选项,表示请求URL公共部分 - baseURL: process.env.VUE_APP_BASE_API, - // 超时 - timeout: 10000 -}) - -// request拦截器 -service.interceptors.request.use(config => { - // 是否需要设置 token - const isToken = (config.headers || {}).isToken === false - // 是否需要防止数据重复提交 - const isRepeatSubmit = (config.headers || {}).repeatSubmit === false - if (getToken() && !isToken) { - config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 - } - // get请求映射params参数 - if (config.method === 'get' && config.params) { - let url = config.url + '?' + tansParams(config.params); - url = url.slice(0, -1); - config.params = {}; - config.url = url; - } - if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { - const requestObj = { - url: config.url, - data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, - time: new Date().getTime() - } - const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小 - const limitSize = 5 * 1024 * 1024; // 限制存放数据5M - if (requestSize >= limitSize) { - console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') - return config; - } - const sessionObj = cache.session.getJSON('sessionObj') - if (sessionObj === undefined || sessionObj === null || sessionObj === '') { - cache.session.setJSON('sessionObj', requestObj) - } else { - const s_url = sessionObj.url; // 请求地址 - const s_data = sessionObj.data; // 请求数据 - const s_time = sessionObj.time; // 请求时间 - const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 - if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { - const message = '数据正在处理,请勿重复提交'; - console.warn(`[${s_url}]: ` + message) - return Promise.reject(new Error(message)) - } else { - cache.session.setJSON('sessionObj', requestObj) - } - } - } - return config -}, error => { - console.log(error) - Promise.reject(error) -}) - -// 响应拦截器 -service.interceptors.response.use(res => { - // 未设置状态码则默认成功状态 - const code = res.data.code || 200; - // 获取错误信息 - const msg = errorCode[code] || res.data.msg || errorCode['default'] - // 二进制数据则直接返回 - if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { - return res.data - } - if (code === 401) { - if (!isRelogin.show) { - isRelogin.show = true; - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { - isRelogin.show = false; - store.dispatch('LogOut').then(() => { - location.href = '/index'; - }) - }).catch(() => { - isRelogin.show = false; - }); - } - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - } else if (code === 500) { - Message({ message: msg, type: 'error' }) - return Promise.reject(new Error(msg)) - } else if (code === 601) { - Message({ message: msg, type: 'warning' }) - return Promise.reject('error') - } else if (code !== 200) { - Notification.error({ title: msg }) - return Promise.reject('error') - } else { - return res.data - } - }, - error => { - console.log('err' + error) - let { message } = error; - if (message == "Network Error") { - message = "后端接口连接异常"; - } else if (message.includes("timeout")) { - message = "系统接口请求超时"; - } else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常"; - } - Message({ message: message, type: 'error', duration: 5 * 1000 }) - return Promise.reject(error) - } -) - -// 通用下载方法 -export function download(url, params, filename, config) { - downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) - return service.post(url, params, { - transformRequest: [(params) => { return tansParams(params) }], - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - responseType: 'blob', - ...config - }).then(async (data) => { - const isBlob = blobValidate(data); - if (isBlob) { - const blob = new Blob([data]) - saveAs(blob, filename) - } else { - const resText = await data.text(); - const rspObj = JSON.parse(resText); - const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] - Message.error(errMsg); - } - downloadLoadingInstance.close(); - }).catch((r) => { - console.error(r) - Message.error('下载文件出现错误,请联系管理员!') - downloadLoadingInstance.close(); - }) -} - -export default service diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js deleted file mode 100644 index 44bf9c4..0000000 --- a/ruoyi-ui/src/utils/ruoyi.js +++ /dev/null @@ -1,233 +0,0 @@ - - -/** - * 通用js方法封装处理 - * Copyright (c) 2019 ruoyi - */ - -// 日期格式化 -export function parseTime(time, pattern) { - if (arguments.length === 0 || !time) { - return null - } - const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' - let date - if (typeof time === 'object') { - date = time - } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { - time = parseInt(time) - } else if (typeof time === 'string') { - time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); - } - if ((typeof time === 'number') && (time.toString().length === 10)) { - time = time * 1000 - } - date = new Date(time) - } - const formatObj = { - y: date.getFullYear(), - m: date.getMonth() + 1, - d: date.getDate(), - h: date.getHours(), - i: date.getMinutes(), - s: date.getSeconds(), - a: date.getDay() - } - const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { - let value = formatObj[key] - // Note: getDay() returns 0 on Sunday - if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } - if (result.length > 0 && value < 10) { - value = '0' + value - } - return value || 0 - }) - return time_str -} - -// 表单重置 -export function resetForm(refName) { - if (this.$refs[refName]) { - this.$refs[refName].resetFields(); - } -} - -// 添加日期范围 -export function addDateRange(params, dateRange, propName) { - let search = params; - search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; - dateRange = Array.isArray(dateRange) ? dateRange : []; - if (typeof (propName) === 'undefined') { - search.params['beginTime'] = dateRange[0]; - search.params['endTime'] = dateRange[1]; - } else { - search.params['begin' + propName] = dateRange[0]; - search.params['end' + propName] = dateRange[1]; - } - return search; -} - -// 回显数据字典 -export function selectDictLabel(datas, value) { - if (value === undefined) { - return ""; - } - var actions = []; - Object.keys(datas).some((key) => { - if (datas[key].value == ('' + value)) { - actions.push(datas[key].label); - return true; - } - }) - if (actions.length === 0) { - actions.push(value); - } - return actions.join(''); -} - -// 回显数据字典(字符串、数组) -export function selectDictLabels(datas, value, separator) { - if (value === undefined || value.length ===0) { - return ""; - } - if (Array.isArray(value)) { - value = value.join(","); - } - var actions = []; - var currentSeparator = undefined === separator ? "," : separator; - var temp = value.split(currentSeparator); - Object.keys(value.split(currentSeparator)).some((val) => { - var match = false; - Object.keys(datas).some((key) => { - if (datas[key].value == ('' + temp[val])) { - actions.push(datas[key].label + currentSeparator); - match = true; - } - }) - if (!match) { - actions.push(temp[val] + currentSeparator); - } - }) - return actions.join('').substring(0, actions.join('').length - 1); -} - -// 字符串格式化(%s ) -export function sprintf(str) { - var args = arguments, flag = true, i = 1; - str = str.replace(/%s/g, function () { - var arg = args[i++]; - if (typeof arg === 'undefined') { - flag = false; - return ''; - } - return arg; - }); - return flag ? str : ''; -} - -// 转换字符串,undefined,null等转化为"" -export function parseStrEmpty(str) { - if (!str || str == "undefined" || str == "null") { - return ""; - } - return str; -} - -// 数据合并 -export function mergeRecursive(source, target) { - for (var p in target) { - try { - if (target[p].constructor == Object) { - source[p] = mergeRecursive(source[p], target[p]); - } else { - source[p] = target[p]; - } - } catch (e) { - source[p] = target[p]; - } - } - return source; -}; - -/** - * 构造树型结构数据 - * @param {*} data 数据源 - * @param {*} id id字段 默认 'id' - * @param {*} parentId 父节点字段 默认 'parentId' - * @param {*} children 孩子节点字段 默认 'children' - */ -export function handleTree(data, id, parentId, children) { - let config = { - id: id || 'id', - parentId: parentId || 'parentId', - childrenList: children || 'children' - }; - - var childrenListMap = {}; - var nodeIds = {}; - var tree = []; - - for (let d of data) { - let parentId = d[config.parentId]; - if (childrenListMap[parentId] == null) { - childrenListMap[parentId] = []; - } - nodeIds[d[config.id]] = d; - childrenListMap[parentId].push(d); - } - - for (let d of data) { - let parentId = d[config.parentId]; - if (nodeIds[parentId] == null) { - tree.push(d); - } - } - - for (let t of tree) { - adaptToChildrenList(t); - } - - function adaptToChildrenList(o) { - if (childrenListMap[o[config.id]] !== null) { - o[config.childrenList] = childrenListMap[o[config.id]]; - } - if (o[config.childrenList]) { - for (let c of o[config.childrenList]) { - adaptToChildrenList(c); - } - } - } - return tree; -} - -/** -* 参数处理 -* @param {*} params 参数 -*/ -export function tansParams(params) { - let result = '' - for (const propName of Object.keys(params)) { - const value = params[propName]; - var part = encodeURIComponent(propName) + "="; - if (value !== null && value !== "" && typeof (value) !== "undefined") { - if (typeof value === 'object') { - for (const key of Object.keys(value)) { - if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { - let params = propName + '[' + key + ']'; - var subPart = encodeURIComponent(params) + "="; - result += subPart + encodeURIComponent(value[key]) + "&"; - } - } - } else { - result += part + encodeURIComponent(value) + "&"; - } - } - } - return result -} - -// 验证是否为blob格式 -export function blobValidate(data) { - return data.type !== 'application/json' -} diff --git a/ruoyi-ui/src/utils/scroll-to.js b/ruoyi-ui/src/utils/scroll-to.js deleted file mode 100644 index c5d8e04..0000000 --- a/ruoyi-ui/src/utils/scroll-to.js +++ /dev/null @@ -1,58 +0,0 @@ -Math.easeInOutQuad = function(t, b, c, d) { - t /= d / 2 - if (t < 1) { - return c / 2 * t * t + b - } - t-- - return -c / 2 * (t * (t - 2) - 1) + b -} - -// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts -var requestAnimFrame = (function() { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } -})() - -/** - * Because it's so fucking difficult to detect the scrolling element, just move them all - * @param {number} amount - */ -function move(amount) { - document.documentElement.scrollTop = amount - document.body.parentNode.scrollTop = amount - document.body.scrollTop = amount -} - -function position() { - return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop -} - -/** - * @param {number} to - * @param {number} duration - * @param {Function} callback - */ -export function scrollTo(to, duration, callback) { - const start = position() - const change = to - start - const increment = 20 - let currentTime = 0 - duration = (typeof (duration) === 'undefined') ? 500 : duration - var animateScroll = function() { - // increment the time - currentTime += increment - // find the value with the quadratic in-out easing function - var val = Math.easeInOutQuad(currentTime, start, change, duration) - // move the document.body - move(val) - // do the animation unless its over - if (currentTime < duration) { - requestAnimFrame(animateScroll) - } else { - if (callback && typeof (callback) === 'function') { - // the animation is done so lets callback - callback() - } - } - } - animateScroll() -} diff --git a/ruoyi-ui/src/utils/validate.js b/ruoyi-ui/src/utils/validate.js deleted file mode 100644 index 57a568e..0000000 --- a/ruoyi-ui/src/utils/validate.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * @param {string} path - * @returns {Boolean} - */ -export function isExternal(path) { - return /^(https?:|mailto:|tel:)/.test(path) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUsername(str) { - const valid_map = ['admin', 'editor'] - return valid_map.indexOf(str.trim()) >= 0 -} - -/** - * @param {string} url - * @returns {Boolean} - */ -export function validURL(url) { - const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ - return reg.test(url) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validLowerCase(str) { - const reg = /^[a-z]+$/ - return reg.test(str) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validUpperCase(str) { - const reg = /^[A-Z]+$/ - return reg.test(str) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function validAlphabets(str) { - const reg = /^[A-Za-z]+$/ - return reg.test(str) -} - -/** - * @param {string} email - * @returns {Boolean} - */ -export function validEmail(email) { - const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - return reg.test(email) -} - -/** - * @param {string} str - * @returns {Boolean} - */ -export function isString(str) { - return typeof str === 'string' || str instanceof String; -} - -/** - * @param {Array} arg - * @returns {Boolean} - */ -export function isArray(arg) { - if (typeof Array.isArray === 'undefined') { - return Object.prototype.toString.call(arg) === '[object Array]' - } - return Array.isArray(arg) -} diff --git a/ruoyi-ui/src/views/dashboard/BarChart.vue b/ruoyi-ui/src/views/dashboard/BarChart.vue deleted file mode 100644 index 88e7ef6..0000000 --- a/ruoyi-ui/src/views/dashboard/BarChart.vue +++ /dev/null @@ -1,102 +0,0 @@ -<template> - <div :class="className" :style="{height:height,width:width}" /> -</template> - -<script> -import * as echarts from 'echarts' -require('echarts/theme/macarons') // echarts theme -import resize from './mixins/resize' - -const animationDuration = 6000 - -export default { - mixins: [resize], - props: { - className: { - type: String, - default: 'chart' - }, - width: { - type: String, - default: '100%' - }, - height: { - type: String, - default: '300px' - } - }, - data() { - return { - chart: null - } - }, - mounted() { - this.$nextTick(() => { - this.initChart() - }) - }, - beforeDestroy() { - if (!this.chart) { - return - } - this.chart.dispose() - this.chart = null - }, - methods: { - initChart() { - this.chart = echarts.init(this.$el, 'macarons') - - this.chart.setOption({ - tooltip: { - trigger: 'axis', - axisPointer: { // 坐标轴指示器,坐标轴触发有效 - type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' - } - }, - grid: { - top: 10, - left: '2%', - right: '2%', - bottom: '3%', - containLabel: true - }, - xAxis: [{ - type: 'category', - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], - axisTick: { - alignWithLabel: true - } - }], - yAxis: [{ - type: 'value', - axisTick: { - show: false - } - }], - series: [{ - name: 'pageA', - type: 'bar', - stack: 'vistors', - barWidth: '60%', - data: [79, 52, 200, 334, 390, 330, 220], - animationDuration - }, { - name: 'pageB', - type: 'bar', - stack: 'vistors', - barWidth: '60%', - data: [80, 52, 200, 334, 390, 330, 220], - animationDuration - }, { - name: 'pageC', - type: 'bar', - stack: 'vistors', - barWidth: '60%', - data: [30, 52, 200, 334, 390, 330, 220], - animationDuration - }] - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/dashboard/LineChart.vue b/ruoyi-ui/src/views/dashboard/LineChart.vue deleted file mode 100644 index 702ff73..0000000 --- a/ruoyi-ui/src/views/dashboard/LineChart.vue +++ /dev/null @@ -1,135 +0,0 @@ -<template> - <div :class="className" :style="{height:height,width:width}" /> -</template> - -<script> -import * as echarts from 'echarts' -require('echarts/theme/macarons') // echarts theme -import resize from './mixins/resize' - -export default { - mixins: [resize], - props: { - className: { - type: String, - default: 'chart' - }, - width: { - type: String, - default: '100%' - }, - height: { - type: String, - default: '350px' - }, - autoResize: { - type: Boolean, - default: true - }, - chartData: { - type: Object, - required: true - } - }, - data() { - return { - chart: null - } - }, - watch: { - chartData: { - deep: true, - handler(val) { - this.setOptions(val) - } - } - }, - mounted() { - this.$nextTick(() => { - this.initChart() - }) - }, - beforeDestroy() { - if (!this.chart) { - return - } - this.chart.dispose() - this.chart = null - }, - methods: { - initChart() { - this.chart = echarts.init(this.$el, 'macarons') - this.setOptions(this.chartData) - }, - setOptions({ expectedData, actualData } = {}) { - this.chart.setOption({ - xAxis: { - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], - boundaryGap: false, - axisTick: { - show: false - } - }, - grid: { - left: 10, - right: 10, - bottom: 20, - top: 30, - containLabel: true - }, - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'cross' - }, - padding: [5, 10] - }, - yAxis: { - axisTick: { - show: false - } - }, - legend: { - data: ['expected', 'actual'] - }, - series: [{ - name: 'expected', itemStyle: { - normal: { - color: '#FF005A', - lineStyle: { - color: '#FF005A', - width: 2 - } - } - }, - smooth: true, - type: 'line', - data: expectedData, - animationDuration: 2800, - animationEasing: 'cubicInOut' - }, - { - name: 'actual', - smooth: true, - type: 'line', - itemStyle: { - normal: { - color: '#3888fa', - lineStyle: { - color: '#3888fa', - width: 2 - }, - areaStyle: { - color: '#f3f8ff' - } - } - }, - data: actualData, - animationDuration: 2800, - animationEasing: 'quadraticOut' - }] - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/dashboard/PanelGroup.vue b/ruoyi-ui/src/views/dashboard/PanelGroup.vue deleted file mode 100644 index 1a1081f..0000000 --- a/ruoyi-ui/src/views/dashboard/PanelGroup.vue +++ /dev/null @@ -1,181 +0,0 @@ -<template> - <el-row :gutter="40" class="panel-group"> - <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col"> - <div class="card-panel" @click="handleSetLineChartData('newVisitis')"> - <div class="card-panel-icon-wrapper icon-people"> - <svg-icon icon-class="peoples" class-name="card-panel-icon" /> - </div> - <div class="card-panel-description"> - <div class="card-panel-text"> - 访客 - </div> - <count-to :start-val="0" :end-val="102400" :duration="2600" class="card-panel-num" /> - </div> - </div> - </el-col> - <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col"> - <div class="card-panel" @click="handleSetLineChartData('messages')"> - <div class="card-panel-icon-wrapper icon-message"> - <svg-icon icon-class="message" class-name="card-panel-icon" /> - </div> - <div class="card-panel-description"> - <div class="card-panel-text"> - 消息 - </div> - <count-to :start-val="0" :end-val="81212" :duration="3000" class="card-panel-num" /> - </div> - </div> - </el-col> - <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col"> - <div class="card-panel" @click="handleSetLineChartData('purchases')"> - <div class="card-panel-icon-wrapper icon-money"> - <svg-icon icon-class="money" class-name="card-panel-icon" /> - </div> - <div class="card-panel-description"> - <div class="card-panel-text"> - 金额 - </div> - <count-to :start-val="0" :end-val="9280" :duration="3200" class="card-panel-num" /> - </div> - </div> - </el-col> - <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col"> - <div class="card-panel" @click="handleSetLineChartData('shoppings')"> - <div class="card-panel-icon-wrapper icon-shopping"> - <svg-icon icon-class="shopping" class-name="card-panel-icon" /> - </div> - <div class="card-panel-description"> - <div class="card-panel-text"> - 订单 - </div> - <count-to :start-val="0" :end-val="13600" :duration="3600" class="card-panel-num" /> - </div> - </div> - </el-col> - </el-row> -</template> - -<script> -import CountTo from 'vue-count-to' - -export default { - components: { - CountTo - }, - methods: { - handleSetLineChartData(type) { - this.$emit('handleSetLineChartData', type) - } - } -} -</script> - -<style lang="scss" scoped> -.panel-group { - margin-top: 18px; - - .card-panel-col { - margin-bottom: 32px; - } - - .card-panel { - height: 108px; - cursor: pointer; - font-size: 12px; - position: relative; - overflow: hidden; - color: #666; - background: #fff; - box-shadow: 4px 4px 40px rgba(0, 0, 0, .05); - border-color: rgba(0, 0, 0, .05); - - &:hover { - .card-panel-icon-wrapper { - color: #fff; - } - - .icon-people { - background: #40c9c6; - } - - .icon-message { - background: #36a3f7; - } - - .icon-money { - background: #f4516c; - } - - .icon-shopping { - background: #34bfa3 - } - } - - .icon-people { - color: #40c9c6; - } - - .icon-message { - color: #36a3f7; - } - - .icon-money { - color: #f4516c; - } - - .icon-shopping { - color: #34bfa3 - } - - .card-panel-icon-wrapper { - float: left; - margin: 14px 0 0 14px; - padding: 16px; - transition: all 0.38s ease-out; - border-radius: 6px; - } - - .card-panel-icon { - float: left; - font-size: 48px; - } - - .card-panel-description { - float: right; - font-weight: bold; - margin: 26px; - margin-left: 0px; - - .card-panel-text { - line-height: 18px; - color: rgba(0, 0, 0, 0.45); - font-size: 16px; - margin-bottom: 12px; - } - - .card-panel-num { - font-size: 20px; - } - } - } -} - -@media (max-width:550px) { - .card-panel-description { - display: none; - } - - .card-panel-icon-wrapper { - float: none !important; - width: 100%; - height: 100%; - margin: 0 !important; - - .svg-icon { - display: block; - margin: 14px auto !important; - float: none !important; - } - } -} -</style> diff --git a/ruoyi-ui/src/views/dashboard/PieChart.vue b/ruoyi-ui/src/views/dashboard/PieChart.vue deleted file mode 100644 index 63f0d84..0000000 --- a/ruoyi-ui/src/views/dashboard/PieChart.vue +++ /dev/null @@ -1,79 +0,0 @@ -<template> - <div :class="className" :style="{height:height,width:width}" /> -</template> - -<script> -import * as echarts from 'echarts' -require('echarts/theme/macarons') // echarts theme -import resize from './mixins/resize' - -export default { - mixins: [resize], - props: { - className: { - type: String, - default: 'chart' - }, - width: { - type: String, - default: '100%' - }, - height: { - type: String, - default: '300px' - } - }, - data() { - return { - chart: null - } - }, - mounted() { - this.$nextTick(() => { - this.initChart() - }) - }, - beforeDestroy() { - if (!this.chart) { - return - } - this.chart.dispose() - this.chart = null - }, - methods: { - initChart() { - this.chart = echarts.init(this.$el, 'macarons') - - this.chart.setOption({ - tooltip: { - trigger: 'item', - formatter: '{a} <br/>{b} : {c} ({d}%)' - }, - legend: { - left: 'center', - bottom: '10', - data: ['Industries', 'Technology', 'Forex', 'Gold', 'Forecasts'] - }, - series: [ - { - name: 'WEEKLY WRITE ARTICLES', - type: 'pie', - roseType: 'radius', - radius: [15, 95], - center: ['50%', '38%'], - data: [ - { value: 320, name: 'Industries' }, - { value: 240, name: 'Technology' }, - { value: 149, name: 'Forex' }, - { value: 100, name: 'Gold' }, - { value: 59, name: 'Forecasts' } - ], - animationEasing: 'cubicInOut', - animationDuration: 2600 - } - ] - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/dashboard/RaddarChart.vue b/ruoyi-ui/src/views/dashboard/RaddarChart.vue deleted file mode 100644 index 312e018..0000000 --- a/ruoyi-ui/src/views/dashboard/RaddarChart.vue +++ /dev/null @@ -1,116 +0,0 @@ -<template> - <div :class="className" :style="{height:height,width:width}" /> -</template> - -<script> -import * as echarts from 'echarts' -require('echarts/theme/macarons') // echarts theme -import resize from './mixins/resize' - -const animationDuration = 3000 - -export default { - mixins: [resize], - props: { - className: { - type: String, - default: 'chart' - }, - width: { - type: String, - default: '100%' - }, - height: { - type: String, - default: '300px' - } - }, - data() { - return { - chart: null - } - }, - mounted() { - this.$nextTick(() => { - this.initChart() - }) - }, - beforeDestroy() { - if (!this.chart) { - return - } - this.chart.dispose() - this.chart = null - }, - methods: { - initChart() { - this.chart = echarts.init(this.$el, 'macarons') - - this.chart.setOption({ - tooltip: { - trigger: 'axis', - axisPointer: { // 坐标轴指示器,坐标轴触发有效 - type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' - } - }, - radar: { - radius: '66%', - center: ['50%', '42%'], - splitNumber: 8, - splitArea: { - areaStyle: { - color: 'rgba(127,95,132,.3)', - opacity: 1, - shadowBlur: 45, - shadowColor: 'rgba(0,0,0,.5)', - shadowOffsetX: 0, - shadowOffsetY: 15 - } - }, - indicator: [ - { name: 'Sales', max: 10000 }, - { name: 'Administration', max: 20000 }, - { name: 'Information Techology', max: 20000 }, - { name: 'Customer Support', max: 20000 }, - { name: 'Development', max: 20000 }, - { name: 'Marketing', max: 20000 } - ] - }, - legend: { - left: 'center', - bottom: '10', - data: ['Allocated Budget', 'Expected Spending', 'Actual Spending'] - }, - series: [{ - type: 'radar', - symbolSize: 0, - areaStyle: { - normal: { - shadowBlur: 13, - shadowColor: 'rgba(0,0,0,.2)', - shadowOffsetX: 0, - shadowOffsetY: 10, - opacity: 1 - } - }, - data: [ - { - value: [5000, 7000, 12000, 11000, 15000, 14000], - name: 'Allocated Budget' - }, - { - value: [4000, 9000, 15000, 15000, 13000, 11000], - name: 'Expected Spending' - }, - { - value: [5500, 11000, 12000, 15000, 12000, 12000], - name: 'Actual Spending' - } - ], - animationDuration: animationDuration - }] - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/dashboard/mixins/resize.js b/ruoyi-ui/src/views/dashboard/mixins/resize.js deleted file mode 100644 index b1e76e9..0000000 --- a/ruoyi-ui/src/views/dashboard/mixins/resize.js +++ /dev/null @@ -1,56 +0,0 @@ -import { debounce } from '@/utils' - -export default { - data() { - return { - $_sidebarElm: null, - $_resizeHandler: null - } - }, - mounted() { - this.initListener() - }, - activated() { - if (!this.$_resizeHandler) { - // avoid duplication init - this.initListener() - } - - // when keep-alive chart activated, auto resize - this.resize() - }, - beforeDestroy() { - this.destroyListener() - }, - deactivated() { - this.destroyListener() - }, - methods: { - // use $_ for mixins properties - // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential - $_sidebarResizeHandler(e) { - if (e.propertyName === 'width') { - this.$_resizeHandler() - } - }, - initListener() { - this.$_resizeHandler = debounce(() => { - this.resize() - }, 100) - window.addEventListener('resize', this.$_resizeHandler) - - this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] - this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) - }, - destroyListener() { - window.removeEventListener('resize', this.$_resizeHandler) - this.$_resizeHandler = null - - this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) - }, - resize() { - const { chart } = this - chart && chart.resize() - } - } -} diff --git a/ruoyi-ui/src/views/error/401.vue b/ruoyi-ui/src/views/error/401.vue deleted file mode 100644 index 448b6ec..0000000 --- a/ruoyi-ui/src/views/error/401.vue +++ /dev/null @@ -1,88 +0,0 @@ -<template> - <div class="errPage-container"> - <el-button icon="arrow-left" class="pan-back-btn" @click="back"> - 返回 - </el-button> - <el-row> - <el-col :span="12"> - <h1 class="text-jumbo text-ginormous"> - 401错误! - </h1> - <h2>您没有访问权限!</h2> - <h6>对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面</h6> - <ul class="list-unstyled"> - <li class="link-type"> - <router-link to="/"> - 回首页 - </router-link> - </li> - </ul> - </el-col> - <el-col :span="12"> - <img :src="errGif" width="313" height="428" alt="Girl has dropped her ice cream."> - </el-col> - </el-row> - </div> -</template> - -<script> -import errGif from '@/assets/401_images/401.gif' - -export default { - name: 'Page401', - data() { - return { - errGif: errGif + '?' + +new Date() - } - }, - methods: { - back() { - if (this.$route.query.noGoBack) { - this.$router.push({ path: '/' }) - } else { - this.$router.go(-1) - } - } - } -} -</script> - -<style lang="scss" scoped> - .errPage-container { - width: 800px; - max-width: 100%; - margin: 100px auto; - .pan-back-btn { - background: #008489; - color: #fff; - border: none!important; - } - .pan-gif { - margin: 0 auto; - display: block; - } - .pan-img { - display: block; - margin: 0 auto; - width: 100%; - } - .text-jumbo { - font-size: 60px; - font-weight: 700; - color: #484848; - } - .list-unstyled { - font-size: 14px; - li { - padding-bottom: 5px; - } - a { - color: #008489; - text-decoration: none; - &:hover { - text-decoration: underline; - } - } - } - } -</style> diff --git a/ruoyi-ui/src/views/error/404.vue b/ruoyi-ui/src/views/error/404.vue deleted file mode 100644 index 96f075c..0000000 --- a/ruoyi-ui/src/views/error/404.vue +++ /dev/null @@ -1,233 +0,0 @@ -<template> - <div class="wscn-http404-container"> - <div class="wscn-http404"> - <div class="pic-404"> - <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404"> - <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404"> - <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404"> - <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404"> - </div> - <div class="bullshit"> - <div class="bullshit__oops"> - 404错误! - </div> - <div class="bullshit__headline"> - {{ message }} - </div> - <div class="bullshit__info"> - 对不起,您正在寻找的页面不存在。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 - </div> - <router-link to="/" class="bullshit__return-home"> - 返回首页 - </router-link> - </div> - </div> - </div> -</template> - -<script> - -export default { - name: 'Page404', - computed: { - message() { - return '找不到网页!' - } - } -} -</script> - -<style lang="scss" scoped> -.wscn-http404-container{ - transform: translate(-50%,-50%); - position: absolute; - top: 40%; - left: 50%; -} -.wscn-http404 { - position: relative; - width: 1200px; - padding: 0 50px; - overflow: hidden; - .pic-404 { - position: relative; - float: left; - width: 600px; - overflow: hidden; - &__parent { - width: 100%; - } - &__child { - position: absolute; - &.left { - width: 80px; - top: 17px; - left: 220px; - opacity: 0; - animation-name: cloudLeft; - animation-duration: 2s; - animation-timing-function: linear; - animation-fill-mode: forwards; - animation-delay: 1s; - } - &.mid { - width: 46px; - top: 10px; - left: 420px; - opacity: 0; - animation-name: cloudMid; - animation-duration: 2s; - animation-timing-function: linear; - animation-fill-mode: forwards; - animation-delay: 1.2s; - } - &.right { - width: 62px; - top: 100px; - left: 500px; - opacity: 0; - animation-name: cloudRight; - animation-duration: 2s; - animation-timing-function: linear; - animation-fill-mode: forwards; - animation-delay: 1s; - } - @keyframes cloudLeft { - 0% { - top: 17px; - left: 220px; - opacity: 0; - } - 20% { - top: 33px; - left: 188px; - opacity: 1; - } - 80% { - top: 81px; - left: 92px; - opacity: 1; - } - 100% { - top: 97px; - left: 60px; - opacity: 0; - } - } - @keyframes cloudMid { - 0% { - top: 10px; - left: 420px; - opacity: 0; - } - 20% { - top: 40px; - left: 360px; - opacity: 1; - } - 70% { - top: 130px; - left: 180px; - opacity: 1; - } - 100% { - top: 160px; - left: 120px; - opacity: 0; - } - } - @keyframes cloudRight { - 0% { - top: 100px; - left: 500px; - opacity: 0; - } - 20% { - top: 120px; - left: 460px; - opacity: 1; - } - 80% { - top: 180px; - left: 340px; - opacity: 1; - } - 100% { - top: 200px; - left: 300px; - opacity: 0; - } - } - } - } - .bullshit { - position: relative; - float: left; - width: 300px; - padding: 30px 0; - overflow: hidden; - &__oops { - font-size: 32px; - font-weight: bold; - line-height: 40px; - color: #1482f0; - opacity: 0; - margin-bottom: 20px; - animation-name: slideUp; - animation-duration: 0.5s; - animation-fill-mode: forwards; - } - &__headline { - font-size: 20px; - line-height: 24px; - color: #222; - font-weight: bold; - opacity: 0; - margin-bottom: 10px; - animation-name: slideUp; - animation-duration: 0.5s; - animation-delay: 0.1s; - animation-fill-mode: forwards; - } - &__info { - font-size: 13px; - line-height: 21px; - color: grey; - opacity: 0; - margin-bottom: 30px; - animation-name: slideUp; - animation-duration: 0.5s; - animation-delay: 0.2s; - animation-fill-mode: forwards; - } - &__return-home { - display: block; - float: left; - width: 110px; - height: 36px; - background: #1482f0; - border-radius: 100px; - text-align: center; - color: #ffffff; - opacity: 0; - font-size: 14px; - line-height: 36px; - cursor: pointer; - animation-name: slideUp; - animation-duration: 0.5s; - animation-delay: 0.3s; - animation-fill-mode: forwards; - } - @keyframes slideUp { - 0% { - transform: translateY(60px); - opacity: 0; - } - 100% { - transform: translateY(0); - opacity: 1; - } - } - } -} -</style> diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue deleted file mode 100644 index 1a7310a..0000000 --- a/ruoyi-ui/src/views/index.vue +++ /dev/null @@ -1,1067 +0,0 @@ -<template> - <div class="app-container home"> - <el-row :gutter="20"> - <el-col :sm="24" :lg="24"> - <blockquote class="text-warning" style="font-size: 14px"> - 领取阿里云通用云产品1888优惠券 - <br /> - <el-link - href="https://www.aliyun.com/minisite/goods?userCode=brki8iof" - type="primary" - target="_blank" - >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link - > - <br /> - 领取腾讯云通用云产品2860优惠券 - <br /> - <el-link - href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console" - type="primary" - target="_blank" - >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link - > - <br /> - 阿里云服务器折扣区 - <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank" - >>☛☛点我进入☚☚</el-link - > - 腾讯云服务器秒杀区 - <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank" - >>☛☛点我进入☚☚</el-link - ><br /> - <h4 class="text-danger"> - 云产品通用红包,可叠加官网常规优惠使用。(仅限新用户) - </h4> - </blockquote> - - <hr /> - </el-col> - </el-row> - <el-row :gutter="20"> - <el-col :sm="24" :lg="12" style="padding-left: 20px"> - <h2>若依后台管理框架</h2> - <p> - 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 - </p> - <p> - <b>当前版本:</b> <span>v{{ version }}</span> - </p> - <p> - <el-tag type="danger">¥免费开源</el-tag> - </p> - <p> - <el-button - type="primary" - size="mini" - icon="el-icon-cloudy" - plain - @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')" - >访问码云</el-button - > - <el-button - size="mini" - icon="el-icon-s-home" - plain - @click="goTarget('http://ruoyi.vip')" - >访问主页</el-button - > - </p> - </el-col> - - <el-col :sm="24" :lg="12" style="padding-left: 50px"> - <el-row> - <el-col :span="12"> - <h2>技术选型</h2> - </el-col> - </el-row> - <el-row> - <el-col :span="6"> - <h4>后端技术</h4> - <ul> - <li>SpringBoot</li> - <li>Spring Security</li> - <li>JWT</li> - <li>MyBatis</li> - <li>Druid</li> - <li>Fastjson</li> - <li>...</li> - </ul> - </el-col> - <el-col :span="6"> - <h4>前端技术</h4> - <ul> - <li>Vue</li> - <li>Vuex</li> - <li>Element-ui</li> - <li>Axios</li> - <li>Sass</li> - <li>Quill</li> - <li>...</li> - </ul> - </el-col> - </el-row> - </el-col> - </el-row> - <el-divider /> - <el-row :gutter="20"> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>联系信息</span> - </div> - <div class="body"> - <p> - <i class="el-icon-s-promotion"></i> 官网:<el-link - href="http://www.ruoyi.vip" - target="_blank" - >http://www.ruoyi.vip</el-link - > - </p> - <p> - <i class="el-icon-user-solid"></i> QQ群:<s> 满937441 </s> <s> 满887144332 </s> - <s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s> - <s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s> - <s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s> - <s> 满101046199 </s> <s> 满136919097 </s> <s> 满143961921 </s> <s> 满174951577 </s> - <s> 满161281055 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063" target="_blank">138988063</a> - </p> - <p> - <i class="el-icon-chat-dot-round"></i> 微信:<a - href="javascript:;" - >/ *若依</a - > - </p> - <p> - <i class="el-icon-money"></i> 支付宝:<a - href="javascript:;" - class="支付宝信息" - >/ *若依</a - > - </p> - </div> - </el-card> - </el-col> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>更新日志</span> - </div> - <el-collapse accordion> - <el-collapse-item title="v3.8.7 - 2023-12-08"> - <ol> - <li>操作日志记录部门名称</li> - <li>全局数据存储用户编号</li> - <li>新增编程式判断资源访问权限</li> - <li>操作日志列表新增IP地址查询</li> - <li>定时任务新增页去除状态选项</li> - <li>代码生成支持选择前端模板类型</li> - <li>显隐列组件支持复选框弹出类型</li> - <li>通用排序属性orderBy参数限制长度</li> - <li>Excel自定义数据处理器增加单元格/工作簿对象</li> - <li>升级oshi到最新版本6.4.8</li> - <li>升级druid到最新版本1.2.20</li> - <li>升级fastjson到最新版2.0.43</li> - <li>升级pagehelper到最新版1.4.7</li> - <li>升级commons.io到最新版本2.13.0</li> - <li>升级element-ui到最新版本2.15.14</li> - <li>修复五级路由缓存无效问题</li> - <li>修复外链带端口出现的异常</li> - <li>修复树模板父级编码变量错误</li> - <li>修复字典表详情页面搜索问题</li> - <li>修复内链iframe没有传递参数问题</li> - <li>修复自定义字典样式不生效的问题</li> - <li>修复字典缓存删除方法参数错误问题</li> - <li>修复Excel导入数据临时文件无法删除问题</li> - <li>修复未登录带参数访问成功后参数丢失问题</li> - <li>修复HeaderSearch组件跳转query参数丢失问题</li> - <li>修复代码生成导入后必填项与数据库不匹配问题</li> - <li>修复Excels导入时无法获取到dictType字典值问题</li> - <li>优化下载zip方法新增遮罩层</li> - <li>优化头像上传参数新增文件名称</li> - <li>优化字典标签支持自定义分隔符</li> - <li>优化菜单管理类型为按钮状态可选</li> - <li>优化前端防重复提交数据大小限制</li> - <li>优化TopNav菜单没有图标svg不显示</li> - <li>优化数字金额大写转换精度丢失问题</li> - <li>优化富文本Editor组件检验图片格式</li> - <li>优化页签在Firefox浏览器被遮挡的问题</li> - <li>优化个人中心/基本资料修改时数据显示问题</li> - <li>优化缓存监控图表支持跟随屏幕大小自适应调整</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.6 - 2023-06-30"> - <ol> - <li>支持登录IP黑名单限制</li> - <li>新增监控页面图标显示</li> - <li>操作日志新增消耗时间属性</li> - <li>屏蔽定时任务bean违规的字符</li> - <li>日志管理使用索引提升查询性能</li> - <li>日志注解支持排除指定的请求参数</li> - <li>支持自定义隐藏属性列过滤子对象</li> - <li>升级oshi到最新版本6.4.3</li> - <li>升级druid到最新版本1.2.16</li> - <li>升级fastjson到最新版2.0.34</li> - <li>升级spring-boot到最新版本2.5.15</li> - <li>升级element-ui到最新版本2.15.13</li> - <li>移除apache/commons-fileupload依赖</li> - <li>修复页面切换时布局错乱的问题</li> - <li>修复匿名注解Anonymous空指针问题</li> - <li>修复路由跳转被阻止时内部产生报错信息问题</li> - <li>修复isMatchedIp的参数判断产生空指针的问题</li> - <li>修复用户多角色数据权限可能出现权限抬升的情况</li> - <li>修复开启TopNav后一级菜单路由参数设置无效问题</li> - <li>修复DictTag组件value没有匹配的值时则展示value</li> - <li>优化文件下载出现的异常</li> - <li>优化选择图标组件高亮回显</li> - <li>优化弹窗后导航栏偏移的问题</li> - <li>优化修改密码日志存储明文问题</li> - <li>优化页签栏关闭其他出现的异常问题</li> - <li>优化页签关闭左侧选项排除首页选项</li> - <li>优化关闭当前tab页跳转最右侧tab页</li> - <li>优化缓存列表清除操作提示不变的问题</li> - <li>优化字符未使用下划线不进行驼峰式处理</li> - <li>优化用户导入更新时需获取用户编号问题</li> - <li>优化侧边栏的平台标题与VUE_APP_TITLE保持同步</li> - <li>优化导出Excel时设置dictType属性重复查缓存问题</li> - <li>连接池Druid支持新的配置connectTimeout和socketTimeout</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.5 - 2023-01-01"> - <ol> - <li>定时任务违规的字符</li> - <li>重置时取消部门选中</li> - <li>新增返回警告消息提示</li> - <li>忽略不必要的属性数据返回</li> - <li>修改参数键名时移除前缓存配置</li> - <li>导入更新用户数据前校验数据权限</li> - <li>兼容Excel下拉框内容过多无法显示的问题</li> - <li>升级echarts到最新版本5.4.0</li> - <li>升级core-js到最新版本3.25.3</li> - <li>升级oshi到最新版本6.4.0</li> - <li>升级kaptcha到最新版2.3.3</li> - <li>升级druid到最新版本1.2.15</li> - <li>升级fastjson到最新版2.0.20</li> - <li>升级pagehelper到最新版1.4.6</li> - <li>优化弹窗内容过多展示不全问题</li> - <li>优化swagger-ui静态资源使用缓存</li> - <li>开启TopNav没有子菜单隐藏侧边栏</li> - <li>删除fuse无效选项maxPatternLength</li> - <li>优化导出对象的子列表为空会出现[]问题</li> - <li>优化编辑头像时透明部分会变成黑色问题</li> - <li>优化小屏幕上修改头像界面布局错位的问题</li> - <li>修复代码生成勾选属性无效问题</li> - <li>修复文件上传组件格式验证问题</li> - <li>修复回显数据字典数组异常问题</li> - <li>修复sheet超出最大行数异常问题</li> - <li>修复Log注解GET请求记录不到参数问题</li> - <li>修复调度日志点击多次数据不变化的问题</li> - <li>修复主题颜色在Drawer组件不会加载问题</li> - <li>修复文件名包含特殊字符的文件无法下载问题</li> - <li>修复table中更多按钮切换主题色未生效修复问题</li> - <li>修复某些特性的环境生成代码变乱码TXT文件问题</li> - <li>修复代码生成图片/文件/单选时选择必填无法校验问题</li> - <li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.4 - 2022-09-26"> - <ol> - <li>数据逻辑删除不进行唯一验证</li> - <li>Excel注解支持导出对象的子列表方法</li> - <li>Excel注解支持自定义隐藏属性列</li> - <li>Excel注解支持backgroundColor属性设置背景色</li> - <li>支持配置密码最大错误次数/锁定时间</li> - <li>登录日志新增解锁账户功能</li> - <li>通用下载方法新增config配置选项</li> - <li>支持多权限字符匹配角色数据权限</li> - <li>页面内嵌iframe切换tab不刷新数据</li> - <li>操作日志记录支持排除敏感属性字段</li> - <li>修复多文件上传报错出现的异常问题</li> - <li>修复图片预览组件src属性为null值控制台报错问题</li> - <li>升级oshi到最新版本6.2.2</li> - <li>升级fastjson到最新版2.0.14</li> - <li>升级pagehelper到最新版1.4.3</li> - <li>升级core-js到最新版本3.25.2</li> - <li>升级element-ui到最新版本2.15.10</li> - <li>优化任务过期不执行调度</li> - <li>优化字典数据使用store存取</li> - <li>优化修改资料头像被覆盖的问题</li> - <li>优化修改用户登录账号重复验证</li> - <li>优化代码生成同步后值NULL问题</li> - <li>优化定时任务支持执行父类方法</li> - <li>优化用户个人信息接口防止修改部门</li> - <li>优化布局设置使用el-drawer抽屉显示</li> - <li>优化没有权限的用户编辑部门缺少数据</li> - <li>优化日志注解记录限制请求地址的长度</li> - <li>优化excel/scale属性导出单元格数值类型</li> - <li>优化日志操作中重置按钮时重复查询的问题</li> - <li>优化多个相同角色数据导致权限SQL重复问题</li> - <li>优化表格上右侧工具条(搜索按钮显隐&右侧样式凸出)</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.3 - 2022-06-27"> - <ol> - <li>新增缓存列表菜单功能</li> - <li>代码生成树表新增(展开/折叠)</li> - <li>Excel注解支持color字体颜色</li> - <li>新增Anonymous匿名访问不鉴权注解</li> - <li>用户头像上传限制只能为图片格式</li> - <li>接口使用泛型使其看到响应属性字段</li> - <li>检查定时任务bean所在包名是否为白名单配置</li> - <li>添加页签openPage支持传递参数</li> - <li>用户缓存信息添加部门ancestors祖级列表</li> - <li>升级element-ui到最新版本2.15.8</li> - <li>升级oshi到最新版本6.1.6</li> - <li>升级druid到最新版本1.2.11</li> - <li>升级fastjson到最新版2.0.8</li> - <li>升级spring-boot到最新版本2.5.14</li> - <li>降级jsencrypt版本兼容IE浏览器</li> - <li>删除多余的salt字段</li> - <li>新增获取不带后缀文件名称方法</li> - <li>新增获取配置文件中的属性值方法</li> - <li>新增内容编码/解码方便插件集成使用</li> - <li>字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)</li> - <li>优化设置分页参数默认值</li> - <li>优化对空字符串参数处理的过滤</li> - <li>优化显示顺序orderNum类型为整型</li> - <li>优化表单构建按钮不显示正则校验</li> - <li>优化字典数据回显样式下拉框显示值</li> - <li>优化R响应成功状态码与全局保持一致</li> - <li>优化druid开启wall过滤器出现的异常问题</li> - <li>优化用户管理左侧树型组件增加选中高亮保持</li> - <li>优化新增用户与角色信息&用户与岗位信息逻辑</li> - <li>优化默认不启用压缩文件缓存防止node_modules过大</li> - <li>修复字典数据显示不全问题</li> - <li>修复操作日志查询类型条件为0时会查到所有数据</li> - <li>修复Excel注解prompt/combo同时使用不生效问题</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.2 - 2022-04-01"> - <ol> - <li>前端支持设置是否需要防止数据重复提交</li> - <li>开启TopNav没有子菜单情况隐藏侧边栏</li> - <li>侧边栏菜单名称过长悬停显示标题</li> - <li>用户访问控制时校验数据权限,防止越权</li> - <li>导出Excel时屏蔽公式,防止CSV注入风险</li> - <li>组件ImagePreview支持多图预览显示</li> - <li>组件ImageUpload支持多图同时选择上传</li> - <li>组件FileUpload支持多文件同时选择上传</li> - <li>服务监控新增运行参数信息显示</li> - <li>定时任务目标字符串过滤特殊字符</li> - <li>定时任务目标字符串验证包名白名单</li> - <li>代码生成列表图片支持预览</li> - <li>代码生成编辑修改打开新页签</li> - <li>代码生成新增Java类型Boolean</li> - <li>代码生成子表支持日期/字典配置</li> - <li>代码生成同步保留必填/类型选项</li> - <li>升级oshi到最新版本6.1.2</li> - <li>升级fastjson到最新版1.2.80</li> - <li>升级pagehelper到最新版1.4.1</li> - <li>升级spring-boot到最新版本2.5.11</li> - <li>升级spring-boot-mybatis到最新版2.2.2</li> - <li>添加遗漏的分页参数合理化属性</li> - <li>修改npm即将过期的注册源地址</li> - <li>修复分页组件请求两次问题</li> - <li>修复通用文件下载接口跨域问题</li> - <li>修复Xss注解字段值为空时的异常问题</li> - <li>修复选项卡点击右键刷新丢失参数问题</li> - <li>修复表单清除元素位置未垂直居中问题</li> - <li>修复服务监控中运行参数显示条件错误</li> - <li>修复导入Excel时字典字段类型为Long转义为空问题</li> - <li>修复登录超时刷新页面跳转登录页面还提示重新登录问题</li> - <li>优化加载字典缓存数据</li> - <li>优化IP地址获取到多个的问题</li> - <li>优化任务队列满时任务拒绝策略</li> - <li>优化文件上传兼容Weblogic环境</li> - <li>优化定时任务默认保存到内存中执行</li> - <li>优化部门修改缩放后出现的错位问题</li> - <li>优化Excel格式化不同类型的日期对象</li> - <li>优化菜单表关键字导致的插件报错问题</li> - <li>优化Oracle用户头像列为空时不显示问题</li> - <li>优化页面若未匹配到字典标签则返回原字典值</li> - <li>优化修复登录失效后多次请求提示多次弹窗问题</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.1 - 2022-01-01"> - <ol> - <li>新增Vue3前端代码生成模板</li> - <li>新增图片预览组件</li> - <li>新增压缩插件实现打包Gzip</li> - <li>自定义xss校验注解实现</li> - <li>自定义文字复制剪贴指令</li> - <li>代码生成预览支持复制内容</li> - <li>路由支持单独配置菜单或角色权限</li> - <li>用户管理部门查询选择节点后分页参数初始</li> - <li>修复用户分配角色属性错误</li> - <li>修复打包后字体图标偶现的乱码问题</li> - <li>修复菜单管理重置表单出现的错误</li> - <li>修复版本差异导致的懒加载报错问题</li> - <li>修复Cron组件中周回显问题</li> - <li>修复定时任务多参数逗号分隔的问题</li> - <li>修复根据ID查询列表可能出现的主键溢出问题</li> - <li>修复tomcat配置参数已过期问题</li> - <li>升级clipboard到最新版本2.0.8</li> - <li>升级oshi到最新版本v5.8.6</li> - <li>升级fastjson到最新版1.2.79</li> - <li>升级spring-boot到最新版本2.5.8</li> - <li>升级log4j2到2.17.1,防止漏洞风险</li> - <li>优化下载解析blob异常提示</li> - <li>优化代码生成字典组重复问题</li> - <li>优化查询用户的角色组&岗位组代码</li> - <li>优化定时任务cron表达式小时设置24</li> - <li>优化用户导入提示溢出则显示滚动条</li> - <li>优化防重复提交标识组合为(key+url+header)</li> - <li>优化分页方法设置成通用方便灵活调用</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.8.0 - 2021-12-01"> - <ol> - <li>新增配套并同步的Vue3前端版本</li> - <li>新增通用方法简化模态/缓存/下载/权限/页签使用</li> - <li>优化导出数据/使用通用下载方法</li> - <li>Excel注解支持自定义数据处理器</li> - <li>Excel注解支持导入导出标题信息</li> - <li>Excel导入支持@Excels注解</li> - <li>新增组件data-dict,简化数据字典使用</li> - <li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li> - <li>生产环境使用路由懒加载提升页面响应速度</li> - <li>修复五级以上菜单出现的404问题</li> - <li>防重提交注解支持配置间隔时间/提示消息</li> - <li>日志注解新增是否保存响应参数</li> - <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li> - <li>升级SpringBoot到最新版本2.5.6</li> - <li>升级pagehelper到最新版1.4.0</li> - <li>升级spring-boot-mybatis到最新版2.2.0</li> - <li>升级oshi到最新版本v5.8.2</li> - <li>升级druid到最新版1.2.8</li> - <li>升级velocity到最新版本2.3</li> - <li>升级fastjson到最新版1.2.78</li> - <li>升级axios到最新版本0.24.0</li> - <li>升级dart-sass到版本1.32.13</li> - <li>升级core-js到最新版本3.19.1</li> - <li>升级jsencrypt到最新版本3.2.1</li> - <li>升级js-cookie到最新版本3.0.1</li> - <li>升级file-saver到最新版本2.0.5</li> - <li>升级sass-loader到最新版本10.1.1</li> - <li>升级element-ui到最新版本2.15.6</li> - <li>新增sendGet无参请求方法</li> - <li>禁用el-tag组件的渐变动画</li> - <li>代码生成点击预览重置激活tab</li> - <li>AjaxResult重写put方法,以方便链式调用</li> - <li>优化登录/验证码请求headers不设置token</li> - <li>优化用户个人信息接口防止修改用户名</li> - <li>优化Cron表达式生成器关闭时销毁避免缓存</li> - <li>优化注册成功提示消息类型success</li> - <li>优化aop语法,使用spring自动注入注解</li> - <li>优化记录登录信息,移除不必要的修改</li> - <li>优化mybatis全局默认的执行器</li> - <li>优化Excel导入图片可能出现的异常</li> - <li>修复代码生成模板主子表删除缺少事务</li> - <li>修复日志记录可能出现的转换异常</li> - <li>修复代码生成复选框字典遗漏问题</li> - <li>修复关闭xss功能导致可重复读RepeatableFilter失效</li> - <li>修复字符串无法被反转义问题</li> - <li>修复后端主子表代码模板方法名生成错误问题</li> - <li>修复xss过滤后格式出现的异常</li> - <li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.7.0 - 2021-09-13"> - <ol> - <li>参数管理支持配置验证码开关</li> - <li>新增是否开启用户注册功能</li> - <li>定时任务支持在线生成cron表达式</li> - <li>菜单管理支持配置路由参数</li> - <li>支持自定义注解实现接口限流</li> - <li>Excel注解支持Image图片导入</li> - <li>自定义弹层溢出滚动样式</li> - <li>自定义可拖动弹窗宽度指令</li> - <li>自定义可拖动弹窗高度指令</li> - <li>修复任意账户越权问题</li> - <li>修改时检查用户数据权限范围</li> - <li>修复保存配置主题颜色失效问题</li> - <li>新增暗色菜单风格主题</li> - <li>菜单&部门新增展开/折叠功能</li> - <li>页签新增关闭左侧&添加图标</li> - <li>顶部菜单排除隐藏的默认路由</li> - <li>顶部菜单同步系统主题样式</li> - <li>跳转路由高亮相对应的菜单栏</li> - <li>代码生成主子表多选行数据</li> - <li>日期范围支持添加多组</li> - <li>升级element-ui到最新版本2.15.5</li> - <li>升级oshi到最新版本v5.8.0</li> - <li>升级commons.io到最新版本v2.11.0</li> - <li>定时任务屏蔽ldap远程调用</li> - <li>定时任务屏蔽http(s)远程调用</li> - <li>补充定时任务表字段注释</li> - <li>定时任务对检查异常进行事务回滚</li> - <li>启用父部门状态排除顶级节点</li> - <li>富文本新增上传文件大小限制</li> - <li>默认首页使用keep-alive缓存</li> - <li>修改代码生成字典回显样式</li> - <li>自定义分页合理化传入参数</li> - <li>修复字典组件值为整形不显示问题</li> - <li>修复定时任务日志执行状态显示</li> - <li>角色&菜单新增字段属性提示信息</li> - <li>修复角色分配用户页面参数类型错误提醒</li> - <li>优化布局设置动画特效</li> - <li>优化异常处理信息</li> - <li>优化错误token导致的解析异常</li> - <li>密码框新增显示切换密码图标</li> - <li>定时任务新增更多操作</li> - <li>更多操作按钮添加权限控制</li> - <li>导入用户样式优化</li> - <li>提取通用方法到基类控制器</li> - <li>优化使用权限工具获取用户信息</li> - <li>优化用户不能删除自己</li> - <li>优化XSS跨站脚本过滤</li> - <li>优化代码生成模板</li> - <li>验证码默认20s超时</li> - <li>BLOB下载时清除URL对象引用</li> - <li>代码生成导入表按创建时间排序</li> - <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li> - <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li> - <li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.6.0 - 2021-07-12"> - <ol> - <li>角色管理新增分配用户功能</li> - <li>用户管理新增分配角色功能</li> - <li>日志列表支持排序操作</li> - <li>优化参数&字典缓存操作</li> - <li>系统布局配置支持动态标题开关</li> - <li>菜单路由配置支持内链访问</li> - <li>默认访问后端首页新增提示语</li> - <li>富文本默认上传返回url类型</li> - <li>新增自定义弹窗拖拽指令</li> - <li>全局注册常用通用组件</li> - <li>全局挂载字典标签组件</li> - <li>ImageUpload组件支持多图片上传</li> - <li>FileUpload组件支持多文件上传</li> - <li>文件上传组件添加数量限制属性</li> - <li>富文本编辑组件添加类型属性</li> - <li>富文本组件工具栏配置视频</li> - <li>封装通用iframe组件</li> - <li>限制超级管理员不允许操作</li> - <li>用户信息长度校验限制</li> - <li>分页组件新增pagerCount属性</li> - <li>添加bat脚本执行应用</li> - <li>升级oshi到最新版本v5.7.4</li> - <li>升级element-ui到最新版本2.15.2</li> - <li>升级pagehelper到最新版1.3.1</li> - <li>升级commons.io到最新版本v2.10.0</li> - <li>升级commons.fileupload到最新版本v1.4</li> - <li>升级swagger到最新版本v3.0.0</li> - <li>修复关闭confirm提示框控制台报错问题</li> - <li>修复存在的SQL注入漏洞问题</li> - <li>定时任务屏蔽rmi远程调用</li> - <li>修复用户搜索分页变量错误</li> - <li>修复导出角色数据范围翻译缺少仅本人</li> - <li>修复表单构建选择下拉选择控制台报错问题</li> - <li>优化图片工具类读取文件</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.5.0 - 2021-05-25"> - <ol> - <li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li> - <li>布局设置支持保存&重置配置</li> - <li>修复树表数据显示不全&加载慢问题</li> - <li>新增IE浏览器版本过低提示页面</li> - <li>用户登录后记录最后登录IP&时间</li> - <li>页面导出按钮点击之后添加遮罩</li> - <li>富文本编辑器支持自定义上传地址</li> - <li>富文本编辑组件新增readOnly属性</li> - <li>页签TagsView新增关闭右侧功能</li> - <li>显隐列组件加载初始默认隐藏列</li> - <li>关闭头像上传窗口还原默认图片</li> - <li>个人信息添加手机&邮箱重复验证</li> - <li>代码生成模板导出按钮点击后添加遮罩</li> - <li>代码生成模板树表操作列添加新增按钮</li> - <li>代码生成模板修复主子表字段重名问题</li> - <li>升级fastjson到最新版1.2.76</li> - <li>升级druid到最新版本v1.2.6</li> - <li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li> - <li>升级oshi到最新版本v5.6.0</li> - <li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li> - <li>数据监控页默认账户密码防止越权访问</li> - <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li> - <li>修正后端导入表权限标识</li> - <li>修正前端操作日志&登录日志权限标识</li> - <li>设置Redis配置HashKey序列化</li> - <li>删除操作日志记录信息</li> - <li>上传媒体类型添加视频格式</li> - <li>修复请求形参未传值记录日志异常问题</li> - <li>优化xss校验json请求条件</li> - <li>树级结构更新子节点使用replaceFirst</li> - <li>优化ExcelUtil空值处理</li> - <li>日志记录过滤BindingResult对象,防止异常</li> - <li>修改主题后mini类型按钮无效问题</li> - <li>优化通用下载完成后删除节点</li> - <li>通用Controller添加响应返回消息</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.4.0 - 2021-02-22"> - <ol> - <li>代码生成模板支持主子表</li> - <li>表格右侧工具栏组件支持显隐列</li> - <li>图片组件添加预览&移除功能</li> - <li>Excel注解支持Image图片导出</li> - <li>操作按钮组调整为朴素按钮样式</li> - <li>代码生成支持文件上传组件</li> - <li>代码生成日期控件区分范围</li> - <li>代码生成数据库文本类型生成表单文本域</li> - <li>用户手机邮箱&菜单组件修改允许空字符串</li> - <li>升级SpringBoot到最新版本2.2.13 提升启动速度</li> - <li>升级druid到最新版本v1.2.4</li> - <li>升级fastjson到最新版1.2.75</li> - <li>升级element-ui到最新版本2.15.0</li> - <li>修复IE11浏览器报错问题</li> - <li>优化多级菜单之间切换无法缓存的问题</li> - <li>修复四级菜单无法显示问题</li> - <li>修正侧边栏静态路由丢失问题</li> - <li>修复角色管理-编辑角色-功能权限显示异常</li> - <li>配置文件新增redis数据库索引属性</li> - <li>权限工具类增加admin判断</li> - <li>角色非自定义权限范围清空选择值</li> - <li>修复导入数据为负浮点数时丢失精度问题</li> - <li>移除path-to-regexp正则匹配插件</li> - <li>修复生成树表代码异常</li> - <li>修改ip字段长度防止ipv6地址长度不够</li> - <li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li> - <li>登录后push添加catch防止出现检查错误</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.3.0 - 2020-12-14"> - <ol> - <li>新增缓存监控功能</li> - <li>支持主题风格配置</li> - <li>修复多级菜单之间切换无法缓存的问题</li> - <li>多级菜单自动配置组件</li> - <li>代码生成预览支持高亮显示</li> - <li>支持Get请求映射Params参数</li> - <li>删除用户和角色解绑关联</li> - <li>去除用户手机邮箱部门必填验证</li> - <li>Excel支持注解align对齐方式</li> - <li>Excel支持导入Boolean型数据</li> - <li>优化头像样式,鼠标移入悬停遮罩</li> - <li>代码生成预览提供滚动机制</li> - <li>代码生成删除多余的数字float类型</li> - <li>修正转换字符串的目标字符集属性</li> - <li>回显数据字典防止空值报错</li> - <li>日志记录增加过滤多文件场景</li> - <li>修改缓存Set方法可能导致嵌套的问题</li> - <li>移除前端一些多余的依赖</li> - <li>防止安全扫描YUI出现的风险提示</li> - <li>修改node-sass为dart-sass</li> - <li>升级SpringBoot到最新版本2.1.18</li> - <li>升级poi到最新版本4.1.2</li> - <li>升级oshi到最新版本v5.3.6</li> - <li>升级bitwalker到最新版本1.21</li> - <li>升级axios到最新版本0.21.0</li> - <li>升级element-ui到最新版本2.14.1</li> - <li>升级vue到最新版本2.6.12</li> - <li>升级vuex到最新版本3.6.0</li> - <li>升级vue-cli到版本4.5.9</li> - <li>升级vue-router到最新版本3.4.9</li> - <li>升级vue-cli到最新版本4.4.6</li> - <li>升级vue-cropper到最新版本0.5.5</li> - <li>升级clipboard到最新版本2.0.6</li> - <li>升级core-js到最新版本3.8.1</li> - <li>升级echarts到最新版本4.9.0</li> - <li>升级file-saver到最新版本2.0.4</li> - <li>升级fuse.js到最新版本6.4.3</li> - <li>升级js-beautify到最新版本1.13.0</li> - <li>升级js-cookie到最新版本2.2.1</li> - <li>升级path-to-regexp到最新版本6.2.0</li> - <li>升级quill到最新版本1.3.7</li> - <li>升级screenfull到最新版本5.0.2</li> - <li>升级sortablejs到最新版本1.10.2</li> - <li>升级vuedraggable到最新版本2.24.3</li> - <li>升级chalk到最新版本4.1.0</li> - <li>升级eslint到最新版本7.15.0</li> - <li>升级eslint-plugin-vue到最新版本7.2.0</li> - <li>升级lint-staged到最新版本10.5.3</li> - <li>升级runjs到最新版本4.4.2</li> - <li>升级sass-loader到最新版本10.1.0</li> - <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li> - <li>升级svg-sprite-loader到最新版本5.1.1</li> - <li>升级vue-template-compiler到最新版本2.6.12</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.2.1 - 2020-11-18"> - <ol> - <li>阻止任意文件下载漏洞</li> - <li>代码生成支持上传控件</li> - <li>新增图片上传组件</li> - <li>调整默认首页</li> - <li>升级druid到最新版本v1.2.2</li> - <li>mapperLocations配置支持分隔符</li> - <li>权限信息调整</li> - <li>调整sql默认时间</li> - <li>解决代码生成没有bit类型的问题</li> - <li>升级pagehelper到最新版1.3.0</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v3.2.0 - 2020-10-10"> - <ol> - <li>升级springboot版本到2.1.17 提升安全性</li> - <li>升级oshi到最新版本v5.2.5</li> - <li>升级druid到最新版本v1.2.1</li> - <li>升级jjwt到版本0.9.1</li> - <li>升级fastjson到最新版1.2.74</li> - <li>修改sass为node-sass,避免el-icon图标乱码</li> - <li>代码生成支持同步数据库</li> - <li>代码生成支持富文本控件</li> - <li>代码生成页面时不忽略remark属性</li> - <li>代码生成添加select必填选项</li> - <li>Excel导出类型NUMERIC支持精度浮点类型</li> - <li>Excel导出targetAttr优化获取值,防止get方法不规范</li> - <li>Excel注解支持自动统计数据总和</li> - <li>Excel注解支持设置BigDecimal精度&舍入规则</li> - <li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li> - <li>允许用户分配到部门父节点</li> - <li>菜单新增是否缓存keep-alive</li> - <li>表格操作列间距调整</li> - <li>限制系统内置参数不允许删除</li> - <li>富文本组件优化,支持自定义高度&图片冲突问题</li> - <li>富文本工具栏样式对齐</li> - <li>导入excel整形值校验优化</li> - <li>修复页签关闭所有时固定标签路由不刷新问题</li> - <li>表单构建布局型组件新增按钮</li> - <li>左侧菜单文字过长显示省略号</li> - <li>修正根节点为子部门时,树状结构显示问题</li> - <li>修正调用目标字符串最大长度</li> - <li>修正菜单提示信息错误</li> - <li>修正定时任务执行一次权限标识</li> - <li>修正数据库字符串类型nvarchar</li> - <li>优化递归子节点</li> - <li>优化数据权限判断</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v3.1.0 - 2020-08-13"> - <ol> - <li>表格工具栏右侧添加刷新&显隐查询组件</li> - <li>后端支持CORS跨域请求</li> - <li>代码生成支持选择上级菜单</li> - <li>代码生成支持自定义路径</li> - <li>代码生成支持复选框</li> - <li>Excel导出导入支持dictType字典类型</li> - <li>Excel支持分割字符串组内容</li> - <li>验证码类型支持(数组计算、字符验证)</li> - <li>升级vue-cli版本到4.4.4</li> - <li>修改 node-sass 为 dart-sass</li> - <li>表单类型为Integer/Long设置整形默认值</li> - <li>代码生成器默认mapper路径与默认mapperScan路径不一致</li> - <li>优化防重复提交拦截器</li> - <li>优化上级菜单不能选择自己</li> - <li>修复角色的权限分配后,未实时生效问题</li> - <li>修复在线用户日志记录类型</li> - <li>修复富文本空格和缩进保存后不生效问题</li> - <li>修复在线用户判断逻辑</li> - <li>唯一限制条件只返回单条数据</li> - <li>添加获取当前的环境配置方法</li> - <li>超时登录后页面跳转到首页</li> - <li>全局异常状态汉化拦截处理</li> - <li>HTML过滤器改为将html转义</li> - <li>检查字符支持小数点&降级改成异常提醒</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v3.0.0 - 2020-07-20"> - <ol> - <li>单应用调整为多模块项目</li> - <li>升级element-ui版本到2.13.2</li> - <li>删除babel,提高编译速度。</li> - <li>新增菜单默认主类目</li> - <li>编码文件名修改为uuid方式</li> - <li>定时任务cron表达式验证</li> - <li>角色权限修改时已有权限未自动勾选异常修复</li> - <li>防止切换权限用户后登录出现404</li> - <li>Excel支持sort导出排序</li> - <li>创建用户不允许选择超级管理员角色</li> - <li>修复代码生成导入表结构出现异常页面不提醒问题</li> - <li>修复代码生成点击多次表修改数据不变化的问题</li> - <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li> - <li>修复布局为small者mini用户表单显示错位问题</li> - <li>修复热部署导致的强换异常问题</li> - <li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li> - <li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li> - <li>生成domain 如果是浮点型 统一用BigDecimal</li> - <li>定时任务调整label-width,防止部署出现错位</li> - <li>调整表头固定列默认样式</li> - <li>代码生成模板调整,字段为String并且必填则加空串条件</li> - <li>代码生成字典Integer/Long使用parseInt</li> - <li> - 修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序 - </li> - <li>修正岗位导出权限注解</li> - <li>禁止加密密文返回前端</li> - <li>修复代码生成页面中的查询条件创建时间未生效的问题</li> - <li>修复首页搜索菜单外链无法点击跳转问题</li> - <li>修复菜单管理选择图标,backspace删除时不过滤数据</li> - <li>用户管理部门分支节点不可检查&显示计数</li> - <li>数据范围过滤属性调整</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.3.0 - 2020-06-01"> - <ol> - <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li> - <li>dev启动默认打开浏览器</li> - <li>vue-cli使用默认source-map</li> - <li>slidebar eslint报错优化</li> - <li>当tags-view滚动关闭右键菜单</li> - <li>字典管理添加缓存读取</li> - <li>参数管理支持缓存操作</li> - <li>支持一级菜单(和主页同级)在main区域显示</li> - <li>限制外链地址必须以http(s)开头</li> - <li>tagview & sidebar 主题颜色与element ui(全局)同步</li> - <li>修改数据源类型优先级,先根据方法,再根据类</li> - <li>支持是否需要设置token属性,自定义返回码消息。</li> - <li>swagger请求前缀加入配置。</li> - <li>登录地点设置内容过长则隐藏显示</li> - <li>修复定时任务执行一次按钮后不提示消息问题</li> - <li>修改上级部门(选择项排除本身和下级)</li> - <li>通用http发送方法增加参数 contentType 编码类型</li> - <li>更换IP地址查询接口</li> - <li>修复页签变量undefined</li> - <li>添加校验部门包含未停用的子部门</li> - <li>修改定时任务详情下次执行时间日期显示错误</li> - <li>角色管理查询设置默认排序字段</li> - <li>swagger添加enable参数控制是否启用</li> - <li>只对json类型请求构建可重复读取inputStream的request</li> - <li>修改代码生成字典字段int类型没有自动选中问题</li> - <li>vuex用户名取值修正</li> - <li>表格树模板去掉多余的)</li> - <li>代码生成序号修正</li> - <li>全屏情况下不调整上外边距</li> - <li>代码生成Date字段添加默认格式</li> - <li>用户管理角色选择权限控制</li> - <li>修复路由懒加载报错问题</li> - <li>模板sql.vm添加菜单状态</li> - <li>设置用户名称不能修改</li> - <li>dialog添加append-to-body属性,防止ie遮罩</li> - <li>菜单区分状态和显示隐藏功能</li> - <li>升级fastjson到最新版1.2.68 修复安全加固</li> - <li>修复代码生成如果选择字典类型缺失逗号问题</li> - <li>登录请求params更换为data,防止暴露url</li> - <li>日志返回时间格式处理</li> - <li>添加handle控制允许拖动的元素</li> - <li>布局设置点击扩大范围</li> - <li>代码生成列属性排序查询</li> - <li>代码生成列支持拖动排序</li> - <li>修复时间格式不支持ios问题</li> - <li>表单构建添加父级class,防止冲突</li> - <li>定时任务并发属性修正</li> - <li>角色禁用&菜单隐藏不查询权限</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.2.0 - 2020-03-18"> - <ol> - <li>系统监控新增定时任务功能</li> - <li>添加一个打包Web工程bat</li> - <li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li> - <li>修复点击退出登录有时会无提示问题</li> - <li>修复防重复提交注解无效问题</li> - <li>修复通知公告批量删除异常问题</li> - <li>添加菜单时路由地址必填限制</li> - <li>代码生成字段描述可编辑</li> - <li>修复用户修改个人信息导致缓存不过期问题</li> - <li>个人信息创建时间获取正确属性值</li> - <li>操作日志详细显示正确类型</li> - <li>导入表单击行数据时选中对应的复选框</li> - <li>批量替换表前缀逻辑调整</li> - <li>固定重定向路径表达式</li> - <li>升级element-ui版本到2.13.0</li> - <li>操作日志排序调整</li> - <li>修复charts切换侧边栏或者缩放窗口显示bug</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.1.0 - 2020-02-24"> - <ol> - <li>新增表单构建</li> - <li>代码生成支持树表结构</li> - <li>新增用户导入</li> - <li>修复动态加载路由页面刷新问题</li> - <li>修复地址开关无效问题</li> - <li>汉化错误提示页面</li> - <li>代码生成已知问题修改</li> - <li>修复多数据源下配置关闭出现异常处理</li> - <li>添加HTML过滤器,用于去除XSS漏洞隐患</li> - <li>修复上传头像控制台出现异常</li> - <li>修改用户管理分页不正确的问题</li> - <li>修复验证码记录提示错误</li> - <li>修复request.js缺少Message引用</li> - <li>修复表格时间为空出现的异常</li> - <li>添加Jackson日期反序列化时区配置</li> - <li>调整根据用户权限加载菜单数据树形结构</li> - <li>调整成功登录不恢复按钮,防止多次点击</li> - <li>修改用户个人资料同步缓存信息</li> - <li>修复页面同时出现el-upload和Editor不显示处理</li> - <li>修复在角色管理页修改菜单权限偶尔未选中问题</li> - <li>配置文件新增redis密码属性</li> - <li>设置mybatis全局的配置文件</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - - <el-collapse-item title="v2.0.0 - 2019-12-02"> - <ol> - <li>新增代码生成</li> - <li>新增@RepeatSubmit注解,防止重复提交</li> - <li>新增菜单主目录添加/删除操作</li> - <li>日志记录过滤特殊对象,防止转换异常</li> - <li>修改代码生成路由脚本错误</li> - <li>用户上传头像实时同步缓存,无需重新登录</li> - <li>调整切换页签后不重新加载数据</li> - <li>添加jsencrypt实现参数的前端加密</li> - <li>系统退出删除用户缓存记录</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v1.1.0 - 2019-11-11"> - <ol> - <li>新增在线用户管理</li> - <li>新增按钮组功能实现(批量删除、导出、清空)</li> - <li>新增查询条件重置按钮</li> - <li>新增Swagger全局Token配置</li> - <li>新增后端参数校验</li> - <li>修复字典管理页面的日期查询异常</li> - <li>修改时间函数命名防止冲突</li> - <li>去除菜单上级校验,默认为顶级</li> - <li>修复用户密码无法修改问题</li> - <li>修复菜单类型为按钮时不显示权限标识</li> - <li>其他细节优化</li> - </ol> - </el-collapse-item> - <el-collapse-item title="v1.0.0 - 2019-10-08"> - <ol> - <li>若依前后端分离系统正式发布</li> - </ol> - </el-collapse-item> - </el-collapse> - </el-card> - </el-col> - <el-col :xs="24" :sm="24" :md="12" :lg="8"> - <el-card class="update-log"> - <div slot="header" class="clearfix"> - <span>捐赠支持</span> - </div> - <div class="body"> - <img - src="@/assets/images/pay.png" - alt="donate" - width="100%" - /> - <span style="display: inline-block; height: 30px; line-height: 30px" - >你可以请作者喝杯咖啡表示鼓励</span - > - </div> - </el-card> - </el-col> - </el-row> - </div> -</template> - -<script> -export default { - name: "Index", - data() { - return { - // 版本号 - version: "3.8.7" - }; - }, - methods: { - goTarget(href) { - window.open(href, "_blank"); - } - } -}; -</script> - -<style scoped lang="scss"> -.home { - blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; - } - hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; - } - .col-item { - margin-bottom: 20px; - } - - ul { - padding: 0; - margin: 0; - } - - font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - color: #676a6c; - overflow-x: hidden; - - ul { - list-style-type: none; - } - - h4 { - margin-top: 0px; - } - - h2 { - margin-top: 10px; - font-size: 26px; - font-weight: 100; - } - - p { - margin-top: 10px; - - b { - font-weight: 700; - } - } - - .update-log { - ol { - display: block; - list-style-type: decimal; - margin-block-start: 1em; - margin-block-end: 1em; - margin-inline-start: 0; - margin-inline-end: 0; - padding-inline-start: 40px; - } - } -} -</style> - diff --git a/ruoyi-ui/src/views/index_v1.vue b/ruoyi-ui/src/views/index_v1.vue deleted file mode 100644 index d2d2ec6..0000000 --- a/ruoyi-ui/src/views/index_v1.vue +++ /dev/null @@ -1,98 +0,0 @@ -<template> - <div class="dashboard-editor-container"> - - <panel-group @handleSetLineChartData="handleSetLineChartData" /> - - <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;"> - <line-chart :chart-data="lineChartData" /> - </el-row> - - <el-row :gutter="32"> - <el-col :xs="24" :sm="24" :lg="8"> - <div class="chart-wrapper"> - <raddar-chart /> - </div> - </el-col> - <el-col :xs="24" :sm="24" :lg="8"> - <div class="chart-wrapper"> - <pie-chart /> - </div> - </el-col> - <el-col :xs="24" :sm="24" :lg="8"> - <div class="chart-wrapper"> - <bar-chart /> - </div> - </el-col> - </el-row> - - - </div> -</template> - -<script> -import PanelGroup from './dashboard/PanelGroup' -import LineChart from './dashboard/LineChart' -import RaddarChart from './dashboard/RaddarChart' -import PieChart from './dashboard/PieChart' -import BarChart from './dashboard/BarChart' - -const lineChartData = { - newVisitis: { - expectedData: [100, 120, 161, 134, 105, 160, 165], - actualData: [120, 82, 91, 154, 162, 140, 145] - }, - messages: { - expectedData: [200, 192, 120, 144, 160, 130, 140], - actualData: [180, 160, 151, 106, 145, 150, 130] - }, - purchases: { - expectedData: [80, 100, 121, 104, 105, 90, 100], - actualData: [120, 90, 100, 138, 142, 130, 130] - }, - shoppings: { - expectedData: [130, 140, 141, 142, 145, 150, 160], - actualData: [120, 82, 91, 154, 162, 140, 130] - } -} - -export default { - name: 'Index', - components: { - PanelGroup, - LineChart, - RaddarChart, - PieChart, - BarChart - }, - data() { - return { - lineChartData: lineChartData.newVisitis - } - }, - methods: { - handleSetLineChartData(type) { - this.lineChartData = lineChartData[type] - } - } -} -</script> - -<style lang="scss" scoped> -.dashboard-editor-container { - padding: 32px; - background-color: rgb(240, 242, 245); - position: relative; - - .chart-wrapper { - background: #fff; - padding: 16px 16px 0; - margin-bottom: 32px; - } -} - -@media (max-width:1024px) { - .chart-wrapper { - padding: 8px; - } -} -</style> diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue deleted file mode 100644 index 06c09d2..0000000 --- a/ruoyi-ui/src/views/login.vue +++ /dev/null @@ -1,219 +0,0 @@ -<template> - <div class="login"> - <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> - <h3 class="title">若依后台管理系统</h3> - <el-form-item prop="username"> - <el-input - v-model="loginForm.username" - type="text" - auto-complete="off" - placeholder="账号" - > - <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> - </el-input> - </el-form-item> - <el-form-item prop="password"> - <el-input - v-model="loginForm.password" - type="password" - auto-complete="off" - placeholder="密码" - @keyup.enter.native="handleLogin" - > - <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> - </el-input> - </el-form-item> - <el-form-item prop="code" v-if="captchaEnabled"> - <el-input - v-model="loginForm.code" - auto-complete="off" - placeholder="验证码" - style="width: 63%" - @keyup.enter.native="handleLogin" - > - <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> - </el-input> - <div class="login-code"> - <img :src="codeUrl" @click="getCode" class="login-code-img"/> - </div> - </el-form-item> - <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox> - <el-form-item style="width:100%;"> - <el-button - :loading="loading" - size="medium" - type="primary" - style="width:100%;" - @click.native.prevent="handleLogin" - > - <span v-if="!loading">登 录</span> - <span v-else>登 录 中...</span> - </el-button> - <div style="float: right;" v-if="register"> - <router-link class="link-type" :to="'/register'">立即注册</router-link> - </div> - </el-form-item> - </el-form> - <!-- 底部 --> - <div class="el-login-footer"> - <span>Copyright © 2018-2024 ruoyi.vip All Rights Reserved.</span> - </div> - </div> -</template> - -<script> -import { getCodeImg } from "@/api/login"; -import Cookies from "js-cookie"; -import { encrypt, decrypt } from '@/utils/jsencrypt' - -export default { - name: "Login", - data() { - return { - codeUrl: "", - loginForm: { - username: "admin", - password: "admin123", - rememberMe: false, - code: "", - uuid: "" - }, - loginRules: { - username: [ - { required: true, trigger: "blur", message: "请输入您的账号" } - ], - password: [ - { required: true, trigger: "blur", message: "请输入您的密码" } - ], - code: [{ required: true, trigger: "change", message: "请输入验证码" }] - }, - loading: false, - // 验证码开关 - captchaEnabled: true, - // 注册开关 - register: false, - redirect: undefined - }; - }, - watch: { - $route: { - handler: function(route) { - this.redirect = route.query && route.query.redirect; - }, - immediate: true - } - }, - created() { - this.getCode(); - this.getCookie(); - }, - methods: { - getCode() { - getCodeImg().then(res => { - this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; - if (this.captchaEnabled) { - this.codeUrl = "data:image/gif;base64," + res.img; - this.loginForm.uuid = res.uuid; - } - }); - }, - getCookie() { - const username = Cookies.get("username"); - const password = Cookies.get("password"); - const rememberMe = Cookies.get('rememberMe') - this.loginForm = { - username: username === undefined ? this.loginForm.username : username, - password: password === undefined ? this.loginForm.password : decrypt(password), - rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) - }; - }, - handleLogin() { - this.$refs.loginForm.validate(valid => { - if (valid) { - this.loading = true; - if (this.loginForm.rememberMe) { - Cookies.set("username", this.loginForm.username, { expires: 30 }); - Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 }); - Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 }); - } else { - Cookies.remove("username"); - Cookies.remove("password"); - Cookies.remove('rememberMe'); - } - this.$store.dispatch("Login", this.loginForm).then(() => { - this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); - }).catch(() => { - this.loading = false; - if (this.captchaEnabled) { - this.getCode(); - } - }); - } - }); - } - } -}; -</script> - -<style rel="stylesheet/scss" lang="scss"> -.login { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - background-image: url("../assets/images/login-background.jpg"); - background-size: cover; -} -.title { - margin: 0px auto 30px auto; - text-align: center; - color: #707070; -} - -.login-form { - border-radius: 6px; - background: #ffffff; - width: 400px; - padding: 25px 25px 5px 25px; - .el-input { - height: 38px; - input { - height: 38px; - } - } - .input-icon { - height: 39px; - width: 14px; - margin-left: 2px; - } -} -.login-tip { - font-size: 13px; - text-align: center; - color: #bfbfbf; -} -.login-code { - width: 33%; - height: 38px; - float: right; - img { - cursor: pointer; - vertical-align: middle; - } -} -.el-login-footer { - height: 40px; - line-height: 40px; - position: fixed; - bottom: 0; - width: 100%; - text-align: center; - color: #fff; - font-family: Arial; - font-size: 12px; - letter-spacing: 1px; -} -.login-code-img { - height: 38px; -} -</style> diff --git a/ruoyi-ui/src/views/monitor/cache/index.vue b/ruoyi-ui/src/views/monitor/cache/index.vue deleted file mode 100644 index 8d2f378..0000000 --- a/ruoyi-ui/src/views/monitor/cache/index.vue +++ /dev/null @@ -1,148 +0,0 @@ -<template> - <div class="app-container"> - <el-row> - <el-col :span="24" class="card-box"> - <el-card> - <div slot="header"><span><i class="el-icon-monitor"></i> 基本信息</span></div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%"> - <tbody> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">Redis版本</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_version }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">运行模式</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">端口</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.tcp_port }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">客户端数</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.connected_clients }}</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">运行时间(天)</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.uptime_in_days }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">使用内存</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.used_memory_human }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">使用CPU</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">内存配置</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.maxmemory_human }}</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">AOF是否开启</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.aof_enabled == "0" ? "否" : "是" }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">RDB是否成功</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.rdb_last_bgsave_status }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">Key数量</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.dbSize">{{ cache.dbSize }} </div></td> - <td class="el-table__cell is-leaf"><div class="cell">网络入口/出口</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="cache.info">{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - - <el-col :span="12" class="card-box"> - <el-card> - <div slot="header"><span><i class="el-icon-pie-chart"></i> 命令统计</span></div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <div ref="commandstats" style="height: 420px" /> - </div> - </el-card> - </el-col> - - <el-col :span="12" class="card-box"> - <el-card> - <div slot="header"><span><i class="el-icon-odometer"></i> 内存信息</span></div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <div ref="usedmemory" style="height: 420px" /> - </div> - </el-card> - </el-col> - </el-row> - </div> -</template> - -<script> -import { getCache } from "@/api/monitor/cache"; -import * as echarts from "echarts"; - -export default { - name: "Cache", - data() { - return { - // 统计命令信息 - commandstats: null, - // 使用内存 - usedmemory: null, - // cache信息 - cache: [] - } - }, - created() { - this.getList(); - this.openLoading(); - }, - methods: { - /** 查缓存询信息 */ - getList() { - getCache().then((response) => { - this.cache = response.data; - this.$modal.closeLoading(); - - this.commandstats = echarts.init(this.$refs.commandstats, "macarons"); - this.commandstats.setOption({ - tooltip: { - trigger: "item", - formatter: "{a} <br/>{b} : {c} ({d}%)", - }, - series: [ - { - name: "命令", - type: "pie", - roseType: "radius", - radius: [15, 95], - center: ["50%", "38%"], - data: response.data.commandStats, - animationEasing: "cubicInOut", - animationDuration: 1000, - } - ] - }); - this.usedmemory = echarts.init(this.$refs.usedmemory, "macarons"); - this.usedmemory.setOption({ - tooltip: { - formatter: "{b} <br/>{a} : " + this.cache.info.used_memory_human, - }, - series: [ - { - name: "峰值", - type: "gauge", - min: 0, - max: 1000, - detail: { - formatter: this.cache.info.used_memory_human, - }, - data: [ - { - value: parseFloat(this.cache.info.used_memory_human), - name: "内存消耗", - } - ] - } - ] - }); - window.addEventListener("resize", () => { - this.commandstats.resize(); - this.usedmemory.resize(); - }); - }); - }, - // 打开加载层 - openLoading() { - this.$modal.loading("正在加载缓存监控数据,请稍候!"); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/monitor/cache/list.vue b/ruoyi-ui/src/views/monitor/cache/list.vue deleted file mode 100644 index 29a7c74..0000000 --- a/ruoyi-ui/src/views/monitor/cache/list.vue +++ /dev/null @@ -1,241 +0,0 @@ -<template> - <div class="app-container"> - <el-row :gutter="10"> - <el-col :span="8"> - <el-card style="height: calc(100vh - 125px)"> - <div slot="header"> - <span><i class="el-icon-collection"></i> 缓存列表</span> - <el-button - style="float: right; padding: 3px 0" - type="text" - icon="el-icon-refresh-right" - @click="refreshCacheNames()" - ></el-button> - </div> - <el-table - v-loading="loading" - :data="cacheNames" - :height="tableHeight" - highlight-current-row - @row-click="getCacheKeys" - style="width: 100%" - > - <el-table-column - label="序号" - width="60" - type="index" - ></el-table-column> - - <el-table-column - label="缓存名称" - align="center" - prop="cacheName" - :show-overflow-tooltip="true" - :formatter="nameFormatter" - ></el-table-column> - - <el-table-column - label="备注" - align="center" - prop="remark" - :show-overflow-tooltip="true" - /> - <el-table-column - label="操作" - width="60" - align="center" - class-name="small-padding fixed-width" - > - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleClearCacheName(scope.row)" - ></el-button> - </template> - </el-table-column> - </el-table> - </el-card> - </el-col> - - <el-col :span="8"> - <el-card style="height: calc(100vh - 125px)"> - <div slot="header"> - <span><i class="el-icon-key"></i> 键名列表</span> - <el-button - style="float: right; padding: 3px 0" - type="text" - icon="el-icon-refresh-right" - @click="refreshCacheKeys()" - ></el-button> - </div> - <el-table - v-loading="subLoading" - :data="cacheKeys" - :height="tableHeight" - highlight-current-row - @row-click="handleCacheValue" - style="width: 100%" - > - <el-table-column - label="序号" - width="60" - type="index" - ></el-table-column> - <el-table-column - label="缓存键名" - align="center" - :show-overflow-tooltip="true" - :formatter="keyFormatter" - > - </el-table-column> - <el-table-column - label="操作" - width="60" - align="center" - class-name="small-padding fixed-width" - > - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleClearCacheKey(scope.row)" - ></el-button> - </template> - </el-table-column> - </el-table> - </el-card> - </el-col> - - <el-col :span="8"> - <el-card :bordered="false" style="height: calc(100vh - 125px)"> - <div slot="header"> - <span><i class="el-icon-document"></i> 缓存内容</span> - <el-button - style="float: right; padding: 3px 0" - type="text" - icon="el-icon-refresh-right" - @click="handleClearCacheAll()" - >清理全部</el-button - > - </div> - <el-form :model="cacheForm"> - <el-row :gutter="32"> - <el-col :offset="1" :span="22"> - <el-form-item label="缓存名称:" prop="cacheName"> - <el-input v-model="cacheForm.cacheName" :readOnly="true" /> - </el-form-item> - </el-col> - <el-col :offset="1" :span="22"> - <el-form-item label="缓存键名:" prop="cacheKey"> - <el-input v-model="cacheForm.cacheKey" :readOnly="true" /> - </el-form-item> - </el-col> - <el-col :offset="1" :span="22"> - <el-form-item label="缓存内容:" prop="cacheValue"> - <el-input - v-model="cacheForm.cacheValue" - type="textarea" - :rows="8" - :readOnly="true" - /> - </el-form-item> - </el-col> - </el-row> - </el-form> - </el-card> - </el-col> - </el-row> - </div> -</template> - -<script> -import { listCacheName, listCacheKey, getCacheValue, clearCacheName, clearCacheKey, clearCacheAll } from "@/api/monitor/cache"; - -export default { - name: "CacheList", - data() { - return { - cacheNames: [], - cacheKeys: [], - cacheForm: {}, - loading: true, - subLoading: false, - nowCacheName: "", - tableHeight: window.innerHeight - 200 - }; - }, - created() { - this.getCacheNames(); - }, - methods: { - /** 查询缓存名称列表 */ - getCacheNames() { - this.loading = true; - listCacheName().then(response => { - this.cacheNames = response.data; - this.loading = false; - }); - }, - /** 刷新缓存名称列表 */ - refreshCacheNames() { - this.getCacheNames(); - this.$modal.msgSuccess("刷新缓存列表成功"); - }, - /** 清理指定名称缓存 */ - handleClearCacheName(row) { - clearCacheName(row.cacheName).then(response => { - this.$modal.msgSuccess("清理缓存名称[" + row.cacheName + "]成功"); - this.getCacheKeys(); - }); - }, - /** 查询缓存键名列表 */ - getCacheKeys(row) { - const cacheName = row !== undefined ? row.cacheName : this.nowCacheName; - if (cacheName === "") { - return; - } - this.subLoading = true; - listCacheKey(cacheName).then(response => { - this.cacheKeys = response.data; - this.subLoading = false; - this.nowCacheName = cacheName; - }); - }, - /** 刷新缓存键名列表 */ - refreshCacheKeys() { - this.getCacheKeys(); - this.$modal.msgSuccess("刷新键名列表成功"); - }, - /** 清理指定键名缓存 */ - handleClearCacheKey(cacheKey) { - clearCacheKey(cacheKey).then(response => { - this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功"); - this.getCacheKeys(); - }); - }, - /** 列表前缀去除 */ - nameFormatter(row) { - return row.cacheName.replace(":", ""); - }, - /** 键名前缀去除 */ - keyFormatter(cacheKey) { - return cacheKey.replace(this.nowCacheName, ""); - }, - /** 查询缓存内容详细 */ - handleCacheValue(cacheKey) { - getCacheValue(this.nowCacheName, cacheKey).then(response => { - this.cacheForm = response.data; - }); - }, - /** 清理全部缓存 */ - handleClearCacheAll() { - clearCacheAll().then(response => { - this.$modal.msgSuccess("清理全部缓存成功"); - }); - } - }, -}; -</script> diff --git a/ruoyi-ui/src/views/monitor/druid/index.vue b/ruoyi-ui/src/views/monitor/druid/index.vue deleted file mode 100644 index c6ad585..0000000 --- a/ruoyi-ui/src/views/monitor/druid/index.vue +++ /dev/null @@ -1,15 +0,0 @@ -<template> - <i-frame :src="url" /> -</template> -<script> -import iFrame from "@/components/iFrame/index"; -export default { - name: "Druid", - components: { iFrame }, - data() { - return { - url: process.env.VUE_APP_BASE_API + "/druid/login.html" - }; - }, -}; -</script> diff --git a/ruoyi-ui/src/views/monitor/job/index.vue b/ruoyi-ui/src/views/monitor/job/index.vue deleted file mode 100644 index 892c727..0000000 --- a/ruoyi-ui/src/views/monitor/job/index.vue +++ /dev/null @@ -1,513 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="任务名称" prop="jobName"> - <el-input - v-model="queryParams.jobName" - placeholder="请输入任务名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="任务组名" prop="jobGroup"> - <el-select v-model="queryParams.jobGroup" placeholder="请选择任务组名" clearable> - <el-option - v-for="dict in dict.type.sys_job_group" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="任务状态" prop="status"> - <el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable> - <el-option - v-for="dict in dict.type.sys_job_status" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['monitor:job:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['monitor:job:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['monitor:job:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['monitor:job:export']" - >导出</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="info" - plain - icon="el-icon-s-operation" - size="mini" - @click="handleJobLog" - v-hasPermi="['monitor:job:query']" - >日志</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="任务编号" width="100" align="center" prop="jobId" /> - <el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" /> - <el-table-column label="任务组名" align="center" prop="jobGroup"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/> - </template> - </el-table-column> - <el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" /> - <el-table-column label="cron执行表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" /> - <el-table-column label="状态" align="center"> - <template slot-scope="scope"> - <el-switch - v-model="scope.row.status" - active-value="0" - inactive-value="1" - @change="handleStatusChange(scope.row)" - ></el-switch> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['monitor:job:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['monitor:job:remove']" - >删除</el-button> - <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['monitor:job:changeStatus', 'monitor:job:query']"> - <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> - <el-dropdown-menu slot="dropdown"> - <el-dropdown-item command="handleRun" icon="el-icon-caret-right" - v-hasPermi="['monitor:job:changeStatus']">执行一次</el-dropdown-item> - <el-dropdown-item command="handleView" icon="el-icon-view" - v-hasPermi="['monitor:job:query']">任务详细</el-dropdown-item> - <el-dropdown-item command="handleJobLog" icon="el-icon-s-operation" - v-hasPermi="['monitor:job:query']">调度日志</el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改定时任务对话框 --> - <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="120px"> - <el-row> - <el-col :span="12"> - <el-form-item label="任务名称" prop="jobName"> - <el-input v-model="form.jobName" placeholder="请输入任务名称" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="任务分组" prop="jobGroup"> - <el-select v-model="form.jobGroup" placeholder="请选择任务分组"> - <el-option - v-for="dict in dict.type.sys_job_group" - :key="dict.value" - :label="dict.label" - :value="dict.value" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item prop="invokeTarget"> - <span slot="label"> - 调用方法 - <el-tooltip placement="top"> - <div slot="content"> - Bean调用示例:ryTask.ryParams('ry') - <br />Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry') - <br />参数说明:支持字符串,布尔类型,长整型,浮点型,整型 - </div> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="cron表达式" prop="cronExpression"> - <el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式"> - <template slot="append"> - <el-button type="primary" @click="handleShowCron"> - 生成表达式 - <i class="el-icon-time el-icon--right"></i> - </el-button> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="24" v-if="form.jobId !== undefined"> - <el-form-item label="状态"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_job_status" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="执行策略" prop="misfirePolicy"> - <el-radio-group v-model="form.misfirePolicy" size="small"> - <el-radio-button label="1">立即执行</el-radio-button> - <el-radio-button label="2">执行一次</el-radio-button> - <el-radio-button label="3">放弃执行</el-radio-button> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否并发" prop="concurrent"> - <el-radio-group v-model="form.concurrent" size="small"> - <el-radio-button label="0">允许</el-radio-button> - <el-radio-button label="1">禁止</el-radio-button> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - - <el-dialog title="Cron表达式生成器" :visible.sync="openCron" append-to-body destroy-on-close class="scrollbar"> - <crontab @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab> - </el-dialog> - - <!-- 任务日志详细 --> - <el-dialog title="任务详细" :visible.sync="openView" width="700px" append-to-body> - <el-form ref="form" :model="form" label-width="120px" size="mini"> - <el-row> - <el-col :span="12"> - <el-form-item label="任务编号:">{{ form.jobId }}</el-form-item> - <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item> - <el-form-item label="创建时间:">{{ form.createTime }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="调用目标方法:">{{ form.invokeTarget }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="任务状态:"> - <div v-if="form.status == 0">正常</div> - <div v-else-if="form.status == 1">暂停</div> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="是否并发:"> - <div v-if="form.concurrent == 0">允许</div> - <div v-else-if="form.concurrent == 1">禁止</div> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="执行策略:"> - <div v-if="form.misfirePolicy == 0">默认策略</div> - <div v-else-if="form.misfirePolicy == 1">立即执行</div> - <div v-else-if="form.misfirePolicy == 2">执行一次</div> - <div v-else-if="form.misfirePolicy == 3">放弃执行</div> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button @click="openView = false">关 闭</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listJob, getJob, delJob, addJob, updateJob, runJob, changeJobStatus } from "@/api/monitor/job"; -import Crontab from '@/components/Crontab' - -export default { - components: { Crontab }, - name: "Job", - dicts: ['sys_job_group', 'sys_job_status'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 定时任务表格数据 - jobList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 是否显示详细弹出层 - openView: false, - // 是否显示Cron表达式弹出层 - openCron: false, - // 传入的表达式 - expression: "", - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - jobName: undefined, - jobGroup: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - jobName: [ - { required: true, message: "任务名称不能为空", trigger: "blur" } - ], - invokeTarget: [ - { required: true, message: "调用目标字符串不能为空", trigger: "blur" } - ], - cronExpression: [ - { required: true, message: "cron执行表达式不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询定时任务列表 */ - getList() { - this.loading = true; - listJob(this.queryParams).then(response => { - this.jobList = response.rows; - this.total = response.total; - this.loading = false; - }); - }, - // 任务组名字典翻译 - jobGroupFormat(row, column) { - return this.selectDictLabel(this.dict.type.sys_job_group, row.jobGroup); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - jobId: undefined, - jobName: undefined, - jobGroup: undefined, - invokeTarget: undefined, - cronExpression: undefined, - misfirePolicy: 1, - concurrent: 1, - status: "0" - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.jobId); - this.single = selection.length != 1; - this.multiple = !selection.length; - }, - // 更多操作触发 - handleCommand(command, row) { - switch (command) { - case "handleRun": - this.handleRun(row); - break; - case "handleView": - this.handleView(row); - break; - case "handleJobLog": - this.handleJobLog(row); - break; - default: - break; - } - }, - // 任务状态修改 - handleStatusChange(row) { - let text = row.status === "0" ? "启用" : "停用"; - this.$modal.confirm('确认要"' + text + '""' + row.jobName + '"任务吗?').then(function() { - return changeJobStatus(row.jobId, row.status); - }).then(() => { - this.$modal.msgSuccess(text + "成功"); - }).catch(function() { - row.status = row.status === "0" ? "1" : "0"; - }); - }, - /* 立即执行一次 */ - handleRun(row) { - this.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function() { - return runJob(row.jobId, row.jobGroup); - }).then(() => { - this.$modal.msgSuccess("执行成功"); - }).catch(() => {}); - }, - /** 任务详细信息 */ - handleView(row) { - getJob(row.jobId).then(response => { - this.form = response.data; - this.openView = true; - }); - }, - /** cron表达式按钮操作 */ - handleShowCron() { - this.expression = this.form.cronExpression; - this.openCron = true; - }, - /** 确定后回传值 */ - crontabFill(value) { - this.form.cronExpression = value; - }, - /** 任务日志列表查询 */ - handleJobLog(row) { - const jobId = row.jobId || 0; - this.$router.push('/monitor/job-log/index/' + jobId) - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加任务"; - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const jobId = row.jobId || this.ids; - getJob(jobId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改任务"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.jobId != undefined) { - updateJob(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addJob(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const jobIds = row.jobId || this.ids; - this.$modal.confirm('是否确认删除定时任务编号为"' + jobIds + '"的数据项?').then(function() { - return delJob(jobIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('monitor/job/export', { - ...this.queryParams - }, `job_${new Date().getTime()}.xlsx`) - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/monitor/job/log.vue b/ruoyi-ui/src/views/monitor/job/log.vue deleted file mode 100644 index 60bee1d..0000000 --- a/ruoyi-ui/src/views/monitor/job/log.vue +++ /dev/null @@ -1,295 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="任务名称" prop="jobName"> - <el-input - v-model="queryParams.jobName" - placeholder="请输入任务名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="任务组名" prop="jobGroup"> - <el-select - v-model="queryParams.jobGroup" - placeholder="请选择任务组名" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_job_group" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="执行状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="请选择执行状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_common_status" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="执行时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['monitor:job:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - @click="handleClean" - v-hasPermi="['monitor:job:remove']" - >清空</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['monitor:job:export']" - >导出</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-close" - size="mini" - @click="handleClose" - >关闭</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="日志编号" width="80" align="center" prop="jobLogId" /> - <el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" /> - <el-table-column label="任务组名" align="center" prop="jobGroup" :show-overflow-tooltip="true"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_job_group" :value="scope.row.jobGroup"/> - </template> - </el-table-column> - <el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" /> - <el-table-column label="日志信息" align="center" prop="jobMessage" :show-overflow-tooltip="true" /> - <el-table-column label="执行状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="执行时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-view" - @click="handleView(scope.row)" - v-hasPermi="['monitor:job:query']" - >详细</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 调度日志详细 --> - <el-dialog title="调度日志详细" :visible.sync="open" width="700px" append-to-body> - <el-form ref="form" :model="form" label-width="100px" size="mini"> - <el-row> - <el-col :span="12"> - <el-form-item label="日志序号:">{{ form.jobLogId }}</el-form-item> - <el-form-item label="任务名称:">{{ form.jobName }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="任务分组:">{{ form.jobGroup }}</el-form-item> - <el-form-item label="执行时间:">{{ form.createTime }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="调用方法:">{{ form.invokeTarget }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="日志信息:">{{ form.jobMessage }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="执行状态:"> - <div v-if="form.status == 0">正常</div> - <div v-else-if="form.status == 1">失败</div> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="异常信息:" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button @click="open = false">关 闭</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { getJob} from "@/api/monitor/job"; -import { listJobLog, delJobLog, cleanJobLog } from "@/api/monitor/jobLog"; - -export default { - name: "JobLog", - dicts: ['sys_common_status', 'sys_job_group'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 调度日志表格数据 - jobLogList: [], - // 是否显示弹出层 - open: false, - // 日期范围 - dateRange: [], - // 表单参数 - form: {}, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - jobName: undefined, - jobGroup: undefined, - status: undefined - } - }; - }, - created() { - const jobId = this.$route.params && this.$route.params.jobId; - if (jobId !== undefined && jobId != 0) { - getJob(jobId).then(response => { - this.queryParams.jobName = response.data.jobName; - this.queryParams.jobGroup = response.data.jobGroup; - this.getList(); - }); - } else { - this.getList(); - } - }, - methods: { - /** 查询调度日志列表 */ - getList() { - this.loading = true; - listJobLog(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.jobLogList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - // 返回按钮 - handleClose() { - const obj = { path: "/monitor/job" }; - this.$tab.closeOpenPage(obj); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.jobLogId); - this.multiple = !selection.length; - }, - /** 详细按钮操作 */ - handleView(row) { - this.open = true; - this.form = row; - }, - /** 删除按钮操作 */ - handleDelete(row) { - const jobLogIds = this.ids; - this.$modal.confirm('是否确认删除调度日志编号为"' + jobLogIds + '"的数据项?').then(function() { - return delJobLog(jobLogIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 清空按钮操作 */ - handleClean() { - this.$modal.confirm('是否确认清空所有调度日志数据项?').then(function() { - return cleanJobLog(); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("清空成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('/monitor/jobLog/export', { - ...this.queryParams - }, `log_${new Date().getTime()}.xlsx`) - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/monitor/logininfor/index.vue b/ruoyi-ui/src/views/monitor/logininfor/index.vue deleted file mode 100644 index d6af834..0000000 --- a/ruoyi-ui/src/views/monitor/logininfor/index.vue +++ /dev/null @@ -1,246 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="登录地址" prop="ipaddr"> - <el-input - v-model="queryParams.ipaddr" - placeholder="请输入登录地址" - clearable - style="width: 240px;" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="用户名称" prop="userName"> - <el-input - v-model="queryParams.userName" - placeholder="请输入用户名称" - clearable - style="width: 240px;" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="登录状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_common_status" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="登录时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd HH:mm:ss" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - :default-time="['00:00:00', '23:59:59']" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['monitor:logininfor:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - @click="handleClean" - v-hasPermi="['monitor:logininfor:remove']" - >清空</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-unlock" - size="mini" - :disabled="single" - @click="handleUnlock" - v-hasPermi="['monitor:logininfor:unlock']" - >解锁</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['monitor:logininfor:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="访问编号" align="center" prop="infoId" /> - <el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> - <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" /> - <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" /> - <el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" /> - <el-table-column label="操作系统" align="center" prop="os" /> - <el-table-column label="登录状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="操作信息" align="center" prop="msg" :show-overflow-tooltip="true" /> - <el-table-column label="登录日期" align="center" prop="loginTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.loginTime) }}</span> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - </div> -</template> - -<script> -import { list, delLogininfor, cleanLogininfor, unlockLogininfor } from "@/api/monitor/logininfor"; - -export default { - name: "Logininfor", - dicts: ['sys_common_status'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 选择用户名 - selectName: "", - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 表格数据 - list: [], - // 日期范围 - dateRange: [], - // 默认排序 - defaultSort: {prop: 'loginTime', order: 'descending'}, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - ipaddr: undefined, - userName: undefined, - status: undefined - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询登录日志列表 */ - getList() { - this.loading = true; - list(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.list = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.queryParams.pageNum = 1; - this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order) - }, - /** 多选框选中数据 */ - handleSelectionChange(selection) { - this.ids = selection.map(item => item.infoId) - this.single = selection.length!=1 - this.multiple = !selection.length - this.selectName = selection.map(item => item.userName); - }, - /** 排序触发事件 */ - handleSortChange(column, prop, order) { - this.queryParams.orderByColumn = column.prop; - this.queryParams.isAsc = column.order; - this.getList(); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const infoIds = row.infoId || this.ids; - this.$modal.confirm('是否确认删除访问编号为"' + infoIds + '"的数据项?').then(function() { - return delLogininfor(infoIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 清空按钮操作 */ - handleClean() { - this.$modal.confirm('是否确认清空所有登录日志数据项?').then(function() { - return cleanLogininfor(); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("清空成功"); - }).catch(() => {}); - }, - /** 解锁按钮操作 */ - handleUnlock() { - const username = this.selectName; - this.$modal.confirm('是否确认解锁用户"' + username + '"数据项?').then(function() { - return unlockLogininfor(username); - }).then(() => { - this.$modal.msgSuccess("用户" + username + "解锁成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('monitor/logininfor/export', { - ...this.queryParams - }, `logininfor_${new Date().getTime()}.xlsx`) - } - } -}; -</script> - diff --git a/ruoyi-ui/src/views/monitor/online/index.vue b/ruoyi-ui/src/views/monitor/online/index.vue deleted file mode 100644 index ad613c9..0000000 --- a/ruoyi-ui/src/views/monitor/online/index.vue +++ /dev/null @@ -1,122 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px"> - <el-form-item label="登录地址" prop="ipaddr"> - <el-input - v-model="queryParams.ipaddr" - placeholder="请输入登录地址" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="用户名称" prop="userName"> - <el-input - v-model="queryParams.userName" - placeholder="请输入用户名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - - </el-form> - <el-table - v-loading="loading" - :data="list.slice((pageNum-1)*pageSize,pageNum*pageSize)" - style="width: 100%;" - > - <el-table-column label="序号" type="index" align="center"> - <template slot-scope="scope"> - <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> - </template> - </el-table-column> - <el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" /> - <el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" /> - <el-table-column label="部门名称" align="center" prop="deptName" /> - <el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" /> - <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" /> - <el-table-column label="浏览器" align="center" prop="browser" /> - <el-table-column label="操作系统" align="center" prop="os" /> - <el-table-column label="登录时间" align="center" prop="loginTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.loginTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleForceLogout(scope.row)" - v-hasPermi="['monitor:online:forceLogout']" - >强退</el-button> - </template> - </el-table-column> - </el-table> - - <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" /> - </div> -</template> - -<script> -import { list, forceLogout } from "@/api/monitor/online"; - -export default { - name: "Online", - data() { - return { - // 遮罩层 - loading: true, - // 总条数 - total: 0, - // 表格数据 - list: [], - pageNum: 1, - pageSize: 10, - // 查询参数 - queryParams: { - ipaddr: undefined, - userName: undefined - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询登录日志列表 */ - getList() { - this.loading = true; - list(this.queryParams).then(response => { - this.list = response.rows; - this.total = response.total; - this.loading = false; - }); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 强退按钮操作 */ - handleForceLogout(row) { - this.$modal.confirm('是否确认强退名称为"' + row.userName + '"的用户?').then(function() { - return forceLogout(row.tokenId); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("强退成功"); - }).catch(() => {}); - } - } -}; -</script> - diff --git a/ruoyi-ui/src/views/monitor/operlog/index.vue b/ruoyi-ui/src/views/monitor/operlog/index.vue deleted file mode 100644 index 4a1828f..0000000 --- a/ruoyi-ui/src/views/monitor/operlog/index.vue +++ /dev/null @@ -1,323 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="操作地址" prop="operIp"> - <el-input - v-model="queryParams.operIp" - placeholder="请输入操作地址" - clearable - style="width: 240px;" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="系统模块" prop="title"> - <el-input - v-model="queryParams.title" - placeholder="请输入系统模块" - clearable - style="width: 240px;" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="操作人员" prop="operName"> - <el-input - v-model="queryParams.operName" - placeholder="请输入操作人员" - clearable - style="width: 240px;" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="类型" prop="businessType"> - <el-select - v-model="queryParams.businessType" - placeholder="操作类型" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_oper_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="操作状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_common_status" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="操作时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd HH:mm:ss" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - :default-time="['00:00:00', '23:59:59']" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['monitor:operlog:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - @click="handleClean" - v-hasPermi="['monitor:operlog:remove']" - >清空</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['monitor:operlog:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> - <el-table-column type="selection" width="50" align="center" /> - <el-table-column label="日志编号" align="center" prop="operId" /> - <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" /> - <el-table-column label="操作类型" align="center" prop="businessType"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_oper_type" :value="scope.row.businessType"/> - </template> - </el-table-column> - <el-table-column label="操作人员" align="center" prop="operName" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> - <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" /> - <el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" /> - <el-table-column label="操作状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="操作日期" align="center" prop="operTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.operTime) }}</span> - </template> - </el-table-column> - <el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']"> - <template slot-scope="scope"> - <span>{{ scope.row.costTime }}毫秒</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-view" - @click="handleView(scope.row,scope.index)" - v-hasPermi="['monitor:operlog:query']" - >详细</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 操作日志详细 --> - <el-dialog title="操作日志详细" :visible.sync="open" width="800px" append-to-body> - <el-form ref="form" :model="form" label-width="100px" size="mini"> - <el-row> - <el-col :span="12"> - <el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item> - <el-form-item - label="登录信息:" - >{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item> - <el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="操作方法:">{{ form.method }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="请求参数:">{{ form.operParam }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="操作状态:"> - <div v-if="form.status === 0">正常</div> - <div v-else-if="form.status === 1">失败</div> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button @click="open = false">关 闭</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { list, delOperlog, cleanOperlog } from "@/api/monitor/operlog"; - -export default { - name: "Operlog", - dicts: ['sys_oper_type', 'sys_common_status'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 表格数据 - list: [], - // 是否显示弹出层 - open: false, - // 日期范围 - dateRange: [], - // 默认排序 - defaultSort: {prop: 'operTime', order: 'descending'}, - // 表单参数 - form: {}, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - operIp: undefined, - title: undefined, - operName: undefined, - businessType: undefined, - status: undefined - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询登录日志 */ - getList() { - this.loading = true; - list(this.addDateRange(this.queryParams, this.dateRange)).then( response => { - this.list = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - // 操作日志类型字典翻译 - typeFormat(row, column) { - return this.selectDictLabel(this.dict.type.sys_oper_type, row.businessType); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.queryParams.pageNum = 1; - this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order) - }, - /** 多选框选中数据 */ - handleSelectionChange(selection) { - this.ids = selection.map(item => item.operId) - this.multiple = !selection.length - }, - /** 排序触发事件 */ - handleSortChange(column, prop, order) { - this.queryParams.orderByColumn = column.prop; - this.queryParams.isAsc = column.order; - this.getList(); - }, - /** 详细按钮操作 */ - handleView(row) { - this.open = true; - this.form = row; - }, - /** 删除按钮操作 */ - handleDelete(row) { - const operIds = row.operId || this.ids; - this.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function() { - return delOperlog(operIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 清空按钮操作 */ - handleClean() { - this.$modal.confirm('是否确认清空所有操作日志数据项?').then(function() { - return cleanOperlog(); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("清空成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('monitor/operlog/export', { - ...this.queryParams - }, `operlog_${new Date().getTime()}.xlsx`) - } - } -}; -</script> - diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue deleted file mode 100644 index 15ffc9a..0000000 --- a/ruoyi-ui/src/views/monitor/server/index.vue +++ /dev/null @@ -1,207 +0,0 @@ -<template> - <div class="app-container"> - <el-row> - <el-col :span="12" class="card-box"> - <el-card> - <div slot="header"><span><i class="el-icon-cpu"></i> CPU</span></div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%;"> - <thead> - <tr> - <th class="el-table__cell is-leaf"><div class="cell">属性</div></th> - <th class="el-table__cell is-leaf"><div class="cell">值</div></th> - </tr> - </thead> - <tbody> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">核心数</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.cpuNum }}</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">用户使用率</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.used }}%</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">系统使用率</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.sys }}%</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">当前空闲率</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.cpu">{{ server.cpu.free }}%</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - - <el-col :span="12" class="card-box"> - <el-card> - <div slot="header"><span><i class="el-icon-tickets"></i> 内存</span></div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%;"> - <thead> - <tr> - <th class="el-table__cell is-leaf"><div class="cell">属性</div></th> - <th class="el-table__cell is-leaf"><div class="cell">内存</div></th> - <th class="el-table__cell is-leaf"><div class="cell">JVM</div></th> - </tr> - </thead> - <tbody> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">总内存</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.total }}G</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.total }}M</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">已用内存</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.used}}G</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.used}}M</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">剩余内存</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem">{{ server.mem.free }}G</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.free }}M</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">使用率</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.mem" :class="{'text-danger': server.mem.usage > 80}">{{ server.mem.usage }}%</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm" :class="{'text-danger': server.jvm.usage > 80}">{{ server.jvm.usage }}%</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - - <el-col :span="24" class="card-box"> - <el-card> - <div slot="header"> - <span><i class="el-icon-monitor"></i> 服务器信息</span> - </div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%;"> - <tbody> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">服务器名称</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.computerName }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">操作系统</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.osName }}</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">服务器IP</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.computerIp }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">系统架构</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.osArch }}</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - - <el-col :span="24" class="card-box"> - <el-card> - <div slot="header"> - <span><i class="el-icon-coffee-cup"></i> Java虚拟机信息</span> - </div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%;table-layout:fixed;"> - <tbody> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">Java名称</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.name }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">Java版本</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.version }}</div></td> - </tr> - <tr> - <td class="el-table__cell is-leaf"><div class="cell">启动时间</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.startTime }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">运行时长</div></td> - <td class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.runTime }}</div></td> - </tr> - <tr> - <td colspan="1" class="el-table__cell is-leaf"><div class="cell">安装路径</div></td> - <td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.home }}</div></td> - </tr> - <tr> - <td colspan="1" class="el-table__cell is-leaf"><div class="cell">项目路径</div></td> - <td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.sys">{{ server.sys.userDir }}</div></td> - </tr> - <tr> - <td colspan="1" class="el-table__cell is-leaf"><div class="cell">运行参数</div></td> - <td colspan="3" class="el-table__cell is-leaf"><div class="cell" v-if="server.jvm">{{ server.jvm.inputArgs }}</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - - <el-col :span="24" class="card-box"> - <el-card> - <div slot="header"> - <span><i class="el-icon-receiving"></i> 磁盘状态</span> - </div> - <div class="el-table el-table--enable-row-hover el-table--medium"> - <table cellspacing="0" style="width: 100%;"> - <thead> - <tr> - <th class="el-table__cell el-table__cell is-leaf"><div class="cell">盘符路径</div></th> - <th class="el-table__cell is-leaf"><div class="cell">文件系统</div></th> - <th class="el-table__cell is-leaf"><div class="cell">盘符类型</div></th> - <th class="el-table__cell is-leaf"><div class="cell">总大小</div></th> - <th class="el-table__cell is-leaf"><div class="cell">可用大小</div></th> - <th class="el-table__cell is-leaf"><div class="cell">已用大小</div></th> - <th class="el-table__cell is-leaf"><div class="cell">已用百分比</div></th> - </tr> - </thead> - <tbody v-if="server.sysFiles"> - <tr v-for="(sysFile, index) in server.sysFiles" :key="index"> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.dirName }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.sysTypeName }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.typeName }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.total }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.free }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell">{{ sysFile.used }}</div></td> - <td class="el-table__cell is-leaf"><div class="cell" :class="{'text-danger': sysFile.usage > 80}">{{ sysFile.usage }}%</div></td> - </tr> - </tbody> - </table> - </div> - </el-card> - </el-col> - </el-row> - </div> -</template> - -<script> -import { getServer } from "@/api/monitor/server"; - -export default { - name: "Server", - data() { - return { - // 服务器信息 - server: [] - }; - }, - created() { - this.getList(); - this.openLoading(); - }, - methods: { - /** 查询服务器信息 */ - getList() { - getServer().then(response => { - this.server = response.data; - this.$modal.closeLoading(); - }); - }, - // 打开加载层 - openLoading() { - this.$modal.loading("正在加载服务监控数据,请稍候!"); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/redirect.vue b/ruoyi-ui/src/views/redirect.vue deleted file mode 100644 index db4c1d6..0000000 --- a/ruoyi-ui/src/views/redirect.vue +++ /dev/null @@ -1,12 +0,0 @@ -<script> -export default { - created() { - const { params, query } = this.$route - const { path } = params - this.$router.replace({ path: '/' + path, query }) - }, - render: function(h) { - return h() // avoid warning message - } -} -</script> diff --git a/ruoyi-ui/src/views/register.vue b/ruoyi-ui/src/views/register.vue deleted file mode 100644 index 7bf6f43..0000000 --- a/ruoyi-ui/src/views/register.vue +++ /dev/null @@ -1,210 +0,0 @@ -<template> - <div class="register"> - <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> - <h3 class="title">若依后台管理系统</h3> - <el-form-item prop="username"> - <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> - <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> - </el-input> - </el-form-item> - <el-form-item prop="password"> - <el-input - v-model="registerForm.password" - type="password" - auto-complete="off" - placeholder="密码" - @keyup.enter.native="handleRegister" - > - <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> - </el-input> - </el-form-item> - <el-form-item prop="confirmPassword"> - <el-input - v-model="registerForm.confirmPassword" - type="password" - auto-complete="off" - placeholder="确认密码" - @keyup.enter.native="handleRegister" - > - <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> - </el-input> - </el-form-item> - <el-form-item prop="code" v-if="captchaEnabled"> - <el-input - v-model="registerForm.code" - auto-complete="off" - placeholder="验证码" - style="width: 63%" - @keyup.enter.native="handleRegister" - > - <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> - </el-input> - <div class="register-code"> - <img :src="codeUrl" @click="getCode" class="register-code-img"/> - </div> - </el-form-item> - <el-form-item style="width:100%;"> - <el-button - :loading="loading" - size="medium" - type="primary" - style="width:100%;" - @click.native.prevent="handleRegister" - > - <span v-if="!loading">注 册</span> - <span v-else>注 册 中...</span> - </el-button> - <div style="float: right;"> - <router-link class="link-type" :to="'/login'">使用已有账户登录</router-link> - </div> - </el-form-item> - </el-form> - <!-- 底部 --> - <div class="el-register-footer"> - <span>Copyright © 2018-2024 ruoyi.vip All Rights Reserved.</span> - </div> - </div> -</template> - -<script> -import { getCodeImg, register } from "@/api/login"; - -export default { - name: "Register", - data() { - const equalToPassword = (rule, value, callback) => { - if (this.registerForm.password !== value) { - callback(new Error("两次输入的密码不一致")); - } else { - callback(); - } - }; - return { - codeUrl: "", - registerForm: { - username: "", - password: "", - confirmPassword: "", - code: "", - uuid: "" - }, - registerRules: { - username: [ - { required: true, trigger: "blur", message: "请输入您的账号" }, - { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' } - ], - password: [ - { required: true, trigger: "blur", message: "请输入您的密码" }, - { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, - { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } - ], - confirmPassword: [ - { required: true, trigger: "blur", message: "请再次输入您的密码" }, - { required: true, validator: equalToPassword, trigger: "blur" } - ], - code: [{ required: true, trigger: "change", message: "请输入验证码" }] - }, - loading: false, - captchaEnabled: true - }; - }, - created() { - this.getCode(); - }, - methods: { - getCode() { - getCodeImg().then(res => { - this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled; - if (this.captchaEnabled) { - this.codeUrl = "data:image/gif;base64," + res.img; - this.registerForm.uuid = res.uuid; - } - }); - }, - handleRegister() { - this.$refs.registerForm.validate(valid => { - if (valid) { - this.loading = true; - register(this.registerForm).then(res => { - const username = this.registerForm.username; - this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', { - dangerouslyUseHTMLString: true, - type: 'success' - }).then(() => { - this.$router.push("/login"); - }).catch(() => {}); - }).catch(() => { - this.loading = false; - if (this.captchaEnabled) { - this.getCode(); - } - }) - } - }); - } - } -}; -</script> - -<style rel="stylesheet/scss" lang="scss"> -.register { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - background-image: url("../assets/images/login-background.jpg"); - background-size: cover; -} -.title { - margin: 0px auto 30px auto; - text-align: center; - color: #707070; -} - -.register-form { - border-radius: 6px; - background: #ffffff; - width: 400px; - padding: 25px 25px 5px 25px; - .el-input { - height: 38px; - input { - height: 38px; - } - } - .input-icon { - height: 39px; - width: 14px; - margin-left: 2px; - } -} -.register-tip { - font-size: 13px; - text-align: center; - color: #bfbfbf; -} -.register-code { - width: 33%; - height: 38px; - float: right; - img { - cursor: pointer; - vertical-align: middle; - } -} -.el-register-footer { - height: 40px; - line-height: 40px; - position: fixed; - bottom: 0; - width: 100%; - text-align: center; - color: #fff; - font-family: Arial; - font-size: 12px; - letter-spacing: 1px; -} -.register-code-img { - height: 38px; -} -</style> diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue deleted file mode 100644 index 3ab81fc..0000000 --- a/ruoyi-ui/src/views/system/config/index.vue +++ /dev/null @@ -1,343 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="参数名称" prop="configName"> - <el-input - v-model="queryParams.configName" - placeholder="请输入参数名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="参数键名" prop="configKey"> - <el-input - v-model="queryParams.configKey" - placeholder="请输入参数键名" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="系统内置" prop="configType"> - <el-select v-model="queryParams.configType" placeholder="系统内置" clearable> - <el-option - v-for="dict in dict.type.sys_yes_no" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="创建时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:config:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:config:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:config:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:config:export']" - >导出</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-refresh" - size="mini" - @click="handleRefreshCache" - v-hasPermi="['system:config:remove']" - >刷新缓存</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="参数主键" align="center" prop="configId" /> - <el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" /> - <el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" /> - <el-table-column label="参数键值" align="center" prop="configValue" :show-overflow-tooltip="true" /> - <el-table-column label="系统内置" align="center" prop="configType"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.configType"/> - </template> - </el-table-column> - <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:config:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:config:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改参数配置对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="参数名称" prop="configName"> - <el-input v-model="form.configName" placeholder="请输入参数名称" /> - </el-form-item> - <el-form-item label="参数键名" prop="configKey"> - <el-input v-model="form.configKey" placeholder="请输入参数键名" /> - </el-form-item> - <el-form-item label="参数键值" prop="configValue"> - <el-input v-model="form.configValue" placeholder="请输入参数键值" /> - </el-form-item> - <el-form-item label="系统内置" prop="configType"> - <el-radio-group v-model="form.configType"> - <el-radio - v-for="dict in dict.type.sys_yes_no" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="备注" prop="remark"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from "@/api/system/config"; - -export default { - name: "Config", - dicts: ['sys_yes_no'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 参数表格数据 - configList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 日期范围 - dateRange: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - configName: undefined, - configKey: undefined, - configType: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - configName: [ - { required: true, message: "参数名称不能为空", trigger: "blur" } - ], - configKey: [ - { required: true, message: "参数键名不能为空", trigger: "blur" } - ], - configValue: [ - { required: true, message: "参数键值不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询参数列表 */ - getList() { - this.loading = true; - listConfig(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.configList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - configId: undefined, - configName: undefined, - configKey: undefined, - configValue: undefined, - configType: "Y", - remark: undefined - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加参数"; - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.configId) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const configId = row.configId || this.ids - getConfig(configId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改参数"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.configId != undefined) { - updateConfig(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addConfig(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const configIds = row.configId || this.ids; - this.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?').then(function() { - return delConfig(configIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/config/export', { - ...this.queryParams - }, `config_${new Date().getTime()}.xlsx`) - }, - /** 刷新缓存按钮操作 */ - handleRefreshCache() { - refreshCache().then(() => { - this.$modal.msgSuccess("刷新成功"); - }); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue deleted file mode 100644 index e502b4e..0000000 --- a/ruoyi-ui/src/views/system/dept/index.vue +++ /dev/null @@ -1,340 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> - <el-form-item label="部门名称" prop="deptName"> - <el-input - v-model="queryParams.deptName" - placeholder="请输入部门名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select v-model="queryParams.status" placeholder="部门状态" clearable> - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:dept:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="info" - plain - icon="el-icon-sort" - size="mini" - @click="toggleExpandAll" - >展开/折叠</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table - v-if="refreshTable" - v-loading="loading" - :data="deptList" - row-key="deptId" - :default-expand-all="isExpandAll" - :tree-props="{children: 'children', hasChildren: 'hasChildren'}" - > - <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column> - <el-table-column prop="orderNum" label="排序" width="200"></el-table-column> - <el-table-column prop="status" label="状态" width="100"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" width="200"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:dept:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-plus" - @click="handleAdd(scope.row)" - v-hasPermi="['system:dept:add']" - >新增</el-button> - <el-button - v-if="scope.row.parentId != 0" - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:dept:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <!-- 添加或修改部门对话框 --> - <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-row> - <el-col :span="24" v-if="form.parentId !== 0"> - <el-form-item label="上级部门" prop="parentId"> - <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="部门名称" prop="deptName"> - <el-input v-model="form.deptName" placeholder="请输入部门名称" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="显示排序" prop="orderNum"> - <el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="负责人" prop="leader"> - <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="联系电话" prop="phone"> - <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="邮箱" prop="email"> - <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="部门状态"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept"; -import Treeselect from "@riophae/vue-treeselect"; -import "@riophae/vue-treeselect/dist/vue-treeselect.css"; - -export default { - name: "Dept", - dicts: ['sys_normal_disable'], - components: { Treeselect }, - data() { - return { - // 遮罩层 - loading: true, - // 显示搜索条件 - showSearch: true, - // 表格树数据 - deptList: [], - // 部门树选项 - deptOptions: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 是否展开,默认全部展开 - isExpandAll: true, - // 重新渲染表格状态 - refreshTable: true, - // 查询参数 - queryParams: { - deptName: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - parentId: [ - { required: true, message: "上级部门不能为空", trigger: "blur" } - ], - deptName: [ - { required: true, message: "部门名称不能为空", trigger: "blur" } - ], - orderNum: [ - { required: true, message: "显示排序不能为空", trigger: "blur" } - ], - email: [ - { - type: "email", - message: "请输入正确的邮箱地址", - trigger: ["blur", "change"] - } - ], - phone: [ - { - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, - message: "请输入正确的手机号码", - trigger: "blur" - } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询部门列表 */ - getList() { - this.loading = true; - listDept(this.queryParams).then(response => { - this.deptList = this.handleTree(response.data, "deptId"); - this.loading = false; - }); - }, - /** 转换部门数据结构 */ - normalizer(node) { - if (node.children && !node.children.length) { - delete node.children; - } - return { - id: node.deptId, - label: node.deptName, - children: node.children - }; - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - deptId: undefined, - parentId: undefined, - deptName: undefined, - orderNum: undefined, - leader: undefined, - phone: undefined, - email: undefined, - status: "0" - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 新增按钮操作 */ - handleAdd(row) { - this.reset(); - if (row != undefined) { - this.form.parentId = row.deptId; - } - this.open = true; - this.title = "添加部门"; - listDept().then(response => { - this.deptOptions = this.handleTree(response.data, "deptId"); - }); - }, - /** 展开/折叠操作 */ - toggleExpandAll() { - this.refreshTable = false; - this.isExpandAll = !this.isExpandAll; - this.$nextTick(() => { - this.refreshTable = true; - }); - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - getDept(row.deptId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改部门"; - listDeptExcludeChild(row.deptId).then(response => { - this.deptOptions = this.handleTree(response.data, "deptId"); - if (this.deptOptions.length == 0) { - const noResultsOptions = { deptId: this.form.parentId, deptName: this.form.parentName, children: [] }; - this.deptOptions.push(noResultsOptions); - } - }); - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.deptId != undefined) { - updateDept(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addDept(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - this.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() { - return delDept(row.deptId); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/dict/data.vue b/ruoyi-ui/src/views/system/dict/data.vue deleted file mode 100644 index 3befe4a..0000000 --- a/ruoyi-ui/src/views/system/dict/data.vue +++ /dev/null @@ -1,402 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="字典名称" prop="dictType"> - <el-select v-model="queryParams.dictType"> - <el-option - v-for="item in typeOptions" - :key="item.dictId" - :label="item.dictName" - :value="item.dictType" - /> - </el-select> - </el-form-item> - <el-form-item label="字典标签" prop="dictLabel"> - <el-input - v-model="queryParams.dictLabel" - placeholder="请输入字典标签" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select v-model="queryParams.status" placeholder="数据状态" clearable> - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:dict:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:dict:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:dict:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:dict:export']" - >导出</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-close" - size="mini" - @click="handleClose" - >关闭</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="字典编码" align="center" prop="dictCode" /> - <el-table-column label="字典标签" align="center" prop="dictLabel"> - <template slot-scope="scope"> - <span v-if="(scope.row.listClass == '' || scope.row.listClass == 'default') && (scope.row.cssClass == '' || scope.row.cssClass == null)">{{ scope.row.dictLabel }}</span> - <el-tag v-else :type="scope.row.listClass == 'primary' ? '' : scope.row.listClass" :class="scope.row.cssClass">{{ scope.row.dictLabel }}</el-tag> - </template> - </el-table-column> - <el-table-column label="字典键值" align="center" prop="dictValue" /> - <el-table-column label="字典排序" align="center" prop="dictSort" /> - <el-table-column label="状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:dict:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:dict:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改参数配置对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="字典类型"> - <el-input v-model="form.dictType" :disabled="true" /> - </el-form-item> - <el-form-item label="数据标签" prop="dictLabel"> - <el-input v-model="form.dictLabel" placeholder="请输入数据标签" /> - </el-form-item> - <el-form-item label="数据键值" prop="dictValue"> - <el-input v-model="form.dictValue" placeholder="请输入数据键值" /> - </el-form-item> - <el-form-item label="样式属性" prop="cssClass"> - <el-input v-model="form.cssClass" placeholder="请输入样式属性" /> - </el-form-item> - <el-form-item label="显示排序" prop="dictSort"> - <el-input-number v-model="form.dictSort" controls-position="right" :min="0" /> - </el-form-item> - <el-form-item label="回显样式" prop="listClass"> - <el-select v-model="form.listClass"> - <el-option - v-for="item in listClassOptions" - :key="item.value" - :label="item.label + '(' + item.value + ')'" - :value="item.value" - ></el-option> - </el-select> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="备注" prop="remark"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listData, getData, delData, addData, updateData } from "@/api/system/dict/data"; -import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type"; - -export default { - name: "Data", - dicts: ['sys_normal_disable'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 字典表格数据 - dataList: [], - // 默认字典类型 - defaultDictType: "", - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 数据标签回显样式 - listClassOptions: [ - { - value: "default", - label: "默认" - }, - { - value: "primary", - label: "主要" - }, - { - value: "success", - label: "成功" - }, - { - value: "info", - label: "信息" - }, - { - value: "warning", - label: "警告" - }, - { - value: "danger", - label: "危险" - } - ], - // 类型数据字典 - typeOptions: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - dictType: undefined, - dictLabel: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - dictLabel: [ - { required: true, message: "数据标签不能为空", trigger: "blur" } - ], - dictValue: [ - { required: true, message: "数据键值不能为空", trigger: "blur" } - ], - dictSort: [ - { required: true, message: "数据顺序不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - const dictId = this.$route.params && this.$route.params.dictId; - this.getType(dictId); - this.getTypeList(); - }, - methods: { - /** 查询字典类型详细 */ - getType(dictId) { - getType(dictId).then(response => { - this.queryParams.dictType = response.data.dictType; - this.defaultDictType = response.data.dictType; - this.getList(); - }); - }, - /** 查询字典类型列表 */ - getTypeList() { - getDictOptionselect().then(response => { - this.typeOptions = response.data; - }); - }, - /** 查询字典数据列表 */ - getList() { - this.loading = true; - listData(this.queryParams).then(response => { - this.dataList = response.rows; - this.total = response.total; - this.loading = false; - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - dictCode: undefined, - dictLabel: undefined, - dictValue: undefined, - cssClass: undefined, - listClass: 'default', - dictSort: 0, - status: "0", - remark: undefined - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 返回按钮操作 */ - handleClose() { - const obj = { path: "/system/dict" }; - this.$tab.closeOpenPage(obj); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.queryParams.dictType = this.defaultDictType; - this.handleQuery(); - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加字典数据"; - this.form.dictType = this.queryParams.dictType; - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.dictCode) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const dictCode = row.dictCode || this.ids - getData(dictCode).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改字典数据"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.dictCode != undefined) { - updateData(this.form).then(response => { - this.$store.dispatch('dict/removeDict', this.queryParams.dictType); - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addData(this.form).then(response => { - this.$store.dispatch('dict/removeDict', this.queryParams.dictType); - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const dictCodes = row.dictCode || this.ids; - this.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?').then(function() { - return delData(dictCodes); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - this.$store.dispatch('dict/removeDict', this.queryParams.dictType); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/dict/data/export', { - ...this.queryParams - }, `data_${new Date().getTime()}.xlsx`) - } - } -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/dict/index.vue b/ruoyi-ui/src/views/system/dict/index.vue deleted file mode 100644 index 6ca5457..0000000 --- a/ruoyi-ui/src/views/system/dict/index.vue +++ /dev/null @@ -1,347 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="字典名称" prop="dictName"> - <el-input - v-model="queryParams.dictName" - placeholder="请输入字典名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="字典类型" prop="dictType"> - <el-input - v-model="queryParams.dictType" - placeholder="请输入字典类型" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="字典状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="创建时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:dict:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:dict:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:dict:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:dict:export']" - >导出</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-refresh" - size="mini" - @click="handleRefreshCache" - v-hasPermi="['system:dict:remove']" - >刷新缓存</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="字典编号" align="center" prop="dictId" /> - <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" /> - <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> - <template slot-scope="scope"> - <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type"> - <span>{{ scope.row.dictType }}</span> - </router-link> - </template> - </el-table-column> - <el-table-column label="状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:dict:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:dict:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改参数配置对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="字典名称" prop="dictName"> - <el-input v-model="form.dictName" placeholder="请输入字典名称" /> - </el-form-item> - <el-form-item label="字典类型" prop="dictType"> - <el-input v-model="form.dictType" placeholder="请输入字典类型" /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="备注" prop="remark"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type"; - -export default { - name: "Dict", - dicts: ['sys_normal_disable'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 字典表格数据 - typeList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 日期范围 - dateRange: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - dictName: undefined, - dictType: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - dictName: [ - { required: true, message: "字典名称不能为空", trigger: "blur" } - ], - dictType: [ - { required: true, message: "字典类型不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询字典类型列表 */ - getList() { - this.loading = true; - listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.typeList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - dictId: undefined, - dictName: undefined, - dictType: undefined, - status: "0", - remark: undefined - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加字典类型"; - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.dictId) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const dictId = row.dictId || this.ids - getType(dictId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改字典类型"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.dictId != undefined) { - updateType(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addType(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const dictIds = row.dictId || this.ids; - this.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() { - return delType(dictIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/dict/type/export', { - ...this.queryParams - }, `type_${new Date().getTime()}.xlsx`) - }, - /** 刷新缓存按钮操作 */ - handleRefreshCache() { - refreshCache().then(() => { - this.$modal.msgSuccess("刷新成功"); - this.$store.dispatch('dict/cleanDict'); - }); - } - } -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/menu/index.vue b/ruoyi-ui/src/views/system/menu/index.vue deleted file mode 100644 index c703fa0..0000000 --- a/ruoyi-ui/src/views/system/menu/index.vue +++ /dev/null @@ -1,452 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> - <el-form-item label="菜单名称" prop="menuName"> - <el-input - v-model="queryParams.menuName" - placeholder="请输入菜单名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select v-model="queryParams.status" placeholder="菜单状态" clearable> - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:menu:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="info" - plain - icon="el-icon-sort" - size="mini" - @click="toggleExpandAll" - >展开/折叠</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table - v-if="refreshTable" - v-loading="loading" - :data="menuList" - row-key="menuId" - :default-expand-all="isExpandAll" - :tree-props="{children: 'children', hasChildren: 'hasChildren'}" - > - <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column> - <el-table-column prop="icon" label="图标" align="center" width="100"> - <template slot-scope="scope"> - <svg-icon :icon-class="scope.row.icon" /> - </template> - </el-table-column> - <el-table-column prop="orderNum" label="排序" width="60"></el-table-column> - <el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column> - <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column> - <el-table-column prop="status" label="状态" width="80"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:menu:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-plus" - @click="handleAdd(scope.row)" - v-hasPermi="['system:menu:add']" - >新增</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:menu:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <!-- 添加或修改菜单对话框 --> - <el-dialog :title="title" :visible.sync="open" width="680px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="100px"> - <el-row> - <el-col :span="24"> - <el-form-item label="上级菜单" prop="parentId"> - <treeselect - v-model="form.parentId" - :options="menuOptions" - :normalizer="normalizer" - :show-count="true" - placeholder="选择上级菜单" - /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="菜单类型" prop="menuType"> - <el-radio-group v-model="form.menuType"> - <el-radio label="M">目录</el-radio> - <el-radio label="C">菜单</el-radio> - <el-radio label="F">按钮</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="24" v-if="form.menuType != 'F'"> - <el-form-item label="菜单图标" prop="icon"> - <el-popover - placement="bottom-start" - width="460" - trigger="click" - @show="$refs['iconSelect'].reset()" - > - <IconSelect ref="iconSelect" @selected="selected" :active-icon="form.icon" /> - <el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly> - <svg-icon - v-if="form.icon" - slot="prefix" - :icon-class="form.icon" - style="width: 25px;" - /> - <i v-else slot="prefix" class="el-icon-search el-input__icon" /> - </el-input> - </el-popover> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="菜单名称" prop="menuName"> - <el-input v-model="form.menuName" placeholder="请输入菜单名称" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="显示排序" prop="orderNum"> - <el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType != 'F'"> - <el-form-item prop="isFrame"> - <span slot="label"> - <el-tooltip content="选择是外链则路由地址需要以`http(s)://`开头" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 是否外链 - </span> - <el-radio-group v-model="form.isFrame"> - <el-radio label="0">是</el-radio> - <el-radio label="1">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType != 'F'"> - <el-form-item prop="path"> - <span slot="label"> - <el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 路由地址 - </span> - <el-input v-model="form.path" placeholder="请输入路由地址" /> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType == 'C'"> - <el-form-item prop="component"> - <span slot="label"> - <el-tooltip content="访问的组件路径,如:`system/user/index`,默认在`views`目录下" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 组件路径 - </span> - <el-input v-model="form.component" placeholder="请输入组件路径" /> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType != 'M'"> - <el-form-item prop="perms"> - <el-input v-model="form.perms" placeholder="请输入权限标识" maxlength="100" /> - <span slot="label"> - <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasPermi('system:user:list')`)" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 权限字符 - </span> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType == 'C'"> - <el-form-item prop="query"> - <el-input v-model="form.query" placeholder="请输入路由参数" maxlength="255" /> - <span slot="label"> - <el-tooltip content='访问路由的默认传递参数,如:`{"id": 1, "name": "ry"}`' placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 路由参数 - </span> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType == 'C'"> - <el-form-item prop="isCache"> - <span slot="label"> - <el-tooltip content="选择是则会被`keep-alive`缓存,需要匹配组件的`name`和地址保持一致" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 是否缓存 - </span> - <el-radio-group v-model="form.isCache"> - <el-radio label="0">缓存</el-radio> - <el-radio label="1">不缓存</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12" v-if="form.menuType != 'F'"> - <el-form-item prop="visible"> - <span slot="label"> - <el-tooltip content="选择隐藏则路由将不会出现在侧边栏,但仍然可以访问" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 显示状态 - </span> - <el-radio-group v-model="form.visible"> - <el-radio - v-for="dict in dict.type.sys_show_hide" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item prop="status"> - <span slot="label"> - <el-tooltip content="选择停用则路由将不会出现在侧边栏,也不能被访问" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 菜单状态 - </span> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu"; -import Treeselect from "@riophae/vue-treeselect"; -import "@riophae/vue-treeselect/dist/vue-treeselect.css"; -import IconSelect from "@/components/IconSelect"; - -export default { - name: "Menu", - dicts: ['sys_show_hide', 'sys_normal_disable'], - components: { Treeselect, IconSelect }, - data() { - return { - // 遮罩层 - loading: true, - // 显示搜索条件 - showSearch: true, - // 菜单表格树数据 - menuList: [], - // 菜单树选项 - menuOptions: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 是否展开,默认全部折叠 - isExpandAll: false, - // 重新渲染表格状态 - refreshTable: true, - // 查询参数 - queryParams: { - menuName: undefined, - visible: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - menuName: [ - { required: true, message: "菜单名称不能为空", trigger: "blur" } - ], - orderNum: [ - { required: true, message: "菜单顺序不能为空", trigger: "blur" } - ], - path: [ - { required: true, message: "路由地址不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - // 选择图标 - selected(name) { - this.form.icon = name; - }, - /** 查询菜单列表 */ - getList() { - this.loading = true; - listMenu(this.queryParams).then(response => { - this.menuList = this.handleTree(response.data, "menuId"); - this.loading = false; - }); - }, - /** 转换菜单数据结构 */ - normalizer(node) { - if (node.children && !node.children.length) { - delete node.children; - } - return { - id: node.menuId, - label: node.menuName, - children: node.children - }; - }, - /** 查询菜单下拉树结构 */ - getTreeselect() { - listMenu().then(response => { - this.menuOptions = []; - const menu = { menuId: 0, menuName: '主类目', children: [] }; - menu.children = this.handleTree(response.data, "menuId"); - this.menuOptions.push(menu); - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - menuId: undefined, - parentId: 0, - menuName: undefined, - icon: undefined, - menuType: "M", - orderNum: undefined, - isFrame: "1", - isCache: "0", - visible: "0", - status: "0" - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 新增按钮操作 */ - handleAdd(row) { - this.reset(); - this.getTreeselect(); - if (row != null && row.menuId) { - this.form.parentId = row.menuId; - } else { - this.form.parentId = 0; - } - this.open = true; - this.title = "添加菜单"; - }, - /** 展开/折叠操作 */ - toggleExpandAll() { - this.refreshTable = false; - this.isExpandAll = !this.isExpandAll; - this.$nextTick(() => { - this.refreshTable = true; - }); - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - this.getTreeselect(); - getMenu(row.menuId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改菜单"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.menuId != undefined) { - updateMenu(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addMenu(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - this.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?').then(function() { - return delMenu(row.menuId); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/notice/index.vue b/ruoyi-ui/src/views/system/notice/index.vue deleted file mode 100644 index 7982b54..0000000 --- a/ruoyi-ui/src/views/system/notice/index.vue +++ /dev/null @@ -1,312 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="公告标题" prop="noticeTitle"> - <el-input - v-model="queryParams.noticeTitle" - placeholder="请输入公告标题" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="操作人员" prop="createBy"> - <el-input - v-model="queryParams.createBy" - placeholder="请输入操作人员" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="类型" prop="noticeType"> - <el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable> - <el-option - v-for="dict in dict.type.sys_notice_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:notice:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:notice:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:notice:remove']" - >删除</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="序号" align="center" prop="noticeId" width="100" /> - <el-table-column - label="公告标题" - align="center" - prop="noticeTitle" - :show-overflow-tooltip="true" - /> - <el-table-column label="公告类型" align="center" prop="noticeType" width="100"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType"/> - </template> - </el-table-column> - <el-table-column label="状态" align="center" prop="status" width="100"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建者" align="center" prop="createBy" width="100" /> - <el-table-column label="创建时间" align="center" prop="createTime" width="100"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:notice:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:notice:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改公告对话框 --> - <el-dialog :title="title" :visible.sync="open" width="780px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-row> - <el-col :span="12"> - <el-form-item label="公告标题" prop="noticeTitle"> - <el-input v-model="form.noticeTitle" placeholder="请输入公告标题" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="公告类型" prop="noticeType"> - <el-select v-model="form.noticeType" placeholder="请选择公告类型"> - <el-option - v-for="dict in dict.type.sys_notice_type" - :key="dict.value" - :label="dict.label" - :value="dict.value" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="状态"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_notice_status" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="内容"> - <editor v-model="form.noticeContent" :min-height="192"/> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listNotice, getNotice, delNotice, addNotice, updateNotice } from "@/api/system/notice"; - -export default { - name: "Notice", - dicts: ['sys_notice_status', 'sys_notice_type'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 公告表格数据 - noticeList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - noticeTitle: undefined, - createBy: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - noticeTitle: [ - { required: true, message: "公告标题不能为空", trigger: "blur" } - ], - noticeType: [ - { required: true, message: "公告类型不能为空", trigger: "change" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询公告列表 */ - getList() { - this.loading = true; - listNotice(this.queryParams).then(response => { - this.noticeList = response.rows; - this.total = response.total; - this.loading = false; - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - noticeId: undefined, - noticeTitle: undefined, - noticeType: undefined, - noticeContent: undefined, - status: "0" - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.noticeId) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加公告"; - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const noticeId = row.noticeId || this.ids - getNotice(noticeId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改公告"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.noticeId != undefined) { - updateNotice(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addNotice(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const noticeIds = row.noticeId || this.ids - this.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function() { - return delNotice(noticeIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/post/index.vue b/ruoyi-ui/src/views/system/post/index.vue deleted file mode 100644 index 444bf63..0000000 --- a/ruoyi-ui/src/views/system/post/index.vue +++ /dev/null @@ -1,309 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="岗位编码" prop="postCode"> - <el-input - v-model="queryParams.postCode" - placeholder="请输入岗位编码" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="岗位名称" prop="postName"> - <el-input - v-model="queryParams.postName" - placeholder="请输入岗位名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select v-model="queryParams.status" placeholder="岗位状态" clearable> - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:post:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:post:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:post:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:post:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="岗位编号" align="center" prop="postId" /> - <el-table-column label="岗位编码" align="center" prop="postCode" /> - <el-table-column label="岗位名称" align="center" prop="postName" /> - <el-table-column label="岗位排序" align="center" prop="postSort" /> - <el-table-column label="状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:post:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:post:remove']" - >删除</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改岗位对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="岗位名称" prop="postName"> - <el-input v-model="form.postName" placeholder="请输入岗位名称" /> - </el-form-item> - <el-form-item label="岗位编码" prop="postCode"> - <el-input v-model="form.postCode" placeholder="请输入编码名称" /> - </el-form-item> - <el-form-item label="岗位顺序" prop="postSort"> - <el-input-number v-model="form.postSort" controls-position="right" :min="0" /> - </el-form-item> - <el-form-item label="岗位状态" prop="status"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="备注" prop="remark"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post"; - -export default { - name: "Post", - dicts: ['sys_normal_disable'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 岗位表格数据 - postList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - postCode: undefined, - postName: undefined, - status: undefined - }, - // 表单参数 - form: {}, - // 表单校验 - rules: { - postName: [ - { required: true, message: "岗位名称不能为空", trigger: "blur" } - ], - postCode: [ - { required: true, message: "岗位编码不能为空", trigger: "blur" } - ], - postSort: [ - { required: true, message: "岗位顺序不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询岗位列表 */ - getList() { - this.loading = true; - listPost(this.queryParams).then(response => { - this.postList = response.rows; - this.total = response.total; - this.loading = false; - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - postId: undefined, - postCode: undefined, - postName: undefined, - postSort: 0, - status: "0", - remark: undefined - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.postId) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.open = true; - this.title = "添加岗位"; - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const postId = row.postId || this.ids - getPost(postId).then(response => { - this.form = response.data; - this.open = true; - this.title = "修改岗位"; - }); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.postId != undefined) { - updatePost(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addPost(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const postIds = row.postId || this.ids; - this.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() { - return delPost(postIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/post/export', { - ...this.queryParams - }, `post_${new Date().getTime()}.xlsx`) - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/role/authUser.vue b/ruoyi-ui/src/views/system/role/authUser.vue deleted file mode 100644 index 147aa33..0000000 --- a/ruoyi-ui/src/views/system/role/authUser.vue +++ /dev/null @@ -1,199 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> - <el-form-item label="用户名称" prop="userName"> - <el-input - v-model="queryParams.userName" - placeholder="请输入用户名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="手机号码" prop="phonenumber"> - <el-input - v-model="queryParams.phonenumber" - placeholder="请输入手机号码" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="openSelectUser" - v-hasPermi="['system:role:add']" - >添加用户</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-circle-close" - size="mini" - :disabled="multiple" - @click="cancelAuthUserAll" - v-hasPermi="['system:role:remove']" - >批量取消授权</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-close" - size="mini" - @click="handleClose" - >关闭</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> - <el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" /> - <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> - <el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" /> - <el-table-column label="状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - size="mini" - type="text" - icon="el-icon-circle-close" - @click="cancelAuthUser(scope.row)" - v-hasPermi="['system:role:remove']" - >取消授权</el-button> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - <select-user ref="select" :roleId="queryParams.roleId" @ok="handleQuery" /> - </div> -</template> - -<script> -import { allocatedUserList, authUserCancel, authUserCancelAll } from "@/api/system/role"; -import selectUser from "./selectUser"; - -export default { - name: "AuthUser", - dicts: ['sys_normal_disable'], - components: { selectUser }, - data() { - return { - // 遮罩层 - loading: true, - // 选中用户组 - userIds: [], - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 用户表格数据 - userList: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - roleId: undefined, - userName: undefined, - phonenumber: undefined - } - }; - }, - created() { - const roleId = this.$route.params && this.$route.params.roleId; - if (roleId) { - this.queryParams.roleId = roleId; - this.getList(); - } - }, - methods: { - /** 查询授权用户列表 */ - getList() { - this.loading = true; - allocatedUserList(this.queryParams).then(response => { - this.userList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - // 返回按钮 - handleClose() { - const obj = { path: "/system/role" }; - this.$tab.closeOpenPage(obj); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.userIds = selection.map(item => item.userId) - this.multiple = !selection.length - }, - /** 打开授权用户表弹窗 */ - openSelectUser() { - this.$refs.select.show(); - }, - /** 取消授权按钮操作 */ - cancelAuthUser(row) { - const roleId = this.queryParams.roleId; - this.$modal.confirm('确认要取消该用户"' + row.userName + '"角色吗?').then(function() { - return authUserCancel({ userId: row.userId, roleId: roleId }); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("取消授权成功"); - }).catch(() => {}); - }, - /** 批量取消授权按钮操作 */ - cancelAuthUserAll(row) { - const roleId = this.queryParams.roleId; - const userIds = this.userIds.join(","); - this.$modal.confirm('是否取消选中用户授权数据项?').then(function() { - return authUserCancelAll({ roleId: roleId, userIds: userIds }); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("取消授权成功"); - }).catch(() => {}); - } - } -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/role/index.vue b/ruoyi-ui/src/views/system/role/index.vue deleted file mode 100644 index fb3b5ef..0000000 --- a/ruoyi-ui/src/views/system/role/index.vue +++ /dev/null @@ -1,605 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> - <el-form-item label="角色名称" prop="roleName"> - <el-input - v-model="queryParams.roleName" - placeholder="请输入角色名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="权限字符" prop="roleKey"> - <el-input - v-model="queryParams.roleKey" - placeholder="请输入权限字符" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="角色状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="创建时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:role:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:role:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:role:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:role:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" align="center" /> - <el-table-column label="角色编号" prop="roleId" width="120" /> - <el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" /> - <el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" /> - <el-table-column label="显示顺序" prop="roleSort" width="100" /> - <el-table-column label="状态" align="center" width="100"> - <template slot-scope="scope"> - <el-switch - v-model="scope.row.status" - active-value="0" - inactive-value="1" - @change="handleStatusChange(scope.row)" - ></el-switch> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope" v-if="scope.row.roleId !== 1"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:role:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:role:remove']" - >删除</el-button> - <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> - <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> - <el-dropdown-menu slot="dropdown"> - <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" - v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item> - <el-dropdown-item command="handleAuthUser" icon="el-icon-user" - v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - - <!-- 添加或修改角色配置对话框 --> - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="100px"> - <el-form-item label="角色名称" prop="roleName"> - <el-input v-model="form.roleName" placeholder="请输入角色名称" /> - </el-form-item> - <el-form-item prop="roleKey"> - <span slot="label"> - <el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - 权限字符 - </span> - <el-input v-model="form.roleKey" placeholder="请输入权限字符" /> - </el-form-item> - <el-form-item label="角色顺序" prop="roleSort"> - <el-input-number v-model="form.roleSort" controls-position="right" :min="0" /> - </el-form-item> - <el-form-item label="状态"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="菜单权限"> - <el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox> - <el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox> - <el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox> - <el-tree - class="tree-border" - :data="menuOptions" - show-checkbox - ref="menu" - node-key="id" - :check-strictly="!form.menuCheckStrictly" - empty-text="加载中,请稍候" - :props="defaultProps" - ></el-tree> - </el-form-item> - <el-form-item label="备注"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - - <!-- 分配角色数据权限对话框 --> - <el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body> - <el-form :model="form" label-width="80px"> - <el-form-item label="角色名称"> - <el-input v-model="form.roleName" :disabled="true" /> - </el-form-item> - <el-form-item label="权限字符"> - <el-input v-model="form.roleKey" :disabled="true" /> - </el-form-item> - <el-form-item label="权限范围"> - <el-select v-model="form.dataScope" @change="dataScopeSelectChange"> - <el-option - v-for="item in dataScopeOptions" - :key="item.value" - :label="item.label" - :value="item.value" - ></el-option> - </el-select> - </el-form-item> - <el-form-item label="数据权限" v-show="form.dataScope == 2"> - <el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox> - <el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox> - <el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox> - <el-tree - class="tree-border" - :data="deptOptions" - show-checkbox - default-expand-all - ref="dept" - node-key="id" - :check-strictly="!form.deptCheckStrictly" - empty-text="加载中,请稍候" - :props="defaultProps" - ></el-tree> - </el-form-item> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitDataScope">确 定</el-button> - <el-button @click="cancelDataScope">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; -import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; - -export default { - name: "Role", - dicts: ['sys_normal_disable'], - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 角色表格数据 - roleList: [], - // 弹出层标题 - title: "", - // 是否显示弹出层 - open: false, - // 是否显示弹出层(数据权限) - openDataScope: false, - menuExpand: false, - menuNodeAll: false, - deptExpand: true, - deptNodeAll: false, - // 日期范围 - dateRange: [], - // 数据范围选项 - dataScopeOptions: [ - { - value: "1", - label: "全部数据权限" - }, - { - value: "2", - label: "自定数据权限" - }, - { - value: "3", - label: "本部门数据权限" - }, - { - value: "4", - label: "本部门及以下数据权限" - }, - { - value: "5", - label: "仅本人数据权限" - } - ], - // 菜单列表 - menuOptions: [], - // 部门列表 - deptOptions: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - roleName: undefined, - roleKey: undefined, - status: undefined - }, - // 表单参数 - form: {}, - defaultProps: { - children: "children", - label: "label" - }, - // 表单校验 - rules: { - roleName: [ - { required: true, message: "角色名称不能为空", trigger: "blur" } - ], - roleKey: [ - { required: true, message: "权限字符不能为空", trigger: "blur" } - ], - roleSort: [ - { required: true, message: "角色顺序不能为空", trigger: "blur" } - ] - } - }; - }, - created() { - this.getList(); - }, - methods: { - /** 查询角色列表 */ - getList() { - this.loading = true; - listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.roleList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - /** 查询菜单树结构 */ - getMenuTreeselect() { - menuTreeselect().then(response => { - this.menuOptions = response.data; - }); - }, - // 所有菜单节点数据 - getMenuAllCheckedKeys() { - // 目前被选中的菜单节点 - let checkedKeys = this.$refs.menu.getCheckedKeys(); - // 半选中的菜单节点 - let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys(); - checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); - return checkedKeys; - }, - // 所有部门节点数据 - getDeptAllCheckedKeys() { - // 目前被选中的部门节点 - let checkedKeys = this.$refs.dept.getCheckedKeys(); - // 半选中的部门节点 - let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys(); - checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys); - return checkedKeys; - }, - /** 根据角色ID查询菜单树结构 */ - getRoleMenuTreeselect(roleId) { - return roleMenuTreeselect(roleId).then(response => { - this.menuOptions = response.menus; - return response; - }); - }, - /** 根据角色ID查询部门树结构 */ - getDeptTree(roleId) { - return deptTreeSelect(roleId).then(response => { - this.deptOptions = response.depts; - return response; - }); - }, - // 角色状态修改 - handleStatusChange(row) { - let text = row.status === "0" ? "启用" : "停用"; - this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function() { - return changeRoleStatus(row.roleId, row.status); - }).then(() => { - this.$modal.msgSuccess(text + "成功"); - }).catch(function() { - row.status = row.status === "0" ? "1" : "0"; - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 取消按钮(数据权限) - cancelDataScope() { - this.openDataScope = false; - this.reset(); - }, - // 表单重置 - reset() { - if (this.$refs.menu != undefined) { - this.$refs.menu.setCheckedKeys([]); - } - this.menuExpand = false, - this.menuNodeAll = false, - this.deptExpand = true, - this.deptNodeAll = false, - this.form = { - roleId: undefined, - roleName: undefined, - roleKey: undefined, - roleSort: 0, - status: "0", - menuIds: [], - deptIds: [], - menuCheckStrictly: true, - deptCheckStrictly: true, - remark: undefined - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.roleId) - this.single = selection.length!=1 - this.multiple = !selection.length - }, - // 更多操作触发 - handleCommand(command, row) { - switch (command) { - case "handleDataScope": - this.handleDataScope(row); - break; - case "handleAuthUser": - this.handleAuthUser(row); - break; - default: - break; - } - }, - // 树权限(展开/折叠) - handleCheckedTreeExpand(value, type) { - if (type == 'menu') { - let treeList = this.menuOptions; - for (let i = 0; i < treeList.length; i++) { - this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value; - } - } else if (type == 'dept') { - let treeList = this.deptOptions; - for (let i = 0; i < treeList.length; i++) { - this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value; - } - } - }, - // 树权限(全选/全不选) - handleCheckedTreeNodeAll(value, type) { - if (type == 'menu') { - this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []); - } else if (type == 'dept') { - this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []); - } - }, - // 树权限(父子联动) - handleCheckedTreeConnect(value, type) { - if (type == 'menu') { - this.form.menuCheckStrictly = value ? true: false; - } else if (type == 'dept') { - this.form.deptCheckStrictly = value ? true: false; - } - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - this.getMenuTreeselect(); - this.open = true; - this.title = "添加角色"; - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const roleId = row.roleId || this.ids - const roleMenu = this.getRoleMenuTreeselect(roleId); - getRole(roleId).then(response => { - this.form = response.data; - this.open = true; - this.$nextTick(() => { - roleMenu.then(res => { - let checkedKeys = res.checkedKeys - checkedKeys.forEach((v) => { - this.$nextTick(()=>{ - this.$refs.menu.setChecked(v, true ,false); - }) - }) - }); - }); - this.title = "修改角色"; - }); - }, - /** 选择角色权限范围触发 */ - dataScopeSelectChange(value) { - if(value !== '2') { - this.$refs.dept.setCheckedKeys([]); - } - }, - /** 分配数据权限操作 */ - handleDataScope(row) { - this.reset(); - const deptTreeSelect = this.getDeptTree(row.roleId); - getRole(row.roleId).then(response => { - this.form = response.data; - this.openDataScope = true; - this.$nextTick(() => { - deptTreeSelect.then(res => { - this.$refs.dept.setCheckedKeys(res.checkedKeys); - }); - }); - this.title = "分配数据权限"; - }); - }, - /** 分配用户操作 */ - handleAuthUser: function(row) { - const roleId = row.roleId; - this.$router.push("/system/role-auth/user/" + roleId); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.roleId != undefined) { - this.form.menuIds = this.getMenuAllCheckedKeys(); - updateRole(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - this.form.menuIds = this.getMenuAllCheckedKeys(); - addRole(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 提交按钮(数据权限) */ - submitDataScope: function() { - if (this.form.roleId != undefined) { - this.form.deptIds = this.getDeptAllCheckedKeys(); - dataScope(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.openDataScope = false; - this.getList(); - }); - } - }, - /** 删除按钮操作 */ - handleDelete(row) { - const roleIds = row.roleId || this.ids; - this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function() { - return delRole(roleIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/role/export', { - ...this.queryParams - }, `role_${new Date().getTime()}.xlsx`) - } - } -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/role/selectUser.vue b/ruoyi-ui/src/views/system/role/selectUser.vue deleted file mode 100644 index b2b072f..0000000 --- a/ruoyi-ui/src/views/system/role/selectUser.vue +++ /dev/null @@ -1,138 +0,0 @@ -<template> - <!-- 授权用户 --> - <el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> - <el-form-item label="用户名称" prop="userName"> - <el-input - v-model="queryParams.userName" - placeholder="请输入用户名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="手机号码" prop="phonenumber"> - <el-input - v-model="queryParams.phonenumber" - placeholder="请输入手机号码" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - <el-row> - <el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px"> - <el-table-column type="selection" width="55"></el-table-column> - <el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" /> - <el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" /> - <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" /> - <el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" /> - <el-table-column label="状态" align="center" prop="status"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - </el-table> - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - </el-row> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="handleSelectUser">确 定</el-button> - <el-button @click="visible = false">取 消</el-button> - </div> - </el-dialog> -</template> - -<script> -import { unallocatedUserList, authUserSelectAll } from "@/api/system/role"; -export default { - dicts: ['sys_normal_disable'], - props: { - // 角色编号 - roleId: { - type: [Number, String] - } - }, - data() { - return { - // 遮罩层 - visible: false, - // 选中数组值 - userIds: [], - // 总条数 - total: 0, - // 未授权用户数据 - userList: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - roleId: undefined, - userName: undefined, - phonenumber: undefined - } - }; - }, - methods: { - // 显示弹框 - show() { - this.queryParams.roleId = this.roleId; - this.getList(); - this.visible = true; - }, - clickRow(row) { - this.$refs.table.toggleRowSelection(row); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.userIds = selection.map(item => item.userId); - }, - // 查询表数据 - getList() { - unallocatedUserList(this.queryParams).then(res => { - this.userList = res.rows; - this.total = res.total; - }); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 选择授权用户操作 */ - handleSelectUser() { - const roleId = this.queryParams.roleId; - const userIds = this.userIds.join(","); - if (userIds == "") { - this.$modal.msgError("请选择要分配的用户"); - return; - } - authUserSelectAll({ roleId: roleId, userIds: userIds }).then(res => { - this.$modal.msgSuccess(res.msg); - if (res.code === 200) { - this.visible = false; - this.$emit("ok"); - } - }); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/user/authRole.vue b/ruoyi-ui/src/views/system/user/authRole.vue deleted file mode 100644 index 943710e..0000000 --- a/ruoyi-ui/src/views/system/user/authRole.vue +++ /dev/null @@ -1,117 +0,0 @@ -<template> - <div class="app-container"> - <h4 class="form-header h4">基本信息</h4> - <el-form ref="form" :model="form" label-width="80px"> - <el-row> - <el-col :span="8" :offset="2"> - <el-form-item label="用户昵称" prop="nickName"> - <el-input v-model="form.nickName" disabled /> - </el-form-item> - </el-col> - <el-col :span="8" :offset="2"> - <el-form-item label="登录账号" prop="userName"> - <el-input v-model="form.userName" disabled /> - </el-form-item> - </el-col> - </el-row> - </el-form> - - <h4 class="form-header h4">角色信息</h4> - <el-table v-loading="loading" :row-key="getRowKey" @row-click="clickRow" ref="table" @selection-change="handleSelectionChange" :data="roles.slice((pageNum-1)*pageSize,pageNum*pageSize)"> - <el-table-column label="序号" type="index" align="center"> - <template slot-scope="scope"> - <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> - </template> - </el-table-column> - <el-table-column type="selection" :reserve-selection="true" width="55"></el-table-column> - <el-table-column label="角色编号" align="center" prop="roleId" /> - <el-table-column label="角色名称" align="center" prop="roleName" /> - <el-table-column label="权限字符" align="center" prop="roleKey" /> - <el-table-column label="创建时间" align="center" prop="createTime" width="180"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - </el-table> - - <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" /> - - <el-form label-width="100px"> - <el-form-item style="text-align: center;margin-left:-120px;margin-top:30px;"> - <el-button type="primary" @click="submitForm()">提交</el-button> - <el-button @click="close()">返回</el-button> - </el-form-item> - </el-form> - </div> -</template> - -<script> -import { getAuthRole, updateAuthRole } from "@/api/system/user"; - -export default { - name: "AuthRole", - data() { - return { - // 遮罩层 - loading: true, - // 分页信息 - total: 0, - pageNum: 1, - pageSize: 10, - // 选中角色编号 - roleIds:[], - // 角色信息 - roles: [], - // 用户信息 - form: {} - }; - }, - created() { - const userId = this.$route.params && this.$route.params.userId; - if (userId) { - this.loading = true; - getAuthRole(userId).then((response) => { - this.form = response.user; - this.roles = response.roles; - this.total = this.roles.length; - this.$nextTick(() => { - this.roles.forEach((row) => { - if (row.flag) { - this.$refs.table.toggleRowSelection(row); - } - }); - }); - this.loading = false; - }); - } - }, - methods: { - /** 单击选中行数据 */ - clickRow(row) { - this.$refs.table.toggleRowSelection(row); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.roleIds = selection.map((item) => item.roleId); - }, - // 保存选中的数据编号 - getRowKey(row) { - return row.roleId; - }, - /** 提交按钮 */ - submitForm() { - const userId = this.form.userId; - const roleIds = this.roleIds.join(","); - updateAuthRole({ userId: userId, roleIds: roleIds }).then((response) => { - this.$modal.msgSuccess("授权成功"); - this.close(); - }); - }, - /** 关闭按钮 */ - close() { - const obj = { path: "/system/user" }; - this.$tab.closeOpenPage(obj); - }, - }, -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue deleted file mode 100644 index 6b2a0aa..0000000 --- a/ruoyi-ui/src/views/system/user/index.vue +++ /dev/null @@ -1,676 +0,0 @@ -<template> - <div class="app-container"> - <el-row :gutter="20"> - <!--部门数据--> - <el-col :span="4" :xs="24"> - <div class="head-container"> - <el-input - v-model="deptName" - placeholder="请输入部门名称" - clearable - size="small" - prefix-icon="el-icon-search" - style="margin-bottom: 20px" - /> - </div> - <div class="head-container"> - <el-tree - :data="deptOptions" - :props="defaultProps" - :expand-on-click-node="false" - :filter-node-method="filterNode" - ref="tree" - node-key="id" - default-expand-all - highlight-current - @node-click="handleNodeClick" - /> - </div> - </el-col> - <!--用户数据--> - <el-col :span="20" :xs="24"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="用户名称" prop="userName"> - <el-input - v-model="queryParams.userName" - placeholder="请输入用户名称" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="手机号码" prop="phonenumber"> - <el-input - v-model="queryParams.phonenumber" - placeholder="请输入手机号码" - clearable - style="width: 240px" - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-select - v-model="queryParams.status" - placeholder="用户状态" - clearable - style="width: 240px" - > - <el-option - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.label" - :value="dict.value" - /> - </el-select> - </el-form-item> - <el-form-item label="创建时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="handleAdd" - v-hasPermi="['system:user:add']" - >新增</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleUpdate" - v-hasPermi="['system:user:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['system:user:remove']" - >删除</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="info" - plain - icon="el-icon-upload2" - size="mini" - @click="handleImport" - v-hasPermi="['system:user:import']" - >导入</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="warning" - plain - icon="el-icon-download" - size="mini" - @click="handleExport" - v-hasPermi="['system:user:export']" - >导出</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="50" align="center" /> - <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> - <el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> - <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> - <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> - <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> - <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible"> - <template slot-scope="scope"> - <el-switch - v-model="scope.row.status" - active-value="0" - inactive-value="1" - @change="handleStatusChange(scope.row)" - ></el-switch> - </template> - </el-table-column> - <el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160"> - <template slot-scope="scope"> - <span>{{ parseTime(scope.row.createTime) }}</span> - </template> - </el-table-column> - <el-table-column - label="操作" - align="center" - width="160" - class-name="small-padding fixed-width" - > - <template slot-scope="scope" v-if="scope.row.userId !== 1"> - <el-button - size="mini" - type="text" - icon="el-icon-edit" - @click="handleUpdate(scope.row)" - v-hasPermi="['system:user:edit']" - >修改</el-button> - <el-button - size="mini" - type="text" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['system:user:remove']" - >删除</el-button> - <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']"> - <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> - <el-dropdown-menu slot="dropdown"> - <el-dropdown-item command="handleResetPwd" icon="el-icon-key" - v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item> - <el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" - v-hasPermi="['system:user:edit']">分配角色</el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - </template> - </el-table-column> - </el-table> - - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - </el-col> - </el-row> - - <!-- 添加或修改用户配置对话框 --> - <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-row> - <el-col :span="12"> - <el-form-item label="用户昵称" prop="nickName"> - <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="归属部门" prop="deptId"> - <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="手机号码" prop="phonenumber"> - <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="邮箱" prop="email"> - <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName"> - <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password"> - <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="用户性别"> - <el-select v-model="form.sex" placeholder="请选择性别"> - <el-option - v-for="dict in dict.type.sys_user_sex" - :key="dict.value" - :label="dict.label" - :value="dict.value" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="状态"> - <el-radio-group v-model="form.status"> - <el-radio - v-for="dict in dict.type.sys_normal_disable" - :key="dict.value" - :label="dict.value" - >{{dict.label}}</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="岗位"> - <el-select v-model="form.postIds" multiple placeholder="请选择岗位"> - <el-option - v-for="item in postOptions" - :key="item.postId" - :label="item.postName" - :value="item.postId" - :disabled="item.status == 1" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="角色"> - <el-select v-model="form.roleIds" multiple placeholder="请选择角色"> - <el-option - v-for="item in roleOptions" - :key="item.roleId" - :label="item.roleName" - :value="item.roleId" - :disabled="item.status == 1" - ></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="24"> - <el-form-item label="备注"> - <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitForm">确 定</el-button> - <el-button @click="cancel">取 消</el-button> - </div> - </el-dialog> - - <!-- 用户导入对话框 --> - <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body> - <el-upload - ref="upload" - :limit="1" - accept=".xlsx, .xls" - :headers="upload.headers" - :action="upload.url + '?updateSupport=' + upload.updateSupport" - :disabled="upload.isUploading" - :on-progress="handleFileUploadProgress" - :on-success="handleFileSuccess" - :auto-upload="false" - drag - > - <i class="el-icon-upload"></i> - <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div> - <div class="el-upload__tip text-center" slot="tip"> - <div class="el-upload__tip" slot="tip"> - <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 - </div> - <span>仅允许导入xls、xlsx格式文件。</span> - <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link> - </div> - </el-upload> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="submitFileForm">确 定</el-button> - <el-button @click="upload.open = false">取 消</el-button> - </div> - </el-dialog> - </div> -</template> - -<script> -import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"; -import { getToken } from "@/utils/auth"; -import Treeselect from "@riophae/vue-treeselect"; -import "@riophae/vue-treeselect/dist/vue-treeselect.css"; - -export default { - name: "User", - dicts: ['sys_normal_disable', 'sys_user_sex'], - components: { Treeselect }, - data() { - return { - // 遮罩层 - loading: true, - // 选中数组 - ids: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 用户表格数据 - userList: null, - // 弹出层标题 - title: "", - // 部门树选项 - deptOptions: undefined, - // 是否显示弹出层 - open: false, - // 部门名称 - deptName: undefined, - // 默认密码 - initPassword: undefined, - // 日期范围 - dateRange: [], - // 岗位选项 - postOptions: [], - // 角色选项 - roleOptions: [], - // 表单参数 - form: {}, - defaultProps: { - children: "children", - label: "label" - }, - // 用户导入参数 - upload: { - // 是否显示弹出层(用户导入) - open: false, - // 弹出层标题(用户导入) - title: "", - // 是否禁用上传 - isUploading: false, - // 是否更新已经存在的用户数据 - updateSupport: 0, - // 设置上传的请求头部 - headers: { Authorization: "Bearer " + getToken() }, - // 上传的地址 - url: process.env.VUE_APP_BASE_API + "/system/user/importData" - }, - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - userName: undefined, - phonenumber: undefined, - status: undefined, - deptId: undefined - }, - // 列信息 - columns: [ - { key: 0, label: `用户编号`, visible: true }, - { key: 1, label: `用户名称`, visible: true }, - { key: 2, label: `用户昵称`, visible: true }, - { key: 3, label: `部门`, visible: true }, - { key: 4, label: `手机号码`, visible: true }, - { key: 5, label: `状态`, visible: true }, - { key: 6, label: `创建时间`, visible: true } - ], - // 表单校验 - rules: { - userName: [ - { required: true, message: "用户名称不能为空", trigger: "blur" }, - { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } - ], - nickName: [ - { required: true, message: "用户昵称不能为空", trigger: "blur" } - ], - password: [ - { required: true, message: "用户密码不能为空", trigger: "blur" }, - { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }, - { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } - ], - email: [ - { - type: "email", - message: "请输入正确的邮箱地址", - trigger: ["blur", "change"] - } - ], - phonenumber: [ - { - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, - message: "请输入正确的手机号码", - trigger: "blur" - } - ] - } - }; - }, - watch: { - // 根据名称筛选部门树 - deptName(val) { - this.$refs.tree.filter(val); - } - }, - created() { - this.getList(); - this.getDeptTree(); - this.getConfigKey("sys.user.initPassword").then(response => { - this.initPassword = response.msg; - }); - }, - methods: { - /** 查询用户列表 */ - getList() { - this.loading = true; - listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.userList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - /** 查询部门下拉树结构 */ - getDeptTree() { - deptTreeSelect().then(response => { - this.deptOptions = response.data; - }); - }, - // 筛选节点 - filterNode(value, data) { - if (!value) return true; - return data.label.indexOf(value) !== -1; - }, - // 节点单击事件 - handleNodeClick(data) { - this.queryParams.deptId = data.id; - this.handleQuery(); - }, - // 用户状态修改 - handleStatusChange(row) { - let text = row.status === "0" ? "启用" : "停用"; - this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() { - return changeUserStatus(row.userId, row.status); - }).then(() => { - this.$modal.msgSuccess(text + "成功"); - }).catch(function() { - row.status = row.status === "0" ? "1" : "0"; - }); - }, - // 取消按钮 - cancel() { - this.open = false; - this.reset(); - }, - // 表单重置 - reset() { - this.form = { - userId: undefined, - deptId: undefined, - userName: undefined, - nickName: undefined, - password: undefined, - phonenumber: undefined, - email: undefined, - sex: undefined, - status: "0", - remark: undefined, - postIds: [], - roleIds: [] - }; - this.resetForm("form"); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.queryParams.deptId = undefined; - this.$refs.tree.setCurrentKey(null); - this.handleQuery(); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.userId); - this.single = selection.length != 1; - this.multiple = !selection.length; - }, - // 更多操作触发 - handleCommand(command, row) { - switch (command) { - case "handleResetPwd": - this.handleResetPwd(row); - break; - case "handleAuthRole": - this.handleAuthRole(row); - break; - default: - break; - } - }, - /** 新增按钮操作 */ - handleAdd() { - this.reset(); - getUser().then(response => { - this.postOptions = response.posts; - this.roleOptions = response.roles; - this.open = true; - this.title = "添加用户"; - this.form.password = this.initPassword; - }); - }, - /** 修改按钮操作 */ - handleUpdate(row) { - this.reset(); - const userId = row.userId || this.ids; - getUser(userId).then(response => { - this.form = response.data; - this.postOptions = response.posts; - this.roleOptions = response.roles; - this.$set(this.form, "postIds", response.postIds); - this.$set(this.form, "roleIds", response.roleIds); - this.open = true; - this.title = "修改用户"; - this.form.password = ""; - }); - }, - /** 重置密码按钮操作 */ - handleResetPwd(row) { - this.$prompt('请输入"' + row.userName + '"的新密码', "提示", { - confirmButtonText: "确定", - cancelButtonText: "取消", - closeOnClickModal: false, - inputPattern: /^.{5,20}$/, - inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", - inputValidator: (value) => { - if (/<|>|"|'|\||\\/.test(value)) { - return "不能包含非法字符:< > \" ' \\\ |" - } - }, - }).then(({ value }) => { - resetUserPwd(row.userId, value).then(response => { - this.$modal.msgSuccess("修改成功,新密码是:" + value); - }); - }).catch(() => {}); - }, - /** 分配角色操作 */ - handleAuthRole: function(row) { - const userId = row.userId; - this.$router.push("/system/user-auth/role/" + userId); - }, - /** 提交按钮 */ - submitForm: function() { - this.$refs["form"].validate(valid => { - if (valid) { - if (this.form.userId != undefined) { - updateUser(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.open = false; - this.getList(); - }); - } else { - addUser(this.form).then(response => { - this.$modal.msgSuccess("新增成功"); - this.open = false; - this.getList(); - }); - } - } - }); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const userIds = row.userId || this.ids; - this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() { - return delUser(userIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - }, - /** 导出按钮操作 */ - handleExport() { - this.download('system/user/export', { - ...this.queryParams - }, `user_${new Date().getTime()}.xlsx`) - }, - /** 导入按钮操作 */ - handleImport() { - this.upload.title = "用户导入"; - this.upload.open = true; - }, - /** 下载模板操作 */ - importTemplate() { - this.download('system/user/importTemplate', { - }, `user_template_${new Date().getTime()}.xlsx`) - }, - // 文件上传中处理 - handleFileUploadProgress(event, file, fileList) { - this.upload.isUploading = true; - }, - // 文件上传成功处理 - handleFileSuccess(response, file, fileList) { - this.upload.open = false; - this.upload.isUploading = false; - this.$refs.upload.clearFiles(); - this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); - this.getList(); - }, - // 提交上传文件 - submitFileForm() { - this.$refs.upload.submit(); - } - } -}; -</script> \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/user/profile/index.vue b/ruoyi-ui/src/views/system/user/profile/index.vue deleted file mode 100644 index 529c564..0000000 --- a/ruoyi-ui/src/views/system/user/profile/index.vue +++ /dev/null @@ -1,91 +0,0 @@ -<template> - <div class="app-container"> - <el-row :gutter="20"> - <el-col :span="6" :xs="24"> - <el-card class="box-card"> - <div slot="header" class="clearfix"> - <span>个人信息</span> - </div> - <div> - <div class="text-center"> - <userAvatar /> - </div> - <ul class="list-group list-group-striped"> - <li class="list-group-item"> - <svg-icon icon-class="user" />用户名称 - <div class="pull-right">{{ user.userName }}</div> - </li> - <li class="list-group-item"> - <svg-icon icon-class="phone" />手机号码 - <div class="pull-right">{{ user.phonenumber }}</div> - </li> - <li class="list-group-item"> - <svg-icon icon-class="email" />用户邮箱 - <div class="pull-right">{{ user.email }}</div> - </li> - <li class="list-group-item"> - <svg-icon icon-class="tree" />所属部门 - <div class="pull-right" v-if="user.dept">{{ user.dept.deptName }} / {{ postGroup }}</div> - </li> - <li class="list-group-item"> - <svg-icon icon-class="peoples" />所属角色 - <div class="pull-right">{{ roleGroup }}</div> - </li> - <li class="list-group-item"> - <svg-icon icon-class="date" />创建日期 - <div class="pull-right">{{ user.createTime }}</div> - </li> - </ul> - </div> - </el-card> - </el-col> - <el-col :span="18" :xs="24"> - <el-card> - <div slot="header" class="clearfix"> - <span>基本资料</span> - </div> - <el-tabs v-model="activeTab"> - <el-tab-pane label="基本资料" name="userinfo"> - <userInfo :user="user" /> - </el-tab-pane> - <el-tab-pane label="修改密码" name="resetPwd"> - <resetPwd /> - </el-tab-pane> - </el-tabs> - </el-card> - </el-col> - </el-row> - </div> -</template> - -<script> -import userAvatar from "./userAvatar"; -import userInfo from "./userInfo"; -import resetPwd from "./resetPwd"; -import { getUserProfile } from "@/api/system/user"; - -export default { - name: "Profile", - components: { userAvatar, userInfo, resetPwd }, - data() { - return { - user: {}, - roleGroup: {}, - postGroup: {}, - activeTab: "userinfo" - }; - }, - created() { - this.getUser(); - }, - methods: { - getUser() { - getUserProfile().then(response => { - this.user = response.data; - this.roleGroup = response.roleGroup; - this.postGroup = response.postGroup; - }); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/user/profile/resetPwd.vue b/ruoyi-ui/src/views/system/user/profile/resetPwd.vue deleted file mode 100644 index f329e6e..0000000 --- a/ruoyi-ui/src/views/system/user/profile/resetPwd.vue +++ /dev/null @@ -1,69 +0,0 @@ -<template> - <el-form ref="form" :model="user" :rules="rules" label-width="80px"> - <el-form-item label="旧密码" prop="oldPassword"> - <el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/> - </el-form-item> - <el-form-item label="新密码" prop="newPassword"> - <el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password/> - </el-form-item> - <el-form-item label="确认密码" prop="confirmPassword"> - <el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/> - </el-form-item> - <el-form-item> - <el-button type="primary" size="mini" @click="submit">保存</el-button> - <el-button type="danger" size="mini" @click="close">关闭</el-button> - </el-form-item> - </el-form> -</template> - -<script> -import { updateUserPwd } from "@/api/system/user"; - -export default { - data() { - const equalToPassword = (rule, value, callback) => { - if (this.user.newPassword !== value) { - callback(new Error("两次输入的密码不一致")); - } else { - callback(); - } - }; - return { - user: { - oldPassword: undefined, - newPassword: undefined, - confirmPassword: undefined - }, - // 表单校验 - rules: { - oldPassword: [ - { required: true, message: "旧密码不能为空", trigger: "blur" } - ], - newPassword: [ - { required: true, message: "新密码不能为空", trigger: "blur" }, - { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }, - { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" } - ], - confirmPassword: [ - { required: true, message: "确认密码不能为空", trigger: "blur" }, - { required: true, validator: equalToPassword, trigger: "blur" } - ] - } - }; - }, - methods: { - submit() { - this.$refs["form"].validate(valid => { - if (valid) { - updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => { - this.$modal.msgSuccess("修改成功"); - }); - } - }); - }, - close() { - this.$tab.closePage(); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue deleted file mode 100644 index cbf3ca1..0000000 --- a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue +++ /dev/null @@ -1,184 +0,0 @@ -<template> - <div> - <div class="user-info-head" @click="editCropper()"><img v-bind:src="options.img" title="点击上传头像" class="img-circle img-lg" /></div> - <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @opened="modalOpened" @close="closeDialog"> - <el-row> - <el-col :xs="24" :md="12" :style="{height: '350px'}"> - <vue-cropper - ref="cropper" - :img="options.img" - :info="true" - :autoCrop="options.autoCrop" - :autoCropWidth="options.autoCropWidth" - :autoCropHeight="options.autoCropHeight" - :fixedBox="options.fixedBox" - :outputType="options.outputType" - @realTime="realTime" - v-if="visible" - /> - </el-col> - <el-col :xs="24" :md="12" :style="{height: '350px'}"> - <div class="avatar-upload-preview"> - <img :src="previews.url" :style="previews.img" /> - </div> - </el-col> - </el-row> - <br /> - <el-row> - <el-col :lg="2" :sm="3" :xs="3"> - <el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUpload"> - <el-button size="small"> - 选择 - <i class="el-icon-upload el-icon--right"></i> - </el-button> - </el-upload> - </el-col> - <el-col :lg="{span: 1, offset: 2}" :sm="2" :xs="2"> - <el-button icon="el-icon-plus" size="small" @click="changeScale(1)"></el-button> - </el-col> - <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> - <el-button icon="el-icon-minus" size="small" @click="changeScale(-1)"></el-button> - </el-col> - <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> - <el-button icon="el-icon-refresh-left" size="small" @click="rotateLeft()"></el-button> - </el-col> - <el-col :lg="{span: 1, offset: 1}" :sm="2" :xs="2"> - <el-button icon="el-icon-refresh-right" size="small" @click="rotateRight()"></el-button> - </el-col> - <el-col :lg="{span: 2, offset: 6}" :sm="2" :xs="2"> - <el-button type="primary" size="small" @click="uploadImg()">提 交</el-button> - </el-col> - </el-row> - </el-dialog> - </div> -</template> - -<script> -import store from "@/store"; -import { VueCropper } from "vue-cropper"; -import { uploadAvatar } from "@/api/system/user"; -import { debounce } from '@/utils' - -export default { - components: { VueCropper }, - data() { - return { - // 是否显示弹出层 - open: false, - // 是否显示cropper - visible: false, - // 弹出层标题 - title: "修改头像", - options: { - img: store.getters.avatar, //裁剪图片的地址 - autoCrop: true, // 是否默认生成截图框 - autoCropWidth: 200, // 默认生成截图框宽度 - autoCropHeight: 200, // 默认生成截图框高度 - fixedBox: true, // 固定截图框大小 不允许改变 - outputType:"png", // 默认生成截图为PNG格式 - filename: 'avatar' // 文件名称 - }, - previews: {}, - resizeHandler: null - }; - }, - methods: { - // 编辑头像 - editCropper() { - this.open = true; - }, - // 打开弹出层结束时的回调 - modalOpened() { - this.visible = true; - if (!this.resizeHandler) { - this.resizeHandler = debounce(() => { - this.refresh() - }, 100) - } - window.addEventListener("resize", this.resizeHandler) - }, - // 刷新组件 - refresh() { - this.$refs.cropper.refresh(); - }, - // 覆盖默认的上传行为 - requestUpload() { - }, - // 向左旋转 - rotateLeft() { - this.$refs.cropper.rotateLeft(); - }, - // 向右旋转 - rotateRight() { - this.$refs.cropper.rotateRight(); - }, - // 图片缩放 - changeScale(num) { - num = num || 1; - this.$refs.cropper.changeScale(num); - }, - // 上传预处理 - beforeUpload(file) { - if (file.type.indexOf("image/") == -1) { - this.$modal.msgError("文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"); - } else { - const reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = () => { - this.options.img = reader.result; - this.options.filename = file.name; - }; - } - }, - // 上传图片 - uploadImg() { - this.$refs.cropper.getCropBlob(data => { - let formData = new FormData(); - formData.append("avatarfile", data, this.options.filename); - uploadAvatar(formData).then(response => { - this.open = false; - this.options.img = process.env.VUE_APP_BASE_API + response.imgUrl; - store.commit('SET_AVATAR', this.options.img); - this.$modal.msgSuccess("修改成功"); - this.visible = false; - }); - }); - }, - // 实时预览 - realTime(data) { - this.previews = data; - }, - // 关闭窗口 - closeDialog() { - this.options.img = store.getters.avatar - this.visible = false; - window.removeEventListener("resize", this.resizeHandler) - } - } -}; -</script> -<style scoped lang="scss"> -.user-info-head { - position: relative; - display: inline-block; - height: 120px; -} - -.user-info-head:hover:after { - content: '+'; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - color: #eee; - background: rgba(0, 0, 0, 0.5); - font-size: 24px; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - cursor: pointer; - line-height: 110px; - border-radius: 50%; -} -</style> diff --git a/ruoyi-ui/src/views/system/user/profile/userInfo.vue b/ruoyi-ui/src/views/system/user/profile/userInfo.vue deleted file mode 100644 index c970dc9..0000000 --- a/ruoyi-ui/src/views/system/user/profile/userInfo.vue +++ /dev/null @@ -1,88 +0,0 @@ -<template> - <el-form ref="form" :model="form" :rules="rules" label-width="80px"> - <el-form-item label="用户昵称" prop="nickName"> - <el-input v-model="form.nickName" maxlength="30" /> - </el-form-item> - <el-form-item label="手机号码" prop="phonenumber"> - <el-input v-model="form.phonenumber" maxlength="11" /> - </el-form-item> - <el-form-item label="邮箱" prop="email"> - <el-input v-model="form.email" maxlength="50" /> - </el-form-item> - <el-form-item label="性别"> - <el-radio-group v-model="form.sex"> - <el-radio label="0">男</el-radio> - <el-radio label="1">女</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item> - <el-button type="primary" size="mini" @click="submit">保存</el-button> - <el-button type="danger" size="mini" @click="close">关闭</el-button> - </el-form-item> - </el-form> -</template> - -<script> -import { updateUserProfile } from "@/api/system/user"; - -export default { - props: { - user: { - type: Object - } - }, - data() { - return { - form: {}, - // 表单校验 - rules: { - nickName: [ - { required: true, message: "用户昵称不能为空", trigger: "blur" } - ], - email: [ - { required: true, message: "邮箱地址不能为空", trigger: "blur" }, - { - type: "email", - message: "请输入正确的邮箱地址", - trigger: ["blur", "change"] - } - ], - phonenumber: [ - { required: true, message: "手机号码不能为空", trigger: "blur" }, - { - pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, - message: "请输入正确的手机号码", - trigger: "blur" - } - ] - } - }; - }, - watch: { - user: { - handler(user) { - if (user) { - this.form = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }; - } - }, - immediate: true - } - }, - methods: { - submit() { - this.$refs["form"].validate(valid => { - if (valid) { - updateUserProfile(this.form).then(response => { - this.$modal.msgSuccess("修改成功"); - this.user.phonenumber = this.form.phonenumber; - this.user.email = this.form.email; - }); - } - }); - }, - close() { - this.$tab.closePage(); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue b/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue deleted file mode 100644 index b5c2e2e..0000000 --- a/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue +++ /dev/null @@ -1,106 +0,0 @@ -<template> - <div> - <el-dialog - v-bind="$attrs" - width="500px" - :close-on-click-modal="false" - :modal-append-to-body="false" - v-on="$listeners" - @open="onOpen" - @close="onClose" - > - <el-row :gutter="15"> - <el-form - ref="elForm" - :model="formData" - :rules="rules" - size="medium" - label-width="100px" - > - <el-col :span="24"> - <el-form-item label="生成类型" prop="type"> - <el-radio-group v-model="formData.type"> - <el-radio-button - v-for="(item, index) in typeOptions" - :key="index" - :label="item.value" - :disabled="item.disabled" - > - {{ item.label }} - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item v-if="showFileName" label="文件名" prop="fileName"> - <el-input v-model="formData.fileName" placeholder="请输入文件名" clearable /> - </el-form-item> - </el-col> - </el-form> - </el-row> - - <div slot="footer"> - <el-button @click="close"> - 取消 - </el-button> - <el-button type="primary" @click="handleConfirm"> - 确定 - </el-button> - </div> - </el-dialog> - </div> -</template> -<script> -export default { - inheritAttrs: false, - props: ['showFileName'], - data() { - return { - formData: { - fileName: undefined, - type: 'file' - }, - rules: { - fileName: [{ - required: true, - message: '请输入文件名', - trigger: 'blur' - }], - type: [{ - required: true, - message: '生成类型不能为空', - trigger: 'change' - }] - }, - typeOptions: [{ - label: '页面', - value: 'file' - }, { - label: '弹窗', - value: 'dialog' - }] - } - }, - computed: { - }, - watch: {}, - mounted() {}, - methods: { - onOpen() { - if (this.showFileName) { - this.formData.fileName = `${+new Date()}.vue` - } - }, - onClose() { - }, - close(e) { - this.$emit('update:visible', false) - }, - handleConfirm() { - this.$refs.elForm.validate(valid => { - if (!valid) return - this.$emit('confirm', { ...this.formData }) - this.close() - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/tool/build/DraggableItem.vue b/ruoyi-ui/src/views/tool/build/DraggableItem.vue deleted file mode 100644 index e881778..0000000 --- a/ruoyi-ui/src/views/tool/build/DraggableItem.vue +++ /dev/null @@ -1,100 +0,0 @@ -<script> -import draggable from 'vuedraggable' -import render from '@/utils/generator/render' - -const components = { - itemBtns(h, element, index, parent) { - const { copyItem, deleteItem } = this.$listeners - return [ - <span class="drawing-item-copy" title="复制" onClick={event => { - copyItem(element, parent); event.stopPropagation() - }}> - <i class="el-icon-copy-document" /> - </span>, - <span class="drawing-item-delete" title="删除" onClick={event => { - deleteItem(index, parent); event.stopPropagation() - }}> - <i class="el-icon-delete" /> - </span> - ] - } -} -const layouts = { - colFormItem(h, element, index, parent) { - const { activeItem } = this.$listeners - let className = this.activeId === element.formId ? 'drawing-item active-from-item' : 'drawing-item' - if (this.formConf.unFocusedComponentBorder) className += ' unfocus-bordered' - return ( - <el-col span={element.span} class={className} - nativeOnClick={event => { activeItem(element); event.stopPropagation() }}> - <el-form-item label-width={element.labelWidth ? `${element.labelWidth}px` : null} - label={element.label} required={element.required}> - <render key={element.renderKey} conf={element} onInput={ event => { - this.$set(element, 'defaultValue', event) - }} /> - </el-form-item> - {components.itemBtns.apply(this, arguments)} - </el-col> - ) - }, - rowFormItem(h, element, index, parent) { - const { activeItem } = this.$listeners - const className = this.activeId === element.formId ? 'drawing-row-item active-from-item' : 'drawing-row-item' - let child = renderChildren.apply(this, arguments) - if (element.type === 'flex') { - child = <el-row type={element.type} justify={element.justify} align={element.align}> - {child} - </el-row> - } - return ( - <el-col span={element.span}> - <el-row gutter={element.gutter} class={className} - nativeOnClick={event => { activeItem(element); event.stopPropagation() }}> - <span class="component-name">{element.componentName}</span> - <draggable list={element.children} animation={340} group="componentsGroup" class="drag-wrapper"> - {child} - </draggable> - {components.itemBtns.apply(this, arguments)} - </el-row> - </el-col> - ) - } -} - -function renderChildren(h, element, index, parent) { - if (!Array.isArray(element.children)) return null - return element.children.map((el, i) => { - const layout = layouts[el.layout] - if (layout) { - return layout.call(this, h, el, i, element.children) - } - return layoutIsNotFound() - }) -} - -function layoutIsNotFound() { - throw new Error(`没有与${this.element.layout}匹配的layout`) -} - -export default { - components: { - render, - draggable - }, - props: [ - 'element', - 'index', - 'drawingList', - 'activeId', - 'formConf' - ], - render(h) { - const layout = layouts[this.element.layout] - - if (layout) { - return layout.call(this, h, this.element, this.index, this.drawingList) - } - return layoutIsNotFound() - } -} -</script> diff --git a/ruoyi-ui/src/views/tool/build/IconsDialog.vue b/ruoyi-ui/src/views/tool/build/IconsDialog.vue deleted file mode 100644 index 958be50..0000000 --- a/ruoyi-ui/src/views/tool/build/IconsDialog.vue +++ /dev/null @@ -1,123 +0,0 @@ -<template> - <div class="icon-dialog"> - <el-dialog - v-bind="$attrs" - width="980px" - :modal-append-to-body="false" - v-on="$listeners" - @open="onOpen" - @close="onClose" - > - <div slot="title"> - 选择图标 - <el-input - v-model="key" - size="mini" - :style="{width: '260px'}" - placeholder="请输入图标名称" - prefix-icon="el-icon-search" - clearable - /> - </div> - <ul class="icon-ul"> - <li - v-for="icon in iconList" - :key="icon" - :class="active===icon?'active-item':''" - @click="onSelect(icon)" - > - <i :class="icon" /> - <div>{{ icon }}</div> - </li> - </ul> - </el-dialog> - </div> -</template> -<script> -import iconList from '@/utils/generator/icon.json' - -const originList = iconList.map(name => `el-icon-${name}`) - -export default { - inheritAttrs: false, - props: ['current'], - data() { - return { - iconList: originList, - active: null, - key: '' - } - }, - watch: { - key(val) { - if (val) { - this.iconList = originList.filter(name => name.indexOf(val) > -1) - } else { - this.iconList = originList - } - } - }, - methods: { - onOpen() { - this.active = this.current - this.key = '' - }, - onClose() {}, - onSelect(icon) { - this.active = icon - this.$emit('select', icon) - this.$emit('update:visible', false) - } - } -} -</script> -<style lang="scss" scoped> -.icon-ul { - margin: 0; - padding: 0; - font-size: 0; - li { - list-style-type: none; - text-align: center; - font-size: 14px; - display: inline-block; - width: 16.66%; - box-sizing: border-box; - height: 108px; - padding: 15px 6px 6px 6px; - cursor: pointer; - overflow: hidden; - &:hover { - background: #f2f2f2; - } - &.active-item{ - background: #e1f3fb; - color: #7a6df0 - } - > i { - font-size: 30px; - line-height: 50px; - } - } -} -.icon-dialog { - ::v-deep .el-dialog { - border-radius: 8px; - margin-bottom: 0; - margin-top: 4vh !important; - display: flex; - flex-direction: column; - max-height: 92vh; - overflow: hidden; - box-sizing: border-box; - .el-dialog__header { - padding-top: 14px; - } - .el-dialog__body { - margin: 0 20px 20px 20px; - padding: 0; - overflow: auto; - } - } -} -</style> diff --git a/ruoyi-ui/src/views/tool/build/RightPanel.vue b/ruoyi-ui/src/views/tool/build/RightPanel.vue deleted file mode 100644 index c2760eb..0000000 --- a/ruoyi-ui/src/views/tool/build/RightPanel.vue +++ /dev/null @@ -1,946 +0,0 @@ -<template> - <div class="right-board"> - <el-tabs v-model="currentTab" class="center-tabs"> - <el-tab-pane label="组件属性" name="field" /> - <el-tab-pane label="表单属性" name="form" /> - </el-tabs> - <div class="field-box"> - <a class="document-link" target="_blank" :href="documentLink" title="查看组件文档"> - <i class="el-icon-link" /> - </a> - <el-scrollbar class="right-scrollbar"> - <!-- 组件属性 --> - <el-form v-show="currentTab==='field' && showField" size="small" label-width="90px"> - <el-form-item v-if="activeData.changeTag" label="组件类型"> - <el-select - v-model="activeData.tagIcon" - placeholder="请选择组件类型" - :style="{width: '100%'}" - @change="tagChange" - > - <el-option-group v-for="group in tagList" :key="group.label" :label="group.label"> - <el-option - v-for="item in group.options" - :key="item.label" - :label="item.label" - :value="item.tagIcon" - > - <svg-icon class="node-icon" :icon-class="item.tagIcon" /> - <span> {{ item.label }}</span> - </el-option> - </el-option-group> - </el-select> - </el-form-item> - <el-form-item v-if="activeData.vModel!==undefined" label="字段名"> - <el-input v-model="activeData.vModel" placeholder="请输入字段名(v-model)" /> - </el-form-item> - <el-form-item v-if="activeData.componentName!==undefined" label="组件名"> - {{ activeData.componentName }} - </el-form-item> - <el-form-item v-if="activeData.label!==undefined" label="标题"> - <el-input v-model="activeData.label" placeholder="请输入标题" /> - </el-form-item> - <el-form-item v-if="activeData.placeholder!==undefined" label="占位提示"> - <el-input v-model="activeData.placeholder" placeholder="请输入占位提示" /> - </el-form-item> - <el-form-item v-if="activeData['start-placeholder']!==undefined" label="开始占位"> - <el-input v-model="activeData['start-placeholder']" placeholder="请输入占位提示" /> - </el-form-item> - <el-form-item v-if="activeData['end-placeholder']!==undefined" label="结束占位"> - <el-input v-model="activeData['end-placeholder']" placeholder="请输入占位提示" /> - </el-form-item> - <el-form-item v-if="activeData.span!==undefined" label="表单栅格"> - <el-slider v-model="activeData.span" :max="24" :min="1" :marks="{12:''}" @change="spanChange" /> - </el-form-item> - <el-form-item v-if="activeData.layout==='rowFormItem'" label="栅格间隔"> - <el-input-number v-model="activeData.gutter" :min="0" placeholder="栅格间隔" /> - </el-form-item> - <el-form-item v-if="activeData.layout==='rowFormItem'" label="布局模式"> - <el-radio-group v-model="activeData.type"> - <el-radio-button label="default" /> - <el-radio-button label="flex" /> - </el-radio-group> - </el-form-item> - <el-form-item v-if="activeData.justify!==undefined&&activeData.type==='flex'" label="水平排列"> - <el-select v-model="activeData.justify" placeholder="请选择水平排列" :style="{width: '100%'}"> - <el-option - v-for="(item, index) in justifyOptions" - :key="index" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - <el-form-item v-if="activeData.align!==undefined&&activeData.type==='flex'" label="垂直排列"> - <el-radio-group v-model="activeData.align"> - <el-radio-button label="top" /> - <el-radio-button label="middle" /> - <el-radio-button label="bottom" /> - </el-radio-group> - </el-form-item> - <el-form-item v-if="activeData.labelWidth!==undefined" label="标签宽度"> - <el-input v-model.number="activeData.labelWidth" type="number" placeholder="请输入标签宽度" /> - </el-form-item> - <el-form-item v-if="activeData.style&&activeData.style.width!==undefined" label="组件宽度"> - <el-input v-model="activeData.style.width" placeholder="请输入组件宽度" clearable /> - </el-form-item> - <el-form-item v-if="activeData.vModel!==undefined" label="默认值"> - <el-input - :value="setDefaultValue(activeData.defaultValue)" - placeholder="请输入默认值" - @input="onDefaultValueInput" - /> - </el-form-item> - <el-form-item v-if="activeData.tag==='el-checkbox-group'" label="至少应选"> - <el-input-number - :value="activeData.min" - :min="0" - placeholder="至少应选" - @input="$set(activeData, 'min', $event?$event:undefined)" - /> - </el-form-item> - <el-form-item v-if="activeData.tag==='el-checkbox-group'" label="最多可选"> - <el-input-number - :value="activeData.max" - :min="0" - placeholder="最多可选" - @input="$set(activeData, 'max', $event?$event:undefined)" - /> - </el-form-item> - <el-form-item v-if="activeData.prepend!==undefined" label="前缀"> - <el-input v-model="activeData.prepend" placeholder="请输入前缀" /> - </el-form-item> - <el-form-item v-if="activeData.append!==undefined" label="后缀"> - <el-input v-model="activeData.append" placeholder="请输入后缀" /> - </el-form-item> - <el-form-item v-if="activeData['prefix-icon']!==undefined" label="前图标"> - <el-input v-model="activeData['prefix-icon']" placeholder="请输入前图标名称"> - <el-button slot="append" icon="el-icon-thumb" @click="openIconsDialog('prefix-icon')"> - 选择 - </el-button> - </el-input> - </el-form-item> - <el-form-item v-if="activeData['suffix-icon'] !== undefined" label="后图标"> - <el-input v-model="activeData['suffix-icon']" placeholder="请输入后图标名称"> - <el-button slot="append" icon="el-icon-thumb" @click="openIconsDialog('suffix-icon')"> - 选择 - </el-button> - </el-input> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-cascader'" label="选项分隔符"> - <el-input v-model="activeData.separator" placeholder="请输入选项分隔符" /> - </el-form-item> - <el-form-item v-if="activeData.autosize !== undefined" label="最小行数"> - <el-input-number v-model="activeData.autosize.minRows" :min="1" placeholder="最小行数" /> - </el-form-item> - <el-form-item v-if="activeData.autosize !== undefined" label="最大行数"> - <el-input-number v-model="activeData.autosize.maxRows" :min="1" placeholder="最大行数" /> - </el-form-item> - <el-form-item v-if="activeData.min !== undefined" label="最小值"> - <el-input-number v-model="activeData.min" placeholder="最小值" /> - </el-form-item> - <el-form-item v-if="activeData.max !== undefined" label="最大值"> - <el-input-number v-model="activeData.max" placeholder="最大值" /> - </el-form-item> - <el-form-item v-if="activeData.step !== undefined" label="步长"> - <el-input-number v-model="activeData.step" placeholder="步数" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-input-number'" label="精度"> - <el-input-number v-model="activeData.precision" :min="0" placeholder="精度" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-input-number'" label="按钮位置"> - <el-radio-group v-model="activeData['controls-position']"> - <el-radio-button label=""> - 默认 - </el-radio-button> - <el-radio-button label="right"> - 右侧 - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item v-if="activeData.maxlength !== undefined" label="最多输入"> - <el-input v-model="activeData.maxlength" placeholder="请输入字符长度"> - <template slot="append"> - 个字符 - </template> - </el-input> - </el-form-item> - <el-form-item v-if="activeData['active-text'] !== undefined" label="开启提示"> - <el-input v-model="activeData['active-text']" placeholder="请输入开启提示" /> - </el-form-item> - <el-form-item v-if="activeData['inactive-text'] !== undefined" label="关闭提示"> - <el-input v-model="activeData['inactive-text']" placeholder="请输入关闭提示" /> - </el-form-item> - <el-form-item v-if="activeData['active-value'] !== undefined" label="开启值"> - <el-input - :value="setDefaultValue(activeData['active-value'])" - placeholder="请输入开启值" - @input="onSwitchValueInput($event, 'active-value')" - /> - </el-form-item> - <el-form-item v-if="activeData['inactive-value'] !== undefined" label="关闭值"> - <el-input - :value="setDefaultValue(activeData['inactive-value'])" - placeholder="请输入关闭值" - @input="onSwitchValueInput($event, 'inactive-value')" - /> - </el-form-item> - <el-form-item - v-if="activeData.type !== undefined && 'el-date-picker' === activeData.tag" - label="时间类型" - > - <el-select - v-model="activeData.type" - placeholder="请选择时间类型" - :style="{ width: '100%' }" - @change="dateTypeChange" - > - <el-option - v-for="(item, index) in dateOptions" - :key="index" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - <el-form-item v-if="activeData.name !== undefined" label="文件字段名"> - <el-input v-model="activeData.name" placeholder="请输入上传文件字段名" /> - </el-form-item> - <el-form-item v-if="activeData.accept !== undefined" label="文件类型"> - <el-select - v-model="activeData.accept" - placeholder="请选择文件类型" - :style="{ width: '100%' }" - clearable - > - <el-option label="图片" value="image/*" /> - <el-option label="视频" value="video/*" /> - <el-option label="音频" value="audio/*" /> - <el-option label="excel" value=".xls,.xlsx" /> - <el-option label="word" value=".doc,.docx" /> - <el-option label="pdf" value=".pdf" /> - <el-option label="txt" value=".txt" /> - </el-select> - </el-form-item> - <el-form-item v-if="activeData.fileSize !== undefined" label="文件大小"> - <el-input v-model.number="activeData.fileSize" placeholder="请输入文件大小"> - <el-select slot="append" v-model="activeData.sizeUnit" :style="{ width: '66px' }"> - <el-option label="KB" value="KB" /> - <el-option label="MB" value="MB" /> - <el-option label="GB" value="GB" /> - </el-select> - </el-input> - </el-form-item> - <el-form-item v-if="activeData.action !== undefined" label="上传地址"> - <el-input v-model="activeData.action" placeholder="请输入上传地址" clearable /> - </el-form-item> - <el-form-item v-if="activeData['list-type'] !== undefined" label="列表类型"> - <el-radio-group v-model="activeData['list-type']" size="small"> - <el-radio-button label="text"> - text - </el-radio-button> - <el-radio-button label="picture"> - picture - </el-radio-button> - <el-radio-button label="picture-card"> - picture-card - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item - v-if="activeData.buttonText !== undefined" - v-show="'picture-card' !== activeData['list-type']" - label="按钮文字" - > - <el-input v-model="activeData.buttonText" placeholder="请输入按钮文字" /> - </el-form-item> - <el-form-item v-if="activeData['range-separator'] !== undefined" label="分隔符"> - <el-input v-model="activeData['range-separator']" placeholder="请输入分隔符" /> - </el-form-item> - <el-form-item v-if="activeData['picker-options'] !== undefined" label="时间段"> - <el-input - v-model="activeData['picker-options'].selectableRange" - placeholder="请输入时间段" - /> - </el-form-item> - <el-form-item v-if="activeData.format !== undefined" label="时间格式"> - <el-input - :value="activeData.format" - placeholder="请输入时间格式" - @input="setTimeValue($event)" - /> - </el-form-item> - <template v-if="['el-checkbox-group', 'el-radio-group', 'el-select'].indexOf(activeData.tag) > -1"> - <el-divider>选项</el-divider> - <draggable - :list="activeData.options" - :animation="340" - group="selectItem" - handle=".option-drag" - > - <div v-for="(item, index) in activeData.options" :key="index" class="select-item"> - <div class="select-line-icon option-drag"> - <i class="el-icon-s-operation" /> - </div> - <el-input v-model="item.label" placeholder="选项名" size="small" /> - <el-input - placeholder="选项值" - size="small" - :value="item.value" - @input="setOptionValue(item, $event)" - /> - <div class="close-btn select-line-icon" @click="activeData.options.splice(index, 1)"> - <i class="el-icon-remove-outline" /> - </div> - </div> - </draggable> - <div style="margin-left: 20px;"> - <el-button - style="padding-bottom: 0" - icon="el-icon-circle-plus-outline" - type="text" - @click="addSelectItem" - > - 添加选项 - </el-button> - </div> - <el-divider /> - </template> - - <template v-if="['el-cascader'].indexOf(activeData.tag) > -1"> - <el-divider>选项</el-divider> - <el-form-item label="数据类型"> - <el-radio-group v-model="activeData.dataType" size="small"> - <el-radio-button label="dynamic"> - 动态数据 - </el-radio-button> - <el-radio-button label="static"> - 静态数据 - </el-radio-button> - </el-radio-group> - </el-form-item> - - <template v-if="activeData.dataType === 'dynamic'"> - <el-form-item label="标签键名"> - <el-input v-model="activeData.labelKey" placeholder="请输入标签键名" /> - </el-form-item> - <el-form-item label="值键名"> - <el-input v-model="activeData.valueKey" placeholder="请输入值键名" /> - </el-form-item> - <el-form-item label="子级键名"> - <el-input v-model="activeData.childrenKey" placeholder="请输入子级键名" /> - </el-form-item> - </template> - - <el-tree - v-if="activeData.dataType === 'static'" - draggable - :data="activeData.options" - node-key="id" - :expand-on-click-node="false" - :render-content="renderContent" - /> - <div v-if="activeData.dataType === 'static'" style="margin-left: 20px"> - <el-button - style="padding-bottom: 0" - icon="el-icon-circle-plus-outline" - type="text" - @click="addTreeItem" - > - 添加父级 - </el-button> - </div> - <el-divider /> - </template> - - <el-form-item v-if="activeData.optionType !== undefined" label="选项样式"> - <el-radio-group v-model="activeData.optionType"> - <el-radio-button label="default"> - 默认 - </el-radio-button> - <el-radio-button label="button"> - 按钮 - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item v-if="activeData['active-color'] !== undefined" label="开启颜色"> - <el-color-picker v-model="activeData['active-color']" /> - </el-form-item> - <el-form-item v-if="activeData['inactive-color'] !== undefined" label="关闭颜色"> - <el-color-picker v-model="activeData['inactive-color']" /> - </el-form-item> - - <el-form-item v-if="activeData['allow-half'] !== undefined" label="允许半选"> - <el-switch v-model="activeData['allow-half']" /> - </el-form-item> - <el-form-item v-if="activeData['show-text'] !== undefined" label="辅助文字"> - <el-switch v-model="activeData['show-text']" @change="rateTextChange" /> - </el-form-item> - <el-form-item v-if="activeData['show-score'] !== undefined" label="显示分数"> - <el-switch v-model="activeData['show-score']" @change="rateScoreChange" /> - </el-form-item> - <el-form-item v-if="activeData['show-stops'] !== undefined" label="显示间断点"> - <el-switch v-model="activeData['show-stops']" /> - </el-form-item> - <el-form-item v-if="activeData.range !== undefined" label="范围选择"> - <el-switch v-model="activeData.range" @change="rangeChange" /> - </el-form-item> - <el-form-item - v-if="activeData.border !== undefined && activeData.optionType === 'default'" - label="是否带边框" - > - <el-switch v-model="activeData.border" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-color-picker'" label="颜色格式"> - <el-select - v-model="activeData['color-format']" - placeholder="请选择颜色格式" - :style="{ width: '100%' }" - @change="colorFormatChange" - > - <el-option - v-for="(item, index) in colorFormatOptions" - :key="index" - :label="item.label" - :value="item.value" - /> - </el-select> - </el-form-item> - <el-form-item - v-if="activeData.size !== undefined && - (activeData.optionType === 'button' || - activeData.border || - activeData.tag === 'el-color-picker')" - label="选项尺寸" - > - <el-radio-group v-model="activeData.size"> - <el-radio-button label="medium"> - 中等 - </el-radio-button> - <el-radio-button label="small"> - 较小 - </el-radio-button> - <el-radio-button label="mini"> - 迷你 - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item v-if="activeData['show-word-limit'] !== undefined" label="输入统计"> - <el-switch v-model="activeData['show-word-limit']" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-input-number'" label="严格步数"> - <el-switch v-model="activeData['step-strictly']" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-cascader'" label="是否多选"> - <el-switch v-model="activeData.props.props.multiple" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-cascader'" label="展示全路径"> - <el-switch v-model="activeData['show-all-levels']" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-cascader'" label="可否筛选"> - <el-switch v-model="activeData.filterable" /> - </el-form-item> - <el-form-item v-if="activeData.clearable !== undefined" label="能否清空"> - <el-switch v-model="activeData.clearable" /> - </el-form-item> - <el-form-item v-if="activeData.showTip !== undefined" label="显示提示"> - <el-switch v-model="activeData.showTip" /> - </el-form-item> - <el-form-item v-if="activeData.multiple !== undefined" label="多选文件"> - <el-switch v-model="activeData.multiple" /> - </el-form-item> - <el-form-item v-if="activeData['auto-upload'] !== undefined" label="自动上传"> - <el-switch v-model="activeData['auto-upload']" /> - </el-form-item> - <el-form-item v-if="activeData.readonly !== undefined" label="是否只读"> - <el-switch v-model="activeData.readonly" /> - </el-form-item> - <el-form-item v-if="activeData.disabled !== undefined" label="是否禁用"> - <el-switch v-model="activeData.disabled" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-select'" label="是否可搜索"> - <el-switch v-model="activeData.filterable" /> - </el-form-item> - <el-form-item v-if="activeData.tag === 'el-select'" label="是否多选"> - <el-switch v-model="activeData.multiple" @change="multipleChange" /> - </el-form-item> - <el-form-item v-if="activeData.required !== undefined" label="是否必填"> - <el-switch v-model="activeData.required" /> - </el-form-item> - - <template v-if="activeData.layoutTree"> - <el-divider>布局结构树</el-divider> - <el-tree - :data="[activeData]" - :props="layoutTreeProps" - node-key="renderKey" - default-expand-all - draggable - > - <span slot-scope="{ node, data }"> - <span class="node-label"> - <svg-icon class="node-icon" :icon-class="data.tagIcon" /> - {{ node.label }} - </span> - </span> - </el-tree> - </template> - - <template v-if="activeData.layout === 'colFormItem' && activeData.tag !== 'el-button'"> - <el-divider>正则校验</el-divider> - <div - v-for="(item, index) in activeData.regList" - :key="index" - class="reg-item" - > - <span class="close-btn" @click="activeData.regList.splice(index, 1)"> - <i class="el-icon-close" /> - </span> - <el-form-item label="表达式"> - <el-input v-model="item.pattern" placeholder="请输入正则" /> - </el-form-item> - <el-form-item label="错误提示" style="margin-bottom:0"> - <el-input v-model="item.message" placeholder="请输入错误提示" /> - </el-form-item> - </div> - <div style="margin-left: 20px"> - <el-button icon="el-icon-circle-plus-outline" type="text" @click="addReg"> - 添加规则 - </el-button> - </div> - </template> - </el-form> - <!-- 表单属性 --> - <el-form v-show="currentTab === 'form'" size="small" label-width="90px"> - <el-form-item label="表单名"> - <el-input v-model="formConf.formRef" placeholder="请输入表单名(ref)" /> - </el-form-item> - <el-form-item label="表单模型"> - <el-input v-model="formConf.formModel" placeholder="请输入数据模型" /> - </el-form-item> - <el-form-item label="校验模型"> - <el-input v-model="formConf.formRules" placeholder="请输入校验模型" /> - </el-form-item> - <el-form-item label="表单尺寸"> - <el-radio-group v-model="formConf.size"> - <el-radio-button label="medium"> - 中等 - </el-radio-button> - <el-radio-button label="small"> - 较小 - </el-radio-button> - <el-radio-button label="mini"> - 迷你 - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item label="标签对齐"> - <el-radio-group v-model="formConf.labelPosition"> - <el-radio-button label="left"> - 左对齐 - </el-radio-button> - <el-radio-button label="right"> - 右对齐 - </el-radio-button> - <el-radio-button label="top"> - 顶部对齐 - </el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item label="标签宽度"> - <el-input-number v-model="formConf.labelWidth" placeholder="标签宽度" /> - </el-form-item> - <el-form-item label="栅格间隔"> - <el-input-number v-model="formConf.gutter" :min="0" placeholder="栅格间隔" /> - </el-form-item> - <el-form-item label="禁用表单"> - <el-switch v-model="formConf.disabled" /> - </el-form-item> - <el-form-item label="表单按钮"> - <el-switch v-model="formConf.formBtns" /> - </el-form-item> - <el-form-item label="显示未选中组件边框"> - <el-switch v-model="formConf.unFocusedComponentBorder" /> - </el-form-item> - </el-form> - </el-scrollbar> - </div> - - <treeNode-dialog :visible.sync="dialogVisible" title="添加选项" @commit="addNode" /> - <icons-dialog :visible.sync="iconsVisible" :current="activeData[currentIconModel]" @select="setIcon" /> - </div> -</template> - -<script> -import { isArray } from 'util' -import draggable from 'vuedraggable' -import TreeNodeDialog from './TreeNodeDialog' -import { isNumberStr } from '@/utils/index' -import IconsDialog from './IconsDialog' -import { - inputComponents, - selectComponents, - layoutComponents -} from '@/utils/generator/config' - -const dateTimeFormat = { - date: 'yyyy-MM-dd', - week: 'yyyy 第 WW 周', - month: 'yyyy-MM', - year: 'yyyy', - datetime: 'yyyy-MM-dd HH:mm:ss', - daterange: 'yyyy-MM-dd', - monthrange: 'yyyy-MM', - datetimerange: 'yyyy-MM-dd HH:mm:ss' -} - -export default { - components: { - draggable, - TreeNodeDialog, - IconsDialog - }, - props: ['showField', 'activeData', 'formConf'], - data() { - return { - currentTab: 'field', - currentNode: null, - dialogVisible: false, - iconsVisible: false, - currentIconModel: null, - dateTypeOptions: [ - { - label: '日(date)', - value: 'date' - }, - { - label: '周(week)', - value: 'week' - }, - { - label: '月(month)', - value: 'month' - }, - { - label: '年(year)', - value: 'year' - }, - { - label: '日期时间(datetime)', - value: 'datetime' - } - ], - dateRangeTypeOptions: [ - { - label: '日期范围(daterange)', - value: 'daterange' - }, - { - label: '月范围(monthrange)', - value: 'monthrange' - }, - { - label: '日期时间范围(datetimerange)', - value: 'datetimerange' - } - ], - colorFormatOptions: [ - { - label: 'hex', - value: 'hex' - }, - { - label: 'rgb', - value: 'rgb' - }, - { - label: 'rgba', - value: 'rgba' - }, - { - label: 'hsv', - value: 'hsv' - }, - { - label: 'hsl', - value: 'hsl' - } - ], - justifyOptions: [ - { - label: 'start', - value: 'start' - }, - { - label: 'end', - value: 'end' - }, - { - label: 'center', - value: 'center' - }, - { - label: 'space-around', - value: 'space-around' - }, - { - label: 'space-between', - value: 'space-between' - } - ], - layoutTreeProps: { - label(data, node) { - return data.componentName || `${data.label}: ${data.vModel}` - } - } - } - }, - computed: { - documentLink() { - return ( - this.activeData.document - || 'https://element.eleme.cn/#/zh-CN/component/installation' - ) - }, - dateOptions() { - if ( - this.activeData.type !== undefined - && this.activeData.tag === 'el-date-picker' - ) { - if (this.activeData['start-placeholder'] === undefined) { - return this.dateTypeOptions - } - return this.dateRangeTypeOptions - } - return [] - }, - tagList() { - return [ - { - label: '输入型组件', - options: inputComponents - }, - { - label: '选择型组件', - options: selectComponents - } - ] - } - }, - methods: { - addReg() { - this.activeData.regList.push({ - pattern: '', - message: '' - }) - }, - addSelectItem() { - this.activeData.options.push({ - label: '', - value: '' - }) - }, - addTreeItem() { - ++this.idGlobal - this.dialogVisible = true - this.currentNode = this.activeData.options - }, - renderContent(h, { node, data, store }) { - return ( - <div class="custom-tree-node"> - <span>{node.label}</span> - <span class="node-operation"> - <i on-click={() => this.append(data)} - class="el-icon-plus" - title="添加" - ></i> - <i on-click={() => this.remove(node, data)} - class="el-icon-delete" - title="删除" - ></i> - </span> - </div> - ) - }, - append(data) { - if (!data.children) { - this.$set(data, 'children', []) - } - this.dialogVisible = true - this.currentNode = data.children - }, - remove(node, data) { - const { parent } = node - const children = parent.data.children || parent.data - const index = children.findIndex(d => d.id === data.id) - children.splice(index, 1) - }, - addNode(data) { - this.currentNode.push(data) - }, - setOptionValue(item, val) { - item.value = isNumberStr(val) ? +val : val - }, - setDefaultValue(val) { - if (Array.isArray(val)) { - return val.join(',') - } - if (['string', 'number'].indexOf(val) > -1) { - return val - } - if (typeof val === 'boolean') { - return `${val}` - } - return val - }, - onDefaultValueInput(str) { - if (isArray(this.activeData.defaultValue)) { - // 数组 - this.$set( - this.activeData, - 'defaultValue', - str.split(',').map(val => (isNumberStr(val) ? +val : val)) - ) - } else if (['true', 'false'].indexOf(str) > -1) { - // 布尔 - this.$set(this.activeData, 'defaultValue', JSON.parse(str)) - } else { - // 字符串和数字 - this.$set( - this.activeData, - 'defaultValue', - isNumberStr(str) ? +str : str - ) - } - }, - onSwitchValueInput(val, name) { - if (['true', 'false'].indexOf(val) > -1) { - this.$set(this.activeData, name, JSON.parse(val)) - } else { - this.$set(this.activeData, name, isNumberStr(val) ? +val : val) - } - }, - setTimeValue(val, type) { - const valueFormat = type === 'week' ? dateTimeFormat.date : val - this.$set(this.activeData, 'defaultValue', null) - this.$set(this.activeData, 'value-format', valueFormat) - this.$set(this.activeData, 'format', val) - }, - spanChange(val) { - this.formConf.span = val - }, - multipleChange(val) { - this.$set(this.activeData, 'defaultValue', val ? [] : '') - }, - dateTypeChange(val) { - this.setTimeValue(dateTimeFormat[val], val) - }, - rangeChange(val) { - this.$set( - this.activeData, - 'defaultValue', - val ? [this.activeData.min, this.activeData.max] : this.activeData.min - ) - }, - rateTextChange(val) { - if (val) this.activeData['show-score'] = false - }, - rateScoreChange(val) { - if (val) this.activeData['show-text'] = false - }, - colorFormatChange(val) { - this.activeData.defaultValue = null - this.activeData['show-alpha'] = val.indexOf('a') > -1 - this.activeData.renderKey = +new Date() // 更新renderKey,重新渲染该组件 - }, - openIconsDialog(model) { - this.iconsVisible = true - this.currentIconModel = model - }, - setIcon(val) { - this.activeData[this.currentIconModel] = val - }, - tagChange(tagIcon) { - let target = inputComponents.find(item => item.tagIcon === tagIcon) - if (!target) target = selectComponents.find(item => item.tagIcon === tagIcon) - this.$emit('tag-change', target) - } - } -} -</script> - -<style lang="scss" scoped> -.right-board { - width: 350px; - position: absolute; - right: 0; - top: 0; - padding-top: 3px; - .field-box { - position: relative; - height: calc(100vh - 42px); - box-sizing: border-box; - overflow: hidden; - } - .el-scrollbar { - height: 100%; - } -} -.select-item { - display: flex; - border: 1px dashed #fff; - box-sizing: border-box; - & .close-btn { - cursor: pointer; - color: #f56c6c; - } - & .el-input + .el-input { - margin-left: 4px; - } -} -.select-item + .select-item { - margin-top: 4px; -} -.select-item.sortable-chosen { - border: 1px dashed #409eff; -} -.select-line-icon { - line-height: 32px; - font-size: 22px; - padding: 0 4px; - color: #777; -} -.option-drag { - cursor: move; -} -.time-range { - .el-date-editor { - width: 227px; - } - ::v-deep .el-icon-time { - display: none; - } -} -.document-link { - position: absolute; - display: block; - width: 26px; - height: 26px; - top: 0; - left: 0; - cursor: pointer; - background: #409eff; - z-index: 1; - border-radius: 0 0 6px 0; - text-align: center; - line-height: 26px; - color: #fff; - font-size: 18px; -} -.node-label{ - font-size: 14px; -} -.node-icon{ - color: #bebfc3; -} -</style> diff --git a/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue b/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue deleted file mode 100644 index fa7f0b2..0000000 --- a/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue +++ /dev/null @@ -1,149 +0,0 @@ -<template> - <div> - <el-dialog - v-bind="$attrs" - :close-on-click-modal="false" - :modal-append-to-body="false" - v-on="$listeners" - @open="onOpen" - @close="onClose" - > - <el-row :gutter="0"> - <el-form - ref="elForm" - :model="formData" - :rules="rules" - size="small" - label-width="100px" - > - <el-col :span="24"> - <el-form-item - label="选项名" - prop="label" - > - <el-input - v-model="formData.label" - placeholder="请输入选项名" - clearable - /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item - label="选项值" - prop="value" - > - <el-input - v-model="formData.value" - placeholder="请输入选项值" - clearable - > - <el-select - slot="append" - v-model="dataType" - :style="{width: '100px'}" - > - <el-option - v-for="(item, index) in dataTypeOptions" - :key="index" - :label="item.label" - :value="item.value" - :disabled="item.disabled" - /> - </el-select> - </el-input> - </el-form-item> - </el-col> - </el-form> - </el-row> - <div slot="footer"> - <el-button - type="primary" - @click="handleConfirm" - > - 确定 - </el-button> - <el-button @click="close"> - 取消 - </el-button> - </div> - </el-dialog> - </div> -</template> -<script> -import { isNumberStr } from '@/utils/index' - -export default { - components: {}, - inheritAttrs: false, - props: [], - data() { - return { - id: 100, - formData: { - label: undefined, - value: undefined - }, - rules: { - label: [ - { - required: true, - message: '请输入选项名', - trigger: 'blur' - } - ], - value: [ - { - required: true, - message: '请输入选项值', - trigger: 'blur' - } - ] - }, - dataType: 'string', - dataTypeOptions: [ - { - label: '字符串', - value: 'string' - }, - { - label: '数字', - value: 'number' - } - ] - } - }, - computed: {}, - watch: { - // eslint-disable-next-line func-names - 'formData.value': function (val) { - this.dataType = isNumberStr(val) ? 'number' : 'string' - } - }, - created() {}, - mounted() {}, - methods: { - onOpen() { - this.formData = { - label: undefined, - value: undefined - } - }, - onClose() {}, - close() { - this.$emit('update:visible', false) - }, - handleConfirm() { - this.$refs.elForm.validate(valid => { - if (!valid) return - if (this.dataType === 'number') { - this.formData.value = parseFloat(this.formData.value) - } - this.formData.id = this.id++ - this.$emit('commit', this.formData) - this.close() - }) - } - } -} -</script> diff --git a/ruoyi-ui/src/views/tool/build/index.vue b/ruoyi-ui/src/views/tool/build/index.vue deleted file mode 100644 index 2bd298b..0000000 --- a/ruoyi-ui/src/views/tool/build/index.vue +++ /dev/null @@ -1,768 +0,0 @@ -<template> - <div class="container"> - <div class="left-board"> - <div class="logo-wrapper"> - <div class="logo"> - <img :src="logo" alt="logo"> Form Generator - </div> - </div> - <el-scrollbar class="left-scrollbar"> - <div class="components-list"> - <div class="components-title"> - <svg-icon icon-class="component" />输入型组件 - </div> - <draggable - class="components-draggable" - :list="inputComponents" - :group="{ name: 'componentsGroup', pull: 'clone', put: false }" - :clone="cloneComponent" - draggable=".components-item" - :sort="false" - @end="onEnd" - > - <div - v-for="(element, index) in inputComponents" :key="index" class="components-item" - @click="addComponent(element)" - > - <div class="components-body"> - <svg-icon :icon-class="element.tagIcon" /> - {{ element.label }} - </div> - </div> - </draggable> - <div class="components-title"> - <svg-icon icon-class="component" />选择型组件 - </div> - <draggable - class="components-draggable" - :list="selectComponents" - :group="{ name: 'componentsGroup', pull: 'clone', put: false }" - :clone="cloneComponent" - draggable=".components-item" - :sort="false" - @end="onEnd" - > - <div - v-for="(element, index) in selectComponents" - :key="index" - class="components-item" - @click="addComponent(element)" - > - <div class="components-body"> - <svg-icon :icon-class="element.tagIcon" /> - {{ element.label }} - </div> - </div> - </draggable> - <div class="components-title"> - <svg-icon icon-class="component" /> 布局型组件 - </div> - <draggable - class="components-draggable" :list="layoutComponents" - :group="{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent" - draggable=".components-item" :sort="false" @end="onEnd" - > - <div - v-for="(element, index) in layoutComponents" :key="index" class="components-item" - @click="addComponent(element)" - > - <div class="components-body"> - <svg-icon :icon-class="element.tagIcon" /> - {{ element.label }} - </div> - </div> - </draggable> - </div> - </el-scrollbar> - </div> - - <div class="center-board"> - <div class="action-bar"> - <el-button icon="el-icon-download" type="text" @click="download"> - 导出vue文件 - </el-button> - <el-button class="copy-btn-main" icon="el-icon-document-copy" type="text" @click="copy"> - 复制代码 - </el-button> - <el-button class="delete-btn" icon="el-icon-delete" type="text" @click="empty"> - 清空 - </el-button> - </div> - <el-scrollbar class="center-scrollbar"> - <el-row class="center-board-row" :gutter="formConf.gutter"> - <el-form - :size="formConf.size" - :label-position="formConf.labelPosition" - :disabled="formConf.disabled" - :label-width="formConf.labelWidth + 'px'" - > - <draggable class="drawing-board" :list="drawingList" :animation="340" group="componentsGroup"> - <draggable-item - v-for="(element, index) in drawingList" - :key="element.renderKey" - :drawing-list="drawingList" - :element="element" - :index="index" - :active-id="activeId" - :form-conf="formConf" - @activeItem="activeFormItem" - @copyItem="drawingItemCopy" - @deleteItem="drawingItemDelete" - /> - </draggable> - <div v-show="!drawingList.length" class="empty-info"> - 从左侧拖入或点选组件进行表单设计 - </div> - </el-form> - </el-row> - </el-scrollbar> - </div> - - <right-panel - :active-data="activeData" - :form-conf="formConf" - :show-field="!!drawingList.length" - @tag-change="tagChange" - /> - - <code-type-dialog - :visible.sync="dialogVisible" - title="选择生成类型" - :show-file-name="showFileName" - @confirm="generate" - /> - <input id="copyNode" type="hidden"> - </div> -</template> - -<script> -import draggable from 'vuedraggable' -import beautifier from 'js-beautify' -import ClipboardJS from 'clipboard' -import render from '@/utils/generator/render' -import RightPanel from './RightPanel' -import { inputComponents, selectComponents, layoutComponents, formConf } from '@/utils/generator/config' -import { beautifierConf, titleCase } from '@/utils/index' -import { makeUpHtml, vueTemplate, vueScript, cssStyle } from '@/utils/generator/html' -import { makeUpJs } from '@/utils/generator/js' -import { makeUpCss } from '@/utils/generator/css' -import drawingDefault from '@/utils/generator/drawingDefault' -import logo from '@/assets/logo/logo.png' -import CodeTypeDialog from './CodeTypeDialog' -import DraggableItem from './DraggableItem' - -let oldActiveId -let tempActiveData - -export default { - components: { - draggable, - render, - RightPanel, - CodeTypeDialog, - DraggableItem - }, - data() { - return { - logo, - idGlobal: 100, - formConf, - inputComponents, - selectComponents, - layoutComponents, - labelWidth: 100, - drawingList: drawingDefault, - drawingData: {}, - activeId: drawingDefault[0].formId, - drawerVisible: false, - formData: {}, - dialogVisible: false, - generateConf: null, - showFileName: false, - activeData: drawingDefault[0] - } - }, - created() { - // 防止 firefox 下 拖拽 会新打卡一个选项卡 - document.body.ondrop = event => { - event.preventDefault() - event.stopPropagation() - } - }, - watch: { - // eslint-disable-next-line func-names - 'activeData.label': function (val, oldVal) { - if ( - this.activeData.placeholder === undefined - || !this.activeData.tag - || oldActiveId !== this.activeId - ) { - return - } - this.activeData.placeholder = this.activeData.placeholder.replace(oldVal, '') + val - }, - activeId: { - handler(val) { - oldActiveId = val - }, - immediate: true - } - }, - mounted() { - const clipboard = new ClipboardJS('#copyNode', { - text: trigger => { - const codeStr = this.generateCode() - this.$notify({ - title: '成功', - message: '代码已复制到剪切板,可粘贴。', - type: 'success' - }) - return codeStr - } - }) - clipboard.on('error', e => { - this.$message.error('代码复制失败') - }) - }, - methods: { - activeFormItem(element) { - this.activeData = element - this.activeId = element.formId - }, - onEnd(obj, a) { - if (obj.from !== obj.to) { - this.activeData = tempActiveData - this.activeId = this.idGlobal - } - }, - addComponent(item) { - const clone = this.cloneComponent(item) - this.drawingList.push(clone) - this.activeFormItem(clone) - }, - cloneComponent(origin) { - const clone = JSON.parse(JSON.stringify(origin)) - clone.formId = ++this.idGlobal - clone.span = formConf.span - clone.renderKey = +new Date() // 改变renderKey后可以实现强制更新组件 - if (!clone.layout) clone.layout = 'colFormItem' - if (clone.layout === 'colFormItem') { - clone.vModel = `field${this.idGlobal}` - clone.placeholder !== undefined && (clone.placeholder += clone.label) - tempActiveData = clone - } else if (clone.layout === 'rowFormItem') { - delete clone.label - clone.componentName = `row${this.idGlobal}` - clone.gutter = this.formConf.gutter - tempActiveData = clone - } - return tempActiveData - }, - AssembleFormData() { - this.formData = { - fields: JSON.parse(JSON.stringify(this.drawingList)), - ...this.formConf - } - }, - generate(data) { - const func = this[`exec${titleCase(this.operationType)}`] - this.generateConf = data - func && func(data) - }, - execRun(data) { - this.AssembleFormData() - this.drawerVisible = true - }, - execDownload(data) { - const codeStr = this.generateCode() - const blob = new Blob([codeStr], { type: 'text/plain;charset=utf-8' }) - this.$download.saveAs(blob, data.fileName) - }, - execCopy(data) { - document.getElementById('copyNode').click() - }, - empty() { - this.$confirm('确定要清空所有组件吗?', '提示', { type: 'warning' }).then( - () => { - this.drawingList = [] - } - ) - }, - drawingItemCopy(item, parent) { - let clone = JSON.parse(JSON.stringify(item)) - clone = this.createIdAndKey(clone) - parent.push(clone) - this.activeFormItem(clone) - }, - createIdAndKey(item) { - item.formId = ++this.idGlobal - item.renderKey = +new Date() - if (item.layout === 'colFormItem') { - item.vModel = `field${this.idGlobal}` - } else if (item.layout === 'rowFormItem') { - item.componentName = `row${this.idGlobal}` - } - if (Array.isArray(item.children)) { - item.children = item.children.map(childItem => this.createIdAndKey(childItem)) - } - return item - }, - drawingItemDelete(index, parent) { - parent.splice(index, 1) - this.$nextTick(() => { - const len = this.drawingList.length - if (len) { - this.activeFormItem(this.drawingList[len - 1]) - } - }) - }, - generateCode() { - const { type } = this.generateConf - this.AssembleFormData() - const script = vueScript(makeUpJs(this.formData, type)) - const html = vueTemplate(makeUpHtml(this.formData, type)) - const css = cssStyle(makeUpCss(this.formData)) - return beautifier.html(html + script + css, beautifierConf.html) - }, - download() { - this.dialogVisible = true - this.showFileName = true - this.operationType = 'download' - }, - run() { - this.dialogVisible = true - this.showFileName = false - this.operationType = 'run' - }, - copy() { - this.dialogVisible = true - this.showFileName = false - this.operationType = 'copy' - }, - tagChange(newTag) { - newTag = this.cloneComponent(newTag) - newTag.vModel = this.activeData.vModel - newTag.formId = this.activeId - newTag.span = this.activeData.span - delete this.activeData.tag - delete this.activeData.tagIcon - delete this.activeData.document - Object.keys(newTag).forEach(key => { - if (this.activeData[key] !== undefined - && typeof this.activeData[key] === typeof newTag[key]) { - newTag[key] = this.activeData[key] - } - }) - this.activeData = newTag - this.updateDrawingList(newTag, this.drawingList) - }, - updateDrawingList(newTag, list) { - const index = list.findIndex(item => item.formId === this.activeId) - if (index > -1) { - list.splice(index, 1, newTag) - } else { - list.forEach(item => { - if (Array.isArray(item.children)) this.updateDrawingList(newTag, item.children) - }) - } - } - } -} -</script> - -<style lang='scss'> -.editor-tabs{ - background: #121315; - .el-tabs__header{ - margin: 0; - border-bottom-color: #121315; - .el-tabs__nav{ - border-color: #121315; - } - } - .el-tabs__item{ - height: 32px; - line-height: 32px; - color: #888a8e; - border-left: 1px solid #121315 !important; - background: #363636; - margin-right: 5px; - user-select: none; - } - .el-tabs__item.is-active{ - background: #1e1e1e; - border-bottom-color: #1e1e1e!important; - color: #fff; - } - .el-icon-edit{ - color: #f1fa8c; - } - .el-icon-document{ - color: #a95812; - } -} - -// home -.right-scrollbar { - .el-scrollbar__view { - padding: 12px 18px 15px 15px; - } -} -.left-scrollbar .el-scrollbar__wrap { - box-sizing: border-box; - overflow-x: hidden !important; - margin-bottom: 0 !important; -} -.center-tabs{ - .el-tabs__header{ - margin-bottom: 0!important; - } - .el-tabs__item{ - width: 50%; - text-align: center; - } - .el-tabs__nav{ - width: 100%; - } -} -.reg-item{ - padding: 12px 6px; - background: #f8f8f8; - position: relative; - border-radius: 4px; - .close-btn{ - position: absolute; - right: -6px; - top: -6px; - display: block; - width: 16px; - height: 16px; - line-height: 16px; - background: rgba(0, 0, 0, 0.2); - border-radius: 50%; - color: #fff; - text-align: center; - z-index: 1; - cursor: pointer; - font-size: 12px; - &:hover{ - background: rgba(210, 23, 23, 0.5) - } - } - & + .reg-item{ - margin-top: 18px; - } -} -.action-bar{ - & .el-button+.el-button { - margin-left: 15px; - } - & i { - font-size: 20px; - vertical-align: middle; - position: relative; - top: -1px; - } -} - -.custom-tree-node{ - width: 100%; - font-size: 14px; - .node-operation{ - float: right; - } - i[class*="el-icon"] + i[class*="el-icon"]{ - margin-left: 6px; - } - .el-icon-plus{ - color: #409EFF; - } - .el-icon-delete{ - color: #157a0c; - } -} - -.left-scrollbar .el-scrollbar__view{ - overflow-x: hidden; -} - -.el-rate{ - display: inline-block; - vertical-align: text-top; -} -.el-upload__tip{ - line-height: 1.2; -} - -$selectedColor: #f6f7ff; -$lighterBlue: #409EFF; - -.container { - position: relative; - width: 100%; - height: 100%; -} - -.components-list { - padding: 8px; - box-sizing: border-box; - height: 100%; - .components-item { - display: inline-block; - width: 48%; - margin: 1%; - transition: transform 0ms !important; - } -} -.components-draggable{ - padding-bottom: 20px; -} -.components-title{ - font-size: 14px; - color: #222; - margin: 6px 2px; - .svg-icon{ - color: #666; - font-size: 18px; - } -} - -.components-body { - padding: 8px 10px; - background: $selectedColor; - font-size: 12px; - cursor: move; - border: 1px dashed $selectedColor; - border-radius: 3px; - .svg-icon{ - color: #777; - font-size: 15px; - } - &:hover { - border: 1px dashed #787be8; - color: #787be8; - .svg-icon { - color: #787be8; - } - } -} - -.left-board { - width: 260px; - position: absolute; - left: 0; - top: 0; - height: 100vh; -} -.left-scrollbar{ - height: calc(100vh - 42px); - overflow: hidden; -} -.center-scrollbar { - height: calc(100vh - 42px); - overflow: hidden; - border-left: 1px solid #f1e8e8; - border-right: 1px solid #f1e8e8; - box-sizing: border-box; -} -.center-board { - height: 100vh; - width: auto; - margin: 0 350px 0 260px; - box-sizing: border-box; -} -.empty-info{ - position: absolute; - top: 46%; - left: 0; - right: 0; - text-align: center; - font-size: 18px; - color: #ccb1ea; - letter-spacing: 4px; -} -.action-bar{ - position: relative; - height: 42px; - text-align: right; - padding: 0 15px; - box-sizing: border-box;; - border: 1px solid #f1e8e8; - border-top: none; - border-left: none; - .delete-btn{ - color: #F56C6C; - } -} -.logo-wrapper{ - position: relative; - height: 42px; - background: #fff; - border-bottom: 1px solid #f1e8e8; - box-sizing: border-box; -} -.logo{ - position: absolute; - left: 12px; - top: 6px; - line-height: 30px; - color: #00afff; - font-weight: 600; - font-size: 17px; - white-space: nowrap; - > img{ - width: 30px; - height: 30px; - vertical-align: top; - } - .github{ - display: inline-block; - vertical-align: sub; - margin-left: 15px; - > img{ - height: 22px; - } - } -} - -.center-board-row { - padding: 12px 12px 15px 12px; - box-sizing: border-box; - & > .el-form { - // 69 = 12+15+42 - height: calc(100vh - 69px); - } -} -.drawing-board { - height: 100%; - position: relative; - .components-body { - padding: 0; - margin: 0; - font-size: 0; - } - .sortable-ghost { - position: relative; - display: block; - overflow: hidden; - &::before { - content: " "; - position: absolute; - left: 0; - right: 0; - top: 0; - height: 3px; - background: rgb(89, 89, 223); - z-index: 2; - } - } - .components-item.sortable-ghost { - width: 100%; - height: 60px; - background-color: $selectedColor; - } - .active-from-item { - & > .el-form-item{ - background: $selectedColor; - border-radius: 6px; - } - & > .drawing-item-copy, & > .drawing-item-delete{ - display: initial; - } - & > .component-name{ - color: $lighterBlue; - } - } - .el-form-item{ - margin-bottom: 15px; - } -} -.drawing-item{ - position: relative; - cursor: move; - &.unfocus-bordered:not(.activeFromItem) > div:first-child { - border: 1px dashed #ccc; - } - .el-form-item{ - padding: 12px 10px; - } -} -.drawing-row-item{ - position: relative; - cursor: move; - box-sizing: border-box; - border: 1px dashed #ccc; - border-radius: 3px; - padding: 0 2px; - margin-bottom: 15px; - .drawing-row-item { - margin-bottom: 2px; - } - .el-col{ - margin-top: 22px; - } - .el-form-item{ - margin-bottom: 0; - } - .drag-wrapper{ - min-height: 80px; - } - &.active-from-item{ - border: 1px dashed $lighterBlue; - } - .component-name{ - position: absolute; - top: 0; - left: 0; - font-size: 12px; - color: #bbb; - display: inline-block; - padding: 0 6px; - } -} -.drawing-item, .drawing-row-item{ - &:hover { - & > .el-form-item{ - background: $selectedColor; - border-radius: 6px; - } - & > .drawing-item-copy, & > .drawing-item-delete{ - display: initial; - } - } - & > .drawing-item-copy, & > .drawing-item-delete{ - display: none; - position: absolute; - top: -10px; - width: 22px; - height: 22px; - line-height: 22px; - text-align: center; - border-radius: 50%; - font-size: 12px; - border: 1px solid; - cursor: pointer; - z-index: 1; - } - & > .drawing-item-copy{ - right: 56px; - border-color: $lighterBlue; - color: $lighterBlue; - background: #fff; - &:hover{ - background: $lighterBlue; - color: #fff; - } - } - & > .drawing-item-delete{ - right: 24px; - border-color: #F56C6C; - color: #F56C6C; - background: #fff; - &:hover{ - background: #F56C6C; - color: #fff; - } - } -} -</style> diff --git a/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue b/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue deleted file mode 100644 index 7029529..0000000 --- a/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue +++ /dev/null @@ -1,60 +0,0 @@ -<template> - <el-form ref="basicInfoForm" :model="info" :rules="rules" label-width="150px"> - <el-row> - <el-col :span="12"> - <el-form-item label="表名称" prop="tableName"> - <el-input placeholder="请输入仓库名称" v-model="info.tableName" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="表描述" prop="tableComment"> - <el-input placeholder="请输入" v-model="info.tableComment" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="实体类名称" prop="className"> - <el-input placeholder="请输入" v-model="info.className" /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="作者" prop="functionAuthor"> - <el-input placeholder="请输入" v-model="info.functionAuthor" /> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="备注" prop="remark"> - <el-input type="textarea" :rows="3" v-model="info.remark"></el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> -</template> - -<script> -export default { - props: { - info: { - type: Object, - default: null - } - }, - data() { - return { - rules: { - tableName: [ - { required: true, message: "请输入表名称", trigger: "blur" } - ], - tableComment: [ - { required: true, message: "请输入表描述", trigger: "blur" } - ], - className: [ - { required: true, message: "请输入实体类名称", trigger: "blur" } - ], - functionAuthor: [ - { required: true, message: "请输入作者", trigger: "blur" } - ] - } - }; - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/gen/createTable.vue b/ruoyi-ui/src/views/tool/gen/createTable.vue deleted file mode 100644 index f914b5d..0000000 --- a/ruoyi-ui/src/views/tool/gen/createTable.vue +++ /dev/null @@ -1,45 +0,0 @@ -<template> - <!-- 创建表 --> - <el-dialog title="创建表" :visible.sync="visible" width="800px" top="5vh" append-to-body> - <span>创建表语句(支持多个建表语句):</span> - <el-input type="textarea" :rows="10" placeholder="请输入文本" v-model="content"></el-input> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="handleCreateTable">确 定</el-button> - <el-button @click="visible = false">取 消</el-button> - </div> - </el-dialog> -</template> - -<script> -import { createTable } from "@/api/tool/gen"; -export default { - data() { - return { - // 遮罩层 - visible: false, - // 文本内容 - content: "" - }; - }, - methods: { - // 显示弹框 - show() { - this.visible = true; - }, - /** 创建按钮操作 */ - handleCreateTable() { - if (this.content === "") { - this.$modal.msgError("请输入建表语句"); - return; - } - createTable({ sql: this.content }).then(res => { - this.$modal.msgSuccess(res.msg); - if (res.code === 200) { - this.visible = false; - this.$emit("ok"); - } - }); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/gen/editTable.vue b/ruoyi-ui/src/views/tool/gen/editTable.vue deleted file mode 100644 index 951497a..0000000 --- a/ruoyi-ui/src/views/tool/gen/editTable.vue +++ /dev/null @@ -1,234 +0,0 @@ -<template> - <el-card> - <el-tabs v-model="activeName"> - <el-tab-pane label="基本信息" name="basic"> - <basic-info-form ref="basicInfo" :info="info" /> - </el-tab-pane> - <el-tab-pane label="字段信息" name="columnInfo"> - <el-table ref="dragTable" :data="columns" row-key="columnId" :max-height="tableHeight"> - <el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" /> - <el-table-column - label="字段列名" - prop="columnName" - min-width="10%" - :show-overflow-tooltip="true" - /> - <el-table-column label="字段描述" min-width="10%"> - <template slot-scope="scope"> - <el-input v-model="scope.row.columnComment"></el-input> - </template> - </el-table-column> - <el-table-column - label="物理类型" - prop="columnType" - min-width="10%" - :show-overflow-tooltip="true" - /> - <el-table-column label="Java类型" min-width="11%"> - <template slot-scope="scope"> - <el-select v-model="scope.row.javaType"> - <el-option label="Long" value="Long" /> - <el-option label="String" value="String" /> - <el-option label="Integer" value="Integer" /> - <el-option label="Double" value="Double" /> - <el-option label="BigDecimal" value="BigDecimal" /> - <el-option label="Date" value="Date" /> - <el-option label="Boolean" value="Boolean" /> - </el-select> - </template> - </el-table-column> - <el-table-column label="java属性" min-width="10%"> - <template slot-scope="scope"> - <el-input v-model="scope.row.javaField"></el-input> - </template> - </el-table-column> - - <el-table-column label="插入" min-width="5%"> - <template slot-scope="scope"> - <el-checkbox true-label="1" false-label="0" v-model="scope.row.isInsert"></el-checkbox> - </template> - </el-table-column> - <el-table-column label="编辑" min-width="5%"> - <template slot-scope="scope"> - <el-checkbox true-label="1" false-label="0" v-model="scope.row.isEdit"></el-checkbox> - </template> - </el-table-column> - <el-table-column label="列表" min-width="5%"> - <template slot-scope="scope"> - <el-checkbox true-label="1" false-label="0" v-model="scope.row.isList"></el-checkbox> - </template> - </el-table-column> - <el-table-column label="查询" min-width="5%"> - <template slot-scope="scope"> - <el-checkbox true-label="1" false-label="0" v-model="scope.row.isQuery"></el-checkbox> - </template> - </el-table-column> - <el-table-column label="查询方式" min-width="10%"> - <template slot-scope="scope"> - <el-select v-model="scope.row.queryType"> - <el-option label="=" value="EQ" /> - <el-option label="!=" value="NE" /> - <el-option label=">" value="GT" /> - <el-option label=">=" value="GTE" /> - <el-option label="<" value="LT" /> - <el-option label="<=" value="LTE" /> - <el-option label="LIKE" value="LIKE" /> - <el-option label="BETWEEN" value="BETWEEN" /> - </el-select> - </template> - </el-table-column> - <el-table-column label="必填" min-width="5%"> - <template slot-scope="scope"> - <el-checkbox true-label="1" false-label="0" v-model="scope.row.isRequired"></el-checkbox> - </template> - </el-table-column> - <el-table-column label="显示类型" min-width="12%"> - <template slot-scope="scope"> - <el-select v-model="scope.row.htmlType"> - <el-option label="文本框" value="input" /> - <el-option label="文本域" value="textarea" /> - <el-option label="下拉框" value="select" /> - <el-option label="单选框" value="radio" /> - <el-option label="复选框" value="checkbox" /> - <el-option label="日期控件" value="datetime" /> - <el-option label="图片上传" value="imageUpload" /> - <el-option label="文件上传" value="fileUpload" /> - <el-option label="富文本控件" value="editor" /> - </el-select> - </template> - </el-table-column> - <el-table-column label="字典类型" min-width="12%"> - <template slot-scope="scope"> - <el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择"> - <el-option - v-for="dict in dictOptions" - :key="dict.dictType" - :label="dict.dictName" - :value="dict.dictType"> - <span style="float: left">{{ dict.dictName }}</span> - <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span> - </el-option> - </el-select> - </template> - </el-table-column> - </el-table> - </el-tab-pane> - <el-tab-pane label="生成信息" name="genInfo"> - <gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/> - </el-tab-pane> - </el-tabs> - <el-form label-width="100px"> - <el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;"> - <el-button type="primary" @click="submitForm()">提交</el-button> - <el-button @click="close()">返回</el-button> - </el-form-item> - </el-form> - </el-card> -</template> - -<script> -import { getGenTable, updateGenTable } from "@/api/tool/gen"; -import { optionselect as getDictOptionselect } from "@/api/system/dict/type"; -import { listMenu as getMenuTreeselect } from "@/api/system/menu"; -import basicInfoForm from "./basicInfoForm"; -import genInfoForm from "./genInfoForm"; -import Sortable from 'sortablejs' - -export default { - name: "GenEdit", - components: { - basicInfoForm, - genInfoForm - }, - data() { - return { - // 选中选项卡的 name - activeName: "columnInfo", - // 表格的高度 - tableHeight: document.documentElement.scrollHeight - 245 + "px", - // 表信息 - tables: [], - // 表列信息 - columns: [], - // 字典信息 - dictOptions: [], - // 菜单信息 - menus: [], - // 表详细信息 - info: {} - }; - }, - created() { - const tableId = this.$route.params && this.$route.params.tableId; - if (tableId) { - // 获取表详细信息 - getGenTable(tableId).then(res => { - this.columns = res.data.rows; - this.info = res.data.info; - this.tables = res.data.tables; - }); - /** 查询字典下拉列表 */ - getDictOptionselect().then(response => { - this.dictOptions = response.data; - }); - /** 查询菜单下拉列表 */ - getMenuTreeselect().then(response => { - this.menus = this.handleTree(response.data, "menuId"); - }); - } - }, - methods: { - /** 提交按钮 */ - submitForm() { - const basicForm = this.$refs.basicInfo.$refs.basicInfoForm; - const genForm = this.$refs.genInfo.$refs.genInfoForm; - Promise.all([basicForm, genForm].map(this.getFormPromise)).then(res => { - const validateResult = res.every(item => !!item); - if (validateResult) { - const genTable = Object.assign({}, basicForm.model, genForm.model); - genTable.columns = this.columns; - genTable.params = { - treeCode: genTable.treeCode, - treeName: genTable.treeName, - treeParentCode: genTable.treeParentCode, - parentMenuId: genTable.parentMenuId - }; - updateGenTable(genTable).then(res => { - this.$modal.msgSuccess(res.msg); - if (res.code === 200) { - this.close(); - } - }); - } else { - this.$modal.msgError("表单校验未通过,请重新检查提交内容"); - } - }); - }, - getFormPromise(form) { - return new Promise(resolve => { - form.validate(res => { - resolve(res); - }); - }); - }, - /** 关闭按钮 */ - close() { - const obj = { path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } }; - this.$tab.closeOpenPage(obj); - } - }, - mounted() { - const el = this.$refs.dragTable.$el.querySelectorAll(".el-table__body-wrapper > table > tbody")[0]; - const sortable = Sortable.create(el, { - handle: ".allowDrag", - onEnd: evt => { - const targetRow = this.columns.splice(evt.oldIndex, 1)[0]; - this.columns.splice(evt.newIndex, 0, targetRow); - for (let index in this.columns) { - this.columns[index].sort = parseInt(index) + 1; - } - } - }); - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue deleted file mode 100644 index 98daf6d..0000000 --- a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue +++ /dev/null @@ -1,312 +0,0 @@ -<template> - <el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px"> - <el-row> - <el-col :span="12"> - <el-form-item prop="tplCategory"> - <span slot="label">生成模板</span> - <el-select v-model="info.tplCategory" @change="tplSelectChange"> - <el-option label="单表(增删改查)" value="crud" /> - <el-option label="树表(增删改查)" value="tree" /> - <el-option label="主子表(增删改查)" value="sub" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item prop="tplWebType"> - <span slot="label">前端类型</span> - <el-select v-model="info.tplWebType"> - <el-option label="Vue2 Element UI 模版" value="element-ui" /> - <el-option label="Vue3 Element Plus 模版" value="element-plus" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item prop="packageName"> - <span slot="label"> - 生成包路径 - <el-tooltip content="生成在哪个java包下,例如 com.ruoyi.system" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="info.packageName" /> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item prop="moduleName"> - <span slot="label"> - 生成模块名 - <el-tooltip content="可理解为子系统名,例如 system" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="info.moduleName" /> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item prop="businessName"> - <span slot="label"> - 生成业务名 - <el-tooltip content="可理解为功能英文名,例如 user" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="info.businessName" /> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item prop="functionName"> - <span slot="label"> - 生成功能名 - <el-tooltip content="用作类描述,例如 用户" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="info.functionName" /> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item prop="genType"> - <span slot="label"> - 生成代码方式 - <el-tooltip content="默认为zip压缩包下载,也可以自定义生成路径" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-radio v-model="info.genType" label="0">zip压缩包</el-radio> - <el-radio v-model="info.genType" label="1">自定义路径</el-radio> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 上级菜单 - <el-tooltip content="分配到指定菜单下,例如 系统管理" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <treeselect - :append-to-body="true" - v-model="info.parentMenuId" - :options="menus" - :normalizer="normalizer" - :show-count="true" - placeholder="请选择系统菜单" - /> - </el-form-item> - </el-col> - - <el-col :span="24" v-if="info.genType == '1'"> - <el-form-item prop="genPath"> - <span slot="label"> - 自定义路径 - <el-tooltip content="填写磁盘绝对路径,若不填写,则生成到当前Web项目下" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-input v-model="info.genPath"> - <el-dropdown slot="append"> - <el-button type="primary"> - 最近路径快速选择 - <i class="el-icon-arrow-down el-icon--right"></i> - </el-button> - <el-dropdown-menu slot="dropdown"> - <el-dropdown-item @click.native="info.genPath = '/'">恢复默认的生成基础路径</el-dropdown-item> - </el-dropdown-menu> - </el-dropdown> - </el-input> - </el-form-item> - </el-col> - </el-row> - - <el-row v-show="info.tplCategory == 'tree'"> - <h4 class="form-header">其他信息</h4> - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 树编码字段 - <el-tooltip content="树显示的编码字段名, 如:dept_id" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-select v-model="info.treeCode" placeholder="请选择"> - <el-option - v-for="(column, index) in info.columns" - :key="index" - :label="column.columnName + ':' + column.columnComment" - :value="column.columnName" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 树父编码字段 - <el-tooltip content="树显示的父编码字段名, 如:parent_Id" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-select v-model="info.treeParentCode" placeholder="请选择"> - <el-option - v-for="(column, index) in info.columns" - :key="index" - :label="column.columnName + ':' + column.columnComment" - :value="column.columnName" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 树名称字段 - <el-tooltip content="树节点的显示名称字段名, 如:dept_name" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-select v-model="info.treeName" placeholder="请选择"> - <el-option - v-for="(column, index) in info.columns" - :key="index" - :label="column.columnName + ':' + column.columnComment" - :value="column.columnName" - ></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row v-show="info.tplCategory == 'sub'"> - <h4 class="form-header">关联信息</h4> - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 关联子表的表名 - <el-tooltip content="关联子表的表名, 如:sys_user" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-select v-model="info.subTableName" placeholder="请选择" @change="subSelectChange"> - <el-option - v-for="(table, index) in tables" - :key="index" - :label="table.tableName + ':' + table.tableComment" - :value="table.tableName" - ></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item> - <span slot="label"> - 子表关联的外键名 - <el-tooltip content="子表关联的外键名, 如:user_id" placement="top"> - <i class="el-icon-question"></i> - </el-tooltip> - </span> - <el-select v-model="info.subTableFkName" placeholder="请选择"> - <el-option - v-for="(column, index) in subColumns" - :key="index" - :label="column.columnName + ':' + column.columnComment" - :value="column.columnName" - ></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> -</template> - -<script> -import Treeselect from "@riophae/vue-treeselect"; -import "@riophae/vue-treeselect/dist/vue-treeselect.css"; - -export default { - components: { Treeselect }, - props: { - info: { - type: Object, - default: null - }, - tables: { - type: Array, - default: null - }, - menus: { - type: Array, - default: [] - }, - }, - data() { - return { - subColumns: [], - rules: { - tplCategory: [ - { required: true, message: "请选择生成模板", trigger: "blur" } - ], - packageName: [ - { required: true, message: "请输入生成包路径", trigger: "blur" } - ], - moduleName: [ - { required: true, message: "请输入生成模块名", trigger: "blur" } - ], - businessName: [ - { required: true, message: "请输入生成业务名", trigger: "blur" } - ], - functionName: [ - { required: true, message: "请输入生成功能名", trigger: "blur" } - ], - } - }; - }, - watch: { - 'info.subTableName': function(val) { - this.setSubTableColumns(val); - }, - 'info.tplWebType': function(val) { - if (val === '') { - this.info.tplWebType = "element-ui"; - } - } - }, - methods: { - /** 转换菜单数据结构 */ - normalizer(node) { - if (node.children && !node.children.length) { - delete node.children; - } - return { - id: node.menuId, - label: node.menuName, - children: node.children - }; - }, - /** 选择子表名触发 */ - subSelectChange(value) { - this.info.subTableFkName = ''; - }, - /** 选择生成模板触发 */ - tplSelectChange(value) { - if(value !== 'sub') { - this.info.subTableName = ''; - this.info.subTableFkName = ''; - } - }, - /** 设置关联外键 */ - setSubTableColumns(value) { - for (var item in this.tables) { - const name = this.tables[item].tableName; - if (value === name) { - this.subColumns = this.tables[item].columns; - break; - } - } - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/gen/importTable.vue b/ruoyi-ui/src/views/tool/gen/importTable.vue deleted file mode 100644 index 3ea9532..0000000 --- a/ruoyi-ui/src/views/tool/gen/importTable.vue +++ /dev/null @@ -1,120 +0,0 @@ -<template> - <!-- 导入表 --> - <el-dialog title="导入表" :visible.sync="visible" width="800px" top="5vh" append-to-body> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true"> - <el-form-item label="表名称" prop="tableName"> - <el-input - v-model="queryParams.tableName" - placeholder="请输入表名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="表描述" prop="tableComment"> - <el-input - v-model="queryParams.tableComment" - placeholder="请输入表描述" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - <el-row> - <el-table @row-click="clickRow" ref="table" :data="dbTableList" @selection-change="handleSelectionChange" height="260px"> - <el-table-column type="selection" width="55"></el-table-column> - <el-table-column prop="tableName" label="表名称" :show-overflow-tooltip="true"></el-table-column> - <el-table-column prop="tableComment" label="表描述" :show-overflow-tooltip="true"></el-table-column> - <el-table-column prop="createTime" label="创建时间"></el-table-column> - <el-table-column prop="updateTime" label="更新时间"></el-table-column> - </el-table> - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - </el-row> - <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="handleImportTable">确 定</el-button> - <el-button @click="visible = false">取 消</el-button> - </div> - </el-dialog> -</template> - -<script> -import { listDbTable, importTable } from "@/api/tool/gen"; -export default { - data() { - return { - // 遮罩层 - visible: false, - // 选中数组值 - tables: [], - // 总条数 - total: 0, - // 表数据 - dbTableList: [], - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - tableName: undefined, - tableComment: undefined - } - }; - }, - methods: { - // 显示弹框 - show() { - this.getList(); - this.visible = true; - }, - clickRow(row) { - this.$refs.table.toggleRowSelection(row); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.tables = selection.map(item => item.tableName); - }, - // 查询表数据 - getList() { - listDbTable(this.queryParams).then(res => { - if (res.code === 200) { - this.dbTableList = res.rows; - this.total = res.total; - } - }); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 导入按钮操作 */ - handleImportTable() { - const tableNames = this.tables.join(","); - if (tableNames == "") { - this.$modal.msgError("请选择要导入的表"); - return; - } - importTable({ tables: tableNames }).then(res => { - this.$modal.msgSuccess(res.msg); - if (res.code === 200) { - this.visible = false; - this.$emit("ok"); - } - }); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/gen/index.vue b/ruoyi-ui/src/views/tool/gen/index.vue deleted file mode 100644 index 9237c30..0000000 --- a/ruoyi-ui/src/views/tool/gen/index.vue +++ /dev/null @@ -1,354 +0,0 @@ -<template> - <div class="app-container"> - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> - <el-form-item label="表名称" prop="tableName"> - <el-input - v-model="queryParams.tableName" - placeholder="请输入表名称" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="表描述" prop="tableComment"> - <el-input - v-model="queryParams.tableComment" - placeholder="请输入表描述" - clearable - @keyup.enter.native="handleQuery" - /> - </el-form-item> - <el-form-item label="创建时间"> - <el-date-picker - v-model="dateRange" - style="width: 240px" - value-format="yyyy-MM-dd" - type="daterange" - range-separator="-" - start-placeholder="开始日期" - end-placeholder="结束日期" - ></el-date-picker> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> - </el-form-item> - </el-form> - - <el-row :gutter="10" class="mb8"> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-download" - size="mini" - :disabled="multiple" - @click="handleGenTable" - v-hasPermi="['tool:gen:code']" - >生成</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="primary" - plain - icon="el-icon-plus" - size="mini" - @click="openCreateTable" - v-hasRole="['admin']" - >创建</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="info" - plain - icon="el-icon-upload" - size="mini" - @click="openImportTable" - v-hasPermi="['tool:gen:import']" - >导入</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="success" - plain - icon="el-icon-edit" - size="mini" - :disabled="single" - @click="handleEditTable" - v-hasPermi="['tool:gen:edit']" - >修改</el-button> - </el-col> - <el-col :span="1.5"> - <el-button - type="danger" - plain - icon="el-icon-delete" - size="mini" - :disabled="multiple" - @click="handleDelete" - v-hasPermi="['tool:gen:remove']" - >删除</el-button> - </el-col> - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> - </el-row> - - <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange"> - <el-table-column type="selection" align="center" width="55"></el-table-column> - <el-table-column label="序号" type="index" width="50" align="center"> - <template slot-scope="scope"> - <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span> - </template> - </el-table-column> - <el-table-column - label="表名称" - align="center" - prop="tableName" - :show-overflow-tooltip="true" - width="120" - /> - <el-table-column - label="表描述" - align="center" - prop="tableComment" - :show-overflow-tooltip="true" - width="120" - /> - <el-table-column - label="实体" - align="center" - prop="className" - :show-overflow-tooltip="true" - width="120" - /> - <el-table-column label="创建时间" align="center" prop="createTime" width="160" /> - <el-table-column label="更新时间" align="center" prop="updateTime" width="160" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template slot-scope="scope"> - <el-button - type="text" - size="small" - icon="el-icon-view" - @click="handlePreview(scope.row)" - v-hasPermi="['tool:gen:preview']" - >预览</el-button> - <el-button - type="text" - size="small" - icon="el-icon-edit" - @click="handleEditTable(scope.row)" - v-hasPermi="['tool:gen:edit']" - >编辑</el-button> - <el-button - type="text" - size="small" - icon="el-icon-delete" - @click="handleDelete(scope.row)" - v-hasPermi="['tool:gen:remove']" - >删除</el-button> - <el-button - type="text" - size="small" - icon="el-icon-refresh" - @click="handleSynchDb(scope.row)" - v-hasPermi="['tool:gen:edit']" - >同步</el-button> - <el-button - type="text" - size="small" - icon="el-icon-download" - @click="handleGenTable(scope.row)" - v-hasPermi="['tool:gen:code']" - >生成代码</el-button> - </template> - </el-table-column> - </el-table> - <pagination - v-show="total>0" - :total="total" - :page.sync="queryParams.pageNum" - :limit.sync="queryParams.pageSize" - @pagination="getList" - /> - <!-- 预览界面 --> - <el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh" append-to-body class="scrollbar"> - <el-tabs v-model="preview.activeName"> - <el-tab-pane - v-for="(value, key) in preview.data" - :label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))" - :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))" - :key="key" - > - <el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">复制</el-link> - <pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre> - </el-tab-pane> - </el-tabs> - </el-dialog> - <import-table ref="import" @ok="handleQuery" /> - <create-table ref="create" @ok="handleQuery" /> - </div> -</template> - -<script> -import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen"; -import importTable from "./importTable"; -import createTable from "./createTable"; -import hljs from "highlight.js/lib/highlight"; -import "highlight.js/styles/github-gist.css"; -hljs.registerLanguage("java", require("highlight.js/lib/languages/java")); -hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml")); -hljs.registerLanguage("html", require("highlight.js/lib/languages/xml")); -hljs.registerLanguage("vue", require("highlight.js/lib/languages/xml")); -hljs.registerLanguage("javascript", require("highlight.js/lib/languages/javascript")); -hljs.registerLanguage("sql", require("highlight.js/lib/languages/sql")); - -export default { - name: "Gen", - components: { importTable, createTable }, - data() { - return { - // 遮罩层 - loading: true, - // 唯一标识符 - uniqueId: "", - // 选中数组 - ids: [], - // 选中表数组 - tableNames: [], - // 非单个禁用 - single: true, - // 非多个禁用 - multiple: true, - // 显示搜索条件 - showSearch: true, - // 总条数 - total: 0, - // 表数据 - tableList: [], - // 日期范围 - dateRange: "", - // 查询参数 - queryParams: { - pageNum: 1, - pageSize: 10, - tableName: undefined, - tableComment: undefined - }, - // 预览参数 - preview: { - open: false, - title: "代码预览", - data: {}, - activeName: "domain.java" - } - }; - }, - created() { - this.getList(); - }, - activated() { - const time = this.$route.query.t; - if (time != null && time != this.uniqueId) { - this.uniqueId = time; - this.queryParams.pageNum = Number(this.$route.query.pageNum); - this.getList(); - } - }, - methods: { - /** 查询表集合 */ - getList() { - this.loading = true; - listTable(this.addDateRange(this.queryParams, this.dateRange)).then(response => { - this.tableList = response.rows; - this.total = response.total; - this.loading = false; - } - ); - }, - /** 搜索按钮操作 */ - handleQuery() { - this.queryParams.pageNum = 1; - this.getList(); - }, - /** 生成代码操作 */ - handleGenTable(row) { - const tableNames = row.tableName || this.tableNames; - if (tableNames == "") { - this.$modal.msgError("请选择要生成的数据"); - return; - } - if(row.genType === "1") { - genCode(row.tableName).then(response => { - this.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath); - }); - } else { - this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi.zip"); - } - }, - /** 同步数据库操作 */ - handleSynchDb(row) { - const tableName = row.tableName; - this.$modal.confirm('确认要强制同步"' + tableName + '"表结构吗?').then(function() { - return synchDb(tableName); - }).then(() => { - this.$modal.msgSuccess("同步成功"); - }).catch(() => {}); - }, - /** 打开导入表弹窗 */ - openImportTable() { - this.$refs.import.show(); - }, - /** 打开创建表弹窗 */ - openCreateTable() { - this.$refs.create.show(); - }, - /** 重置按钮操作 */ - resetQuery() { - this.dateRange = []; - this.resetForm("queryForm"); - this.handleQuery(); - }, - /** 预览按钮 */ - handlePreview(row) { - previewTable(row.tableId).then(response => { - this.preview.data = response.data; - this.preview.open = true; - this.preview.activeName = "domain.java"; - }); - }, - /** 高亮显示 */ - highlightedCode(code, key) { - const vmName = key.substring(key.lastIndexOf("/") + 1, key.indexOf(".vm")); - var language = vmName.substring(vmName.indexOf(".") + 1, vmName.length); - const result = hljs.highlight(language, code || "", true); - return result.value || ' '; - }, - /** 复制代码成功 */ - clipboardSuccess() { - this.$modal.msgSuccess("复制成功"); - }, - // 多选框选中数据 - handleSelectionChange(selection) { - this.ids = selection.map(item => item.tableId); - this.tableNames = selection.map(item => item.tableName); - this.single = selection.length != 1; - this.multiple = !selection.length; - }, - /** 修改按钮操作 */ - handleEditTable(row) { - const tableId = row.tableId || this.ids[0]; - const tableName = row.tableName || this.tableNames[0]; - const params = { pageNum: this.queryParams.pageNum }; - this.$tab.openPage("修改[" + tableName + "]生成配置", '/tool/gen-edit/index/' + tableId, params); - }, - /** 删除按钮操作 */ - handleDelete(row) { - const tableIds = row.tableId || this.ids; - this.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?').then(function() { - return delTable(tableIds); - }).then(() => { - this.getList(); - this.$modal.msgSuccess("删除成功"); - }).catch(() => {}); - } - } -}; -</script> diff --git a/ruoyi-ui/src/views/tool/swagger/index.vue b/ruoyi-ui/src/views/tool/swagger/index.vue deleted file mode 100644 index b8becc6..0000000 --- a/ruoyi-ui/src/views/tool/swagger/index.vue +++ /dev/null @@ -1,15 +0,0 @@ -<template> - <i-frame :src="url" /> -</template> -<script> -import iFrame from "@/components/iFrame/index"; -export default { - name: "Swagger", - components: { iFrame }, - data() { - return { - url: process.env.VUE_APP_BASE_API + "/swagger-ui/index.html" - }; - }, -}; -</script> diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js deleted file mode 100644 index 85f3133..0000000 --- a/ruoyi-ui/vue.config.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict' -const path = require('path') - -function resolve(dir) { - return path.join(__dirname, dir) -} - -const CompressionPlugin = require('compression-webpack-plugin') - -const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题 - -const port = process.env.port || process.env.npm_config_port || 80 // 端口 - -// vue.config.js 配置说明 -//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions -// 这里只列一部分,具体配置参考文档 -module.exports = { - // 部署生产环境和开发环境下的URL。 - // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 - // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 - publicPath: process.env.NODE_ENV === "production" ? "/" : "/", - // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) - outputDir: 'dist', - // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) - assetsDir: 'static', - // 是否开启eslint保存检测,有效值:ture | false | 'error' - lintOnSave: process.env.NODE_ENV === 'development', - // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 - productionSourceMap: false, - // webpack-dev-server 相关配置 - devServer: { - host: '0.0.0.0', - port: port, - open: true, - proxy: { - // detail: https://cli.vuejs.org/config/#devserver-proxy - [process.env.VUE_APP_BASE_API]: { - target: `http://localhost:8080`, - changeOrigin: true, - pathRewrite: { - ['^' + process.env.VUE_APP_BASE_API]: '' - } - } - }, - disableHostCheck: true - }, - css: { - loaderOptions: { - sass: { - sassOptions: { outputStyle: "expanded" } - } - } - }, - configureWebpack: { - name: name, - resolve: { - alias: { - '@': resolve('src') - } - }, - plugins: [ - // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 - new CompressionPlugin({ - cache: false, // 不启用文件缓存 - test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式 - filename: '[path][base].gz[query]', // 压缩后的文件名 - algorithm: 'gzip', // 使用gzip压缩 - minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩 - deleteOriginalAssets: false // 压缩后删除原文件 - }) - ], - }, - chainWebpack(config) { - config.plugins.delete('preload') // TODO: need test - config.plugins.delete('prefetch') // TODO: need test - - // set svg-sprite-loader - config.module - .rule('svg') - .exclude.add(resolve('src/assets/icons')) - .end() - config.module - .rule('icons') - .test(/\.svg$/) - .include.add(resolve('src/assets/icons')) - .end() - .use('svg-sprite-loader') - .loader('svg-sprite-loader') - .options({ - symbolId: 'icon-[name]' - }) - .end() - - config.when(process.env.NODE_ENV !== 'development', config => { - config - .plugin('ScriptExtHtmlWebpackPlugin') - .after('html') - .use('script-ext-html-webpack-plugin', [{ - // `runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/ - }]) - .end() - - config.optimization.splitChunks({ - chunks: 'all', - cacheGroups: { - libs: { - name: 'chunk-libs', - test: /[\\/]node_modules[\\/]/, - priority: 10, - chunks: 'initial' // only package third parties that are initially dependent - }, - elementUI: { - name: 'chunk-elementUI', // split elementUI into a single package - test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm - priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app - }, - commons: { - name: 'chunk-commons', - test: resolve('src/components'), // can customize your rules - minChunks: 3, // minimum common number - priority: 5, - reuseExistingChunk: true - } - } - }) - config.optimization.runtimeChunk('single') - }) - } -} diff --git a/ry.bat b/ry.bat deleted file mode 100644 index ac1e437..0000000 --- a/ry.bat +++ /dev/null @@ -1,67 +0,0 @@ -@echo off - -rem jarƽ��Ŀ¼ -set AppName=ruoyi-admin.jar - -rem JVM���� -set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" - - -ECHO. - ECHO. [1] ����%AppName% - ECHO. [2] �ر�%AppName% - ECHO. [3] ����%AppName% - ECHO. [4] ����״̬ %AppName% - ECHO. [5] �� �� -ECHO. - -ECHO.������ѡ����Ŀ�����: -set /p ID= - IF "%id%"=="1" GOTO start - IF "%id%"=="2" GOTO stop - IF "%id%"=="3" GOTO restart - IF "%id%"=="4" GOTO status - IF "%id%"=="5" EXIT -PAUSE -:start - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if defined pid ( - echo %%is running - PAUSE - ) - -start javaw %JVM_OPTS% -jar %AppName% - -echo starting���� -echo Start %AppName% success... -goto:eof - -rem ����stopͨ��jps�������pid���������� -:stop - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if not defined pid (echo process %AppName% does not exists) else ( - echo prepare to kill %image_name% - echo start kill %pid% ... - rem ���ݽ���ID��kill���� - taskkill /f /pid %pid% - ) -goto:eof -:restart - call :stop - call :start -goto:eof -:status - for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( - set pid=%%a - set image_name=%%b - ) - if not defined pid (echo process %AppName% is dead ) else ( - echo %image_name% is running - ) -goto:eof diff --git a/ry.sh b/ry.sh deleted file mode 100644 index d6a9cf3..0000000 --- a/ry.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/sh -# ./ry.sh start 启动 stop 停止 restart 重启 status 状态 -AppName=ruoyi-admin.jar - -# JVM参数 -JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" -APP_HOME=`pwd` -LOG_PATH=$APP_HOME/logs/$AppName.log - -if [ "$1" = "" ]; -then - echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" - exit 1 -fi - -if [ "$AppName" = "" ]; -then - echo -e "\033[0;31m 未输入应用名 \033[0m" - exit 1 -fi - -function start() -{ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` - - if [ x"$PID" != x"" ]; then - echo "$AppName is running..." - else - nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 & - echo "Start $AppName success..." - fi -} - -function stop() -{ - echo "Stop $AppName" - - PID="" - query(){ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` - } - - query - if [ x"$PID" != x"" ]; then - kill -TERM $PID - echo "$AppName (pid:$PID) exiting..." - while [ x"$PID" != x"" ] - do - sleep 1 - query - done - echo "$AppName exited." - else - echo "$AppName already stopped." - fi -} - -function restart() -{ - stop - sleep 2 - start -} - -function status() -{ - PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l` - if [ $PID != 0 ];then - echo "$AppName is running..." - else - echo "$AppName is not running..." - fi -} - -case $1 in - start) - start;; - stop) - stop;; - restart) - restart;; - status) - status;; - *) - -esac diff --git a/sql/quartz.sql b/sql/quartz.sql deleted file mode 100644 index cee613b..0000000 --- a/sql/quartz.sql +++ /dev/null @@ -1,174 +0,0 @@ -DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; -DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; -DROP TABLE IF EXISTS QRTZ_LOCKS; -DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; -DROP TABLE IF EXISTS QRTZ_CALENDARS; - --- ---------------------------- --- 1、存储每一个已配置的 jobDetail 的详细信息 --- ---------------------------- -create table QRTZ_JOB_DETAILS ( - sched_name varchar(120) not null comment '调度名称', - job_name varchar(200) not null comment '任务名称', - job_group varchar(200) not null comment '任务组名', - description varchar(250) null comment '相关介绍', - job_class_name varchar(250) not null comment '执行任务类名称', - is_durable varchar(1) not null comment '是否持久化', - is_nonconcurrent varchar(1) not null comment '是否并发', - is_update_data varchar(1) not null comment '是否更新数据', - requests_recovery varchar(1) not null comment '是否接受恢复执行', - job_data blob null comment '存放持久化job对象', - primary key (sched_name, job_name, job_group) -) engine=innodb comment = '任务详细信息表'; - --- ---------------------------- --- 2、 存储已配置的 Trigger 的信息 --- ---------------------------- -create table QRTZ_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment '触发器的名字', - trigger_group varchar(200) not null comment '触发器所属组的名字', - job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键', - job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键', - description varchar(250) null comment '相关介绍', - next_fire_time bigint(13) null comment '上一次触发时间(毫秒)', - prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)', - priority integer null comment '优先级', - trigger_state varchar(16) not null comment '触发器状态', - trigger_type varchar(8) not null comment '触发器的类型', - start_time bigint(13) not null comment '开始时间', - end_time bigint(13) null comment '结束时间', - calendar_name varchar(200) null comment '日程表名称', - misfire_instr smallint(2) null comment '补偿执行的策略', - job_data blob null comment '存放持久化job对象', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group) -) engine=innodb comment = '触发器详细信息表'; - --- ---------------------------- --- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 --- ---------------------------- -create table QRTZ_SIMPLE_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - repeat_count bigint(7) not null comment '重复的次数统计', - repeat_interval bigint(12) not null comment '重复的间隔时间', - times_triggered bigint(10) not null comment '已经触发的次数', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = '简单触发器的信息表'; - --- ---------------------------- --- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 --- ---------------------------- -create table QRTZ_CRON_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - cron_expression varchar(200) not null comment 'cron表达式', - time_zone_id varchar(80) comment '时区', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = 'Cron类型的触发器表'; - --- ---------------------------- --- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) --- ---------------------------- -create table QRTZ_BLOB_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - blob_data blob null comment '存放持久化Trigger对象', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = 'Blob类型的触发器表'; - --- ---------------------------- --- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 --- ---------------------------- -create table QRTZ_CALENDARS ( - sched_name varchar(120) not null comment '调度名称', - calendar_name varchar(200) not null comment '日历名称', - calendar blob not null comment '存放持久化calendar对象', - primary key (sched_name, calendar_name) -) engine=innodb comment = '日历信息表'; - --- ---------------------------- --- 7、 存储已暂停的 Trigger 组的信息 --- ---------------------------- -create table QRTZ_PAUSED_TRIGGER_GRPS ( - sched_name varchar(120) not null comment '调度名称', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - primary key (sched_name, trigger_group) -) engine=innodb comment = '暂停的触发器表'; - --- ---------------------------- --- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 --- ---------------------------- -create table QRTZ_FIRED_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - entry_id varchar(95) not null comment '调度器实例id', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - instance_name varchar(200) not null comment '调度器实例名', - fired_time bigint(13) not null comment '触发的时间', - sched_time bigint(13) not null comment '定时器制定的时间', - priority integer not null comment '优先级', - state varchar(16) not null comment '状态', - job_name varchar(200) null comment '任务名称', - job_group varchar(200) null comment '任务组名', - is_nonconcurrent varchar(1) null comment '是否并发', - requests_recovery varchar(1) null comment '是否接受恢复执行', - primary key (sched_name, entry_id) -) engine=innodb comment = '已触发的触发器表'; - --- ---------------------------- --- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 --- ---------------------------- -create table QRTZ_SCHEDULER_STATE ( - sched_name varchar(120) not null comment '调度名称', - instance_name varchar(200) not null comment '实例名称', - last_checkin_time bigint(13) not null comment '上次检查时间', - checkin_interval bigint(13) not null comment '检查间隔时间', - primary key (sched_name, instance_name) -) engine=innodb comment = '调度器状态表'; - --- ---------------------------- --- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) --- ---------------------------- -create table QRTZ_LOCKS ( - sched_name varchar(120) not null comment '调度名称', - lock_name varchar(40) not null comment '悲观锁名称', - primary key (sched_name, lock_name) -) engine=innodb comment = '存储的悲观锁信息表'; - --- ---------------------------- --- 11、 Quartz集群实现同步机制的行锁表 --- ---------------------------- -create table QRTZ_SIMPROP_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', - str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', - str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', - int_prop_1 int null comment 'int类型的trigger的第一个参数', - int_prop_2 int null comment 'int类型的trigger的第二个参数', - long_prop_1 bigint null comment 'long类型的trigger的第一个参数', - long_prop_2 bigint null comment 'long类型的trigger的第二个参数', - dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', - dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', - bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', - bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', - primary key (sched_name, trigger_name, trigger_group), - foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) -) engine=innodb comment = '同步机制的行锁表'; - -commit; \ No newline at end of file diff --git a/sql/ry_20231130.sql b/sql/ry_20231130.sql deleted file mode 100644 index 452c2fc..0000000 --- a/sql/ry_20231130.sql +++ /dev/null @@ -1,700 +0,0 @@ --- ---------------------------- --- 1、部门表 --- ---------------------------- -drop table if exists sys_dept; -create table sys_dept ( - dept_id bigint(20) not null auto_increment comment '部门id', - parent_id bigint(20) default 0 comment '父部门id', - ancestors varchar(50) default '' comment '祖级列表', - dept_name varchar(30) default '' comment '部门名称', - order_num int(4) default 0 comment '显示顺序', - leader varchar(20) default null comment '负责人', - phone varchar(11) default null comment '联系电话', - email varchar(50) default null comment '邮箱', - status char(1) default '0' comment '部门状态(0正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - primary key (dept_id) -) engine=innodb auto_increment=200 comment = '部门表'; - --- ---------------------------- --- 初始化-部门表数据 --- ---------------------------- -insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); - - --- ---------------------------- --- 2、用户信息表 --- ---------------------------- -drop table if exists sys_user; -create table sys_user ( - user_id bigint(20) not null auto_increment comment '用户ID', - dept_id bigint(20) default null comment '部门ID', - user_name varchar(30) not null comment '用户账号', - nick_name varchar(30) not null comment '用户昵称', - user_type varchar(2) default '00' comment '用户类型(00系统用户)', - email varchar(50) default '' comment '用户邮箱', - phonenumber varchar(11) default '' comment '手机号码', - sex char(1) default '0' comment '用户性别(0男 1女 2未知)', - avatar varchar(100) default '' comment '头像地址', - password varchar(100) default '' comment '密码', - status char(1) default '0' comment '帐号状态(0正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - login_ip varchar(128) default '' comment '最后登录IP', - login_date datetime comment '最后登录时间', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (user_id) -) engine=innodb auto_increment=100 comment = '用户信息表'; - --- ---------------------------- --- 初始化-用户信息表数据 --- ---------------------------- -insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); -insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); - - --- ---------------------------- --- 3、岗位信息表 --- ---------------------------- -drop table if exists sys_post; -create table sys_post -( - post_id bigint(20) not null auto_increment comment '岗位ID', - post_code varchar(64) not null comment '岗位编码', - post_name varchar(50) not null comment '岗位名称', - post_sort int(4) not null comment '显示顺序', - status char(1) not null comment '状态(0正常 1停用)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (post_id) -) engine=innodb comment = '岗位信息表'; - --- ---------------------------- --- 初始化-岗位信息表数据 --- ---------------------------- -insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', sysdate(), '', null, ''); -insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', sysdate(), '', null, ''); -insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', sysdate(), '', null, ''); -insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', sysdate(), '', null, ''); - - --- ---------------------------- --- 4、角色信息表 --- ---------------------------- -drop table if exists sys_role; -create table sys_role ( - role_id bigint(20) not null auto_increment comment '角色ID', - role_name varchar(30) not null comment '角色名称', - role_key varchar(100) not null comment '角色权限字符串', - role_sort int(4) not null comment '显示顺序', - data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', - menu_check_strictly tinyint(1) default 1 comment '菜单树选择项是否关联显示', - dept_check_strictly tinyint(1) default 1 comment '部门树选择项是否关联显示', - status char(1) not null comment '角色状态(0正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (role_id) -) engine=innodb auto_increment=100 comment = '角色信息表'; - --- ---------------------------- --- 初始化-角色信息表数据 --- ---------------------------- -insert into sys_role values('1', '超级管理员', 'admin', 1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员'); -insert into sys_role values('2', '普通角色', 'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '普通角色'); - - --- ---------------------------- --- 5、菜单权限表 --- ---------------------------- -drop table if exists sys_menu; -create table sys_menu ( - menu_id bigint(20) not null auto_increment comment '菜单ID', - menu_name varchar(50) not null comment '菜单名称', - parent_id bigint(20) default 0 comment '父菜单ID', - order_num int(4) default 0 comment '显示顺序', - path varchar(200) default '' comment '路由地址', - component varchar(255) default null comment '组件路径', - query varchar(255) default null comment '路由参数', - is_frame int(1) default 1 comment '是否为外链(0是 1否)', - is_cache int(1) default 0 comment '是否缓存(0缓存 1不缓存)', - menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)', - visible char(1) default 0 comment '菜单状态(0显示 1隐藏)', - status char(1) default 0 comment '菜单状态(0正常 1停用)', - perms varchar(100) default null comment '权限标识', - icon varchar(100) default '#' comment '菜单图标', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default '' comment '备注', - primary key (menu_id) -) engine=innodb auto_increment=2000 comment = '菜单权限表'; - --- ---------------------------- --- 初始化-菜单信息表数据 --- ---------------------------- --- 一级菜单 -insert into sys_menu values('1', '系统管理', '0', '1', 'system', null, '', 1, 0, 'M', '0', '0', '', 'system', 'admin', sysdate(), '', null, '系统管理目录'); -insert into sys_menu values('2', '系统监控', '0', '2', 'monitor', null, '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', sysdate(), '', null, '系统监控目录'); -insert into sys_menu values('3', '系统工具', '0', '3', 'tool', null, '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', sysdate(), '', null, '系统工具目录'); -insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', null, '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', sysdate(), '', null, '若依官网地址'); --- 二级菜单 -insert into sys_menu values('100', '用户管理', '1', '1', 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', sysdate(), '', null, '用户管理菜单'); -insert into sys_menu values('101', '角色管理', '1', '2', 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', sysdate(), '', null, '角色管理菜单'); -insert into sys_menu values('102', '菜单管理', '1', '3', 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', sysdate(), '', null, '菜单管理菜单'); -insert into sys_menu values('103', '部门管理', '1', '4', 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', sysdate(), '', null, '部门管理菜单'); -insert into sys_menu values('104', '岗位管理', '1', '5', 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', sysdate(), '', null, '岗位管理菜单'); -insert into sys_menu values('105', '字典管理', '1', '6', 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', sysdate(), '', null, '字典管理菜单'); -insert into sys_menu values('106', '参数设置', '1', '7', 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', sysdate(), '', null, '参数设置菜单'); -insert into sys_menu values('107', '通知公告', '1', '8', 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', sysdate(), '', null, '通知公告菜单'); -insert into sys_menu values('108', '日志管理', '1', '9', 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', sysdate(), '', null, '日志管理菜单'); -insert into sys_menu values('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', sysdate(), '', null, '在线用户菜单'); -insert into sys_menu values('110', '定时任务', '2', '2', 'job', 'monitor/job/index', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', sysdate(), '', null, '定时任务菜单'); -insert into sys_menu values('111', '数据监控', '2', '3', 'druid', 'monitor/druid/index', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', sysdate(), '', null, '数据监控菜单'); -insert into sys_menu values('112', '服务监控', '2', '4', 'server', 'monitor/server/index', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', sysdate(), '', null, '服务监控菜单'); -insert into sys_menu values('113', '缓存监控', '2', '5', 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', sysdate(), '', null, '缓存监控菜单'); -insert into sys_menu values('114', '缓存列表', '2', '6', 'cacheList', 'monitor/cache/list', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', sysdate(), '', null, '缓存列表菜单'); -insert into sys_menu values('115', '表单构建', '3', '1', 'build', 'tool/build/index', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', sysdate(), '', null, '表单构建菜单'); -insert into sys_menu values('116', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', sysdate(), '', null, '代码生成菜单'); -insert into sys_menu values('117', '系统接口', '3', '3', 'swagger', 'tool/swagger/index', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', sysdate(), '', null, '系统接口菜单'); --- 三级菜单 -insert into sys_menu values('500', '操作日志', '108', '1', 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', sysdate(), '', null, '操作日志菜单'); -insert into sys_menu values('501', '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', sysdate(), '', null, '登录日志菜单'); --- 用户管理按钮 -insert into sys_menu values('1000', '用户查询', '100', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1001', '用户新增', '100', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1002', '用户修改', '100', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1003', '用户删除', '100', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1004', '用户导出', '100', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1005', '用户导入', '100', '6', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1006', '重置密码', '100', '7', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', sysdate(), '', null, ''); --- 角色管理按钮 -insert into sys_menu values('1007', '角色查询', '101', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1008', '角色新增', '101', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1009', '角色修改', '101', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1010', '角色删除', '101', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1011', '角色导出', '101', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', sysdate(), '', null, ''); --- 菜单管理按钮 -insert into sys_menu values('1012', '菜单查询', '102', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1013', '菜单新增', '102', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1014', '菜单修改', '102', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1015', '菜单删除', '102', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', sysdate(), '', null, ''); --- 部门管理按钮 -insert into sys_menu values('1016', '部门查询', '103', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1017', '部门新增', '103', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1018', '部门修改', '103', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1019', '部门删除', '103', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', sysdate(), '', null, ''); --- 岗位管理按钮 -insert into sys_menu values('1020', '岗位查询', '104', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1021', '岗位新增', '104', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1022', '岗位修改', '104', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1023', '岗位删除', '104', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1024', '岗位导出', '104', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', sysdate(), '', null, ''); --- 字典管理按钮 -insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', sysdate(), '', null, ''); --- 参数设置按钮 -insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', sysdate(), '', null, ''); --- 通知公告按钮 -insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', sysdate(), '', null, ''); --- 操作日志按钮 -insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1041', '日志导出', '500', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', sysdate(), '', null, ''); --- 登录日志按钮 -insert into sys_menu values('1042', '登录查询', '501', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1043', '登录删除', '501', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1044', '日志导出', '501', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1045', '账户解锁', '501', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', sysdate(), '', null, ''); --- 在线用户按钮 -insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, ''); --- 定时任务按钮 -insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1054', '任务导出', '110', '6', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', sysdate(), '', null, ''); --- 代码生成按钮 -insert into sys_menu values('1055', '生成查询', '116', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1056', '生成修改', '116', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1057', '生成删除', '116', '3', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1058', '导入代码', '116', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1059', '预览代码', '116', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1060', '生成代码', '116', '6', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', sysdate(), '', null, ''); - - --- ---------------------------- --- 6、用户和角色关联表 用户N-1角色 --- ---------------------------- -drop table if exists sys_user_role; -create table sys_user_role ( - user_id bigint(20) not null comment '用户ID', - role_id bigint(20) not null comment '角色ID', - primary key(user_id, role_id) -) engine=innodb comment = '用户和角色关联表'; - --- ---------------------------- --- 初始化-用户和角色关联表数据 --- ---------------------------- -insert into sys_user_role values ('1', '1'); -insert into sys_user_role values ('2', '2'); - - --- ---------------------------- --- 7、角色和菜单关联表 角色1-N菜单 --- ---------------------------- -drop table if exists sys_role_menu; -create table sys_role_menu ( - role_id bigint(20) not null comment '角色ID', - menu_id bigint(20) not null comment '菜单ID', - primary key(role_id, menu_id) -) engine=innodb comment = '角色和菜单关联表'; - --- ---------------------------- --- 初始化-角色和菜单关联表数据 --- ---------------------------- -insert into sys_role_menu values ('2', '1'); -insert into sys_role_menu values ('2', '2'); -insert into sys_role_menu values ('2', '3'); -insert into sys_role_menu values ('2', '4'); -insert into sys_role_menu values ('2', '100'); -insert into sys_role_menu values ('2', '101'); -insert into sys_role_menu values ('2', '102'); -insert into sys_role_menu values ('2', '103'); -insert into sys_role_menu values ('2', '104'); -insert into sys_role_menu values ('2', '105'); -insert into sys_role_menu values ('2', '106'); -insert into sys_role_menu values ('2', '107'); -insert into sys_role_menu values ('2', '108'); -insert into sys_role_menu values ('2', '109'); -insert into sys_role_menu values ('2', '110'); -insert into sys_role_menu values ('2', '111'); -insert into sys_role_menu values ('2', '112'); -insert into sys_role_menu values ('2', '113'); -insert into sys_role_menu values ('2', '114'); -insert into sys_role_menu values ('2', '115'); -insert into sys_role_menu values ('2', '116'); -insert into sys_role_menu values ('2', '117'); -insert into sys_role_menu values ('2', '500'); -insert into sys_role_menu values ('2', '501'); -insert into sys_role_menu values ('2', '1000'); -insert into sys_role_menu values ('2', '1001'); -insert into sys_role_menu values ('2', '1002'); -insert into sys_role_menu values ('2', '1003'); -insert into sys_role_menu values ('2', '1004'); -insert into sys_role_menu values ('2', '1005'); -insert into sys_role_menu values ('2', '1006'); -insert into sys_role_menu values ('2', '1007'); -insert into sys_role_menu values ('2', '1008'); -insert into sys_role_menu values ('2', '1009'); -insert into sys_role_menu values ('2', '1010'); -insert into sys_role_menu values ('2', '1011'); -insert into sys_role_menu values ('2', '1012'); -insert into sys_role_menu values ('2', '1013'); -insert into sys_role_menu values ('2', '1014'); -insert into sys_role_menu values ('2', '1015'); -insert into sys_role_menu values ('2', '1016'); -insert into sys_role_menu values ('2', '1017'); -insert into sys_role_menu values ('2', '1018'); -insert into sys_role_menu values ('2', '1019'); -insert into sys_role_menu values ('2', '1020'); -insert into sys_role_menu values ('2', '1021'); -insert into sys_role_menu values ('2', '1022'); -insert into sys_role_menu values ('2', '1023'); -insert into sys_role_menu values ('2', '1024'); -insert into sys_role_menu values ('2', '1025'); -insert into sys_role_menu values ('2', '1026'); -insert into sys_role_menu values ('2', '1027'); -insert into sys_role_menu values ('2', '1028'); -insert into sys_role_menu values ('2', '1029'); -insert into sys_role_menu values ('2', '1030'); -insert into sys_role_menu values ('2', '1031'); -insert into sys_role_menu values ('2', '1032'); -insert into sys_role_menu values ('2', '1033'); -insert into sys_role_menu values ('2', '1034'); -insert into sys_role_menu values ('2', '1035'); -insert into sys_role_menu values ('2', '1036'); -insert into sys_role_menu values ('2', '1037'); -insert into sys_role_menu values ('2', '1038'); -insert into sys_role_menu values ('2', '1039'); -insert into sys_role_menu values ('2', '1040'); -insert into sys_role_menu values ('2', '1041'); -insert into sys_role_menu values ('2', '1042'); -insert into sys_role_menu values ('2', '1043'); -insert into sys_role_menu values ('2', '1044'); -insert into sys_role_menu values ('2', '1045'); -insert into sys_role_menu values ('2', '1046'); -insert into sys_role_menu values ('2', '1047'); -insert into sys_role_menu values ('2', '1048'); -insert into sys_role_menu values ('2', '1049'); -insert into sys_role_menu values ('2', '1050'); -insert into sys_role_menu values ('2', '1051'); -insert into sys_role_menu values ('2', '1052'); -insert into sys_role_menu values ('2', '1053'); -insert into sys_role_menu values ('2', '1054'); -insert into sys_role_menu values ('2', '1055'); -insert into sys_role_menu values ('2', '1056'); -insert into sys_role_menu values ('2', '1057'); -insert into sys_role_menu values ('2', '1058'); -insert into sys_role_menu values ('2', '1059'); -insert into sys_role_menu values ('2', '1060'); - --- ---------------------------- --- 8、角色和部门关联表 角色1-N部门 --- ---------------------------- -drop table if exists sys_role_dept; -create table sys_role_dept ( - role_id bigint(20) not null comment '角色ID', - dept_id bigint(20) not null comment '部门ID', - primary key(role_id, dept_id) -) engine=innodb comment = '角色和部门关联表'; - --- ---------------------------- --- 初始化-角色和部门关联表数据 --- ---------------------------- -insert into sys_role_dept values ('2', '100'); -insert into sys_role_dept values ('2', '101'); -insert into sys_role_dept values ('2', '105'); - - --- ---------------------------- --- 9、用户与岗位关联表 用户1-N岗位 --- ---------------------------- -drop table if exists sys_user_post; -create table sys_user_post -( - user_id bigint(20) not null comment '用户ID', - post_id bigint(20) not null comment '岗位ID', - primary key (user_id, post_id) -) engine=innodb comment = '用户与岗位关联表'; - --- ---------------------------- --- 初始化-用户与岗位关联表数据 --- ---------------------------- -insert into sys_user_post values ('1', '1'); -insert into sys_user_post values ('2', '2'); - - --- ---------------------------- --- 10、操作日志记录 --- ---------------------------- -drop table if exists sys_oper_log; -create table sys_oper_log ( - oper_id bigint(20) not null auto_increment comment '日志主键', - title varchar(50) default '' comment '模块标题', - business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)', - method varchar(100) default '' comment '方法名称', - request_method varchar(10) default '' comment '请求方式', - operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)', - oper_name varchar(50) default '' comment '操作人员', - dept_name varchar(50) default '' comment '部门名称', - oper_url varchar(255) default '' comment '请求URL', - oper_ip varchar(128) default '' comment '主机地址', - oper_location varchar(255) default '' comment '操作地点', - oper_param varchar(2000) default '' comment '请求参数', - json_result varchar(2000) default '' comment '返回参数', - status int(1) default 0 comment '操作状态(0正常 1异常)', - error_msg varchar(2000) default '' comment '错误消息', - oper_time datetime comment '操作时间', - cost_time bigint(20) default 0 comment '消耗时间', - primary key (oper_id), - key idx_sys_oper_log_bt (business_type), - key idx_sys_oper_log_s (status), - key idx_sys_oper_log_ot (oper_time) -) engine=innodb auto_increment=100 comment = '操作日志记录'; - - --- ---------------------------- --- 11、字典类型表 --- ---------------------------- -drop table if exists sys_dict_type; -create table sys_dict_type -( - dict_id bigint(20) not null auto_increment comment '字典主键', - dict_name varchar(100) default '' comment '字典名称', - dict_type varchar(100) default '' comment '字典类型', - status char(1) default '0' comment '状态(0正常 1停用)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (dict_id), - unique (dict_type) -) engine=innodb auto_increment=100 comment = '字典类型表'; - -insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', sysdate(), '', null, '用户性别列表'); -insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', sysdate(), '', null, '菜单状态列表'); -insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', sysdate(), '', null, '系统开关列表'); -insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', sysdate(), '', null, '任务状态列表'); -insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', sysdate(), '', null, '任务分组列表'); -insert into sys_dict_type values(6, '系统是否', 'sys_yes_no', '0', 'admin', sysdate(), '', null, '系统是否列表'); -insert into sys_dict_type values(7, '通知类型', 'sys_notice_type', '0', 'admin', sysdate(), '', null, '通知类型列表'); -insert into sys_dict_type values(8, '通知状态', 'sys_notice_status', '0', 'admin', sysdate(), '', null, '通知状态列表'); -insert into sys_dict_type values(9, '操作类型', 'sys_oper_type', '0', 'admin', sysdate(), '', null, '操作类型列表'); -insert into sys_dict_type values(10, '系统状态', 'sys_common_status', '0', 'admin', sysdate(), '', null, '登录状态列表'); - - --- ---------------------------- --- 12、字典数据表 --- ---------------------------- -drop table if exists sys_dict_data; -create table sys_dict_data -( - dict_code bigint(20) not null auto_increment comment '字典编码', - dict_sort int(4) default 0 comment '字典排序', - dict_label varchar(100) default '' comment '字典标签', - dict_value varchar(100) default '' comment '字典键值', - dict_type varchar(100) default '' comment '字典类型', - css_class varchar(100) default null comment '样式属性(其他样式扩展)', - list_class varchar(100) default null comment '表格回显样式', - is_default char(1) default 'N' comment '是否默认(Y是 N否)', - status char(1) default '0' comment '状态(0正常 1停用)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (dict_code) -) engine=innodb auto_increment=100 comment = '字典数据表'; - -insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', sysdate(), '', null, '性别男'); -insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别女'); -insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '性别未知'); -insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单'); -insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '隐藏菜单'); -insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); -insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); -insert into sys_dict_data values(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', sysdate(), '', null, '默认分组'); -insert into sys_dict_data values(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', sysdate(), '', null, '系统分组'); -insert into sys_dict_data values(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是'); -insert into sys_dict_data values(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '系统默认否'); -insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知'); -insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', sysdate(), '', null, '公告'); -insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '关闭状态'); -insert into sys_dict_data values(18, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '其他操作'); -insert into sys_dict_data values(19, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '新增操作'); -insert into sys_dict_data values(20, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '修改操作'); -insert into sys_dict_data values(21, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '删除操作'); -insert into sys_dict_data values(22, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作'); -insert into sys_dict_data values(23, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作'); -insert into sys_dict_data values(24, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作'); -insert into sys_dict_data values(25, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '强退操作'); -insert into sys_dict_data values(26, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作'); -insert into sys_dict_data values(27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '清空操作'); -insert into sys_dict_data values(28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态'); -insert into sys_dict_data values(29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '停用状态'); - - --- ---------------------------- --- 13、参数配置表 --- ---------------------------- -drop table if exists sys_config; -create table sys_config ( - config_id int(5) not null auto_increment comment '参数主键', - config_name varchar(100) default '' comment '参数名称', - config_key varchar(100) default '' comment '参数键名', - config_value varchar(500) default '' comment '参数键值', - config_type char(1) default 'N' comment '系统内置(Y是 N否)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (config_id) -) engine=innodb auto_increment=100 comment = '参数配置表'; - -insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' ); -insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '初始化密码 123456' ); -insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' ); -insert into sys_config values(4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,false关闭)'); -insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)'); -insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)'); - - --- ---------------------------- --- 14、系统访问记录 --- ---------------------------- -drop table if exists sys_logininfor; -create table sys_logininfor ( - info_id bigint(20) not null auto_increment comment '访问ID', - user_name varchar(50) default '' comment '用户账号', - ipaddr varchar(128) default '' comment '登录IP地址', - login_location varchar(255) default '' comment '登录地点', - browser varchar(50) default '' comment '浏览器类型', - os varchar(50) default '' comment '操作系统', - status char(1) default '0' comment '登录状态(0成功 1失败)', - msg varchar(255) default '' comment '提示消息', - login_time datetime comment '访问时间', - primary key (info_id), - key idx_sys_logininfor_s (status), - key idx_sys_logininfor_lt (login_time) -) engine=innodb auto_increment=100 comment = '系统访问记录'; - - --- ---------------------------- --- 15、定时任务调度表 --- ---------------------------- -drop table if exists sys_job; -create table sys_job ( - job_id bigint(20) not null auto_increment comment '任务ID', - job_name varchar(64) default '' comment '任务名称', - job_group varchar(64) default 'DEFAULT' comment '任务组名', - invoke_target varchar(500) not null comment '调用目标字符串', - cron_expression varchar(255) default '' comment 'cron执行表达式', - misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)', - status char(1) default '0' comment '状态(0正常 1暂停)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default '' comment '备注信息', - primary key (job_id, job_name, job_group) -) engine=innodb auto_increment=100 comment = '定时任务调度表'; - -insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); -insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); -insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); - - --- ---------------------------- --- 16、定时任务调度日志表 --- ---------------------------- -drop table if exists sys_job_log; -create table sys_job_log ( - job_log_id bigint(20) not null auto_increment comment '任务日志ID', - job_name varchar(64) not null comment '任务名称', - job_group varchar(64) not null comment '任务组名', - invoke_target varchar(500) not null comment '调用目标字符串', - job_message varchar(500) comment '日志信息', - status char(1) default '0' comment '执行状态(0正常 1失败)', - exception_info varchar(2000) default '' comment '异常信息', - create_time datetime comment '创建时间', - primary key (job_log_id) -) engine=innodb comment = '定时任务调度日志表'; - - --- ---------------------------- --- 17、通知公告表 --- ---------------------------- -drop table if exists sys_notice; -create table sys_notice ( - notice_id int(4) not null auto_increment comment '公告ID', - notice_title varchar(50) not null comment '公告标题', - notice_type char(1) not null comment '公告类型(1通知 2公告)', - notice_content longblob default null comment '公告内容', - status char(1) default '0' comment '公告状态(0正常 1关闭)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(255) default null comment '备注', - primary key (notice_id) -) engine=innodb auto_increment=10 comment = '通知公告表'; - --- ---------------------------- --- 初始化-公告信息表数据 --- ---------------------------- -insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员'); -insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', sysdate(), '', null, '管理员'); - - --- ---------------------------- --- 18、代码生成业务表 --- ---------------------------- -drop table if exists gen_table; -create table gen_table ( - table_id bigint(20) not null auto_increment comment '编号', - table_name varchar(200) default '' comment '表名称', - table_comment varchar(500) default '' comment '表描述', - sub_table_name varchar(64) default null comment '关联子表的表名', - sub_table_fk_name varchar(64) default null comment '子表关联的外键名', - class_name varchar(100) default '' comment '实体类名称', - tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)', - tpl_web_type varchar(30) default '' comment '前端模板类型(element-ui模版 element-plus模版)', - package_name varchar(100) comment '生成包路径', - module_name varchar(30) comment '生成模块名', - business_name varchar(30) comment '生成业务名', - function_name varchar(50) comment '生成功能名', - function_author varchar(50) comment '生成功能作者', - gen_type char(1) default '0' comment '生成代码方式(0zip压缩包 1自定义路径)', - gen_path varchar(200) default '/' comment '生成路径(不填默认项目路径)', - options varchar(1000) comment '其它生成选项', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (table_id) -) engine=innodb auto_increment=1 comment = '代码生成业务表'; - - --- ---------------------------- --- 19、代码生成业务表字段 --- ---------------------------- -drop table if exists gen_table_column; -create table gen_table_column ( - column_id bigint(20) not null auto_increment comment '编号', - table_id bigint(20) comment '归属表编号', - column_name varchar(200) comment '列名称', - column_comment varchar(500) comment '列描述', - column_type varchar(100) comment '列类型', - java_type varchar(500) comment 'JAVA类型', - java_field varchar(200) comment 'JAVA字段名', - is_pk char(1) comment '是否主键(1是)', - is_increment char(1) comment '是否自增(1是)', - is_required char(1) comment '是否必填(1是)', - is_insert char(1) comment '是否为插入字段(1是)', - is_edit char(1) comment '是否编辑字段(1是)', - is_list char(1) comment '是否列表字段(1是)', - is_query char(1) comment '是否查询字段(1是)', - query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)', - html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', - dict_type varchar(200) default '' comment '字典类型', - sort int comment '排序', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - primary key (column_id) -) engine=innodb auto_increment=1 comment = '代码生成业务表字段'; \ No newline at end of file