├── .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 extends Payload>[] 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
6 |
7 |
8 |
14 |
15 |
26 |
--------------------------------------------------------------------------------
/frontend/src/components/setting/StyleItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
![]()
4 |
7 |
8 |
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 |
2 |
3 |
4 |
9 |
--------------------------------------------------------------------------------
/frontend/src/views/common/GlobalFooter.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
17 |
18 |
37 |
--------------------------------------------------------------------------------
/frontend/src/views/common/HeadInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
27 |
28 |
57 |
--------------------------------------------------------------------------------
/frontend/src/views/common/PageLayout.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
38 |
39 |
62 |
--------------------------------------------------------------------------------
/frontend/src/views/common/PageView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
38 |
39 |
49 |
--------------------------------------------------------------------------------
/frontend/src/views/error/403.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/frontend/src/views/error/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/frontend/src/views/error/500.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/frontend/src/views/monitor/RedisTerminal.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
14 |
--------------------------------------------------------------------------------
/frontend/src/views/system/dept/DeptInputTree.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
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 |
4 |
5 |
--------------------------------------------------------------------------------
/web/.idea/inspectionProfiles/Project_Default.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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 |
2 |
6 |
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 |
2 |
3 |
{{title}}
4 |
5 |
6 |
7 |
8 |
14 |
15 |
26 |
--------------------------------------------------------------------------------
/web/src/components/setting/StyleItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
![]()
4 |
7 |
8 |
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 |
2 |
3 |
4 |
9 |
--------------------------------------------------------------------------------
/web/src/views/common/GlobalFooter.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
17 |
18 |
37 |
--------------------------------------------------------------------------------
/web/src/views/common/HeadInfo.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
27 |
28 |
57 |
--------------------------------------------------------------------------------
/web/src/views/common/PageLayout.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
38 |
39 |
62 |
--------------------------------------------------------------------------------
/web/src/views/common/PageView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
38 |
39 |
49 |
--------------------------------------------------------------------------------
/web/src/views/error/403.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/web/src/views/error/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/web/src/views/error/500.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
15 |
--------------------------------------------------------------------------------
/web/src/views/monitor/RedisTerminal.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
14 |
--------------------------------------------------------------------------------
/web/src/views/news/NewsDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
返回
6 |
{{ newsInfo.title }}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
45 |
46 |
56 |
--------------------------------------------------------------------------------
/web/src/views/system/dept/DeptInputTree.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
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 |
--------------------------------------------------------------------------------