├── .gitignore ├── README.md ├── backend ├── .gitignore ├── .idea │ ├── .gitignore │ ├── .name │ ├── compiler.xml │ ├── encodings.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── jarRepositories.xml │ ├── libraries │ │ ├── Maven__cn_hutool_hutool_all_5_5_7.xml │ │ ├── Maven__com_alibaba_fastjson_1_2_59.xml │ │ ├── Maven__com_baomidou_mybatis_plus_core_3_1_1.xml │ │ ├── Maven__com_fasterxml_jackson_core_jackson_databind_2_9_7.xml │ │ ├── Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_7.xml │ │ ├── Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_7.xml │ │ ├── Maven__com_github_binarywang_weixin_java_common_4_0_0.xml │ │ ├── Maven__com_github_binarywang_weixin_java_miniapp_4_0_0.xml │ │ ├── Maven__com_google_code_gson_gson_2_8_5.xml │ │ ├── Maven__com_thoughtworks_xstream_xstream_1_4_14.xml │ │ ├── Maven__commons_codec_commons_codec_1_11.xml │ │ ├── Maven__commons_io_commons_io_2_5.xml │ │ ├── Maven__io_netty_netty_buffer_4_1_29_Final.xml │ │ ├── Maven__javax_validation_validation_api_2_0_1_Final.xml │ │ ├── Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml │ │ ├── Maven__org_freemarker_freemarker_2_3_28.xml │ │ ├── Maven__org_reactivestreams_reactive_streams_1_0_2.xml │ │ ├── Maven__org_springframework_boot_spring_boot_starter_actuator_2_1_0_RELEASE.xml │ │ ├── Maven__org_springframework_data_spring_data_commons_2_1_2_RELEASE.xml │ │ ├── Maven__org_springframework_spring_core_5_1_2_RELEASE.xml │ │ ├── Maven__org_springframework_spring_tx_5_1_2_RELEASE.xml │ │ └── Maven__org_yaml_snakeyaml_1_23.xml │ ├── misc.xml │ ├── modules.xml │ └── vcs.xml ├── FEBS_FanK.iml ├── pom.xml └── src │ └── main │ ├── java │ └── cc │ │ └── mrbird │ │ └── febs │ │ ├── FebsApplication.java │ │ ├── common │ │ ├── annotation │ │ │ ├── IsCron.java │ │ │ ├── Limit.java │ │ │ └── Log.java │ │ ├── aspect │ │ │ ├── LimitAspect.java │ │ │ └── LogAspect.java │ │ ├── authentication │ │ │ ├── JWTFilter.java │ │ │ ├── JWTToken.java │ │ │ ├── JWTUtil.java │ │ │ ├── ShiroConfig.java │ │ │ └── ShiroRealm.java │ │ ├── config │ │ │ ├── AsyncExecutorPoolConfig.java │ │ │ ├── MyWebMvcConfigurerAdapter.java │ │ │ ├── MybatisPlusConfig.java │ │ │ ├── P6spySqlFormatConfig.java │ │ │ └── RedisConfig.java │ │ ├── controller │ │ │ └── BaseController.java │ │ ├── converter │ │ │ └── TimeConverter.java │ │ ├── domain │ │ │ ├── ActiveUser.java │ │ │ ├── FebsConstant.java │ │ │ ├── FebsResponse.java │ │ │ ├── LimitType.java │ │ │ ├── QueryRequest.java │ │ │ ├── RedisInfo.java │ │ │ ├── RegexpConstant.java │ │ │ ├── Tree.java │ │ │ └── router │ │ │ │ ├── RouterMeta.java │ │ │ │ └── VueRouter.java │ │ ├── exception │ │ │ ├── FebsException.java │ │ │ ├── LimitAccessException.java │ │ │ ├── RedisConnectException.java │ │ │ └── TokenTimeoutException.java │ │ ├── function │ │ │ ├── CacheSelector.java │ │ │ └── JedisExecutor.java │ │ ├── generator │ │ │ └── CodeGenerator.java │ │ ├── handler │ │ │ └── GlobalExceptionHandler.java │ │ ├── properties │ │ │ ├── FebsProperties.java │ │ │ └── ShiroProperties.java │ │ ├── runner │ │ │ ├── CacheInitRunner.java │ │ │ └── StartedUpRunner.java │ │ ├── service │ │ │ ├── CacheService.java │ │ │ ├── RedisService.java │ │ │ └── impl │ │ │ │ ├── CacheServiceImpl.java │ │ │ │ └── RedisServiceImpl.java │ │ ├── task │ │ │ └── CacheTask.java │ │ ├── utils │ │ │ ├── AddressUtil.java │ │ │ ├── DateUtil.java │ │ │ ├── EncryptUtil.java │ │ │ ├── FebsUtil.java │ │ │ ├── FileNameUtils.java │ │ │ ├── FileUtil.java │ │ │ ├── HttpContextUtil.java │ │ │ ├── HttpUtil.java │ │ │ ├── IPUtil.java │ │ │ ├── MD5Util.java │ │ │ ├── R.java │ │ │ ├── SortUtil.java │ │ │ ├── SpringContextUtil.java │ │ │ └── TreeUtil.java │ │ └── validator │ │ │ └── CronValidator.java │ │ ├── cos │ │ ├── controller │ │ │ ├── BulletinInfoController.java │ │ │ ├── CollectCommunityController.java │ │ │ ├── CollectRentController.java │ │ │ ├── CommunityInfoController.java │ │ │ ├── DeliveryReviewController.java │ │ │ ├── FileController.java │ │ │ ├── HouseInfoController.java │ │ │ ├── HousePriceTrendController.java │ │ │ ├── MessageInfoController.java │ │ │ ├── MessageRecordController.java │ │ │ ├── MessageTemplateController.java │ │ │ ├── PaymentRecordController.java │ │ │ ├── PostInfoController.java │ │ │ ├── RentChargeController.java │ │ │ ├── RentEvaluationController.java │ │ │ ├── RentInfoController.java │ │ │ ├── ReplyInfoController.java │ │ │ ├── StaffEvaluationController.java │ │ │ ├── StaffInfoController.java │ │ │ ├── SysCityController.java │ │ │ ├── UserInfoController.java │ │ │ └── po │ │ │ │ └── RentChargePo.java │ │ ├── dao │ │ │ ├── BulletinInfoMapper.java │ │ │ ├── CollectCommunityMapper.java │ │ │ ├── CollectRentMapper.java │ │ │ ├── CommunityInfoMapper.java │ │ │ ├── DeliveryReviewMapper.java │ │ │ ├── HouseInfoMapper.java │ │ │ ├── HousePriceTrendMapper.java │ │ │ ├── MessageInfoMapper.java │ │ │ ├── MessageRecordMapper.java │ │ │ ├── MessageTemplateMapper.java │ │ │ ├── PaymentRecordMapper.java │ │ │ ├── PostInfoMapper.java │ │ │ ├── RentChargeMapper.java │ │ │ ├── RentEvaluationMapper.java │ │ │ ├── RentInfoMapper.java │ │ │ ├── ReplyInfoMapper.java │ │ │ ├── StaffEvaluationMapper.java │ │ │ ├── StaffInfoMapper.java │ │ │ ├── SysCityMapper.java │ │ │ └── UserInfoMapper.java │ │ ├── entity │ │ │ ├── BulletinInfo.java │ │ │ ├── CollectCommunity.java │ │ │ ├── CollectRent.java │ │ │ ├── CommunityInfo.java │ │ │ ├── DeliveryReview.java │ │ │ ├── HouseInfo.java │ │ │ ├── HousePriceTrend.java │ │ │ ├── MessageInfo.java │ │ │ ├── MessageRecord.java │ │ │ ├── MessageTemplate.java │ │ │ ├── PaymentRecord.java │ │ │ ├── PostInfo.java │ │ │ ├── RentCharge.java │ │ │ ├── RentEvaluation.java │ │ │ ├── RentInfo.java │ │ │ ├── ReplyInfo.java │ │ │ ├── StaffEvaluation.java │ │ │ ├── StaffInfo.java │ │ │ ├── SysCity.java │ │ │ ├── UserInfo.java │ │ │ └── vo │ │ │ │ ├── ContractVo.java │ │ │ │ ├── DeliveryReviewVo.java │ │ │ │ ├── PriceTrendRankVo.java │ │ │ │ ├── RentChargeDetailVo.java │ │ │ │ ├── RentChargeEvaluationVo.java │ │ │ │ └── RentChargeVo.java │ │ └── service │ │ │ ├── IBulletinInfoService.java │ │ │ ├── ICollectCommunityService.java │ │ │ ├── ICollectRentService.java │ │ │ ├── ICommunityInfoService.java │ │ │ ├── IDeliveryReviewService.java │ │ │ ├── IHouseInfoService.java │ │ │ ├── IHousePriceTrendService.java │ │ │ ├── IMailService.java │ │ │ ├── IMessageInfoService.java │ │ │ ├── IMessageRecordService.java │ │ │ ├── IMessageTemplateService.java │ │ │ ├── IPaymentRecordService.java │ │ │ ├── IPostInfoService.java │ │ │ ├── IRentChargeService.java │ │ │ ├── IRentEvaluationService.java │ │ │ ├── IRentInfoService.java │ │ │ ├── IReplyInfoService.java │ │ │ ├── IStaffEvaluationService.java │ │ │ ├── IStaffInfoService.java │ │ │ ├── ISysCityService.java │ │ │ ├── IUserInfoService.java │ │ │ └── impl │ │ │ ├── BulletinInfoServiceImpl.java │ │ │ ├── CollectCommunityServiceImpl.java │ │ │ ├── CollectRentServiceImpl.java │ │ │ ├── CommunityInfoServiceImpl.java │ │ │ ├── DeliveryReviewServiceImpl.java │ │ │ ├── HouseInfoServiceImpl.java │ │ │ ├── HousePriceTrendServiceImpl.java │ │ │ ├── IMailServiceImpl.java │ │ │ ├── MessageInfoServiceImpl.java │ │ │ ├── MessageRecordServiceImpl.java │ │ │ ├── MessageTemplateServiceImpl.java │ │ │ ├── PaymentRecordServiceImpl.java │ │ │ ├── PostInfoServiceImpl.java │ │ │ ├── RentChargeServiceImpl.java │ │ │ ├── RentEvaluationServiceImpl.java │ │ │ ├── RentInfoServiceImpl.java │ │ │ ├── ReplyInfoServiceImpl.java │ │ │ ├── StaffEvaluationServiceImpl.java │ │ │ ├── StaffInfoServiceImpl.java │ │ │ ├── SysCityServiceImpl.java │ │ │ └── UserInfoServiceImpl.java │ │ ├── job │ │ ├── config │ │ │ └── ScheduleConfig.java │ │ ├── controller │ │ │ ├── JobController.java │ │ │ └── JobLogController.java │ │ ├── dao │ │ │ ├── JobLogMapper.java │ │ │ └── JobMapper.java │ │ ├── domain │ │ │ ├── Job.java │ │ │ └── JobLog.java │ │ ├── service │ │ │ ├── JobLogService.java │ │ │ ├── JobService.java │ │ │ └── impl │ │ │ │ ├── JobLogServiceImpl.java │ │ │ │ └── JobServiceImpl.java │ │ ├── task │ │ │ └── TestTask.java │ │ └── util │ │ │ ├── ScheduleJob.java │ │ │ ├── ScheduleRunnable.java │ │ │ └── ScheduleUtils.java │ │ ├── system │ │ ├── controller │ │ │ ├── DeptController.java │ │ │ ├── DictController.java │ │ │ ├── LogController.java │ │ │ ├── LoginController.java │ │ │ ├── MenuController.java │ │ │ ├── RedisController.java │ │ │ ├── RoleController.java │ │ │ ├── TestController.java │ │ │ └── UserController.java │ │ ├── dao │ │ │ ├── DeptMapper.java │ │ │ ├── DictMapper.java │ │ │ ├── LogMapper.java │ │ │ ├── LoginLogMapper.java │ │ │ ├── MenuMapper.java │ │ │ ├── RoleMapper.java │ │ │ ├── RoleMenuMapper.java │ │ │ ├── TestMapper.java │ │ │ ├── UserConfigMapper.java │ │ │ ├── UserMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── domain │ │ │ ├── Dept.java │ │ │ ├── Dict.java │ │ │ ├── LoginLog.java │ │ │ ├── Menu.java │ │ │ ├── Role.java │ │ │ ├── RoleMenu.java │ │ │ ├── SysLog.java │ │ │ ├── Test.java │ │ │ ├── User.java │ │ │ ├── UserConfig.java │ │ │ └── UserRole.java │ │ ├── manager │ │ │ └── UserManager.java │ │ └── service │ │ │ ├── DeptService.java │ │ │ ├── DictService.java │ │ │ ├── LogService.java │ │ │ ├── LoginLogService.java │ │ │ ├── MenuService.java │ │ │ ├── RoleMenuServie.java │ │ │ ├── RoleService.java │ │ │ ├── TestService.java │ │ │ ├── UserConfigService.java │ │ │ ├── UserRoleService.java │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ ├── DeptServiceImpl.java │ │ │ ├── DictServiceImpl.java │ │ │ ├── LogServiceImpl.java │ │ │ ├── LoginLogServiceImpl.java │ │ │ ├── MenuServiceImpl.java │ │ │ ├── RoleMenuServiceImpl.java │ │ │ ├── RoleServiceImpl.java │ │ │ ├── TestServiceImpl.java │ │ │ ├── UserConfigServiceImpl.java │ │ │ ├── UserRoleServiceImpl.java │ │ │ └── UserServiceImpl.java │ │ └── web │ │ └── controller │ │ ├── ArticleController.java │ │ ├── MovieController.java │ │ └── WeatherController.java │ └── resources │ ├── ValidationMessages.properties │ ├── application.yml │ ├── banner.txt │ ├── generator │ └── templates │ │ ├── controller.java.ftl │ │ ├── entity.java.ftl │ │ ├── mapper.java.ftl │ │ ├── mapper.xml.ftl │ │ ├── service.java.ftl │ │ └── serviceImpl.java.ftl │ ├── ip2region │ └── ip2region.db │ ├── logback-spring.xml │ ├── mapper │ ├── cos │ │ ├── BulletinInfoMapper.xml │ │ ├── CollectCommunityMapper.xml │ │ ├── CollectRentMapper.xml │ │ ├── CommunityInfoMapper.xml │ │ ├── DeliveryReviewMapper.xml │ │ ├── HouseInfoMapper.xml │ │ ├── HousePriceTrendMapper.xml │ │ ├── MessageInfoMapper.xml │ │ ├── MessageRecordMapper.xml │ │ ├── MessageTemplateMapper.xml │ │ ├── PaymentRecordMapper.xml │ │ ├── PostInfoMapper.xml │ │ ├── RentChargeMapper.xml │ │ ├── RentEvaluationMapper.xml │ │ ├── RentInfoMapper.xml │ │ ├── ReplyInfoMapper.xml │ │ ├── StaffEvaluationMapper.xml │ │ ├── StaffInfoMapper.xml │ │ ├── SysCityMapper.xml │ │ └── UserInfoMapper.xml │ ├── job │ │ └── JobMapper.xml │ └── system │ │ ├── LoginLogMapper.xml │ │ ├── MenuMapper.xml │ │ ├── RoleMapper.xml │ │ ├── UserMapper.xml │ │ └── UserRoleMapper.xml │ ├── spy.properties │ └── templates │ ├── email.html │ └── registerEmail.html ├── frontend ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .idea │ ├── codeStyles │ │ └── codeStyleConfig.xml │ ├── frontend.iml │ ├── modules.xml │ ├── vcs.xml │ └── workspace.xml ├── .postcssrc.js ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── FEBS.vue │ ├── components │ │ ├── checkbox │ │ │ ├── ColorCheckbox.vue │ │ │ └── ImgCheckbox.vue │ │ ├── datetime │ │ │ └── RangeDate.vue │ │ ├── exception │ │ │ ├── ExceptionPage.vue │ │ │ └── typeConfig.js │ │ ├── menu │ │ │ ├── Contextmenu.vue │ │ │ ├── SiderMenu.vue │ │ │ └── menu.js │ │ ├── setting │ │ │ ├── Setting.vue │ │ │ ├── SettingItem.vue │ │ │ └── StyleItem.vue │ │ └── tool │ │ │ └── Drawer.vue │ ├── main.js │ ├── router │ │ └── index.js │ ├── store │ │ ├── index.js │ │ └── modules │ │ │ ├── account.js │ │ │ └── setting.js │ ├── utils │ │ ├── color.js │ │ ├── common.js │ │ ├── device.js │ │ ├── install.js │ │ ├── localstorage.js │ │ ├── map │ │ │ ├── baiduMap.js │ │ │ ├── gisMap.js │ │ │ └── searchmap │ │ │ │ ├── drawerMap.vue │ │ │ │ └── index.vue │ │ ├── permissionDirect.js │ │ ├── request.js │ │ └── utils.less │ └── views │ │ ├── HomePage.vue │ │ ├── collect │ │ ├── community │ │ │ └── Community.vue │ │ └── rent │ │ │ └── Rent.vue │ │ ├── common │ │ ├── EmptyPageView.vue │ │ ├── GlobalFooter.vue │ │ ├── GlobalHeader.vue │ │ ├── GlobalLayout.vue │ │ ├── HeadInfo.vue │ │ ├── HeaderAvatar.vue │ │ ├── MenuView.vue │ │ ├── PageContent.vue │ │ ├── PageLayout.vue │ │ └── PageView.vue │ │ ├── error │ │ ├── 403.vue │ │ ├── 404.vue │ │ └── 500.vue │ │ ├── evaluation │ │ ├── rent │ │ │ └── Rent.vue │ │ └── staff │ │ │ └── Staff.vue │ │ ├── login │ │ ├── Common.vue │ │ ├── Login.vue │ │ ├── Regist.vue │ │ └── SIdentify.vue │ │ ├── manage │ │ ├── bulletin │ │ │ ├── Bulletin.vue │ │ │ ├── BulletinAdd.vue │ │ │ └── BulletinEdit.vue │ │ ├── city │ │ │ └── City.vue │ │ ├── community │ │ │ ├── CheckCommunity.vue │ │ │ ├── Community.vue │ │ │ ├── CommunityAdd.vue │ │ │ ├── CommunityEdit.vue │ │ │ └── CommunityView.vue │ │ ├── component │ │ │ ├── home │ │ │ │ └── Home.vue │ │ │ └── trend │ │ │ │ ├── TrendCommunity.vue │ │ │ │ ├── TrendProvince.vue │ │ │ │ └── TrendTop.vue │ │ ├── delivery │ │ │ ├── Delivery.vue │ │ │ ├── DeliveryAdd.vue │ │ │ └── DeliveryAudit.vue │ │ ├── house │ │ │ ├── House.vue │ │ │ ├── HouseAdd.vue │ │ │ ├── HouseEdit.vue │ │ │ └── HouseView.vue │ │ ├── message │ │ │ ├── Message.vue │ │ │ ├── MessageAdd.vue │ │ │ └── MessageEdit.vue │ │ ├── payment │ │ │ ├── Payment.vue │ │ │ └── PaymentView.vue │ │ ├── post │ │ │ ├── Post.vue │ │ │ └── PostView.vue │ │ ├── rent │ │ │ ├── Rent.vue │ │ │ ├── RentAdd.vue │ │ │ ├── RentEdit.vue │ │ │ └── RentView.vue │ │ ├── reply │ │ │ └── Reply.vue │ │ ├── trend │ │ │ ├── Trend.vue │ │ │ ├── TrendAdd.vue │ │ │ └── TrendEdit.vue │ │ ├── user │ │ │ ├── CheckUser.vue │ │ │ ├── User.vue │ │ │ └── UserView.vue │ │ └── worker │ │ │ ├── CheckWorker.vue │ │ │ ├── Worker.vue │ │ │ ├── WorkerAdd.vue │ │ │ └── WorkerEdit.vue │ │ ├── monitor │ │ ├── Httptrace.vue │ │ ├── JvmInfo.vue │ │ ├── Online.vue │ │ ├── RedisInfo.vue │ │ ├── RedisTerminal.vue │ │ ├── SystemInfo.vue │ │ ├── SystemLog.vue │ │ └── TomcatInfo.vue │ │ ├── others │ │ ├── Excel.vue │ │ └── ImportResult.vue │ │ ├── personal │ │ ├── Profile.vue │ │ ├── UpdateAvatar.vue │ │ ├── UpdatePassword.vue │ │ └── UpdateProfile.vue │ │ ├── quartz │ │ ├── job │ │ │ ├── Job.vue │ │ │ ├── JobAdd.vue │ │ │ └── JobEdit.vue │ │ └── log │ │ │ └── JobLog.vue │ │ ├── staff │ │ └── sale │ │ │ ├── RentView.vue │ │ │ └── Sale.vue │ │ ├── statistics │ │ ├── house │ │ │ └── House.vue │ │ └── map │ │ │ └── Map.vue │ │ ├── system │ │ ├── dept │ │ │ ├── Dept.vue │ │ │ ├── DeptAdd.vue │ │ │ ├── DeptEdit.vue │ │ │ └── DeptInputTree.vue │ │ ├── dict │ │ │ ├── Dict.vue │ │ │ ├── DictAdd.vue │ │ │ └── DictEdit.vue │ │ ├── menu │ │ │ ├── ButtonAdd.vue │ │ │ ├── ButtonEdit.vue │ │ │ ├── Icon.less │ │ │ ├── Icons.vue │ │ │ ├── Menu.vue │ │ │ ├── MenuAdd.vue │ │ │ └── MenuEdit.vue │ │ ├── role │ │ │ ├── Role.vue │ │ │ ├── RoleAdd.vue │ │ │ ├── RoleEdit.vue │ │ │ └── RoleInfo.vue │ │ └── user │ │ │ ├── User.vue │ │ │ ├── UserAdd.vue │ │ │ ├── UserEdit.vue │ │ │ ├── UserInfo.less │ │ │ └── UserInfo.vue │ │ ├── task │ │ ├── record │ │ │ ├── Record.vue │ │ │ ├── RecordAdd.vue │ │ │ └── RecordEdit.vue │ │ └── template │ │ │ ├── Template.vue │ │ │ ├── TemplateAdd.vue │ │ │ └── TemplateEdit.vue │ │ └── web │ │ ├── DailyArticle.vue │ │ ├── MovieComing.vue │ │ ├── MovieHot.vue │ │ └── Weather.vue ├── static │ ├── .gitkeep │ ├── avatar │ │ ├── 17e420c250804efe904a09a33796d5a10.jpg │ │ ├── 17e420c250804efe904a09a33796d5a16.jpg │ │ ├── 19034103295190235.jpg │ │ ├── 1d22f3e41d284f50b2c8fc32e0788698.jpeg │ │ ├── 20180414165754.jpg │ │ ├── 20180414165815.jpg │ │ ├── 20180414165821.jpg │ │ ├── 20180414165827.jpg │ │ ├── 20180414165834.jpg │ │ ├── 20180414165840.jpg │ │ ├── 20180414165846.jpg │ │ ├── 20180414165855.jpg │ │ ├── 20180414165909.jpg │ │ ├── 20180414165914.jpg │ │ ├── 20180414165920.jpg │ │ ├── 20180414165927.jpg │ │ ├── 20180414165936.jpg │ │ ├── 20180414165942.jpg │ │ ├── 20180414165947.jpg │ │ ├── 20180414165955.jpg │ │ ├── 20180414170003.jpg │ │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg │ │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4df.jpg │ │ ├── 496b3ace787342f7954b7045b8b06804.jpeg │ │ ├── 595ba7b05f2e485eb50565a50cb6cc3c.jpeg │ │ ├── 5997fedcc7bd4cffbd350b40d1b5b9824.jpg │ │ ├── 5997fedcc7bd4cffbd350b40d1b5b987.jpg │ │ ├── 87d8194bc9834e9f8f0228e9e530beb1.jpeg │ │ ├── 8f5b60ef00714a399ee544d331231820.jpeg │ │ ├── 964e40b005724165b8cf772355796c8c.jpeg │ │ ├── BiazfanxmamNRoxxVxka.png │ │ ├── WhxKECPNujWoWEFNdnJE.png │ │ ├── a3b10296862e40edb811418d64455d00.jpeg │ │ ├── a43456282d684e0b9319cf332f8ac468.jpeg │ │ ├── bba284ac05b041a8b8b0d1927868d5c9x.jpg │ │ ├── c7c4ee7be3eb4e73a19887dc713505145.jpg │ │ ├── cnrhVkzwxjPwAaCfPbdc.png │ │ ├── default.jpg │ │ ├── ff698bb2d25c4d218b3256b46c706ece.jpeg │ │ ├── gaOngJwsRYRaVAuXXcmB.png │ │ ├── jZUIxmJycoymBprLOUbT.png │ │ └── ubnKSIfAJTxIgXOKlciN.png │ ├── file │ │ └── city.json │ ├── img │ │ ├── favicon.ico │ │ ├── house.png │ │ ├── llll.jpg │ │ ├── logo-blue.png │ │ ├── logo.png │ │ ├── side-bar-dark.svg │ │ ├── side-bar-left.svg │ │ ├── side-bar-light.svg │ │ └── side-bar-top.svg │ └── less │ │ ├── Color.less │ │ └── Common.less ├── yarn-error.log └── yarn.lock └── web ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .idea ├── codeStyles │ └── codeStyleConfig.xml ├── inspectionProfiles │ └── Project_Default.xml ├── modules.xml ├── vcs.xml ├── web.iml └── workspace.xml ├── .postcssrc.js ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js ├── prod.env.js └── test.env.js ├── index.html ├── package-lock.json ├── package.json ├── src ├── FEBS.vue ├── components │ ├── checkbox │ │ ├── ColorCheckbox.vue │ │ └── ImgCheckbox.vue │ ├── datetime │ │ └── RangeDate.vue │ ├── exception │ │ ├── ExceptionPage.vue │ │ └── typeConfig.js │ ├── menu │ │ ├── Contextmenu.vue │ │ ├── SiderMenu.vue │ │ └── menu.js │ ├── setting │ │ ├── Setting.vue │ │ ├── SettingItem.vue │ │ └── StyleItem.vue │ └── tool │ │ └── Drawer.vue ├── main.js ├── router │ └── index.js ├── store │ ├── index.js │ └── modules │ │ ├── account.js │ │ └── setting.js ├── utils │ ├── color.js │ ├── common.js │ ├── device.js │ ├── install.js │ ├── localstorage.js │ ├── map │ │ ├── baiduMap.js │ │ ├── gisMap.js │ │ └── searchmap │ │ │ ├── drawerMap.vue │ │ │ └── index.vue │ ├── permissionDirect.js │ ├── request.js │ └── utils.less └── views │ ├── HomePage.vue │ ├── common │ ├── EmptyPageView.vue │ ├── GlobalFooter.vue │ ├── GlobalHeader.vue │ ├── GlobalLayout.vue │ ├── HeadInfo.vue │ ├── HeaderAvatar.vue │ ├── MenuView.vue │ ├── PageContent.vue │ ├── PageLayout.vue │ └── PageView.vue │ ├── error │ ├── 403.vue │ ├── 404.vue │ └── 500.vue │ ├── login │ ├── Common.vue │ ├── Login.vue │ └── Regist.vue │ ├── map │ └── Map.vue │ ├── monitor │ ├── Httptrace.vue │ ├── JvmInfo.vue │ ├── Online.vue │ ├── RedisInfo.vue │ ├── RedisTerminal.vue │ ├── SystemInfo.vue │ ├── SystemLog.vue │ └── TomcatInfo.vue │ ├── news │ ├── News.vue │ └── NewsDetail.vue │ ├── others │ ├── Excel.vue │ └── ImportResult.vue │ ├── personal │ ├── Profile.vue │ ├── UpdateAvatar.vue │ ├── UpdatePassword.vue │ └── UpdateProfile.vue │ ├── quartz │ ├── job │ │ ├── Job.vue │ │ ├── JobAdd.vue │ │ └── JobEdit.vue │ └── log │ │ └── JobLog.vue │ ├── rent │ └── Rent.vue │ ├── system │ ├── dept │ │ ├── Dept.vue │ │ ├── DeptAdd.vue │ │ ├── DeptEdit.vue │ │ └── DeptInputTree.vue │ ├── dict │ │ ├── Dict.vue │ │ ├── DictAdd.vue │ │ └── DictEdit.vue │ ├── menu │ │ ├── ButtonAdd.vue │ │ ├── ButtonEdit.vue │ │ ├── Icon.less │ │ ├── Icons.vue │ │ ├── Menu.vue │ │ ├── MenuAdd.vue │ │ └── MenuEdit.vue │ ├── role │ │ ├── Role.vue │ │ ├── RoleAdd.vue │ │ ├── RoleEdit.vue │ │ └── RoleInfo.vue │ └── user │ │ ├── User.vue │ │ ├── UserAdd.vue │ │ ├── UserEdit.vue │ │ ├── UserInfo.less │ │ └── UserInfo.vue │ ├── user │ ├── message │ │ └── Message.vue │ ├── personal │ │ └── Personal.vue │ └── rent │ │ ├── Rent.vue │ │ ├── RentAdd.vue │ │ ├── RentEdit.vue │ │ └── RentView.vue │ └── web │ ├── DailyArticle.vue │ ├── MovieComing.vue │ ├── MovieHot.vue │ └── Weather.vue ├── static ├── .gitkeep ├── avatar │ ├── 17e420c250804efe904a09a33796d5a10.jpg │ ├── 17e420c250804efe904a09a33796d5a16.jpg │ ├── 19034103295190235.jpg │ ├── 1d22f3e41d284f50b2c8fc32e0788698.jpeg │ ├── 20180414165754.jpg │ ├── 20180414165815.jpg │ ├── 20180414165821.jpg │ ├── 20180414165827.jpg │ ├── 20180414165834.jpg │ ├── 20180414165840.jpg │ ├── 20180414165846.jpg │ ├── 20180414165855.jpg │ ├── 20180414165909.jpg │ ├── 20180414165914.jpg │ ├── 20180414165920.jpg │ ├── 20180414165927.jpg │ ├── 20180414165936.jpg │ ├── 20180414165942.jpg │ ├── 20180414165947.jpg │ ├── 20180414165955.jpg │ ├── 20180414170003.jpg │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4df.jpg │ ├── 496b3ace787342f7954b7045b8b06804.jpeg │ ├── 595ba7b05f2e485eb50565a50cb6cc3c.jpeg │ ├── 5997fedcc7bd4cffbd350b40d1b5b9824.jpg │ ├── 5997fedcc7bd4cffbd350b40d1b5b987.jpg │ ├── 87d8194bc9834e9f8f0228e9e530beb1.jpeg │ ├── 8f5b60ef00714a399ee544d331231820.jpeg │ ├── 964e40b005724165b8cf772355796c8c.jpeg │ ├── BiazfanxmamNRoxxVxka.png │ ├── WhxKECPNujWoWEFNdnJE.png │ ├── a3b10296862e40edb811418d64455d00.jpeg │ ├── a43456282d684e0b9319cf332f8ac468.jpeg │ ├── bba284ac05b041a8b8b0d1927868d5c9x.jpg │ ├── c7c4ee7be3eb4e73a19887dc713505145.jpg │ ├── cnrhVkzwxjPwAaCfPbdc.png │ ├── default.jpg │ ├── ff698bb2d25c4d218b3256b46c706ece.jpeg │ ├── gaOngJwsRYRaVAuXXcmB.png │ ├── jZUIxmJycoymBprLOUbT.png │ └── ubnKSIfAJTxIgXOKlciN.png ├── css │ ├── 1362.css │ ├── lib.css │ └── style.css ├── file │ └── city.json ├── img │ ├── favicon.ico │ ├── living-room-1853203_1920.jpg │ ├── llll.jpg │ ├── logo-blue.png │ ├── logo.png │ ├── river-6968614.png │ ├── side-bar-dark.svg │ ├── side-bar-left.svg │ ├── side-bar-light.svg │ └── side-bar-top.svg └── less │ ├── Color.less │ └── Common.less ├── yarn-error.log └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /frontend/node_modules/ 2 | /web/node_modules/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### 基于SpringBoot的租房平台 2 | 3 | #### 安装环境 4 | 5 | JAVA 环境 6 | 7 | Node.js环境 [https://nodejs.org/en/] 选择14.17 8 | 9 | Yarn 打开cmd, 输入npm install -g yarn !!!必须安装完毕nodejs 10 | 11 | Mysql 数据库 [https://blog.csdn.net/qq_40303031/article/details/88935262] 一定要把账户和密码记住 12 | 13 | redis 14 | 15 | Idea 编译器 [https://blog.csdn.net/weixin_44505194/article/details/104452880] 16 | 17 | WebStorm OR VScode 编译器 [https://www.jianshu.com/p/d63b5bae9dff] 18 | 19 | 协同消息,公告信息,小区管理,房屋管理,房价走势,发帖记录,房屋出租,消息回复,城市管理,用户管理,地图看板,综合统计,消息模板,发送记录,员工管理,消息通知,缴费记录,交付审批,我的任务,房屋出租,已售房屋,用户收藏,房屋收藏,小区收藏,用户评价,租房评价,员工评价 20 | 21 | 22 | #### 采用技术及功能 23 | 24 | 后端:SpringBoot、MybatisPlus、MySQL、Redis、 25 | 前端:Vue、Apex、Antd、Axios 26 | 27 | #### 前台启动方式 28 | 安装所需文件 yarn install 29 | 运行 yarn run dev 30 | 31 | #### 后端启动方式 32 | 33 | 1.首先启动redis,进入redis目录终端。输入redis-server回车 34 | 2.导入sql文件,修改数据库与redis连接配置 35 | 3.idea中启动后端项目 36 | 37 | #### 默认后台账户密码 38 | [管理员] 39 | system 40 | 1234qwer 41 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Example user template template 3 | ### Example user template 4 | 5 | # IntelliJ project files 6 | .idea 7 | *.iml 8 | out 9 | gen 10 | /target/ 11 | /log/ 12 | -------------------------------------------------------------------------------- /backend/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /../../../../../:\Project\项目模板-VUE\backend\.idea/dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /backend/.idea/.name: -------------------------------------------------------------------------------- 1 | FEBS_FanK -------------------------------------------------------------------------------- /backend/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /backend/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__cn_hutool_hutool_all_5_5_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_alibaba_fastjson_1_2_59.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_baomidou_mybatis_plus_core_3_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_9_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_github_binarywang_weixin_java_common_4_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_github_binarywang_weixin_java_miniapp_4_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_google_code_gson_gson_2_8_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_14.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__commons_io_commons_io_2_5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__io_netty_netty_buffer_4_1_29_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_apache_shiro_shiro_crypto_hash_1_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_freemarker_freemarker_2_3_28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_actuator_2_1_0_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_1_2_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_springframework_spring_core_5_1_2_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_springframework_spring_tx_5_1_2_RELEASE.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /backend/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /backend/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /backend/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/FebsApplication.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs; 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication; 4 | import org.springframework.boot.builder.SpringApplicationBuilder; 5 | import org.springframework.scheduling.annotation.EnableAsync; 6 | import org.springframework.scheduling.annotation.EnableScheduling; 7 | import org.springframework.transaction.annotation.EnableTransactionManagement; 8 | 9 | @SpringBootApplication 10 | @EnableTransactionManagement 11 | @EnableScheduling 12 | @EnableAsync 13 | public class FebsApplication { 14 | 15 | public static void main(String[] args) { 16 | new SpringApplicationBuilder(FebsApplication.class) 17 | .run(args); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/annotation/IsCron.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.annotation; 2 | 3 | import cc.mrbird.febs.common.validator.CronValidator; 4 | 5 | import javax.validation.Constraint; 6 | import javax.validation.Payload; 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Target({ElementType.FIELD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Constraint(validatedBy = CronValidator.class) 15 | public @interface IsCron { 16 | 17 | String message(); 18 | 19 | Class[] groups() default {}; 20 | 21 | Class[] payload() default {}; 22 | } 23 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/annotation/Limit.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.annotation; 2 | 3 | import cc.mrbird.febs.common.domain.LimitType; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface Limit { 13 | 14 | // 资源名称,用于描述接口功能 15 | String name() default ""; 16 | 17 | // 资源 key 18 | String key() default ""; 19 | 20 | // key prefix 21 | String prefix() default ""; 22 | 23 | // 时间的,单位秒 24 | int period(); 25 | 26 | // 限制访问次数 27 | int count(); 28 | 29 | // 限制类型 30 | LimitType limitType() default LimitType.CUSTOMER; 31 | } 32 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/annotation/Log.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Log { 11 | String value() default ""; 12 | } 13 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/authentication/JWTToken.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.authentication; 2 | 3 | import lombok.Data; 4 | import org.apache.shiro.authc.AuthenticationToken; 5 | 6 | /** 7 | * JSON Web Token 8 | */ 9 | @Data 10 | public class JWTToken implements AuthenticationToken { 11 | 12 | private static final long serialVersionUID = 1282057025599826155L; 13 | 14 | private String token; 15 | 16 | private String exipreAt; 17 | 18 | public JWTToken(String token) { 19 | this.token = token; 20 | } 21 | 22 | public JWTToken(String token, String exipreAt) { 23 | this.token = token; 24 | this.exipreAt = exipreAt; 25 | } 26 | 27 | @Override 28 | public Object getPrincipal() { 29 | return token; 30 | } 31 | 32 | @Override 33 | public Object getCredentials() { 34 | return token; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/config/AsyncExecutorPoolConfig.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.scheduling.annotation.AsyncConfigurerSupport; 6 | import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 7 | 8 | import java.util.concurrent.Executor; 9 | import java.util.concurrent.ThreadPoolExecutor; 10 | 11 | @Configuration 12 | public class AsyncExecutorPoolConfig extends AsyncConfigurerSupport { 13 | @Bean 14 | public Executor taskExecutor() { 15 | ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 16 | 17 | executor.setCorePoolSize(5); 18 | executor.setMaxPoolSize(20); 19 | executor.setQueueCapacity(100); 20 | executor.setKeepAliveSeconds(30); 21 | executor.setThreadNamePrefix("asyncTaskExecutor-"); 22 | 23 | executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 24 | return executor; 25 | } 26 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/config/MyWebMvcConfigurerAdapter.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | @Configuration 8 | public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer { 9 | 10 | @Override 11 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 12 | registry.addResourceHandler("/imagesWeb/**").addResourceLocations("file:G:/Project/房屋租赁系统/file/"); 13 | WebMvcConfigurer.super.addResourceHandlers(registry); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/config/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.config; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Configuration 9 | @MapperScan(value = {"cc.mrbird.febs.*.dao"}) 10 | public class MybatisPlusConfig { 11 | 12 | /** 13 | * 分页插件 14 | */ 15 | @Bean 16 | public PaginationInterceptor paginationInterceptor() { 17 | return new PaginationInterceptor(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/config/P6spySqlFormatConfig.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.config; 2 | 3 | import cc.mrbird.febs.common.utils.DateUtil; 4 | import com.p6spy.engine.spy.appender.MessageFormattingStrategy; 5 | import org.apache.commons.lang3.StringUtils; 6 | 7 | import java.time.LocalDateTime; 8 | 9 | /** 10 | * 自定义 p6spy sql输出格式 11 | * 12 | * @author MrBird 13 | */ 14 | public class P6spySqlFormatConfig implements MessageFormattingStrategy { 15 | 16 | /** 17 | * 过滤掉定时任务的 SQL 18 | */ 19 | @Override 20 | public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) { 21 | return StringUtils.isNotBlank(sql) ? DateUtil.formatFullTime(LocalDateTime.now(), DateUtil.FULL_TIME_SPLIT_PATTERN) 22 | + " | 耗时 " + elapsed + " ms | SQL 语句:" + StringUtils.LF + sql.replaceAll("[\\s]+", StringUtils.SPACE) + ";" : ""; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.controller; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class BaseController { 9 | 10 | protected Map getDataTable(IPage pageInfo) { 11 | Map rspData = new HashMap<>(); 12 | rspData.put("rows", pageInfo.getRecords()); 13 | rspData.put("total", pageInfo.getTotal()); 14 | return rspData; 15 | } 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/converter/TimeConverter.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.converter; 2 | 3 | import cc.mrbird.febs.common.utils.DateUtil; 4 | import com.wuwenze.poi.convert.WriteConverter; 5 | import com.wuwenze.poi.exception.ExcelKitWriteConverterException; 6 | import lombok.extern.slf4j.Slf4j; 7 | 8 | /** 9 | * Execl导出时间类型字段格式化 10 | */ 11 | @Slf4j 12 | public class TimeConverter implements WriteConverter { 13 | @Override 14 | public String convert(Object value) throws ExcelKitWriteConverterException { 15 | try { 16 | if (value == null) 17 | return ""; 18 | else { 19 | return DateUtil.formatCSTTime(value.toString(), DateUtil.FULL_TIME_SPLIT_PATTERN); 20 | } 21 | } catch (Exception e) { 22 | log.error("时间转换异常", e); 23 | return ""; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/ActiveUser.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | import cc.mrbird.febs.common.utils.DateUtil; 4 | import com.fasterxml.jackson.annotation.JsonInclude; 5 | import lombok.Data; 6 | import org.apache.commons.lang3.RandomStringUtils; 7 | 8 | import java.io.Serializable; 9 | import java.time.LocalDateTime; 10 | 11 | /** 12 | * 在线用户 13 | */ 14 | @Data 15 | @JsonInclude(JsonInclude.Include.NON_NULL) 16 | public class ActiveUser implements Serializable { 17 | private static final long serialVersionUID = 2055229953429884344L; 18 | 19 | // 唯一编号 20 | private String id = RandomStringUtils.randomAlphanumeric(20); 21 | // 用户名 22 | private String username; 23 | // ip地址 24 | private String ip; 25 | // token(加密后) 26 | private String token; 27 | // 登录时间 28 | private String loginTime = DateUtil.formatFullTime(LocalDateTime.now(),DateUtil.FULL_TIME_SPLIT_PATTERN); 29 | // 登录地点 30 | private String loginAddress; 31 | } 32 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/FebsResponse.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | import java.util.HashMap; 4 | 5 | public class FebsResponse extends HashMap { 6 | 7 | private static final long serialVersionUID = -8713837118340960775L; 8 | 9 | public FebsResponse message(String message) { 10 | this.put("message", message); 11 | return this; 12 | } 13 | 14 | public FebsResponse data(Object data) { 15 | this.put("data", data); 16 | return this; 17 | } 18 | 19 | @Override 20 | public FebsResponse put(String key, Object value) { 21 | super.put(key, value); 22 | return this; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/LimitType.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | public enum LimitType { 4 | // 传统类型 5 | CUSTOMER, 6 | // 根据 IP 限制 7 | IP; 8 | } 9 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/QueryRequest.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | import lombok.Data; 4 | import lombok.ToString; 5 | 6 | import java.io.Serializable; 7 | 8 | @Data 9 | public class QueryRequest implements Serializable { 10 | 11 | private static final long serialVersionUID = -4869594085374385813L; 12 | 13 | private int pageSize = 10; 14 | private int pageNum = 1; 15 | 16 | private String sortField; 17 | private String sortOrder; 18 | } 19 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/RegexpConstant.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | /** 4 | * 正则常量 5 | */ 6 | public class RegexpConstant { 7 | 8 | // 简单手机号正则(这里只是简单校验是否为11位,实际规则很复杂) 9 | public static final String MOBILE_REG = "[1]\\d{10}"; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/Tree.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | import java.util.ArrayList; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | @Data 12 | @JsonInclude(JsonInclude.Include.NON_NULL) 13 | public class Tree { 14 | 15 | private String id; 16 | 17 | private String key; 18 | 19 | private String icon; 20 | 21 | private String title; 22 | 23 | private String value; 24 | 25 | private String text; 26 | 27 | private String permission; 28 | 29 | private String type; 30 | 31 | private Double order; 32 | 33 | private String path; 34 | 35 | private String component; 36 | 37 | private List> children; 38 | 39 | private String parentId; 40 | 41 | private boolean hasParent = false; 42 | 43 | private boolean hasChildren = false; 44 | 45 | private Date createTime; 46 | 47 | private Date modifyTime; 48 | 49 | public void initChildren(){ 50 | this.children = new ArrayList<>(); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/router/RouterMeta.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain.router; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * Vue路由 Meta 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | @JsonInclude(JsonInclude.Include.NON_NULL) 15 | public class RouterMeta implements Serializable { 16 | 17 | private static final long serialVersionUID = 5499925008927195914L; 18 | 19 | private Boolean closeable; 20 | 21 | private Boolean isShow; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/domain/router/VueRouter.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.domain.router; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonInclude; 5 | import lombok.Data; 6 | import lombok.ToString; 7 | 8 | import java.io.Serializable; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * 构建 Vue路由 14 | */ 15 | @Data 16 | @JsonInclude(JsonInclude.Include.NON_NULL) 17 | public class VueRouter implements Serializable { 18 | 19 | private static final long serialVersionUID = -3327478146308500708L; 20 | 21 | @JsonIgnore 22 | private String id; 23 | 24 | @JsonIgnore 25 | private String parentId; 26 | 27 | private String path; 28 | 29 | private String name; 30 | 31 | private String component; 32 | 33 | private String icon; 34 | 35 | private String redirect; 36 | 37 | private RouterMeta meta; 38 | 39 | private List> children; 40 | 41 | @JsonIgnore 42 | private boolean hasParent = false; 43 | 44 | @JsonIgnore 45 | private boolean hasChildren = false; 46 | 47 | public void initChildren(){ 48 | this.children = new ArrayList<>(); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/exception/FebsException.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.exception; 2 | 3 | /** 4 | * FEBS 系统内部异常 5 | */ 6 | public class FebsException extends Exception { 7 | 8 | private static final long serialVersionUID = -994962710559017255L; 9 | 10 | public FebsException(String message) { 11 | super(message); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/exception/LimitAccessException.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.exception; 2 | 3 | /** 4 | * 限流异常 5 | */ 6 | public class LimitAccessException extends Exception { 7 | 8 | private static final long serialVersionUID = -3608667856397125671L; 9 | 10 | public LimitAccessException(String message) { 11 | super(message); 12 | } 13 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/exception/RedisConnectException.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.exception; 2 | 3 | /** 4 | * Redis 连接异常 5 | */ 6 | public class RedisConnectException extends Exception { 7 | 8 | private static final long serialVersionUID = 1639374111871115063L; 9 | 10 | public RedisConnectException(String message) { 11 | super(message); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/exception/TokenTimeoutException.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.exception; 2 | 3 | import org.apache.shiro.authc.AuthenticationException; 4 | 5 | /** 6 | * token过期抛出这个 7 | */ 8 | public class TokenTimeoutException extends AuthenticationException { 9 | 10 | private static final long serialVersionUID = -8313101744886192005L; 11 | 12 | public TokenTimeoutException(String message) { 13 | super(message); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/function/CacheSelector.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.function; 2 | 3 | @FunctionalInterface 4 | public interface CacheSelector { 5 | T select() throws Exception; 6 | } 7 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/function/JedisExecutor.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.function; 2 | 3 | import cc.mrbird.febs.common.exception.RedisConnectException; 4 | 5 | @FunctionalInterface 6 | public interface JedisExecutor { 7 | R excute(T t) throws RedisConnectException; 8 | } 9 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/properties/FebsProperties.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Data 8 | @Configuration 9 | @ConfigurationProperties(prefix = "febs") 10 | public class FebsProperties { 11 | 12 | private ShiroProperties shiro = new ShiroProperties(); 13 | 14 | private boolean openAopLog = true; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/properties/ShiroProperties.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.properties; 2 | 3 | public class ShiroProperties { 4 | 5 | private String anonUrl; 6 | 7 | /** 8 | * token默认有效时间 1天 9 | */ 10 | private Long jwtTimeOut = 86400L; 11 | 12 | public String getAnonUrl() { 13 | return anonUrl; 14 | } 15 | 16 | public void setAnonUrl(String anonUrl) { 17 | this.anonUrl = anonUrl; 18 | } 19 | 20 | public Long getJwtTimeOut() { 21 | return jwtTimeOut; 22 | } 23 | 24 | public void setJwtTimeOut(Long jwtTimeOut) { 25 | this.jwtTimeOut = jwtTimeOut; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/runner/StartedUpRunner.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.runner; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.boot.ApplicationArguments; 6 | import org.springframework.boot.ApplicationRunner; 7 | import org.springframework.context.ConfigurableApplicationContext; 8 | import org.springframework.core.annotation.Order; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.time.LocalDateTime; 12 | 13 | @Order 14 | @Slf4j 15 | @Component 16 | public class StartedUpRunner implements ApplicationRunner { 17 | 18 | @Autowired 19 | private ConfigurableApplicationContext context; 20 | 21 | @Override 22 | public void run(ApplicationArguments args) { 23 | if (context.isActive()) { 24 | log.info(" __ ___ _ ___ _ ____ _____ ____ "); 25 | log.info("/ /` / / \\ | |\\/| | |_) | | | |_ | | | |_ "); 26 | log.info("\\_\\_, \\_\\_/ |_| | |_| |_|__ |_|__ |_| |_|__ "); 27 | log.info(" "); 28 | log.info("FANK 启动完毕,时间:" + LocalDateTime.now()); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/task/CacheTask.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.task; 2 | 3 | import cc.mrbird.febs.common.domain.FebsConstant; 4 | import cc.mrbird.febs.common.service.RedisService; 5 | import cc.mrbird.febs.common.utils.DateUtil; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.scheduling.annotation.Scheduled; 9 | import org.springframework.stereotype.Component; 10 | 11 | import java.time.LocalDateTime; 12 | 13 | /** 14 | * 主要用于定时删除 Redis中 key为 febs.user.active 中 15 | * 已经过期的 score 16 | */ 17 | @Slf4j 18 | @Component 19 | public class CacheTask { 20 | 21 | @Autowired 22 | private RedisService redisService; 23 | 24 | @Scheduled(fixedRate = 3600000) 25 | public void run() { 26 | try { 27 | String now = DateUtil.formatFullTime(LocalDateTime.now()); 28 | redisService.zremrangeByScore(FebsConstant.ACTIVE_USERS_ZSET_PREFIX, "-inf", now); 29 | log.info("delete expired user"); 30 | } catch (Exception ignore) { 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/utils/FileNameUtils.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.utils; 2 | 3 | import java.util.Date; 4 | 5 | public class FileNameUtils { 6 | 7 | /** 8 | * 获取文件后缀 9 | * @param fileName 10 | * @return 11 | */ 12 | public static String getSuffix(String fileName){ 13 | return fileName.substring(fileName.lastIndexOf(".")); 14 | } 15 | 16 | /** 17 | * 生成新的文件名 18 | * @param fileOriginName 源文件名 19 | * @return 20 | */ 21 | public static String getFileName(String fileOriginName){ 22 | return ("SA" + new Date().getTime()+ FileNameUtils.getSuffix(fileOriginName)); 23 | } 24 | 25 | /** 26 | * 生成新的文件名 27 | * @param fileOriginName 源文件名 28 | * @return 29 | */ 30 | public static String getFileNameByVideo(String fileOriginName){ 31 | return ("OA" + new Date().getTime()+ FileNameUtils.getSuffix(fileOriginName)); 32 | } 33 | 34 | /** 35 | * 生成新的文件名 36 | * @param fileOriginName 37 | * @return 38 | */ 39 | public static String getFileNameByZip(String fileOriginName) { 40 | return ("7Z" + new Date().getTime()+ FileNameUtils.getSuffix(fileOriginName)); 41 | } 42 | 43 | 44 | } 45 | 46 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/utils/HttpContextUtil.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.utils; 2 | 3 | import org.springframework.web.context.request.RequestContextHolder; 4 | import org.springframework.web.context.request.ServletRequestAttributes; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | import java.util.Objects; 8 | 9 | public class HttpContextUtil { 10 | 11 | private HttpContextUtil(){ 12 | 13 | } 14 | public static HttpServletRequest getHttpServletRequest() { 15 | return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/utils/IPUtil.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.utils; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | public class IPUtil { 6 | 7 | private static final String UNKNOWN = "unknown"; 8 | 9 | protected IPUtil(){ 10 | 11 | } 12 | 13 | /** 14 | * 获取 IP地址 15 | * 使用 Nginx等反向代理软件, 则不能通过 request.getRemoteAddr()获取 IP地址 16 | * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址, 17 | * X-Forwarded-For中第一个非 unknown的有效IP字符串,则为真实IP地址 18 | */ 19 | public static String getIpAddr(HttpServletRequest request) { 20 | String ip = request.getHeader("x-forwarded-for"); 21 | if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { 22 | ip = request.getHeader("Proxy-Client-IP"); 23 | } 24 | if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { 25 | ip = request.getHeader("WL-Proxy-Client-IP"); 26 | } 27 | if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { 28 | ip = request.getRemoteAddr(); 29 | } 30 | return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/utils/MD5Util.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.utils; 2 | 3 | import org.apache.shiro.crypto.hash.SimpleHash; 4 | import org.apache.shiro.util.ByteSource; 5 | 6 | public class MD5Util { 7 | 8 | protected MD5Util(){ 9 | 10 | } 11 | 12 | private static final String ALGORITH_NAME = "md5"; 13 | 14 | private static final int HASH_ITERATIONS = 2; 15 | 16 | public static String encrypt(String password) { 17 | return new SimpleHash(ALGORITH_NAME, password, ByteSource.Util.bytes(password), HASH_ITERATIONS).toHex(); 18 | } 19 | 20 | public static String encrypt(String username, String password) { 21 | return new SimpleHash(ALGORITH_NAME, password, ByteSource.Util.bytes(username.toLowerCase() + password), 22 | HASH_ITERATIONS).toHex(); 23 | } 24 | 25 | public static void main(String[] args) { 26 | System.out.println(encrypt("mrbird","1234qwer")); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/common/validator/CronValidator.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.common.validator; 2 | 3 | import cc.mrbird.febs.common.annotation.IsCron; 4 | import org.quartz.CronExpression; 5 | 6 | import javax.validation.ConstraintValidator; 7 | import javax.validation.ConstraintValidatorContext; 8 | 9 | /** 10 | * 校验是否为合法的 Cron表达式 11 | */ 12 | public class CronValidator implements ConstraintValidator { 13 | 14 | @Override 15 | public void initialize(IsCron isCron) { 16 | } 17 | 18 | @Override 19 | public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { 20 | try { 21 | return CronExpression.isValidExpression(value); 22 | } catch (Exception e) { 23 | return false; 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/controller/po/RentChargePo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.controller.po; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class RentChargePo implements Serializable { 9 | 10 | /** 11 | * 员工编号 12 | */ 13 | private String staffCode; 14 | 15 | /** 16 | * 状态(1.在售 2.已售 3.下架) 17 | */ 18 | private Integer planStatus; 19 | 20 | /** 21 | * 小区编号 22 | */ 23 | private String communityCode; 24 | 25 | /** 26 | * 小区名称 27 | */ 28 | private String communityName; 29 | 30 | /** 31 | * 房屋编号 32 | */ 33 | private String houseCode; 34 | 35 | /** 36 | * 所属商圈 37 | */ 38 | private String businessDistrict; 39 | 40 | /** 41 | * 所属省 42 | */ 43 | private String province; 44 | 45 | /** 46 | * 所属市 47 | */ 48 | private String city; 49 | 50 | /** 51 | * 所属区域 52 | */ 53 | private String area; 54 | } 55 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/BulletinInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.BulletinInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface BulletinInfoMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取公告信息 18 | * @param page 分页对象 19 | * @param bulletinInfo 公告信息 20 | * @return 结果 21 | */ 22 | IPage> getBulletinByPage(Page page, @Param("bulletinInfo") BulletinInfo bulletinInfo); 23 | } 24 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/CollectCommunityMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectCommunity; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface CollectCommunityMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取收藏信息 18 | * 19 | * @param page 分页对象 20 | * @param collectCommunity 收藏信息 21 | * @return 结果 22 | */ 23 | IPage> selectCollectPage(Page page, @Param("collectCommunity") CollectCommunity collectCommunity); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/CollectRentMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectRent; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface CollectRentMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取收藏信息 18 | * 19 | * @param page 分页对象 20 | * @param collectRent 收藏信息 21 | * @return 结果 22 | */ 23 | IPage> selectCollectPage(Page page, @Param("collectRent") CollectRent collectRent); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/CommunityInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.CommunityInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface CommunityInfoMapper extends BaseMapper { 16 | 17 | /** 18 | * 分页获取小区信息 19 | * 20 | * @param page 分页对象 21 | * @param communityInfo 小区信息 22 | * @return 结果 23 | */ 24 | IPage> selectCommunityPage(Page page, @Param("communityInfo") CommunityInfo communityInfo); 25 | 26 | /** 27 | * 远程获取小区信息 28 | * 29 | * @param name 小区信息 30 | * @return 结果 31 | */ 32 | List> remoteCommunity(@Param("name") String name); 33 | 34 | /** 35 | * 根据小区编号获取租房信息 36 | * 37 | * @param code 小区编号 38 | * @return 结果 39 | */ 40 | List> selectHouseRentByCode(@Param("code") String code); 41 | 42 | } 43 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/HouseInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.HouseInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface HouseInfoMapper extends BaseMapper { 16 | 17 | /** 18 | * 分页获取房屋信息 19 | * 20 | * @param page 分页对象 21 | * @param houseInfo 房屋信息 22 | * @return 结果 23 | */ 24 | IPage> selectHousePage(Page page, @Param("houseInfo") HouseInfo houseInfo); 25 | 26 | /** 27 | * 远程调用房屋信息 28 | * 29 | * @param ownerCode 业主编号 30 | * @return 结果 31 | */ 32 | List> remoteHouse(@Param("ownerCode") String ownerCode, @Param("address") String address); 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/HousePriceTrendMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.HousePriceTrend; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface HousePriceTrendMapper extends BaseMapper { 16 | 17 | /** 18 | * 分页获取房价走势信息 19 | * 20 | * @param page 分页对象 21 | * @param housePriceTrend 房价走势信息 22 | * @return 结果 23 | */ 24 | IPage> selectPriceTrendPage(Page page, @Param("housePriceTrend") HousePriceTrend housePriceTrend); 25 | 26 | /** 27 | * 根据小区编号获取房价走势 28 | * 29 | * @param communityCode 小区编号 30 | * @return 结果 31 | */ 32 | List selectPriceTrendByCommunityCode(@Param("communityCode") String communityCode); 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/MessageInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface MessageInfoMapper extends BaseMapper { 16 | 17 | /** 18 | * 分页查询消息信息 19 | * 20 | * @param page 分页对象 21 | * @param messageInfo 参数 22 | * @return 结果 23 | */ 24 | IPage> selectMessagePage(Page page, @Param("messageInfo") MessageInfo messageInfo); 25 | 26 | /** 27 | * 根据用户编号获取消息信息 28 | * 29 | * @param userCode 用户编号 30 | * @return 结果 31 | */ 32 | List> selectMessageByUser(@Param("userCode") String userCode); 33 | 34 | /** 35 | * 根据用户编号获取消息信息 36 | * 37 | * @param userCode 用户编号 38 | * @return 结果 39 | */ 40 | List> selectMessageList(@Param("userCode") String userCode); 41 | } 42 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/MessageRecordMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageRecord; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface MessageRecordMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页查询消息发送记录 18 | * 19 | * @param page 分页对象 20 | * @param messageRecord 参数 21 | * @return 结果 22 | */ 23 | IPage> selectMessageRecordPage(Page page, @Param("messageRecord") MessageRecord messageRecord); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/MessageTemplateMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageTemplate; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | /** 7 | * @author FanK 8 | */ 9 | public interface MessageTemplateMapper extends BaseMapper { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/PaymentRecordMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.PaymentRecord; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.math.BigDecimal; 10 | import java.util.LinkedHashMap; 11 | import java.util.List; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | public interface PaymentRecordMapper extends BaseMapper { 17 | 18 | /** 19 | * 分页获取缴费记录 20 | * 21 | * @param page 分页对象 22 | * @param paymentRecord 参数 23 | * @return 结果 24 | */ 25 | IPage> selectRecordPage(Page page, @Param("paymentRecord") PaymentRecord paymentRecord); 26 | 27 | /** 28 | * 本月收入 29 | * 30 | * @return 结果 31 | */ 32 | BigDecimal selectAmount(); 33 | 34 | /** 35 | * 查询本月押金交付次数 36 | * 37 | * @return 结果 38 | */ 39 | Integer selectRentStartByMonth(); 40 | 41 | /** 42 | * 近十天收入统计 43 | * 44 | * @return 结果 45 | */ 46 | List> selectLastRentPayment(); 47 | } 48 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/RentEvaluationMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.RentEvaluation; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface RentEvaluationMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取租房评价信息 18 | * 19 | * @param page 分页对象 20 | * @param rentEvaluation 租房评价信息 21 | * @return 结果 22 | */ 23 | IPage> selectRentEvaluationPage(Page page, @Param("rentEvaluation") RentEvaluation rentEvaluation); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/ReplyInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.ReplyInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface ReplyInfoMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取帖子回复消息信息 18 | * 19 | * @param page 分页对象 20 | * @param replyInfo 帖子回复消息信息 21 | * @return 结果 22 | */ 23 | IPage> selectReplyPage(Page page, @Param("replyInfo") ReplyInfo replyInfo); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/StaffEvaluationMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.StaffEvaluation; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface StaffEvaluationMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页获取员工评价信息 18 | * 19 | * @param page 分页对象 20 | * @param staffEvaluation 员工评价信息 21 | * @return 结果 22 | */ 23 | IPage> selectStaffEvaluationPage(Page page, @Param("staffEvaluation") StaffEvaluation staffEvaluation); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/StaffInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.StaffInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface StaffInfoMapper extends BaseMapper { 15 | 16 | /** 17 | * 获取员工分页信息 18 | * 19 | * @param page 分页对象 20 | * @param staffInfo 员工信息 21 | * @return 结果 22 | */ 23 | IPage> selectStaffPage(Page page, @Param("staffInfo") StaffInfo staffInfo); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/SysCityMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.SysCity; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import io.lettuce.core.dynamic.annotation.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface SysCityMapper extends BaseMapper { 15 | 16 | /** 17 | * 分页查询城市信息 18 | * @param page 分页信息 19 | * @param sysCity 城市信息 20 | * @return 城市信息列表 21 | */ 22 | IPage> getCityByPage(Page page, @Param("sysCity") SysCity sysCity); 23 | } 24 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/dao/UserInfoMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.dao; 2 | 3 | import cc.mrbird.febs.cos.entity.UserInfo; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface UserInfoMapper extends BaseMapper { 16 | 17 | /** 18 | * 分页查询用户信息 19 | * 20 | * @param page 分页对象 21 | * @param userInfo 用户信息 22 | * @return 结果 23 | */ 24 | IPage> getUserInfoByPage(Page page, @Param("userInfo") UserInfo userInfo); 25 | 26 | /** 27 | * 远程调用用户信息 28 | * 29 | * @param userName 用户名称 30 | * @return 结果 31 | */ 32 | List> remote(@Param("userName") String userName); 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/BulletinInfo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.time.LocalDateTime; 4 | import java.io.Serializable; 5 | 6 | import com.baomidou.mybatisplus.annotation.IdType; 7 | import com.baomidou.mybatisplus.annotation.TableId; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import lombok.experimental.Accessors; 11 | 12 | /** 13 | * 公告信息 14 | * 15 | * @author FanK 16 | */ 17 | @Data 18 | @EqualsAndHashCode(callSuper = false) 19 | @Accessors(chain = true) 20 | public class BulletinInfo implements Serializable { 21 | 22 | /** 23 | * 主键ID 24 | */ 25 | @TableId(type = IdType.AUTO) 26 | private Integer id; 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | /** 31 | * 标题 32 | */ 33 | private String title; 34 | 35 | /** 36 | * 内容 37 | */ 38 | private String content; 39 | 40 | /** 41 | * 公告时间 42 | */ 43 | private String date; 44 | 45 | /** 46 | * 图册 47 | */ 48 | private String images; 49 | 50 | /** 51 | * 发布人 52 | */ 53 | private String publisher; 54 | 55 | /** 56 | * 上下架(0.下架 1.发布) 57 | */ 58 | private Integer rackUp; 59 | 60 | /** 61 | * 消息类型(1.画报 2.导购 3.新盘发布) 62 | */ 63 | private Integer type; 64 | } 65 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/CollectCommunity.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.time.LocalDateTime; 4 | import java.io.Serializable; 5 | 6 | import com.baomidou.mybatisplus.annotation.IdType; 7 | import com.baomidou.mybatisplus.annotation.TableId; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import lombok.experimental.Accessors; 11 | 12 | /** 13 | * 小区收藏 14 | * 15 | * @author FanK 16 | */ 17 | @Data 18 | @EqualsAndHashCode(callSuper = false) 19 | @Accessors(chain = true) 20 | public class CollectCommunity implements Serializable { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键ID 26 | */ 27 | @TableId(type = IdType.AUTO) 28 | private Integer id; 29 | 30 | /** 31 | * 用户编号 32 | */ 33 | private String userCode; 34 | 35 | /** 36 | * 小区编号 37 | */ 38 | private String communityCode; 39 | 40 | /** 41 | * 创建时间 42 | */ 43 | private String createDate; 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/CollectRent.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.time.LocalDateTime; 4 | import java.io.Serializable; 5 | 6 | import com.baomidou.mybatisplus.annotation.IdType; 7 | import com.baomidou.mybatisplus.annotation.TableId; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import lombok.experimental.Accessors; 11 | 12 | /** 13 | * 房屋收藏 14 | * 15 | * @author FanK 16 | */ 17 | @Data 18 | @EqualsAndHashCode(callSuper = false) 19 | @Accessors(chain = true) 20 | public class CollectRent implements Serializable { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键ID 26 | */ 27 | @TableId(type = IdType.AUTO) 28 | private Integer id; 29 | 30 | /** 31 | * 用户编号 32 | */ 33 | private String userCode; 34 | 35 | /** 36 | * 出租信息 37 | */ 38 | private Integer rentId; 39 | 40 | /** 41 | * 创建时间 42 | */ 43 | private String createDate; 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/HousePriceTrend.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.math.BigDecimal; 4 | import java.time.LocalDate; 5 | import java.io.Serializable; 6 | 7 | import com.baomidou.mybatisplus.annotation.IdType; 8 | import com.baomidou.mybatisplus.annotation.TableField; 9 | import com.baomidou.mybatisplus.annotation.TableId; 10 | import lombok.Data; 11 | import lombok.EqualsAndHashCode; 12 | import lombok.experimental.Accessors; 13 | 14 | /** 15 | * 房价走势 16 | * 17 | * @author FanK 18 | */ 19 | @Data 20 | @EqualsAndHashCode(callSuper = false) 21 | @Accessors(chain = true) 22 | public class HousePriceTrend implements Serializable { 23 | 24 | /** 25 | * 主键ID 26 | */ 27 | @TableId(type = IdType.AUTO) 28 | private Integer id; 29 | 30 | private static final long serialVersionUID = 1L; 31 | 32 | /** 33 | * 所属小区 34 | */ 35 | private String communityCode; 36 | 37 | /** 38 | * 房屋均价 39 | */ 40 | private BigDecimal housePrice; 41 | 42 | /** 43 | * 统计时间 44 | */ 45 | private String createDate; 46 | 47 | private String year; 48 | 49 | private String month; 50 | 51 | @TableField(exist = false) 52 | private String communityName; 53 | } 54 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/MessageTemplate.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.time.LocalDateTime; 4 | import java.io.Serializable; 5 | 6 | import com.baomidou.mybatisplus.annotation.IdType; 7 | import com.baomidou.mybatisplus.annotation.TableId; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import lombok.experimental.Accessors; 11 | 12 | /** 13 | * 消息模板 14 | * 15 | * @author FanK 16 | */ 17 | @Data 18 | @EqualsAndHashCode(callSuper = false) 19 | @Accessors(chain = true) 20 | public class MessageTemplate implements Serializable { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 主键ID 26 | */ 27 | @TableId(type = IdType.AUTO) 28 | private Integer id; 29 | 30 | /** 31 | * 消息标题 32 | */ 33 | private String title; 34 | 35 | /** 36 | * 消息内容 37 | */ 38 | private String content; 39 | 40 | /** 41 | * 创建时间 42 | */ 43 | private String createDate; 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/SysCity.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity; 2 | 3 | import java.io.Serializable; 4 | 5 | import com.baomidou.mybatisplus.annotation.IdType; 6 | import com.baomidou.mybatisplus.annotation.TableId; 7 | import lombok.Data; 8 | import lombok.EqualsAndHashCode; 9 | import lombok.experimental.Accessors; 10 | 11 | /** 12 | * 全国城市数据 13 | * 14 | * @author FanK 15 | */ 16 | @Data 17 | @EqualsAndHashCode(callSuper = false) 18 | @Accessors(chain = true) 19 | public class SysCity implements Serializable { 20 | 21 | private static final long serialVersionUID = 1L; 22 | 23 | /** 24 | * 主键ID 25 | */ 26 | @TableId(type = IdType.AUTO) 27 | private Integer id; 28 | 29 | /** 30 | * 城市 31 | */ 32 | private String name; 33 | 34 | /** 35 | * 父级 36 | */ 37 | private Integer parentId; 38 | 39 | private String initial; 40 | 41 | private String initials; 42 | 43 | private String pinyin; 44 | 45 | private String extra; 46 | 47 | private String suffix; 48 | 49 | private String code; 50 | 51 | private String areaCode; 52 | 53 | private Integer orderBy; 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/vo/DeliveryReviewVo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity.vo; 2 | 3 | import cc.mrbird.febs.cos.entity.DeliveryReview; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import lombok.Data; 6 | 7 | @Data 8 | public class DeliveryReviewVo extends DeliveryReview { 9 | 10 | private String city; 11 | 12 | private String area; 13 | 14 | private String province; 15 | 16 | private String rentUserAvatar; 17 | 18 | private String ownerUserName; 19 | 20 | private String ownerUserAvatar; 21 | 22 | private String communityName; 23 | 24 | private String houseAddress; 25 | 26 | private boolean deliveryOver; 27 | 28 | private boolean rentOver; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/vo/PriceTrendRankVo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | public class PriceTrendRankVo implements Serializable { 10 | 11 | private String name; 12 | 13 | private BigDecimal trend; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/vo/RentChargeDetailVo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | public class RentChargeDetailVo implements Serializable { 10 | 11 | private String rentId; 12 | 13 | /** 14 | * 交管ID 15 | */ 16 | private Integer chargeId; 17 | 18 | /** 19 | * 员工编号 20 | */ 21 | private String staffCode; 22 | 23 | /** 24 | * 租房用户 25 | */ 26 | private String rentUserCode; 27 | 28 | /** 29 | * 房屋所属业主 30 | */ 31 | private String ownerUserCode; 32 | 33 | /** 34 | * 房屋编号 35 | */ 36 | private String houseCode; 37 | 38 | /** 39 | * 员工姓名 40 | */ 41 | private String staffName; 42 | 43 | /** 44 | * 小区名称 45 | */ 46 | private String communityName; 47 | 48 | /** 49 | * 所属省 50 | */ 51 | private String province; 52 | 53 | /** 54 | * 所属市 55 | */ 56 | private String city; 57 | 58 | /** 59 | * 所属区域 60 | */ 61 | private String area; 62 | 63 | /** 64 | * 房租/月 65 | */ 66 | private BigDecimal contractPrice; 67 | } 68 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/vo/RentChargeEvaluationVo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RentChargeEvaluationVo { 7 | 8 | private Integer rentId; 9 | 10 | private String houseCode; 11 | 12 | private String userCode; 13 | 14 | private String staffCode; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/entity/vo/RentChargeVo.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.entity.vo; 2 | 3 | import cc.mrbird.febs.cos.entity.RentCharge; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | 10 | /** 11 | * 租房负责返回信息 12 | */ 13 | @EqualsAndHashCode(callSuper = true) 14 | @Data 15 | public class RentChargeVo extends RentCharge implements Serializable { 16 | 17 | private String houseAddress; 18 | 19 | private String indoorMap; 20 | 21 | private Integer decorationType; 22 | 23 | private Integer houseType; 24 | 25 | private String tags; 26 | 27 | private String communityName; 28 | 29 | private String businessDistrict; 30 | 31 | private String province; 32 | 33 | private String city; 34 | 35 | private String area; 36 | 37 | private String rentPrice; 38 | 39 | private BigDecimal longitude; 40 | 41 | private BigDecimal latitude; 42 | 43 | private String checkYear; 44 | 45 | private String checkMonth; 46 | 47 | private Integer flag; 48 | 49 | } 50 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IBulletinInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.BulletinInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | import java.util.LinkedHashMap; 9 | 10 | /** 11 | * @author FanK 12 | */ 13 | public interface IBulletinInfoService extends IService { 14 | 15 | /** 16 | * 分页获取公告信息 17 | * @param page 分页对象 18 | * @param bulletinInfo 公告信息 19 | * @return 结果 20 | */ 21 | IPage> getBulletinByPage(Page page, BulletinInfo bulletinInfo); 22 | } 23 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/ICollectCommunityService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectCommunity; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface ICollectCommunityService extends IService { 15 | 16 | /** 17 | * 分页获取收藏信息 18 | * 19 | * @param page 分页对象 20 | * @param collectCommunity 收藏信息 21 | * @return 结果 22 | */ 23 | IPage> selectCollectPage(Page page, CollectCommunity collectCommunity); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/ICollectRentService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectRent; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface ICollectRentService extends IService { 15 | 16 | /** 17 | * 分页获取收藏信息 18 | * 19 | * @param page 分页对象 20 | * @param collectRent 收藏信息 21 | * @return 结果 22 | */ 23 | IPage> selectCollectPage(Page page, CollectRent collectRent); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IHouseInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.HouseInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IHouseInfoService extends IService { 16 | 17 | /** 18 | * 分页获取房屋信息 19 | * 20 | * @param page 分页对象 21 | * @param houseInfo 房屋信息 22 | * @return 结果 23 | */ 24 | IPage> selectHousePage(Page page, HouseInfo houseInfo); 25 | 26 | /** 27 | * 远程调用房屋信息 28 | * 29 | * @param ownerCode 业主编号 30 | * @return 结果 31 | */ 32 | List> remoteHouse(String ownerCode, String address); 33 | 34 | /** 35 | * 统计各省份数据 36 | * 37 | * @return 结果 38 | */ 39 | List> selectHouseInfoByProvince(); 40 | } 41 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IMailService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | public interface IMailService { 4 | 5 | /** 6 | * 发送文本邮件 7 | * @param to 收件人 8 | * @param subject 主题 9 | * @param content 内容 10 | */ 11 | void sendSimpleMail(String to, String subject, String content); 12 | 13 | /** 14 | * 发送HTML邮件 15 | * @param to 收件人 16 | * @param subject 主题 17 | * @param content 内容 18 | */ 19 | void sendHtmlMail(String to, String subject, String content); 20 | 21 | 22 | 23 | /** 24 | * 发送带附件的邮件 25 | * @param to 收件人 26 | * @param subject 主题 27 | * @param content 内容 28 | * @param filePath 附件 29 | */ 30 | void sendAttachmentsMail(String to, String subject, String content, String filePath); 31 | } 32 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IMessageInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IMessageInfoService extends IService { 16 | 17 | /** 18 | * 分页查询消息信息 19 | * 20 | * @param page 分页对象 21 | * @param messageInfo 参数 22 | * @return 结果 23 | */ 24 | IPage> selectMessagePage(Page page, MessageInfo messageInfo); 25 | 26 | /** 27 | * 根据用户编号获取消息信息 28 | * 29 | * @param userCode 用户编号 30 | * @return 结果 31 | */ 32 | List> selectMessageByUser(String userCode); 33 | 34 | /** 35 | * 根据用户获取未读消息 36 | * 37 | * @param userId 用户ID 38 | * @param roleId 角色ID 39 | * @return 结果 40 | */ 41 | List> selectMessageList(Integer userId, Integer roleId); 42 | } 43 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IMessageRecordService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageRecord; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface IMessageRecordService extends IService { 15 | 16 | /** 17 | * 分页查询消息发送记录 18 | * 19 | * @param page 分页对象 20 | * @param messageRecord 参数 21 | * @return 结果 22 | */ 23 | IPage> selectMessageRecordPage(Page page, MessageRecord messageRecord); 24 | 25 | /** 26 | * 发送消息 27 | * 28 | * @param messageRecord 消息信息 29 | * @return 结果 30 | */ 31 | boolean send(MessageRecord messageRecord); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IMessageTemplateService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageTemplate; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | /** 7 | * @author FanK 8 | */ 9 | public interface IMessageTemplateService extends IService { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IPaymentRecordService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.PaymentRecord; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface IPaymentRecordService extends IService { 15 | 16 | /** 17 | * 分页获取缴费记录 18 | * 19 | * @param page 分页对象 20 | * @param paymentRecord 参数 21 | * @return 结果 22 | */ 23 | IPage> selectRecordPage(Page page, PaymentRecord paymentRecord); 24 | 25 | /** 26 | * 添加缴费信息 27 | * 28 | * @param paymentRecord 缴费信息 29 | * @return 结果 30 | */ 31 | boolean savePaymentRecord(PaymentRecord paymentRecord); 32 | 33 | /** 34 | * 缴费前查询合同信息 35 | * @param contractCode 合同编号 36 | * @return 结果 37 | */ 38 | LinkedHashMap selectContract(String contractCode); 39 | } 40 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IRentEvaluationService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.RentEvaluation; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.math.BigDecimal; 10 | import java.util.LinkedHashMap; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IRentEvaluationService extends IService { 16 | 17 | /** 18 | * 分页获取租房评价信息 19 | * 20 | * @param page 分页对象 21 | * @param rentEvaluation 租房评价信息 22 | * @return 结果 23 | */ 24 | IPage> selectRentEvaluationPage(Page page, RentEvaluation rentEvaluation); 25 | 26 | /** 27 | * 获取房屋评价信息 28 | * 29 | * @param houseCode 房屋编号 30 | * @return 结果 31 | */ 32 | LinkedHashMap selectEvaluationByHouse(String houseCode); 33 | 34 | /** 35 | * 获取小区评价信息 36 | * 37 | * @param communityCode 小区编号 38 | * @return 结果 39 | */ 40 | LinkedHashMap selectEvaluationByCommunity(String communityCode); 41 | } 42 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IRentInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.RentCharge; 4 | import cc.mrbird.febs.cos.entity.RentInfo; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import com.baomidou.mybatisplus.extension.service.IService; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.LinkedHashMap; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IRentInfoService extends IService { 16 | 17 | /** 18 | * 分页获取出租信息信息 19 | * 20 | * @param page 分页对象 21 | * @param rentInfo 出租信息信息 22 | * @return 结果 23 | */ 24 | IPage> selectRentPage(Page page, RentInfo rentInfo); 25 | 26 | /** 27 | * 获取租房状态 28 | * 29 | * @param rentId 租房ID 30 | * @return 结果 31 | */ 32 | RentCharge selectRentStatus(String rentId); 33 | 34 | /** 35 | * 获取首页数据 36 | * 37 | * @return 结果 38 | */ 39 | LinkedHashMap selectHomeData(); 40 | } 41 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IReplyInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.ReplyInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | 11 | /** 12 | * @author FanK 13 | */ 14 | public interface IReplyInfoService extends IService { 15 | 16 | /** 17 | * 分页获取帖子回复消息信息 18 | * 19 | * @param page 分页对象 20 | * @param replyInfo 帖子回复消息信息 21 | * @return 结果 22 | */ 23 | IPage> selectReplyPage(Page page, ReplyInfo replyInfo); 24 | } 25 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IStaffEvaluationService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.StaffEvaluation; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.math.BigDecimal; 10 | import java.util.LinkedHashMap; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IStaffEvaluationService extends IService { 16 | 17 | /** 18 | * 分页获取员工评价信息 19 | * 20 | * @param page 分页对象 21 | * @param staffEvaluation 员工评价信息 22 | * @return 结果 23 | */ 24 | IPage> selectStaffEvaluationPage(Page page, StaffEvaluation staffEvaluation); 25 | 26 | /** 27 | * 根据员工编号获取员工评价 28 | * 29 | * @param staffCode 员工编号 30 | * @return 结果 31 | */ 32 | BigDecimal selectStaffScoreByCode(String staffCode); 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IStaffInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.StaffInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IStaffInfoService extends IService { 16 | 17 | /** 18 | * 获取员工分页信息 19 | * 20 | * @param page 分页对象 21 | * @param staffInfo 员工信息 22 | * @return 结果 23 | */ 24 | IPage> selectStaffPage(Page page, StaffInfo staffInfo); 25 | 26 | /** 27 | * 获取员工业务统计 28 | * 29 | * @param staffType 员工类型 30 | * @return 结果 31 | */ 32 | List selectStaffKpi(Integer staffType) throws Exception; 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/ISysCityService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.SysCity; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | import java.util.LinkedHashMap; 9 | 10 | /** 11 | * @author FanK 12 | */ 13 | public interface ISysCityService extends IService { 14 | 15 | /** 16 | * 分页查询城市信息 17 | * 18 | * @param page 分页对象 19 | * @param sysCity 城市信息 20 | * @return 城市信息列表 21 | */ 22 | IPage> getCityByPage(Page page, SysCity sysCity); 23 | } 24 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/IUserInfoService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service; 2 | 3 | import cc.mrbird.febs.cos.entity.UserInfo; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | 12 | /** 13 | * @author FanK 14 | */ 15 | public interface IUserInfoService extends IService { 16 | 17 | /** 18 | * 分页查询用户信息 19 | * 20 | * @param page 分页对象 21 | * @param userInfo 用户信息 22 | * @return 结果 23 | */ 24 | IPage> getUserInfoByPage(Page page, UserInfo userInfo); 25 | 26 | /** 27 | * 远程调用用户信息 28 | * 29 | * @param userName 用户名称 30 | * @return 结果 31 | */ 32 | List> remote(String userName); 33 | } 34 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/BulletinInfoServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.BulletinInfo; 4 | import cc.mrbird.febs.cos.dao.BulletinInfoMapper; 5 | import cc.mrbird.febs.cos.service.IBulletinInfoService; 6 | import com.baomidou.mybatisplus.core.metadata.IPage; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.LinkedHashMap; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | @Service 17 | public class BulletinInfoServiceImpl extends ServiceImpl implements IBulletinInfoService { 18 | 19 | /** 20 | * 分页获取公告信息 21 | * @param page 分页对象 22 | * @param bulletinInfo 公告信息 23 | * @return 结果 24 | */ 25 | @Override 26 | public IPage> getBulletinByPage(Page page, BulletinInfo bulletinInfo) { 27 | return baseMapper.getBulletinByPage(page, bulletinInfo); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/CollectCommunityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectCommunity; 4 | import cc.mrbird.febs.cos.dao.CollectCommunityMapper; 5 | import cc.mrbird.febs.cos.service.ICollectCommunityService; 6 | import com.baomidou.mybatisplus.core.metadata.IPage; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.LinkedHashMap; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | @Service 17 | public class CollectCommunityServiceImpl extends ServiceImpl implements ICollectCommunityService { 18 | 19 | /** 20 | * 分页获取收藏信息 21 | * 22 | * @param page 分页对象 23 | * @param collectCommunity 收藏信息 24 | * @return 结果 25 | */ 26 | @Override 27 | public IPage> selectCollectPage(Page page, CollectCommunity collectCommunity) { 28 | return baseMapper.selectCollectPage(page, collectCommunity); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/CollectRentServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.CollectRent; 4 | import cc.mrbird.febs.cos.dao.CollectRentMapper; 5 | import cc.mrbird.febs.cos.service.ICollectRentService; 6 | import com.baomidou.mybatisplus.core.metadata.IPage; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.LinkedHashMap; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | @Service 17 | public class CollectRentServiceImpl extends ServiceImpl implements ICollectRentService { 18 | 19 | /** 20 | * 分页获取收藏信息 21 | * 22 | * @param page 分页对象 23 | * @param collectRent 收藏信息 24 | * @return 结果 25 | */ 26 | @Override 27 | public IPage> selectCollectPage(Page page, CollectRent collectRent) { 28 | return baseMapper.selectCollectPage(page, collectRent); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/MessageTemplateServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.MessageTemplate; 4 | import cc.mrbird.febs.cos.dao.MessageTemplateMapper; 5 | import cc.mrbird.febs.cos.service.IMessageTemplateService; 6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @author FanK 11 | */ 12 | @Service 13 | public class MessageTemplateServiceImpl extends ServiceImpl implements IMessageTemplateService { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/ReplyInfoServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.ReplyInfo; 4 | import cc.mrbird.febs.cos.dao.ReplyInfoMapper; 5 | import cc.mrbird.febs.cos.service.IReplyInfoService; 6 | import com.baomidou.mybatisplus.core.metadata.IPage; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.LinkedHashMap; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | @Service 17 | public class ReplyInfoServiceImpl extends ServiceImpl implements IReplyInfoService { 18 | 19 | /** 20 | * 分页获取帖子回复消息信息 21 | * 22 | * @param page 分页对象 23 | * @param replyInfo 帖子回复消息信息 24 | * @return 结果 25 | */ 26 | @Override 27 | public IPage> selectReplyPage(Page page, ReplyInfo replyInfo) { 28 | return baseMapper.selectReplyPage(page, replyInfo); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/cos/service/impl/SysCityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.cos.service.impl; 2 | 3 | import cc.mrbird.febs.cos.entity.SysCity; 4 | import cc.mrbird.febs.cos.dao.SysCityMapper; 5 | import cc.mrbird.febs.cos.service.ISysCityService; 6 | import com.baomidou.mybatisplus.core.metadata.IPage; 7 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.LinkedHashMap; 12 | 13 | /** 14 | * @author FanK 15 | */ 16 | @Service 17 | public class SysCityServiceImpl extends ServiceImpl implements ISysCityService { 18 | 19 | /** 20 | * 分页查询城市信息 21 | * 22 | * @param page 分页对象 23 | * @param sysCity 城市信息 24 | * @return 城市信息列表 25 | */ 26 | @Override 27 | public IPage> getCityByPage(Page page, SysCity sysCity) { 28 | return baseMapper.getCityByPage(page, sysCity); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/job/dao/JobLogMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.job.dao; 2 | 3 | 4 | import cc.mrbird.febs.job.domain.JobLog; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | public interface JobLogMapper extends BaseMapper { 8 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/job/dao/JobMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.job.dao; 2 | 3 | 4 | import cc.mrbird.febs.job.domain.Job; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface JobMapper extends BaseMapper { 10 | 11 | List queryList(); 12 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/job/service/JobLogService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.job.service; 2 | 3 | import cc.mrbird.febs.common.domain.QueryRequest; 4 | import cc.mrbird.febs.job.domain.JobLog; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | 9 | public interface JobLogService extends IService { 10 | 11 | IPage findJobLogs(QueryRequest request, JobLog jobLog); 12 | 13 | void saveJobLog(JobLog log); 14 | 15 | void deleteJobLogs(String[] jobLogIds); 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/job/service/JobService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.job.service; 2 | 3 | import cc.mrbird.febs.common.domain.QueryRequest; 4 | import cc.mrbird.febs.job.domain.Job; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | 9 | public interface JobService extends IService { 10 | 11 | Job findJob(Long jobId); 12 | 13 | IPage findJobs(QueryRequest request, Job job); 14 | 15 | void createJob(Job job); 16 | 17 | void updateJob(Job job); 18 | 19 | void deleteJobs(String[] jobIds); 20 | 21 | int updateBatch(String jobIds, String status); 22 | 23 | void run(String jobIds); 24 | 25 | void pause(String jobIds); 26 | 27 | void resume(String jobIds); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/controller/RedisController.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.controller; 2 | 3 | import cc.mrbird.febs.common.domain.FebsResponse; 4 | import cc.mrbird.febs.common.domain.RedisInfo; 5 | import cc.mrbird.febs.common.service.RedisService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.web.bind.annotation.GetMapping; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import java.util.List; 12 | import java.util.Map; 13 | 14 | @RestController 15 | @RequestMapping("redis") 16 | public class RedisController { 17 | 18 | @Autowired 19 | private RedisService redisService; 20 | 21 | @GetMapping("info") 22 | public FebsResponse getRedisInfo() throws Exception { 23 | List infoList = this.redisService.getRedisInfo(); 24 | return new FebsResponse().data(infoList); 25 | } 26 | 27 | @GetMapping("keysSize") 28 | public Map getKeysSize() throws Exception { 29 | return redisService.getKeysSize(); 30 | } 31 | 32 | @GetMapping("memoryInfo") 33 | public Map getMemoryInfo() throws Exception { 34 | return redisService.getMemoryInfo(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/DeptMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.Dept; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface DeptMapper extends BaseMapper { 7 | 8 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/DictMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.Dict; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface DictMapper extends BaseMapper { 7 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/LogMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.SysLog; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface LogMapper extends BaseMapper { 7 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/LoginLogMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | 4 | import cc.mrbird.febs.system.domain.LoginLog; 5 | import cc.mrbird.febs.system.domain.User; 6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | public interface LoginLogMapper extends BaseMapper { 12 | 13 | /** 14 | * 获取系统总访问次数 15 | * 16 | * @return Long 17 | */ 18 | Long findTotalVisitCount(); 19 | 20 | /** 21 | * 获取系统今日访问次数 22 | * 23 | * @return Long 24 | */ 25 | Long findTodayVisitCount(); 26 | 27 | /** 28 | * 获取系统今日访问 IP数 29 | * 30 | * @return Long 31 | */ 32 | Long findTodayIp(); 33 | 34 | /** 35 | * 获取系统近七天来的访问记录 36 | * 37 | * @param user 用户 38 | * @return 系统近七天来的访问记录 39 | */ 40 | List> findLastSevenDaysVisitCount(User user); 41 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/MenuMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.Menu; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface MenuMapper extends BaseMapper { 9 | 10 | List findUserPermissions(String userName); 11 | 12 | List findUserMenus(String userName); 13 | 14 | /** 15 | * 查找当前菜单/按钮关联的用户 ID 16 | * 17 | * @param menuId menuId 18 | * @return 用户 ID集合 19 | */ 20 | List findUserIdsByMenuId(String menuId); 21 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/RoleMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.Role; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface RoleMapper extends BaseMapper { 9 | 10 | List findUserRole(String userName); 11 | 12 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/RoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.RoleMenu; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface RoleMenuMapper extends BaseMapper { 7 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/TestMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.Test; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface TestMapper extends BaseMapper { 7 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/UserConfigMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.UserConfig; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface UserConfigMapper extends BaseMapper { 7 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.User; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | public interface UserMapper extends BaseMapper { 10 | 11 | IPage findUserDetail(Page page, @Param("user") User user); 12 | 13 | /** 14 | * 获取单个用户详情 15 | * 16 | * @param username 用户名 17 | * @return 用户信息 18 | */ 19 | User findDetail(String username); 20 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/dao/UserRoleMapper.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.dao; 2 | 3 | import cc.mrbird.febs.system.domain.UserRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | public interface UserRoleMapper extends BaseMapper { 8 | 9 | /** 10 | * 根据用户Id删除该用户的角色关系 11 | * 12 | * @param userId 用户ID 13 | * @return boolean 14 | * @author lzx 15 | * @date 2019年03月04日17:46:49 16 | */ 17 | Boolean deleteByUserId(@Param("userId") Long userId); 18 | 19 | /** 20 | * 根据角色Id删除该角色的用户关系 21 | * 22 | * @param roleId 角色ID 23 | * @return boolean 24 | * @author lzx 25 | * @date 2019年03月04日17:47:16 26 | */ 27 | Boolean deleteByRoleId(@Param("roleId") Long roleId); 28 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/domain/LoginLog.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | import java.util.Date; 8 | 9 | @TableName("t_login_log") 10 | @Data 11 | public class LoginLog { 12 | /** 13 | * 用户 ID 14 | */ 15 | private String username; 16 | 17 | /** 18 | * 登录时间 19 | */ 20 | private Date loginTime; 21 | 22 | /** 23 | * 登录地点 24 | */ 25 | private String location; 26 | 27 | private String ip; 28 | } 29 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/domain/RoleMenu.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | @TableName("t_role_menu") 9 | @Data 10 | public class RoleMenu implements Serializable { 11 | 12 | private static final long serialVersionUID = -7573904024872252113L; 13 | 14 | private Long roleId; 15 | 16 | private Long menuId; 17 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/domain/Test.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import com.wuwenze.poi.annotation.Excel; 5 | import com.wuwenze.poi.annotation.ExcelField; 6 | import com.wuwenze.poi.validator.EmailValidator; 7 | import lombok.Data; 8 | 9 | import java.util.Date; 10 | 11 | @Data 12 | @TableName("t_test") 13 | @Excel("测试导入导出数据") 14 | public class Test { 15 | 16 | @ExcelField(value = "字段1", required = true, maxLength = 20, 17 | comment = "提示:必填,长度不能超过20个字符") 18 | private String field1; 19 | 20 | @ExcelField(value = "字段2", required = true, maxLength = 11, regularExp = "[0-9]+", 21 | regularExpMessage = "必须是数字", comment = "提示: 必填,只能填写数字,并且长度不能超过11位") 22 | private Integer field2; 23 | 24 | @ExcelField(value = "字段3", required = true, maxLength = 50, 25 | comment = "提示:必填,只能填写邮箱,长度不能超过50个字符", validator = EmailValidator.class) 26 | private String field3; 27 | 28 | private Date createTime; 29 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/domain/UserRole.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | @TableName("t_user_role") 9 | @Data 10 | public class UserRole implements Serializable{ 11 | 12 | private static final long serialVersionUID = -3166012934498268403L; 13 | 14 | private Long userId; 15 | 16 | private Long roleId; 17 | 18 | } -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/DeptService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | 4 | import cc.mrbird.febs.common.domain.QueryRequest; 5 | import cc.mrbird.febs.system.domain.Dept; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | public interface DeptService extends IService { 12 | 13 | Map findDepts(QueryRequest request, Dept dept); 14 | 15 | List findDepts(Dept dept, QueryRequest request); 16 | 17 | void createDept(Dept dept); 18 | 19 | void updateDept(Dept dept); 20 | 21 | void deleteDepts(String[] deptIds); 22 | } 23 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/DictService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.common.domain.QueryRequest; 4 | import cc.mrbird.febs.system.domain.Dict; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | 9 | public interface DictService extends IService { 10 | 11 | IPage findDicts(QueryRequest request, Dict dict); 12 | 13 | void createDict(Dict dict); 14 | 15 | void updateDict(Dict dicdt); 16 | 17 | void deleteDicts(String[] dictIds); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/LogService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.common.domain.QueryRequest; 4 | import cc.mrbird.febs.system.domain.SysLog; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | import com.fasterxml.jackson.core.JsonProcessingException; 8 | import org.aspectj.lang.ProceedingJoinPoint; 9 | import org.springframework.scheduling.annotation.Async; 10 | 11 | 12 | public interface LogService extends IService { 13 | 14 | IPage findLogs(QueryRequest request, SysLog sysLog); 15 | 16 | void deleteLogs(String[] logIds); 17 | 18 | @Async 19 | void saveLog(ProceedingJoinPoint point, SysLog log) throws JsonProcessingException; 20 | } 21 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/LoginLogService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.system.domain.LoginLog; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | public interface LoginLogService extends IService { 7 | 8 | void saveLoginLog (LoginLog loginLog); 9 | } 10 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/MenuService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.system.domain.Menu; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | public interface MenuService extends IService { 10 | 11 | List findUserPermissions(String username); 12 | 13 | List findUserMenus(String username); 14 | 15 | Map findMenus(Menu menu); 16 | 17 | List findMenuList(Menu menu); 18 | 19 | void createMenu(Menu menu); 20 | 21 | void updateMenu(Menu menu) throws Exception; 22 | 23 | /** 24 | * 递归删除菜单/按钮 25 | * 26 | * @param menuIds menuIds 27 | */ 28 | void deleteMeuns(String[] menuIds) throws Exception; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/RoleMenuServie.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.system.domain.RoleMenu; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | 8 | public interface RoleMenuServie extends IService { 9 | 10 | void deleteRoleMenusByRoleId(String[] roleIds); 11 | 12 | void deleteRoleMenusByMenuId(String[] menuIds); 13 | 14 | List getRoleMenusByRoleId(String roleId); 15 | } 16 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/RoleService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.common.domain.QueryRequest; 4 | import cc.mrbird.febs.system.domain.Role; 5 | import com.baomidou.mybatisplus.core.metadata.IPage; 6 | import com.baomidou.mybatisplus.extension.service.IService; 7 | 8 | import java.util.List; 9 | 10 | public interface RoleService extends IService { 11 | 12 | IPage findRoles(Role role, QueryRequest request); 13 | 14 | List findUserRole(String userName); 15 | 16 | Role findByName(String roleName); 17 | 18 | void createRole(Role role); 19 | 20 | void deleteRoles(String[] roleIds) throws Exception; 21 | 22 | void updateRole(Role role) throws Exception; 23 | } 24 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/TestService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.system.domain.Test; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | import java.util.List; 7 | 8 | public interface TestService extends IService { 9 | 10 | List findTests(); 11 | 12 | /** 13 | * 批量插入 14 | * @param list List 15 | */ 16 | void batchInsert(List list); 17 | } 18 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/UserConfigService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | import cc.mrbird.febs.system.domain.UserConfig; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | 6 | public interface UserConfigService extends IService { 7 | 8 | /** 9 | * 通过用户 ID 获取前端系统个性化配置 10 | * 11 | * @param userId 用户 ID 12 | * @return 前端系统个性化配置 13 | */ 14 | UserConfig findByUserId(String userId); 15 | 16 | /** 17 | * 生成用户默认个性化配置 18 | * 19 | * @param userId 用户 ID 20 | */ 21 | void initDefaultUserConfig(String userId); 22 | 23 | /** 24 | * 通过用户 ID 删除个性化配置 25 | * 26 | * @param userIds 用户 ID 数组 27 | */ 28 | void deleteByUserId(String... userIds); 29 | 30 | /** 31 | * 更新用户个性化配置 32 | * 33 | * @param userConfig 用户个性化配置 34 | */ 35 | void update(UserConfig userConfig) throws Exception; 36 | } 37 | -------------------------------------------------------------------------------- /backend/src/main/java/cc/mrbird/febs/system/service/UserRoleService.java: -------------------------------------------------------------------------------- 1 | package cc.mrbird.febs.system.service; 2 | 3 | 4 | import cc.mrbird.febs.system.domain.UserRole; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | 7 | import java.util.List; 8 | 9 | public interface UserRoleService extends IService { 10 | 11 | void deleteUserRolesByRoleId(String[] roleIds); 12 | 13 | void deleteUserRolesByUserId(String[] userIds); 14 | 15 | List findUserIdsByRoleId(String[] roleIds); 16 | } 17 | -------------------------------------------------------------------------------- /backend/src/main/resources/ValidationMessages.properties: -------------------------------------------------------------------------------- 1 | required=\u4E0D\u80FD\u4E3A\u7A7A 2 | range=\u6709\u6548\u957f\u5ea6{min}\u5230{max}\u4e2a\u5b57\u7b26 3 | email=\u90ae\u7bb1\u683c\u5f0f\u4e0d\u5408\u6cd5 4 | mobile=\u624b\u673a\u53f7\u4e0d\u5408\u6cd5 5 | noMoreThan=\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7{max}\u4e2a\u5b57\u7b26 6 | invalid=\u503c\u4e0d\u5408\u6cd5 -------------------------------------------------------------------------------- /backend/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | 2 | ,--. ,--. 3 | ,---,. ,---, ,--.'| ,--/ /| ,---,. 4 | ,' .' | ' .' \ ,--,: : |,---,': / ' ,' .' | 5 | ,---.' | / ; '. ,`--.'`| ' :: : '/ / ,---.' | 6 | | | .': : \ | : : | || ' , | | .' 7 | : : : : | /\ \ : | \ | :' | / : : |-, 8 | : | |-,| : ' ;. : | : ' '; || ; ; : | ;/| 9 | | : ;/|| | ;/ \ \' ' ;. ;: ' \ | : .' 10 | | | .'' : | \ \ ,'| | | \ || | ' | | |-, 11 | ' : ' | | ' '--' ' : | ; .'' : |. \' : ;/| 12 | | | | | : : | | '`--' | | '_\.'| | \ 13 | | : \ | | ,' ' : | ' : | | : .' 14 | | | ,' `--'' ; |.' ; |,' | | ,' 15 | `----' '---' '---' `----' 16 | -------------------------------------------------------------------------------- /backend/src/main/resources/generator/templates/controller.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.Controller}; 2 | 3 | 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | <#if restControllerStyle> 7 | import org.springframework.web.bind.annotation.RestController; 8 | <#else> 9 | import org.springframework.stereotype.Controller; 10 | 11 | <#if superControllerClassPackage??> 12 | import ${superControllerClassPackage}; 13 | 14 | 15 | /** 16 | * @author ${author} 17 | */ 18 | <#if restControllerStyle> 19 | @RestController 20 | <#else> 21 | @Controller 22 | 23 | @RequestMapping("<#if package.ModuleName??>/${package.ModuleName}/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}") 24 | <#if kotlin> 25 | class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}() 26 | <#else> 27 | <#if superControllerClass??> 28 | public class ${table.controllerName} extends ${superControllerClass} { 29 | <#else> 30 | public class ${table.controllerName} { 31 | 32 | 33 | } 34 | 35 | -------------------------------------------------------------------------------- /backend/src/main/resources/generator/templates/mapper.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.Mapper}; 2 | 3 | import ${package.Entity}.${entity}; 4 | import ${superMapperClassPackage}; 5 | 6 | /** 7 | * @author ${author} 8 | */ 9 | <#if kotlin> 10 | interface ${table.mapperName} : ${superMapperClass}<${entity}> 11 | <#else> 12 | public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /backend/src/main/resources/generator/templates/service.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.Service}; 2 | 3 | import ${package.Entity}.${entity}; 4 | import ${superServiceClassPackage}; 5 | 6 | /** 7 | * @author ${author} 8 | */ 9 | <#if kotlin> 10 | interface ${table.serviceName} : ${superServiceClass}<${entity}> 11 | <#else> 12 | public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { 13 | 14 | } 15 | 16 | -------------------------------------------------------------------------------- /backend/src/main/resources/generator/templates/serviceImpl.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.ServiceImpl}; 2 | 3 | import ${package.Entity}.${entity}; 4 | import ${package.Mapper}.${table.mapperName}; 5 | import ${package.Service}.${table.serviceName}; 6 | import ${superServiceImplClassPackage}; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @author ${author} 11 | */ 12 | @Service 13 | <#if kotlin> 14 | open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { 15 | 16 | } 17 | <#else> 18 | public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { 19 | 20 | } 21 | 22 | -------------------------------------------------------------------------------- /backend/src/main/resources/ip2region/ip2region.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/backend/src/main/resources/ip2region/ip2region.db -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/BulletinInfoMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 30 | 31 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/CollectCommunityMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 22 | 23 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/CollectRentMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 25 | 26 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/MessageRecordMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/MessageTemplateMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/RentEvaluationMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 25 | 26 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/cos/StaffEvaluationMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 21 | 22 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/system/LoginLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | 35 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/system/RoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /backend/src/main/resources/mapper/system/UserRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | DELETE FROM t_user_role WHERE user_id = #{userId} 14 | 15 | 16 | 17 | 18 | DELETE FROM t_user_role WHERE role_id = #{roleId} 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /backend/src/main/resources/spy.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/backend/src/main/resources/spy.properties -------------------------------------------------------------------------------- /frontend/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /frontend/.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /test/unit/coverage/ 6 | -------------------------------------------------------------------------------- /frontend/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /frontend/.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=vue 2 | 3 | *.css linguist-language=vue 4 | 5 | *.html linguist-language=vue 6 | -------------------------------------------------------------------------------- /frontend/.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /frontend/.idea/frontend.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /frontend/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /frontend/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/build/logo.png -------------------------------------------------------------------------------- /frontend/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frontend/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /frontend/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /frontend/config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /frontend/src/components/datetime/RangeDate.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 26 | -------------------------------------------------------------------------------- /frontend/src/components/exception/typeConfig.js: -------------------------------------------------------------------------------- 1 | const config = { 2 | 403: { 3 | img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg', 4 | title: '403', 5 | desc: '抱歉,你无权访问该页面' 6 | }, 7 | 404: { 8 | img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg', 9 | title: '404', 10 | desc: '抱歉,你访问的页面不存在或仍在开发中' 11 | }, 12 | 500: { 13 | img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg', 14 | title: '500', 15 | desc: '抱歉,服务器出错了' 16 | } 17 | } 18 | 19 | export default config 20 | -------------------------------------------------------------------------------- /frontend/src/components/setting/SettingItem.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /frontend/src/components/setting/StyleItem.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | 37 | -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Febs from './FEBS' 3 | import router from './router' 4 | import Antd from 'ant-design-vue' 5 | import store from './store' 6 | import request from 'utils/request' 7 | import db from 'utils/localstorage' 8 | import VueApexCharts from 'vue-apexcharts' 9 | 10 | import 'ant-design-vue/dist/antd.css' 11 | 12 | import 'utils/install' 13 | 14 | Vue.config.productionTip = false 15 | Vue.use(Antd) 16 | Vue.use(db) 17 | Vue.use(VueApexCharts) 18 | 19 | Vue.component('apexchart', VueApexCharts) 20 | 21 | Vue.use({ 22 | install (Vue) { 23 | Vue.prototype.$db = db 24 | } 25 | }) 26 | 27 | Vue.prototype.$post = request.post 28 | Vue.prototype.$get = request.get 29 | Vue.prototype.$put = request.put 30 | Vue.prototype.$delete = request.delete 31 | Vue.prototype.$export = request.export 32 | Vue.prototype.$download = request.download 33 | Vue.prototype.$upload = request.upload 34 | 35 | /* eslint-disable no-new */ 36 | new Vue({ 37 | router, 38 | store, 39 | render: h => h(Febs) 40 | }).$mount('#febs') 41 | -------------------------------------------------------------------------------- /frontend/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import account from './modules/account' 4 | import setting from './modules/setting' 5 | 6 | Vue.use(Vuex) 7 | 8 | export default new Vuex.Store({ 9 | modules: { 10 | account, 11 | setting 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /frontend/src/store/modules/account.js: -------------------------------------------------------------------------------- 1 | import db from 'utils/localstorage' 2 | 3 | export default { 4 | namespaced: true, 5 | state: { 6 | token: db.get('USER_TOKEN'), 7 | expireTime: db.get('EXPIRE_TIME'), 8 | user: db.get('USER'), 9 | permissions: db.get('PERMISSIONS'), 10 | roles: db.get('ROLES') 11 | }, 12 | mutations: { 13 | setToken (state, val) { 14 | db.save('USER_TOKEN', val) 15 | state.token = val 16 | }, 17 | setExpireTime (state, val) { 18 | db.save('EXPIRE_TIME', val) 19 | state.expireTime = val 20 | }, 21 | setUser (state, val) { 22 | db.save('USER', val) 23 | state.user = val 24 | }, 25 | setPermissions (state, val) { 26 | db.save('PERMISSIONS', val) 27 | state.permissions = val 28 | }, 29 | setRoles (state, val) { 30 | db.save('ROLES', val) 31 | state.roles = val 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /frontend/src/utils/common.js: -------------------------------------------------------------------------------- 1 | export function triggerWindowResizeEvent () { 2 | let event = document.createEvent('HTMLEvents') 3 | event.initEvent('resize', true, true) 4 | event.eventType = 'message' 5 | window.dispatchEvent(event) 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/utils/device.js: -------------------------------------------------------------------------------- 1 | import enquireJs from 'enquire.js' 2 | 3 | const enquireScreen = function (call) { 4 | const hanlder = { 5 | match: function () { 6 | call && call(true) 7 | }, 8 | unmatch: function () { 9 | call && call(false) 10 | } 11 | } 12 | enquireJs.register('only screen and (max-width: 767.99px)', hanlder) 13 | } 14 | 15 | export default enquireScreen 16 | -------------------------------------------------------------------------------- /frontend/src/utils/install.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | import {hasPermission, hasNoPermission, hasAnyPermission, hasRole, hasAnyRole} from 'utils/permissionDirect' 4 | 5 | const Plugins = [ 6 | hasPermission, 7 | hasNoPermission, 8 | hasAnyPermission, 9 | hasRole, 10 | hasAnyRole 11 | ] 12 | 13 | Plugins.map((plugin) => { 14 | Vue.use(plugin) 15 | }) 16 | 17 | export default Vue 18 | -------------------------------------------------------------------------------- /frontend/src/utils/localstorage.js: -------------------------------------------------------------------------------- 1 | let db = { 2 | save (key, value) { 3 | localStorage.setItem(key, JSON.stringify(value)) 4 | }, 5 | get (key, defaultValue = {}) { 6 | return JSON.parse(localStorage.getItem(key)) || defaultValue 7 | }, 8 | remove (key) { 9 | localStorage.removeItem(key) 10 | }, 11 | clear () { 12 | localStorage.clear() 13 | } 14 | } 15 | 16 | export default db 17 | -------------------------------------------------------------------------------- /frontend/src/utils/utils.less: -------------------------------------------------------------------------------- 1 | .textOverflow() { 2 | overflow: hidden; 3 | text-overflow: ellipsis; 4 | word-break: break-all; 5 | white-space: nowrap; 6 | } 7 | 8 | .textOverflowMulti(@line: 3, @bg: #fff) { 9 | overflow: hidden; 10 | position: relative; 11 | line-height: 1.5em; 12 | max-height: @line * 1.5em; 13 | text-align: justify; 14 | margin-right: -1em; 15 | padding-right: 1em; 16 | &:before { 17 | background: @bg; 18 | content: '...'; 19 | padding: 0 1px; 20 | position: absolute; 21 | right: 14px; 22 | bottom: 0; 23 | } 24 | &:after { 25 | background: white; 26 | content: ''; 27 | margin-top: 0.2em; 28 | position: absolute; 29 | right: 14px; 30 | width: 1em; 31 | height: 1em; 32 | } 33 | } 34 | 35 | .clearfix() { 36 | zoom: 1; 37 | &:before, 38 | &:after { 39 | content: ' '; 40 | display: table; 41 | } 42 | &:after { 43 | clear: both; 44 | visibility: hidden; 45 | font-size: 0; 46 | height: 0; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /frontend/src/views/common/EmptyPageView.vue: -------------------------------------------------------------------------------- 1 | 4 | 9 | -------------------------------------------------------------------------------- /frontend/src/views/common/GlobalFooter.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | 37 | -------------------------------------------------------------------------------- /frontend/src/views/common/HeadInfo.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 27 | 28 | 57 | -------------------------------------------------------------------------------- /frontend/src/views/common/PageLayout.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 38 | 39 | 62 | -------------------------------------------------------------------------------- /frontend/src/views/common/PageView.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 38 | 39 | 49 | -------------------------------------------------------------------------------- /frontend/src/views/error/403.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /frontend/src/views/error/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /frontend/src/views/error/500.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /frontend/src/views/monitor/RedisTerminal.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | -------------------------------------------------------------------------------- /frontend/src/views/system/dept/DeptInputTree.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | -------------------------------------------------------------------------------- /frontend/src/views/system/menu/Icon.less: -------------------------------------------------------------------------------- 1 | @active-color: #4a4a48; 2 | ul { 3 | max-height: 700px; 4 | overflow-y: auto; 5 | padding-left: .5rem; 6 | i { 7 | font-size: 1.5rem; 8 | border: 1px solid #f1f1f1; 9 | padding: .2rem; 10 | margin: .3rem; 11 | cursor: pointer; 12 | &.active, &:hover { 13 | border-radius: 2px; 14 | border-color: @active-color; 15 | background-color: @active-color; 16 | color: #fff; 17 | transition: all .3s; 18 | } 19 | } 20 | li { 21 | list-style: none; 22 | float: left; 23 | width: 5%; 24 | text-align: center; 25 | cursor: pointer; 26 | color: #555; 27 | transition: color .3s ease-in-out,background-color .3s ease-in-out; 28 | position: relative; 29 | margin: 3px 0; 30 | border-radius: 4px; 31 | background-color: #fff; 32 | overflow: hidden; 33 | padding: 10px 0 0; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /frontend/src/views/system/user/UserInfo.less: -------------------------------------------------------------------------------- 1 | .user-info { 2 | background: #fff; 3 | padding: 0 10px 10px 10px; 4 | } 5 | .user-info-side { 6 | background: #fff; 7 | } 8 | .user-info-side { 9 | max-width: 10rem !important; 10 | min-width: 10rem !important; 11 | width: 10rem !important; 12 | } 13 | .user-content-one{ 14 | margin-right: 1.2rem; 15 | } 16 | p { 17 | margin-bottom: 1rem; 18 | max-width: 15.5rem; 19 | } 20 | i { 21 | margin-right: .8rem; 22 | } 23 | -------------------------------------------------------------------------------- /frontend/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/.gitkeep -------------------------------------------------------------------------------- /frontend/static/avatar/17e420c250804efe904a09a33796d5a10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/17e420c250804efe904a09a33796d5a10.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/17e420c250804efe904a09a33796d5a16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/17e420c250804efe904a09a33796d5a16.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/19034103295190235.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/19034103295190235.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165754.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165754.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165815.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165815.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165821.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165821.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165827.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165827.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165834.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165834.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165840.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165840.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165846.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165846.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165855.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165855.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165909.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165909.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165914.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165914.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165920.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165927.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165927.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165936.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165936.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165942.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165942.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165947.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165947.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414165955.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414165955.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/20180414170003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/20180414170003.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/496b3ace787342f7954b7045b8b06804.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/496b3ace787342f7954b7045b8b06804.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/8f5b60ef00714a399ee544d331231820.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/8f5b60ef00714a399ee544d331231820.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/964e40b005724165b8cf772355796c8c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/964e40b005724165b8cf772355796c8c.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/BiazfanxmamNRoxxVxka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/BiazfanxmamNRoxxVxka.png -------------------------------------------------------------------------------- /frontend/static/avatar/WhxKECPNujWoWEFNdnJE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/WhxKECPNujWoWEFNdnJE.png -------------------------------------------------------------------------------- /frontend/static/avatar/a3b10296862e40edb811418d64455d00.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/a3b10296862e40edb811418d64455d00.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/a43456282d684e0b9319cf332f8ac468.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/a43456282d684e0b9319cf332f8ac468.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/cnrhVkzwxjPwAaCfPbdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/cnrhVkzwxjPwAaCfPbdc.png -------------------------------------------------------------------------------- /frontend/static/avatar/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/default.jpg -------------------------------------------------------------------------------- /frontend/static/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg -------------------------------------------------------------------------------- /frontend/static/avatar/gaOngJwsRYRaVAuXXcmB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/gaOngJwsRYRaVAuXXcmB.png -------------------------------------------------------------------------------- /frontend/static/avatar/jZUIxmJycoymBprLOUbT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/jZUIxmJycoymBprLOUbT.png -------------------------------------------------------------------------------- /frontend/static/avatar/ubnKSIfAJTxIgXOKlciN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/avatar/ubnKSIfAJTxIgXOKlciN.png -------------------------------------------------------------------------------- /frontend/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/img/favicon.ico -------------------------------------------------------------------------------- /frontend/static/img/house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/img/house.png -------------------------------------------------------------------------------- /frontend/static/img/llll.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/img/llll.jpg -------------------------------------------------------------------------------- /frontend/static/img/logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/img/logo-blue.png -------------------------------------------------------------------------------- /frontend/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/frontend/static/img/logo.png -------------------------------------------------------------------------------- /frontend/static/less/Common.less: -------------------------------------------------------------------------------- 1 | .search{ 2 | margin-bottom: 54px; 3 | } 4 | .fold{ 5 | width: calc(100% - 216px); 6 | display: inline-block 7 | } 8 | .operator{ 9 | margin-bottom: 18px; 10 | } 11 | @media screen and (max-width: 900px) { 12 | .fold { 13 | width: 100%; 14 | } 15 | } 16 | .operator button { 17 | margin-right: 5px; 18 | } 19 | i { 20 | cursor: pointer; 21 | } 22 | -------------------------------------------------------------------------------- /web/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /web/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /test/unit/coverage/ 6 | -------------------------------------------------------------------------------- /web/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /web/.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=vue 2 | 3 | *.css linguist-language=vue 4 | 5 | *.html linguist-language=vue 6 | -------------------------------------------------------------------------------- /web/.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /web/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /web/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /web/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /web/.idea/web.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /web/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /web/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/build/logo.png -------------------------------------------------------------------------------- /web/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /web/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /web/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /web/config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /web/src/components/datetime/RangeDate.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 26 | -------------------------------------------------------------------------------- /web/src/components/exception/typeConfig.js: -------------------------------------------------------------------------------- 1 | const config = { 2 | 403: { 3 | img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg', 4 | title: '403', 5 | desc: '抱歉,你无权访问该页面' 6 | }, 7 | 404: { 8 | img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg', 9 | title: '404', 10 | desc: '抱歉,你访问的页面不存在或仍在开发中' 11 | }, 12 | 500: { 13 | img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg', 14 | title: '500', 15 | desc: '抱歉,服务器出错了' 16 | } 17 | } 18 | 19 | export default config 20 | -------------------------------------------------------------------------------- /web/src/components/setting/SettingItem.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /web/src/components/setting/StyleItem.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | 17 | 37 | -------------------------------------------------------------------------------- /web/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Febs from './FEBS' 3 | import router from './router' 4 | import Antd from 'ant-design-vue' 5 | import store from './store' 6 | import request from 'utils/request' 7 | import db from 'utils/localstorage' 8 | import VueApexCharts from 'vue-apexcharts' 9 | 10 | import 'ant-design-vue/dist/antd.css' 11 | 12 | import 'utils/install' 13 | 14 | Vue.config.productionTip = false 15 | Vue.use(Antd) 16 | Vue.use(db) 17 | Vue.use(VueApexCharts) 18 | 19 | Vue.component('apexchart', VueApexCharts) 20 | 21 | Vue.use({ 22 | install (Vue) { 23 | Vue.prototype.$db = db 24 | } 25 | }) 26 | 27 | Vue.prototype.$post = request.post 28 | Vue.prototype.$get = request.get 29 | Vue.prototype.$put = request.put 30 | Vue.prototype.$delete = request.delete 31 | Vue.prototype.$export = request.export 32 | Vue.prototype.$download = request.download 33 | Vue.prototype.$upload = request.upload 34 | 35 | /* eslint-disable no-new */ 36 | new Vue({ 37 | router, 38 | store, 39 | render: h => h(Febs) 40 | }).$mount('#febs') 41 | -------------------------------------------------------------------------------- /web/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import account from './modules/account' 4 | import setting from './modules/setting' 5 | 6 | Vue.use(Vuex) 7 | 8 | export default new Vuex.Store({ 9 | modules: { 10 | account, 11 | setting 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /web/src/store/modules/account.js: -------------------------------------------------------------------------------- 1 | import db from 'utils/localstorage' 2 | 3 | export default { 4 | namespaced: true, 5 | state: { 6 | token: db.get('USER_TOKEN'), 7 | expireTime: db.get('EXPIRE_TIME'), 8 | user: db.get('USER'), 9 | permissions: db.get('PERMISSIONS'), 10 | roles: db.get('ROLES') 11 | }, 12 | mutations: { 13 | setToken (state, val) { 14 | db.save('USER_TOKEN', val) 15 | state.token = val 16 | }, 17 | setExpireTime (state, val) { 18 | db.save('EXPIRE_TIME', val) 19 | state.expireTime = val 20 | }, 21 | setUser (state, val) { 22 | db.save('USER', val) 23 | state.user = val 24 | }, 25 | setPermissions (state, val) { 26 | db.save('PERMISSIONS', val) 27 | state.permissions = val 28 | }, 29 | setRoles (state, val) { 30 | db.save('ROLES', val) 31 | state.roles = val 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /web/src/utils/common.js: -------------------------------------------------------------------------------- 1 | export function triggerWindowResizeEvent () { 2 | let event = document.createEvent('HTMLEvents') 3 | event.initEvent('resize', true, true) 4 | event.eventType = 'message' 5 | window.dispatchEvent(event) 6 | } 7 | -------------------------------------------------------------------------------- /web/src/utils/device.js: -------------------------------------------------------------------------------- 1 | import enquireJs from 'enquire.js' 2 | 3 | const enquireScreen = function (call) { 4 | const hanlder = { 5 | match: function () { 6 | call && call(true) 7 | }, 8 | unmatch: function () { 9 | call && call(false) 10 | } 11 | } 12 | enquireJs.register('only screen and (max-width: 767.99px)', hanlder) 13 | } 14 | 15 | export default enquireScreen 16 | -------------------------------------------------------------------------------- /web/src/utils/install.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | import {hasPermission, hasNoPermission, hasAnyPermission, hasRole, hasAnyRole} from 'utils/permissionDirect' 4 | 5 | const Plugins = [ 6 | hasPermission, 7 | hasNoPermission, 8 | hasAnyPermission, 9 | hasRole, 10 | hasAnyRole 11 | ] 12 | 13 | Plugins.map((plugin) => { 14 | Vue.use(plugin) 15 | }) 16 | 17 | export default Vue 18 | -------------------------------------------------------------------------------- /web/src/utils/localstorage.js: -------------------------------------------------------------------------------- 1 | let db = { 2 | save (key, value) { 3 | localStorage.setItem(key, JSON.stringify(value)) 4 | }, 5 | get (key, defaultValue = {}) { 6 | return JSON.parse(localStorage.getItem(key)) || defaultValue 7 | }, 8 | remove (key) { 9 | localStorage.removeItem(key) 10 | }, 11 | clear () { 12 | localStorage.clear() 13 | } 14 | } 15 | 16 | export default db 17 | -------------------------------------------------------------------------------- /web/src/utils/utils.less: -------------------------------------------------------------------------------- 1 | .textOverflow() { 2 | overflow: hidden; 3 | text-overflow: ellipsis; 4 | word-break: break-all; 5 | white-space: nowrap; 6 | } 7 | 8 | .textOverflowMulti(@line: 3, @bg: #fff) { 9 | overflow: hidden; 10 | position: relative; 11 | line-height: 1.5em; 12 | max-height: @line * 1.5em; 13 | text-align: justify; 14 | margin-right: -1em; 15 | padding-right: 1em; 16 | &:before { 17 | background: @bg; 18 | content: '...'; 19 | padding: 0 1px; 20 | position: absolute; 21 | right: 14px; 22 | bottom: 0; 23 | } 24 | &:after { 25 | background: white; 26 | content: ''; 27 | margin-top: 0.2em; 28 | position: absolute; 29 | right: 14px; 30 | width: 1em; 31 | height: 1em; 32 | } 33 | } 34 | 35 | .clearfix() { 36 | zoom: 1; 37 | &:before, 38 | &:after { 39 | content: ' '; 40 | display: table; 41 | } 42 | &:after { 43 | clear: both; 44 | visibility: hidden; 45 | font-size: 0; 46 | height: 0; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /web/src/views/common/EmptyPageView.vue: -------------------------------------------------------------------------------- 1 | 4 | 9 | -------------------------------------------------------------------------------- /web/src/views/common/GlobalFooter.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | 37 | -------------------------------------------------------------------------------- /web/src/views/common/HeadInfo.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 27 | 28 | 57 | -------------------------------------------------------------------------------- /web/src/views/common/PageLayout.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 38 | 39 | 62 | -------------------------------------------------------------------------------- /web/src/views/common/PageView.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 38 | 39 | 49 | -------------------------------------------------------------------------------- /web/src/views/error/403.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /web/src/views/error/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /web/src/views/error/500.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /web/src/views/monitor/RedisTerminal.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | -------------------------------------------------------------------------------- /web/src/views/news/NewsDetail.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 45 | 46 | 56 | -------------------------------------------------------------------------------- /web/src/views/system/dept/DeptInputTree.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 36 | -------------------------------------------------------------------------------- /web/src/views/system/menu/Icon.less: -------------------------------------------------------------------------------- 1 | @active-color: #4a4a48; 2 | ul { 3 | max-height: 700px; 4 | overflow-y: auto; 5 | padding-left: .5rem; 6 | i { 7 | font-size: 1.5rem; 8 | border: 1px solid #f1f1f1; 9 | padding: .2rem; 10 | margin: .3rem; 11 | cursor: pointer; 12 | &.active, &:hover { 13 | border-radius: 2px; 14 | border-color: @active-color; 15 | background-color: @active-color; 16 | color: #fff; 17 | transition: all .3s; 18 | } 19 | } 20 | li { 21 | list-style: none; 22 | float: left; 23 | width: 5%; 24 | text-align: center; 25 | cursor: pointer; 26 | color: #555; 27 | transition: color .3s ease-in-out,background-color .3s ease-in-out; 28 | position: relative; 29 | margin: 3px 0; 30 | border-radius: 4px; 31 | background-color: #fff; 32 | overflow: hidden; 33 | padding: 10px 0 0; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /web/src/views/system/user/UserInfo.less: -------------------------------------------------------------------------------- 1 | .user-info { 2 | background: #fff; 3 | padding: 0 10px 10px 10px; 4 | } 5 | .user-info-side { 6 | background: #fff; 7 | } 8 | .user-info-side { 9 | max-width: 10rem !important; 10 | min-width: 10rem !important; 11 | width: 10rem !important; 12 | } 13 | .user-content-one{ 14 | margin-right: 1.2rem; 15 | } 16 | p { 17 | margin-bottom: 1rem; 18 | max-width: 15.5rem; 19 | } 20 | i { 21 | margin-right: .8rem; 22 | } 23 | -------------------------------------------------------------------------------- /web/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/.gitkeep -------------------------------------------------------------------------------- /web/static/avatar/17e420c250804efe904a09a33796d5a10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/17e420c250804efe904a09a33796d5a10.jpg -------------------------------------------------------------------------------- /web/static/avatar/17e420c250804efe904a09a33796d5a16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/17e420c250804efe904a09a33796d5a16.jpg -------------------------------------------------------------------------------- /web/static/avatar/19034103295190235.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/19034103295190235.jpg -------------------------------------------------------------------------------- /web/static/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg -------------------------------------------------------------------------------- /web/static/avatar/20180414165754.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165754.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165815.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165815.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165821.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165821.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165827.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165827.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165834.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165834.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165840.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165840.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165846.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165846.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165855.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165855.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165909.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165909.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165914.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165914.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165920.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165927.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165927.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165936.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165936.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165942.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165942.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165947.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165947.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414165955.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414165955.jpg -------------------------------------------------------------------------------- /web/static/avatar/20180414170003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/20180414170003.jpg -------------------------------------------------------------------------------- /web/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg -------------------------------------------------------------------------------- /web/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg -------------------------------------------------------------------------------- /web/static/avatar/496b3ace787342f7954b7045b8b06804.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/496b3ace787342f7954b7045b8b06804.jpeg -------------------------------------------------------------------------------- /web/static/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg -------------------------------------------------------------------------------- /web/static/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg -------------------------------------------------------------------------------- /web/static/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg -------------------------------------------------------------------------------- /web/static/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg -------------------------------------------------------------------------------- /web/static/avatar/8f5b60ef00714a399ee544d331231820.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/8f5b60ef00714a399ee544d331231820.jpeg -------------------------------------------------------------------------------- /web/static/avatar/964e40b005724165b8cf772355796c8c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/964e40b005724165b8cf772355796c8c.jpeg -------------------------------------------------------------------------------- /web/static/avatar/BiazfanxmamNRoxxVxka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/BiazfanxmamNRoxxVxka.png -------------------------------------------------------------------------------- /web/static/avatar/WhxKECPNujWoWEFNdnJE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/WhxKECPNujWoWEFNdnJE.png -------------------------------------------------------------------------------- /web/static/avatar/a3b10296862e40edb811418d64455d00.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/a3b10296862e40edb811418d64455d00.jpeg -------------------------------------------------------------------------------- /web/static/avatar/a43456282d684e0b9319cf332f8ac468.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/a43456282d684e0b9319cf332f8ac468.jpeg -------------------------------------------------------------------------------- /web/static/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg -------------------------------------------------------------------------------- /web/static/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg -------------------------------------------------------------------------------- /web/static/avatar/cnrhVkzwxjPwAaCfPbdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/cnrhVkzwxjPwAaCfPbdc.png -------------------------------------------------------------------------------- /web/static/avatar/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/default.jpg -------------------------------------------------------------------------------- /web/static/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg -------------------------------------------------------------------------------- /web/static/avatar/gaOngJwsRYRaVAuXXcmB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/gaOngJwsRYRaVAuXXcmB.png -------------------------------------------------------------------------------- /web/static/avatar/jZUIxmJycoymBprLOUbT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/jZUIxmJycoymBprLOUbT.png -------------------------------------------------------------------------------- /web/static/avatar/ubnKSIfAJTxIgXOKlciN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/avatar/ubnKSIfAJTxIgXOKlciN.png -------------------------------------------------------------------------------- /web/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/favicon.ico -------------------------------------------------------------------------------- /web/static/img/living-room-1853203_1920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/living-room-1853203_1920.jpg -------------------------------------------------------------------------------- /web/static/img/llll.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/llll.jpg -------------------------------------------------------------------------------- /web/static/img/logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/logo-blue.png -------------------------------------------------------------------------------- /web/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/logo.png -------------------------------------------------------------------------------- /web/static/img/river-6968614.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fankekeke/rental_cos/5fd9ab018c196b6b5493d0ceb30f6e889ac13d7a/web/static/img/river-6968614.png -------------------------------------------------------------------------------- /web/static/less/Common.less: -------------------------------------------------------------------------------- 1 | .search{ 2 | margin-bottom: 54px; 3 | } 4 | .fold{ 5 | width: calc(100% - 216px); 6 | display: inline-block 7 | } 8 | .operator{ 9 | margin-bottom: 18px; 10 | } 11 | @media screen and (max-width: 900px) { 12 | .fold { 13 | width: 100%; 14 | } 15 | } 16 | .operator button { 17 | margin-right: 5px; 18 | } 19 | i { 20 | cursor: pointer; 21 | } 22 | --------------------------------------------------------------------------------