├── LICENSE ├── README.md ├── docs ├── .gitignore ├── .vuepress │ ├── config.js │ └── public │ │ ├── puzzle-verify.png │ │ ├── region-selector_tab.png │ │ ├── search-form_1.png │ │ ├── search-form_2.png │ │ ├── tree-select_multiple.png │ │ ├── tree-select_single.png │ │ ├── upload-file.png │ │ ├── 布局-设置面板.png │ │ ├── 布局.png │ │ ├── 路由和菜单-首屏加载效果.png │ │ └── 路由和菜单-骨架屏.png ├── README.md ├── backend │ └── README.md ├── frontend │ ├── README.md │ ├── components │ │ ├── abstract.md │ │ ├── region-selector.md │ │ ├── search-form.md │ │ ├── tree-select.md │ │ └── upload-file.md │ ├── deploy.md │ ├── directives.md │ ├── filters.md │ ├── global-methods │ │ ├── bottom-tip.md │ │ ├── guide.md │ │ ├── image-viewer.md │ │ ├── puzzle-verify.md │ │ └── signature.md │ ├── icon.md │ ├── layout.md │ ├── mock.md │ ├── new.md │ ├── permission.md │ ├── plugins.md │ ├── router.md │ └── utils.md ├── installation.md ├── package-lock.json ├── package.json └── start.md ├── java ├── cloud │ ├── .gitignore │ ├── api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── cn │ │ │ └── toesbieya │ │ │ └── jxc │ │ │ └── api │ │ │ ├── FileApi.java │ │ │ ├── RecordApi.java │ │ │ ├── StockApi.java │ │ │ └── system │ │ │ ├── DepartmentApi.java │ │ │ ├── ResourceApi.java │ │ │ └── RoleApi.java │ ├── common │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── cn │ │ │ │ └── toesbieya │ │ │ │ └── jxc │ │ │ │ └── common │ │ │ │ ├── config │ │ │ │ ├── FastJsonConfigFactory.java │ │ │ │ └── RedisConfig.java │ │ │ │ ├── constant │ │ │ │ ├── DocConstant.java │ │ │ │ ├── SessionConstant.java │ │ │ │ └── SocketConstant.java │ │ │ │ ├── enumeration │ │ │ │ ├── DataScopeEnum.java │ │ │ │ ├── GeneralStatusEnum.java │ │ │ │ └── ResourceTypeEnum.java │ │ │ │ ├── exception │ │ │ │ └── JsonResultException.java │ │ │ │ ├── model │ │ │ │ ├── entity │ │ │ │ │ ├── BizDoc.java │ │ │ │ │ ├── BizDocHistory.java │ │ │ │ │ ├── BizDocSub.java │ │ │ │ │ ├── BizPurchaseInbound.java │ │ │ │ │ ├── BizPurchaseInboundSub.java │ │ │ │ │ ├── BizPurchaseOrder.java │ │ │ │ │ ├── BizPurchaseOrderSub.java │ │ │ │ │ ├── BizSellOrder.java │ │ │ │ │ ├── BizSellOrderSub.java │ │ │ │ │ ├── BizSellOutbound.java │ │ │ │ │ ├── BizSellOutboundSub.java │ │ │ │ │ ├── BizStock.java │ │ │ │ │ ├── Msg.java │ │ │ │ │ ├── MsgState.java │ │ │ │ │ ├── RecAttachment.java │ │ │ │ │ ├── RecLoginHistory.java │ │ │ │ │ ├── RecUserAction.java │ │ │ │ │ ├── StatFinishOrder.java │ │ │ │ │ ├── StatProfitGoods.java │ │ │ │ │ ├── StatProfitTotal.java │ │ │ │ │ ├── SysCategory.java │ │ │ │ │ ├── SysCustomer.java │ │ │ │ │ ├── SysDepartment.java │ │ │ │ │ ├── SysRegion.java │ │ │ │ │ ├── SysResource.java │ │ │ │ │ ├── SysRole.java │ │ │ │ │ ├── SysSupplier.java │ │ │ │ │ └── SysUser.java │ │ │ │ └── vo │ │ │ │ │ ├── BaseSearch.java │ │ │ │ │ ├── DepartmentVo.java │ │ │ │ │ ├── R.java │ │ │ │ │ ├── ResourceVo.java │ │ │ │ │ ├── SocketEventVo.java │ │ │ │ │ ├── SocketOfflineVo.java │ │ │ │ │ ├── StockOutboundVo.java │ │ │ │ │ ├── StockSearch.java │ │ │ │ │ ├── StockSearchResult.java │ │ │ │ │ └── UserVo.java │ │ │ │ └── util │ │ │ │ ├── DateUtil.java │ │ │ │ ├── RedisUtil.java │ │ │ │ ├── SessionUtil.java │ │ │ │ ├── SpringUtil.java │ │ │ │ ├── Util.java │ │ │ │ └── WebSocketUtil.java │ │ │ └── resources │ │ │ └── script │ │ │ └── increase_and_expire.lua │ ├── gateway │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── cn │ │ │ │ └── toesbieya │ │ │ │ └── jxc │ │ │ │ └── gateway │ │ │ │ ├── GatewayApplication.java │ │ │ │ ├── config │ │ │ │ ├── GatewayConfig.java │ │ │ │ ├── RateConfig.java │ │ │ │ ├── ResourceConfig.java │ │ │ │ └── RouteConfig.java │ │ │ │ ├── controller │ │ │ │ └── FallbackController.java │ │ │ │ └── filter │ │ │ │ ├── SecurityFilter.java │ │ │ │ └── SentinelFilter.java │ │ │ └── resources │ │ │ └── bootstrap.yml │ ├── nacos-config │ │ ├── jxc-common-database.yml │ │ ├── jxc-common-redis.yml │ │ ├── jxc-gateway.yml │ │ ├── jxc-web-account.yml │ │ ├── jxc-web-doc.yml │ │ ├── jxc-web-file.yml │ │ ├── jxc-web-message.yml │ │ ├── jxc-web-record.yml │ │ ├── jxc-web-statistic.yml │ │ ├── jxc-web-stock.yml │ │ ├── jxc-web-system.yml │ │ └── jxc-websocket.yml │ ├── pom.xml │ ├── schedule │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── cn │ │ │ │ └── toesbieya │ │ │ │ └── jxc │ │ │ │ └── schedule │ │ │ │ ├── ScheduleApplication.java │ │ │ │ ├── config │ │ │ │ └── ExecutorConfig.java │ │ │ │ ├── mapper │ │ │ │ └── StatisticMapper.java │ │ │ │ └── task │ │ │ │ ├── DocTask.java │ │ │ │ ├── SessionTask.java │ │ │ │ └── StatisticTask.java │ │ │ └── resources │ │ │ ├── bootstrap.yml │ │ │ └── mapper │ │ │ └── Statistic.xml │ ├── web │ │ ├── file │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── file │ │ │ │ │ ├── FileApplication.java │ │ │ │ │ ├── config │ │ │ │ │ ├── QiniuConfig.java │ │ │ │ │ ├── QiniuProperty.java │ │ │ │ │ └── QiniuTemplate.java │ │ │ │ │ ├── controller │ │ │ │ │ └── FileController.java │ │ │ │ │ └── service │ │ │ │ │ └── FileService.java │ │ │ │ └── resources │ │ │ │ └── bootstrap.yml │ │ ├── pom.xml │ │ ├── web-common │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── cn │ │ │ │ └── toesbieya │ │ │ │ └── jxc │ │ │ │ └── web │ │ │ │ └── common │ │ │ │ ├── annoation │ │ │ │ ├── Lock.java │ │ │ │ ├── TimeCost.java │ │ │ │ └── UserAction.java │ │ │ │ ├── aspect │ │ │ │ ├── LockAspect.java │ │ │ │ ├── RestExceptionAspect.java │ │ │ │ ├── TimeCostAspect.java │ │ │ │ └── UserActionAspect.java │ │ │ │ ├── config │ │ │ │ └── WebConfig.java │ │ │ │ ├── enumeration │ │ │ │ └── UserActionEnum.java │ │ │ │ ├── interceptor │ │ │ │ ├── PredicateConfig.java │ │ │ │ ├── SecurityInterceptor.java │ │ │ │ ├── UserActionInterceptor.java │ │ │ │ └── predicate │ │ │ │ │ └── UserActionPredicate.java │ │ │ │ ├── model │ │ │ │ └── vo │ │ │ │ │ └── PageResult.java │ │ │ │ └── util │ │ │ │ ├── ExcelUtil.java │ │ │ │ ├── HttpUtil.java │ │ │ │ ├── IpUtil.java │ │ │ │ ├── SecurityUtil.java │ │ │ │ ├── SessionUtil.java │ │ │ │ ├── ThreadUtil.java │ │ │ │ └── WebUtil.java │ │ └── web-modules │ │ │ ├── account │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── account │ │ │ │ │ ├── AccountApplication.java │ │ │ │ │ ├── controller │ │ │ │ │ └── AccountController.java │ │ │ │ │ ├── enumeration │ │ │ │ │ └── RecLoginHistoryEnum.java │ │ │ │ │ ├── mapper │ │ │ │ │ ├── SysResourceMapper.java │ │ │ │ │ ├── SysRoleMapper.java │ │ │ │ │ └── SysUserMapper.java │ │ │ │ │ ├── service │ │ │ │ │ └── AccountService.java │ │ │ │ │ └── vo │ │ │ │ │ ├── LoginParam.java │ │ │ │ │ ├── LoginSuccessInfo.java │ │ │ │ │ ├── PasswordUpdateParam.java │ │ │ │ │ └── RegisterParam.java │ │ │ │ └── resources │ │ │ │ └── bootstrap.yml │ │ │ ├── doc │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── doc │ │ │ │ │ ├── DocApplication.java │ │ │ │ │ ├── controller │ │ │ │ │ ├── DocHistoryController.java │ │ │ │ │ ├── PurchaseInboundController.java │ │ │ │ │ ├── PurchaseOrderController.java │ │ │ │ │ ├── SellOrderController.java │ │ │ │ │ └── SellOutboundController.java │ │ │ │ │ ├── enumeration │ │ │ │ │ ├── DocFinishEnum.java │ │ │ │ │ ├── DocHistoryEnum.java │ │ │ │ │ └── DocStatusEnum.java │ │ │ │ │ ├── mapper │ │ │ │ │ ├── DocHistoryMapper.java │ │ │ │ │ ├── PurchaseInboundMapper.java │ │ │ │ │ ├── PurchaseInboundSubMapper.java │ │ │ │ │ ├── PurchaseOrderMapper.java │ │ │ │ │ ├── PurchaseOrderSubMapper.java │ │ │ │ │ ├── SellOrderMapper.java │ │ │ │ │ ├── SellOrderSubMapper.java │ │ │ │ │ ├── SellOutboundMapper.java │ │ │ │ │ └── SellOutboundSubMapper.java │ │ │ │ │ ├── model │ │ │ │ │ └── vo │ │ │ │ │ │ ├── DocHistorySearch.java │ │ │ │ │ │ ├── DocSearch.java │ │ │ │ │ │ ├── DocStatusUpdate.java │ │ │ │ │ │ ├── PurchaseInboundExport.java │ │ │ │ │ │ ├── PurchaseInboundSearch.java │ │ │ │ │ │ ├── PurchaseInboundVo.java │ │ │ │ │ │ ├── PurchaseOrderExport.java │ │ │ │ │ │ ├── PurchaseOrderSearch.java │ │ │ │ │ │ ├── PurchaseOrderVo.java │ │ │ │ │ │ ├── SellOrderExport.java │ │ │ │ │ │ ├── SellOrderSearch.java │ │ │ │ │ │ ├── SellOrderVo.java │ │ │ │ │ │ ├── SellOutboundExport.java │ │ │ │ │ │ ├── SellOutboundSearch.java │ │ │ │ │ │ └── SellOutboundVo.java │ │ │ │ │ ├── service │ │ │ │ │ ├── DocHistoryService.java │ │ │ │ │ ├── PurchaseInboundService.java │ │ │ │ │ ├── PurchaseOrderService.java │ │ │ │ │ ├── SellOrderService.java │ │ │ │ │ └── SellOutboundService.java │ │ │ │ │ └── util │ │ │ │ │ └── DocUtil.java │ │ │ │ └── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ ├── mapper │ │ │ │ ├── BizPurchaseInbound.xml │ │ │ │ ├── BizPurchaseInboundSub.xml │ │ │ │ ├── BizPurchaseOrder.xml │ │ │ │ ├── BizPurchaseOrderSub.xml │ │ │ │ ├── BizSellOrder.xml │ │ │ │ ├── BizSellOrderSub.xml │ │ │ │ ├── BizSellOutbound.xml │ │ │ │ └── BizSellOutboundSub.xml │ │ │ │ └── script │ │ │ │ └── get_doc_id.lua │ │ │ ├── message │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── message │ │ │ │ │ ├── MessageApplication.java │ │ │ │ │ ├── constant │ │ │ │ │ └── MsgConstant.java │ │ │ │ │ ├── controller │ │ │ │ │ ├── ManageController.java │ │ │ │ │ └── UserController.java │ │ │ │ │ ├── mapper │ │ │ │ │ ├── MsgMapper.java │ │ │ │ │ └── MsgStateMapper.java │ │ │ │ │ ├── model │ │ │ │ │ └── vo │ │ │ │ │ │ ├── MsgPersonalSearch.java │ │ │ │ │ │ └── MsgSearch.java │ │ │ │ │ └── service │ │ │ │ │ ├── ManageService.java │ │ │ │ │ └── UserService.java │ │ │ │ └── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ └── mapper │ │ │ │ └── Msg.xml │ │ │ ├── pom.xml │ │ │ ├── record │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── record │ │ │ │ │ ├── RecordApplication.java │ │ │ │ │ ├── config │ │ │ │ │ └── ExecutorConfig.java │ │ │ │ │ ├── controller │ │ │ │ │ └── RecordController.java │ │ │ │ │ ├── mapper │ │ │ │ │ ├── RecAttachmentMapper.java │ │ │ │ │ ├── RecLoginHistoryMapper.java │ │ │ │ │ └── RecUserActionMapper.java │ │ │ │ │ ├── model │ │ │ │ │ └── vo │ │ │ │ │ │ ├── LoginHistorySearch.java │ │ │ │ │ │ └── UserActionSearch.java │ │ │ │ │ └── service │ │ │ │ │ └── RecordService.java │ │ │ │ └── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ └── mapper │ │ │ │ └── RecAttachment.xml │ │ │ ├── statistic │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── statistic │ │ │ │ │ ├── StatisticApplication.java │ │ │ │ │ ├── controller │ │ │ │ │ └── StatisticController.java │ │ │ │ │ ├── mapper │ │ │ │ │ └── StatisticMapper.java │ │ │ │ │ ├── model │ │ │ │ │ └── vo │ │ │ │ │ │ └── FourBlockStat.java │ │ │ │ │ └── service │ │ │ │ │ └── StatisticService.java │ │ │ │ └── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ └── mapper │ │ │ │ └── Statistic.xml │ │ │ ├── stock │ │ │ ├── pom.xml │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── java │ │ │ │ └── cn │ │ │ │ │ └── toesbieya │ │ │ │ │ └── jxc │ │ │ │ │ └── stock │ │ │ │ │ ├── StockApplication.java │ │ │ │ │ ├── controller │ │ │ │ │ └── StockController.java │ │ │ │ │ ├── mapper │ │ │ │ │ └── StockMapper.java │ │ │ │ │ ├── model │ │ │ │ │ └── vo │ │ │ │ │ │ └── StockExport.java │ │ │ │ │ └── service │ │ │ │ │ └── StockService.java │ │ │ │ └── resources │ │ │ │ ├── bootstrap.yml │ │ │ │ └── mapper │ │ │ │ └── StockMapper.xml │ │ │ └── system │ │ │ ├── pom.xml │ │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── cn │ │ │ │ └── toesbieya │ │ │ │ └── jxc │ │ │ │ └── system │ │ │ │ ├── SystemApplication.java │ │ │ │ ├── controller │ │ │ │ ├── CategoryController.java │ │ │ │ ├── CustomerController.java │ │ │ │ ├── DepartmentController.java │ │ │ │ ├── ResourceController.java │ │ │ │ ├── RoleController.java │ │ │ │ ├── SupplierController.java │ │ │ │ └── UserController.java │ │ │ │ ├── mapper │ │ │ │ ├── SysCategoryMapper.java │ │ │ │ ├── SysCustomerMapper.java │ │ │ │ ├── SysDepartmentMapper.java │ │ │ │ ├── SysRegionMapper.java │ │ │ │ ├── SysResourceMapper.java │ │ │ │ ├── SysRoleMapper.java │ │ │ │ ├── SysSupplierMapper.java │ │ │ │ └── SysUserMapper.java │ │ │ │ ├── model │ │ │ │ └── vo │ │ │ │ │ ├── CategorySearch.java │ │ │ │ │ ├── CustomerSearch.java │ │ │ │ │ ├── CustomerVo.java │ │ │ │ │ ├── RegionValueResult.java │ │ │ │ │ ├── RoleSearch.java │ │ │ │ │ ├── SupplierSearch.java │ │ │ │ │ ├── SupplierVo.java │ │ │ │ │ └── UserSearch.java │ │ │ │ └── service │ │ │ │ ├── CategoryService.java │ │ │ │ ├── CustomerService.java │ │ │ │ ├── DepartmentService.java │ │ │ │ ├── ResourceService.java │ │ │ │ ├── RoleService.java │ │ │ │ ├── SupplierService.java │ │ │ │ └── UserService.java │ │ │ └── resources │ │ │ ├── bootstrap.yml │ │ │ └── mapper │ │ │ ├── SysCategory.xml │ │ │ ├── SysCustomer.xml │ │ │ ├── SysDepartment.xml │ │ │ ├── SysResource.xml │ │ │ └── SysSupplier.xml │ └── websocket │ │ ├── pom.xml │ │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── toesbieya │ │ │ └── jxc │ │ │ └── socket │ │ │ ├── WebSocketApplication.java │ │ │ ├── config │ │ │ ├── RedisEventListenerConfig.java │ │ │ ├── SocketConfig.java │ │ │ └── SocketProperty.java │ │ │ └── server │ │ │ └── WebSocketServer.java │ │ └── resources │ │ └── bootstrap.yml ├── db │ └── my.rar └── local │ ├── .gitignore │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── cn │ │ └── toesbieya │ │ └── jxc │ │ ├── MyApplication.java │ │ ├── annoation │ │ ├── Lock.java │ │ ├── TimeCost.java │ │ └── UserAction.java │ │ ├── aspect │ │ ├── LockAspect.java │ │ ├── RestExceptionAspect.java │ │ ├── TimeCostAspect.java │ │ └── UserActionAspect.java │ │ ├── config │ │ ├── ExecutorConfig.java │ │ ├── FastJsonConfigFactory.java │ │ ├── QiniuConfig.java │ │ ├── QiniuProperty.java │ │ ├── QiniuTemplate.java │ │ ├── RedisConfig.java │ │ ├── RedisEventListenerConfig.java │ │ ├── SocketConfig.java │ │ ├── SocketProperty.java │ │ └── WebConfig.java │ │ ├── constant │ │ ├── DocConstant.java │ │ ├── MsgConstant.java │ │ ├── SessionConstant.java │ │ └── SocketConstant.java │ │ ├── controller │ │ ├── AccountController.java │ │ ├── BizStockController.java │ │ ├── FileController.java │ │ ├── RecController.java │ │ ├── StatisticController.java │ │ ├── TestController.java │ │ ├── doc │ │ │ ├── HistoryController.java │ │ │ ├── PurchaseInboundController.java │ │ │ ├── PurchaseOrderController.java │ │ │ ├── SellOrderController.java │ │ │ └── SellOutboundController.java │ │ ├── msg │ │ │ ├── ManageController.java │ │ │ └── UserController.java │ │ └── sys │ │ │ ├── CategoryController.java │ │ │ ├── CustomerController.java │ │ │ ├── DepartmentController.java │ │ │ ├── ResourceController.java │ │ │ ├── RoleController.java │ │ │ ├── SupplierController.java │ │ │ └── UserController.java │ │ ├── enumeration │ │ ├── DataScopeEnum.java │ │ ├── DocFinishEnum.java │ │ ├── DocHistoryEnum.java │ │ ├── DocStatusEnum.java │ │ ├── GeneralStatusEnum.java │ │ ├── RecLoginHistoryEnum.java │ │ ├── ResourceTypeEnum.java │ │ └── UserActionEnum.java │ │ ├── exception │ │ └── JsonResultException.java │ │ ├── interceptor │ │ └── SecurityInterceptor.java │ │ ├── mapper │ │ ├── BizDocHistoryMapper.java │ │ ├── BizPurchaseInboundMapper.java │ │ ├── BizPurchaseInboundSubMapper.java │ │ ├── BizPurchaseOrderMapper.java │ │ ├── BizPurchaseOrderSubMapper.java │ │ ├── BizSellOrderMapper.java │ │ ├── BizSellOrderSubMapper.java │ │ ├── BizSellOutboundMapper.java │ │ ├── BizSellOutboundSubMapper.java │ │ ├── BizStockMapper.java │ │ ├── MsgMapper.java │ │ ├── MsgStateMapper.java │ │ ├── RecAttachmentMapper.java │ │ ├── RecLoginHistoryMapper.java │ │ ├── RecUserActionMapper.java │ │ ├── StatisticMapper.java │ │ ├── SysCategoryMapper.java │ │ ├── SysCustomerMapper.java │ │ ├── SysDepartmentMapper.java │ │ ├── SysRegionMapper.java │ │ ├── SysResourceMapper.java │ │ ├── SysRoleMapper.java │ │ ├── SysSupplierMapper.java │ │ └── SysUserMapper.java │ │ ├── model │ │ ├── entity │ │ │ ├── BizDoc.java │ │ │ ├── BizDocHistory.java │ │ │ ├── BizDocSub.java │ │ │ ├── BizPurchaseInbound.java │ │ │ ├── BizPurchaseInboundSub.java │ │ │ ├── BizPurchaseOrder.java │ │ │ ├── BizPurchaseOrderSub.java │ │ │ ├── BizSellOrder.java │ │ │ ├── BizSellOrderSub.java │ │ │ ├── BizSellOutbound.java │ │ │ ├── BizSellOutboundSub.java │ │ │ ├── BizStock.java │ │ │ ├── Msg.java │ │ │ ├── MsgState.java │ │ │ ├── RecAttachment.java │ │ │ ├── RecLoginHistory.java │ │ │ ├── RecUserAction.java │ │ │ ├── StatFinishOrder.java │ │ │ ├── StatProfitGoods.java │ │ │ ├── StatProfitTotal.java │ │ │ ├── SysCategory.java │ │ │ ├── SysCustomer.java │ │ │ ├── SysDepartment.java │ │ │ ├── SysRegion.java │ │ │ ├── SysResource.java │ │ │ ├── SysRole.java │ │ │ ├── SysSupplier.java │ │ │ └── SysUser.java │ │ └── vo │ │ │ ├── CustomerVo.java │ │ │ ├── DepartmentVo.java │ │ │ ├── LoginParam.java │ │ │ ├── LoginSuccessInfo.java │ │ │ ├── PasswordUpdateParam.java │ │ │ ├── PurchaseInboundVo.java │ │ │ ├── PurchaseOrderVo.java │ │ │ ├── R.java │ │ │ ├── RegisterParam.java │ │ │ ├── SellOrderVo.java │ │ │ ├── SellOutboundVo.java │ │ │ ├── SocketEventVo.java │ │ │ ├── SocketOfflineVo.java │ │ │ ├── SupplierVo.java │ │ │ ├── UserVo.java │ │ │ ├── export │ │ │ ├── PurchaseInboundExport.java │ │ │ ├── PurchaseOrderExport.java │ │ │ ├── SellOrderExport.java │ │ │ ├── SellOutboundExport.java │ │ │ └── StockExport.java │ │ │ ├── result │ │ │ ├── PageResult.java │ │ │ ├── RegionValueResult.java │ │ │ └── StockSearchResult.java │ │ │ ├── search │ │ │ ├── BaseSearch.java │ │ │ ├── CategorySearch.java │ │ │ ├── CustomerSearch.java │ │ │ ├── DocHistorySearch.java │ │ │ ├── DocSearch.java │ │ │ ├── LoginHistorySearch.java │ │ │ ├── MsgPersonalSearch.java │ │ │ ├── MsgSearch.java │ │ │ ├── PurchaseInboundSearch.java │ │ │ ├── PurchaseOrderSearch.java │ │ │ ├── RoleSearch.java │ │ │ ├── SellOrderSearch.java │ │ │ ├── SellOutboundSearch.java │ │ │ ├── StockSearch.java │ │ │ ├── SupplierSearch.java │ │ │ ├── UserActionSearch.java │ │ │ └── UserSearch.java │ │ │ ├── statictis │ │ │ └── FourBlockStat.java │ │ │ └── update │ │ │ ├── DocStatusUpdate.java │ │ │ └── UserUpdatePwd.java │ │ ├── module │ │ ├── PermissionModule.java │ │ └── WebSocketServer.java │ │ ├── schedule │ │ ├── DocTask.java │ │ ├── SessionTask.java │ │ └── StatisticTask.java │ │ ├── service │ │ ├── AccountService.java │ │ ├── BizStockService.java │ │ ├── FileService.java │ │ ├── RecService.java │ │ ├── StatisticService.java │ │ ├── doc │ │ │ ├── BizDocHistoryService.java │ │ │ ├── BizPurchaseInboundService.java │ │ │ ├── BizPurchaseOrderService.java │ │ │ ├── BizSellOrderService.java │ │ │ └── BizSellOutboundService.java │ │ ├── msg │ │ │ ├── MsgService.java │ │ │ └── MsgUserService.java │ │ └── sys │ │ │ ├── SysCategoryService.java │ │ │ ├── SysCustomerService.java │ │ │ ├── SysDepartmentService.java │ │ │ ├── SysResourceService.java │ │ │ ├── SysRoleService.java │ │ │ ├── SysSupplierService.java │ │ │ └── SysUserService.java │ │ └── util │ │ ├── DateUtil.java │ │ ├── DocUtil.java │ │ ├── ExcelUtil.java │ │ ├── IpUtil.java │ │ ├── RedisUtil.java │ │ ├── SecurityUtil.java │ │ ├── SessionUtil.java │ │ ├── SpringUtil.java │ │ ├── ThreadUtil.java │ │ ├── Util.java │ │ ├── WebSocketUtil.java │ │ └── WebUtil.java │ └── resources │ ├── application-local.yml │ ├── application.yml │ ├── mapper │ ├── BizPurchaseInbound.xml │ ├── BizPurchaseInboundSub.xml │ ├── BizPurchaseOrder.xml │ ├── BizPurchaseOrderSub.xml │ ├── BizSellOrder.xml │ ├── BizSellOrderSub.xml │ ├── BizSellOutbound.xml │ ├── BizSellOutboundSub.xml │ ├── BizStock.xml │ ├── Msg.xml │ ├── RecAttachment.xml │ ├── Statistic.xml │ ├── SysCategory.xml │ ├── SysCustomer.xml │ ├── SysDepartment.xml │ ├── SysResource.xml │ └── SysSupplier.xml │ └── script │ ├── get_doc_id.lua │ └── increase_and_expire.lua └── vue ├── full ├── .gitignore ├── babel.config.js ├── element-ui-personal │ ├── component │ │ └── Message │ │ │ ├── index.js │ │ │ └── main.vue │ ├── index.js │ └── style │ │ ├── index.scss │ │ └── message.scss ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── static │ │ ├── echarts │ │ └── macarons.js │ │ ├── img │ │ ├── dot1.png │ │ ├── dot2.png │ │ ├── dot3.png │ │ ├── dot4.png │ │ ├── fileType │ │ │ ├── doc.png │ │ │ ├── pdf.png │ │ │ ├── ppt.png │ │ │ ├── rar.png │ │ │ ├── txt.png │ │ │ ├── xls.png │ │ │ └── zip.png │ │ └── logo.svg │ │ ├── js │ │ ├── cjpeg.min.js │ │ ├── exceljs.min.js │ │ └── pngquant.min.js │ │ ├── json │ │ └── region-pca.json │ │ ├── lightgallery │ │ ├── lg-pager.min.js │ │ ├── lg-thumbnail.min.js │ │ └── lg-zoom.min.js │ │ ├── live2d │ │ ├── live2d.min.js │ │ ├── waifu-tips.json │ │ └── waifu.css │ │ └── tinymce │ │ └── langs │ │ └── zh_CN.js ├── src │ ├── App.vue │ ├── api │ │ ├── account │ │ │ └── index.js │ │ ├── doc │ │ │ ├── history.js │ │ │ ├── purchase │ │ │ │ ├── inbound.js │ │ │ │ └── order.js │ │ │ └── sell │ │ │ │ ├── order.js │ │ │ │ └── outbound.js │ │ ├── file │ │ │ └── index.js │ │ ├── message │ │ │ ├── manage.js │ │ │ └── user.js │ │ ├── record │ │ │ └── index.js │ │ ├── request.js │ │ ├── statistic │ │ │ └── index.js │ │ ├── stock │ │ │ └── current.js │ │ └── system │ │ │ ├── category.js │ │ │ ├── customer.js │ │ │ ├── department.js │ │ │ ├── resource.js │ │ │ ├── role.js │ │ │ ├── supplier.js │ │ │ └── user.js │ ├── asset │ │ └── icon │ │ │ ├── index.js │ │ │ └── svg │ │ │ ├── bug.svg │ │ │ ├── check.svg │ │ │ ├── develop.svg │ │ │ ├── documentation.svg │ │ │ ├── eye-open.svg │ │ │ ├── eye.svg │ │ │ ├── home.svg │ │ │ ├── icon.svg │ │ │ ├── message.svg │ │ │ ├── money.svg │ │ │ ├── password.svg │ │ │ ├── qq.svg │ │ │ ├── sell.svg │ │ │ ├── shopping.svg │ │ │ ├── show.svg │ │ │ ├── stock.svg │ │ │ ├── system.svg │ │ │ └── user.svg │ ├── component │ │ ├── Charts │ │ │ └── PieChart.vue │ │ ├── CollapseCard │ │ │ └── index.vue │ │ ├── Empty │ │ │ ├── DefaultEmptyImage.vue │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── ExtraArea │ │ │ └── index.vue │ │ ├── Icon │ │ │ └── index.vue │ │ ├── LinerProgress │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── OrgTree │ │ │ ├── index.vue │ │ │ ├── node.vue │ │ │ └── style.scss │ │ ├── RegionSelector │ │ │ ├── Tab │ │ │ │ ├── index.vue │ │ │ │ └── style.scss │ │ │ ├── Tree │ │ │ │ ├── TreeDialog.vue │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ ├── mixin.js │ │ │ └── store.js │ │ ├── Skeleton │ │ │ ├── constant.js │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── TreeSelect │ │ │ └── index.vue │ │ ├── Upload │ │ │ ├── CardList.vue │ │ │ ├── Qiniu.vue │ │ │ └── style.scss │ │ ├── abstract │ │ │ ├── Dialog │ │ │ │ ├── LoadingMask.vue │ │ │ │ ├── index.vue │ │ │ │ └── style.scss │ │ │ ├── Form │ │ │ │ ├── index.vue │ │ │ │ └── item.vue │ │ │ ├── Pagination │ │ │ │ └── index.vue │ │ │ └── Table │ │ │ │ └── index.vue │ │ ├── biz │ │ │ ├── CategoryTree │ │ │ │ └── index.vue │ │ │ ├── UserSelector │ │ │ │ ├── SimpleMultipleUserSelector.vue │ │ │ │ └── index.js │ │ │ └── doc │ │ │ │ ├── DocHistory.vue │ │ │ │ └── DocSteps.vue │ │ ├── editor │ │ │ ├── JsonEditor.vue │ │ │ └── RichTextEditor.vue │ │ └── form │ │ │ ├── Anchor │ │ │ └── index.vue │ │ │ ├── Search │ │ │ └── index.vue │ │ │ └── ValidateInfo │ │ │ ├── index.vue │ │ │ └── style.scss │ ├── config │ │ └── index.js │ ├── directive │ │ ├── dragDialog.js │ │ ├── index.js │ │ └── ripple │ │ │ ├── index.js │ │ │ └── style.scss │ ├── filter │ │ └── index.js │ ├── globalMethod │ │ ├── BottomTip │ │ │ ├── index.js │ │ │ └── main.vue │ │ ├── Guide │ │ │ ├── index.js │ │ │ ├── main.vue │ │ │ ├── style.scss │ │ │ └── utils.js │ │ ├── ImageViewer │ │ │ └── index.js │ │ ├── SignautreBoard │ │ │ ├── index.js │ │ │ └── main.vue │ │ ├── Verify │ │ │ ├── image │ │ │ │ ├── btn_move.png │ │ │ │ ├── btn_stop.png │ │ │ │ ├── icon_close.png │ │ │ │ ├── icon_info.png │ │ │ │ ├── icon_refresh_bottom.png │ │ │ │ ├── icon_refresh_top.png │ │ │ │ ├── loading.png │ │ │ │ └── track.png │ │ │ ├── index.js │ │ │ ├── main.vue │ │ │ └── style.scss │ │ └── index.js │ ├── layout │ │ ├── component │ │ │ ├── Footer │ │ │ │ ├── index.vue │ │ │ │ └── style.scss │ │ │ ├── HeaderRight │ │ │ │ └── index.vue │ │ │ ├── NotifyBell │ │ │ │ ├── index.vue │ │ │ │ └── style.scss │ │ │ └── SettingDrawer │ │ │ │ ├── component │ │ │ │ └── checkbox │ │ │ │ │ ├── ColorCheckbox.vue │ │ │ │ │ ├── Group.vue │ │ │ │ │ ├── ImgCheckbox.vue │ │ │ │ │ ├── mixin.js │ │ │ │ │ └── style.scss │ │ │ │ ├── index.vue │ │ │ │ ├── mixin │ │ │ │ ├── tagsViewPersistent.js │ │ │ │ └── tagsViewShortcut.js │ │ │ │ └── style.scss │ │ ├── index.vue │ │ ├── mixin │ │ │ └── offline.js │ │ └── style.scss │ ├── main.js │ ├── mixin │ │ ├── chart │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ └── resize.js │ │ ├── dialogMixin.js │ │ ├── docDetailMixin.js │ │ ├── docTableMixin.js │ │ ├── tablePageMixin.js │ │ └── treePageMixin.js │ ├── plugin │ │ ├── canvasAnimation │ │ │ ├── firework │ │ │ │ ├── Particle.js │ │ │ │ ├── Rocket.js │ │ │ │ ├── Time.js │ │ │ │ ├── Trail.js │ │ │ │ ├── Vector.js │ │ │ │ └── index.js │ │ │ ├── fluxRay │ │ │ │ ├── Particle.js │ │ │ │ └── index.js │ │ │ ├── godrays │ │ │ │ ├── index.js │ │ │ │ └── original.js │ │ │ ├── moveFollowMouse │ │ │ │ ├── Particle.js │ │ │ │ └── index.js │ │ │ ├── particleBall │ │ │ │ ├── Particle.js │ │ │ │ ├── Vector.js │ │ │ │ ├── index.js │ │ │ │ └── util.js │ │ │ ├── particleNetwork │ │ │ │ ├── Particle.js │ │ │ │ └── index.js │ │ │ ├── particleWave │ │ │ │ └── index.js │ │ │ ├── reflectRain │ │ │ │ ├── RainDrop.js │ │ │ │ ├── Vector.js │ │ │ │ └── index.js │ │ │ ├── sparkRain │ │ │ │ ├── Spark.js │ │ │ │ ├── index.js │ │ │ │ └── util.js │ │ │ └── sunlight │ │ │ │ ├── Particle.js │ │ │ │ └── index.js │ │ ├── imageCompress │ │ │ ├── cjpeg.js │ │ │ ├── pngquant.js │ │ │ └── util.js │ │ ├── live2d │ │ │ └── index.js │ │ └── webgl │ │ │ └── fluid │ │ │ ├── Material.js │ │ │ ├── Pointer.js │ │ │ ├── Program.js │ │ │ ├── config.js │ │ │ ├── factory.js │ │ │ ├── index.js │ │ │ ├── obj.js │ │ │ ├── shader.js │ │ │ └── util.js │ ├── router │ │ ├── define.js │ │ ├── guardian │ │ │ ├── accessControl.js │ │ │ ├── index.js │ │ │ └── nprogress.js │ │ ├── index.js │ │ ├── module │ │ │ ├── admin │ │ │ │ ├── child │ │ │ │ │ ├── default.js │ │ │ │ │ ├── message.js │ │ │ │ │ ├── purchase.js │ │ │ │ │ ├── sell.js │ │ │ │ │ ├── stock.js │ │ │ │ │ └── system.js │ │ │ │ └── index.js │ │ │ ├── dev │ │ │ │ └── index.js │ │ │ ├── doc │ │ │ │ └── index.js │ │ │ ├── example │ │ │ │ ├── child │ │ │ │ │ ├── component.js │ │ │ │ │ ├── cool.js │ │ │ │ │ ├── directive.js │ │ │ │ │ ├── globalMethod.js │ │ │ │ │ ├── icon.js │ │ │ │ │ ├── iframe.js │ │ │ │ │ └── test.js │ │ │ │ └── index.js │ │ │ └── index.js │ │ └── util.js │ ├── store │ │ ├── index.js │ │ ├── module │ │ │ ├── app.js │ │ │ ├── dataCache.js │ │ │ ├── message.js │ │ │ ├── needSearch.js │ │ │ ├── resource.js │ │ │ ├── setting.js │ │ │ ├── user.js │ │ │ └── websocket.js │ │ └── util.js │ ├── style │ │ ├── cover │ │ │ ├── element-ui.scss │ │ │ └── var.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── nprogress.scss │ │ └── var.scss │ ├── util │ │ ├── auth.js │ │ ├── browser.js │ │ ├── element-ui │ │ │ ├── elForm.js │ │ │ └── elTree.js │ │ ├── excel │ │ │ ├── common.js │ │ │ ├── exceljs.js │ │ │ └── index.js │ │ ├── file.js │ │ ├── index.js │ │ ├── math.js │ │ ├── message.js │ │ ├── path.js │ │ ├── route.js │ │ ├── secret.js │ │ ├── storage.js │ │ ├── tree.js │ │ ├── validate.js │ │ ├── vue.js │ │ └── worker.js │ └── view │ │ ├── _app │ │ ├── 403.vue │ │ ├── 404.vue │ │ ├── 500.vue │ │ └── login │ │ │ ├── LoginForm.vue │ │ │ ├── RegisterForm.vue │ │ │ ├── SetAnimation.vue │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── _common │ │ ├── DetailPage │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── ExceptionPage │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── ListPage │ │ │ ├── autoAdaptHeightMixin.js │ │ │ └── index.vue │ │ └── SkeletonPage │ │ │ ├── index.vue │ │ │ └── style.scss │ │ ├── admin │ │ ├── index │ │ │ ├── component │ │ │ │ ├── DailyFinishOrderStat.vue │ │ │ │ ├── DailyProfitStat.vue │ │ │ │ ├── PanelGroup │ │ │ │ │ ├── PanelGroupItem.vue │ │ │ │ │ └── index.vue │ │ │ │ └── TotalProfitGoods.vue │ │ │ └── indexPage.vue │ │ ├── message │ │ │ ├── manage │ │ │ │ ├── EditDialog.vue │ │ │ │ └── indexPage.vue │ │ │ └── user │ │ │ │ ├── AutoHidden.vue │ │ │ │ ├── MessageStream.vue │ │ │ │ └── indexPage.vue │ │ ├── purchase │ │ │ ├── inbound │ │ │ │ ├── component │ │ │ │ │ └── OrderSelector.vue │ │ │ │ ├── detailPage.vue │ │ │ │ └── indexPage.vue │ │ │ └── order │ │ │ │ ├── component │ │ │ │ ├── CategorySelector.vue │ │ │ │ └── SupplierSelector.vue │ │ │ │ ├── detailPage.vue │ │ │ │ └── indexPage.vue │ │ ├── sell │ │ │ ├── order │ │ │ │ ├── component │ │ │ │ │ ├── CustomerSelector.vue │ │ │ │ │ └── StockSelector.vue │ │ │ │ ├── detailPage.vue │ │ │ │ └── indexPage.vue │ │ │ └── outbound │ │ │ │ ├── component │ │ │ │ ├── OrderSelector.vue │ │ │ │ └── StockSelector.vue │ │ │ │ ├── detailPage.vue │ │ │ │ └── indexPage.vue │ │ ├── stock │ │ │ └── current │ │ │ │ ├── DetailDialog.vue │ │ │ │ └── indexPage.vue │ │ ├── system │ │ │ ├── category │ │ │ │ ├── component │ │ │ │ │ ├── Form.vue │ │ │ │ │ └── List.vue │ │ │ │ └── indexPage.vue │ │ │ ├── customer │ │ │ │ ├── EditDialog.vue │ │ │ │ └── indexPage.vue │ │ │ ├── department │ │ │ │ ├── component │ │ │ │ │ ├── EditDialog.vue │ │ │ │ │ ├── OrgTreeView.vue │ │ │ │ │ └── ZoomControl.vue │ │ │ │ └── indexPage.vue │ │ │ ├── menu │ │ │ │ ├── common.js │ │ │ │ └── indexPage.vue │ │ │ ├── role │ │ │ │ ├── EditDialog.vue │ │ │ │ └── indexPage.vue │ │ │ ├── supplier │ │ │ │ ├── EditDialog.vue │ │ │ │ └── indexPage.vue │ │ │ └── user │ │ │ │ ├── component │ │ │ │ ├── DepartmentSelector.vue │ │ │ │ ├── EditDialog.vue │ │ │ │ └── RoleSelector.vue │ │ │ │ └── indexPage.vue │ │ └── userCenter │ │ │ ├── component │ │ │ ├── Account.vue │ │ │ ├── Avatar.vue │ │ │ ├── LoginHistory.vue │ │ │ ├── UserAction.vue │ │ │ └── UserCard.vue │ │ │ └── indexPage.vue │ │ ├── dev │ │ └── index.vue │ │ └── example │ │ ├── component │ │ ├── regionSelectorPage.vue │ │ ├── skeletonPage.vue │ │ ├── treeSelectPage.vue │ │ └── uploadPage.vue │ │ ├── cool │ │ ├── fluidPage.vue │ │ └── l2dPage.vue │ │ ├── directive │ │ ├── dragDialogPage.vue │ │ └── ripplePage.vue │ │ ├── globalMethod │ │ ├── bottomTipPage.vue │ │ ├── guidePage.vue │ │ ├── imageViewerPage.vue │ │ ├── messagePage.vue │ │ ├── signaturePage.vue │ │ └── verifyPage.vue │ │ ├── icon │ │ ├── element-icon.js │ │ └── indexPage.vue │ │ └── test │ │ ├── cache │ │ └── detailPage.vue │ │ └── develop │ │ ├── component │ │ ├── ApiSpeedTest.vue │ │ ├── ExportExcelTest.vue │ │ ├── ImageCompressTest.vue │ │ └── WebsocketTest.vue │ │ └── indexPage.vue ├── svgo.config.js └── vue.config.js └── template ├── .gitignore ├── babel.config.js ├── element-ui-personal ├── component │ └── Message │ │ ├── index.js │ │ └── main.vue ├── index.js └── style │ ├── index.scss │ └── message.scss ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html └── static │ ├── img │ ├── dot1.png │ ├── dot2.png │ ├── dot3.png │ ├── dot4.png │ └── logo.svg │ └── lightgallery │ ├── lg-pager.min.js │ ├── lg-thumbnail.min.js │ └── lg-zoom.min.js ├── src ├── App.vue ├── asset │ ├── icon │ │ ├── index.js │ │ ├── svg │ │ │ ├── bug.svg │ │ │ ├── check.svg │ │ │ ├── develop.svg │ │ │ ├── documentation.svg │ │ │ ├── eye-open.svg │ │ │ ├── eye.svg │ │ │ ├── home.svg │ │ │ ├── icon.svg │ │ │ ├── message.svg │ │ │ ├── money.svg │ │ │ ├── password.svg │ │ │ ├── qq.svg │ │ │ ├── sell.svg │ │ │ ├── shopping.svg │ │ │ ├── show.svg │ │ │ ├── stock.svg │ │ │ ├── system.svg │ │ │ └── user.svg │ │ └── svgo.yml │ └── style │ │ ├── cover │ │ ├── element-ui.scss │ │ └── var.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── nprogress.scss │ │ └── var.scss ├── component │ ├── Icon │ │ └── index.vue │ └── Skeleton │ │ ├── constant.js │ │ ├── index.vue │ │ └── style.scss ├── config │ └── index.js ├── layout │ ├── component │ │ ├── Footer │ │ │ ├── index.vue │ │ │ └── style.scss │ │ └── SettingDrawer │ │ │ ├── component │ │ │ └── checkbox │ │ │ │ ├── ColorCheckbox.vue │ │ │ │ ├── Group.vue │ │ │ │ ├── ImgCheckbox.vue │ │ │ │ ├── mixin.js │ │ │ │ └── style.scss │ │ │ ├── index.vue │ │ │ └── style.scss │ ├── index.vue │ ├── mixin │ │ ├── tagsViewPersistent.js │ │ └── tagsViewShortcut.js │ └── style.scss ├── main.js ├── router │ ├── define.js │ ├── guardian │ │ ├── accessControl.js │ │ ├── avoidReuse.js │ │ ├── iframe.js │ │ ├── index.js │ │ ├── nprogress.js │ │ └── setTitle.js │ ├── index.js │ ├── module │ │ ├── admin │ │ │ ├── child │ │ │ │ └── default.js │ │ │ └── index.js │ │ ├── doc │ │ │ └── index.js │ │ ├── example │ │ │ ├── child │ │ │ │ ├── component.js │ │ │ │ ├── globalMethod.js │ │ │ │ ├── icon.js │ │ │ │ ├── iframe.js │ │ │ │ └── test.js │ │ │ └── index.js │ │ └── index.js │ └── util.js ├── store │ ├── index.js │ ├── module │ │ ├── resource.js │ │ └── user.js │ └── util.js ├── util │ ├── auth.js │ ├── index.js │ ├── message.js │ ├── secret.js │ ├── storage.js │ ├── tree.js │ └── validate.js └── view │ ├── _app │ ├── 403.vue │ ├── 404.vue │ ├── 500.vue │ ├── login │ │ ├── LoginForm.vue │ │ ├── RegisterForm.vue │ │ ├── index.vue │ │ └── style.scss │ └── redirect.vue │ ├── _common │ ├── ExceptionPage │ │ ├── index.vue │ │ └── style.scss │ └── SkeletonPage │ │ ├── index.vue │ │ └── style.scss │ ├── admin │ └── index │ │ └── indexPage.vue │ └── example │ ├── component │ └── skeletonPage.vue │ ├── globalMethod │ └── messagePage.vue │ ├── icon │ ├── element-icon.js │ └── indexPage.vue │ └── test │ └── cache │ └── detailPage.vue └── vue.config.js /README.md: -------------------------------------------------------------------------------- 1 | ## 简介 2 | 3 | 一个前后端分离的简易进销存后台管理系统,基于 [SpringBoot](https://spring.io/projects/spring-boot/) 和 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)实现,具备常见的后台管理功能,后端另有SpringCloud版本。 4 | 5 | - [在线预览](https://toesbieya.cn/jxc-admin) test/123456 (出现被挤掉的情况时请注册一个新账号) 6 | 7 | - [文档](https://doc.toesbieya.cn/jxc-admin) 8 | 9 | **服务器迁移完成,可以访问了** 10 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /doc 5 | /test 6 | 7 | # local env files 8 | .env.local 9 | .env.*.local 10 | 11 | # Log files 12 | npm-debug.log* 13 | yarn-debug.log* 14 | yarn-error.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /docs/.vuepress/public/puzzle-verify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/puzzle-verify.png -------------------------------------------------------------------------------- /docs/.vuepress/public/region-selector_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/region-selector_tab.png -------------------------------------------------------------------------------- /docs/.vuepress/public/search-form_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/search-form_1.png -------------------------------------------------------------------------------- /docs/.vuepress/public/search-form_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/search-form_2.png -------------------------------------------------------------------------------- /docs/.vuepress/public/tree-select_multiple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/tree-select_multiple.png -------------------------------------------------------------------------------- /docs/.vuepress/public/tree-select_single.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/tree-select_single.png -------------------------------------------------------------------------------- /docs/.vuepress/public/upload-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/upload-file.png -------------------------------------------------------------------------------- /docs/.vuepress/public/布局-设置面板.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/布局-设置面板.png -------------------------------------------------------------------------------- /docs/.vuepress/public/布局.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/布局.png -------------------------------------------------------------------------------- /docs/.vuepress/public/路由和菜单-首屏加载效果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/路由和菜单-首屏加载效果.png -------------------------------------------------------------------------------- /docs/.vuepress/public/路由和菜单-骨架屏.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/docs/.vuepress/public/路由和菜单-骨架屏.png -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | heroImage: https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png 4 | heroText: jxc-admin 5 | tagline: 前后端分离的简易进销存后台管理系统。 6 | actionText: 快速上手 → 7 | actionLink: ./installation/ 8 | footer: MIT Licensed | Copyright © 2020-present toesbieya 9 | --- 10 | -------------------------------------------------------------------------------- /docs/backend/README.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | 后端分local和cloud版,对应 `java/local` 和 `java/cloud` 目录,可以根据自行选择。 4 | 5 | local版基于SpringBoot、SpringMVC、Mybatis-Plus开发。 6 | 7 | cloud版基于SpringBoot、SpringCloud、SpringCloudAlibaba、SpringMVC、Mybatis-Plus开发 8 | ,服务间调用使用dubbo,未使用分布式事务。 9 | 10 | 目前两者在功能上的差别就是local版支持动态修改资源的限流设置,而cloud版由于还在研究sentinel中, 11 | 所以还未实现,暂时以gateway的 `default-filters` 作为替代。 12 | 13 | 具体文档不写啦,代码写得太垃圾了。。。 14 | -------------------------------------------------------------------------------- /docs/frontend/directives.md: -------------------------------------------------------------------------------- 1 | # 指令 2 | 3 | ## el-dialog拖拽 4 | 5 | 已全局注册,使用方式: 6 | ```html 7 | 8 | ``` 9 | 10 | ## 波纹 11 | 12 | 从[quasar](https://quasar.dev/vue-directives/material-ripple)处搬运 13 | 已全局注册,使用方式: 14 | ```html 15 |
16 | ``` 17 | 更多细节请根据quasar文档使用 18 | 19 | ## element-ui自带 20 | 21 | ### clickOutside 22 | 23 | 未全局注册,使用方式: 24 | ```js 25 | //引入 26 | import ClickOutside from 'element-ui/lib/utils/clickoutside' 27 | 28 | //组件中注册 29 | directives: {ClickOutside} 30 | 31 | //使用 32 |
33 | ``` 34 | -------------------------------------------------------------------------------- /docs/frontend/filters.md: -------------------------------------------------------------------------------- 1 | # 过滤器 2 | 3 | 项目中将 `@/filter` 中的文件注册为全局过滤器,各自功能作用可以查看注释或代码。 4 | 5 | :::tip 小技巧 6 | 全局注册的过滤器可以在vue示例中以this.$options.filters.xxx调用 7 | ::: 8 | -------------------------------------------------------------------------------- /docs/frontend/global-methods/bottom-tip.md: -------------------------------------------------------------------------------- 1 | # 底部警告信息弹框 2 | 3 | ### 使用: 4 | ```js 5 | this.$bottomTip('hello') 6 | ``` 7 | -------------------------------------------------------------------------------- /docs/frontend/global-methods/image-viewer.md: -------------------------------------------------------------------------------- 1 | # 图片预览 2 | 3 | ### 使用: 4 | 5 | ```js 6 | //开始预览 7 | this.$image({index, urlList}) 8 | 9 | //退出预览 10 | this.$image.close() 11 | ``` 12 | 13 | ### $image({index, urlList}) 14 | 15 | - `index` : `number`,当前图片在图片数组中的下标。 16 | 17 | - `urlList` : `array`,需要预览的图片的url数组 18 | -------------------------------------------------------------------------------- /docs/frontend/global-methods/puzzle-verify.md: -------------------------------------------------------------------------------- 1 | # 拼图滑块验证 2 | 3 | 4 | 5 | ### 使用: 6 | 7 | ```js 8 | this.$verify().then(...).catch(...) 9 | ``` 10 | 11 | 返回一个 `promise`,如果验证失败会 `reject`,否则 `resolve` 12 | -------------------------------------------------------------------------------- /docs/frontend/global-methods/signature.md: -------------------------------------------------------------------------------- 1 | # 手写签名 2 | 3 | ### 使用: 4 | 5 | ```js 6 | //开始签名 7 | this.$signature({image, lineWidth, lineColor, onConfirm) 8 | 9 | //退出签名 10 | this.$signature.close() 11 | ``` 12 | 13 | ### $signature({image, lineWidth, lineColor, onConfirm) 14 | 15 | - `image` : `string`,需要回显的签名图片的src。 16 | 17 | - `lineWidth` : `number`,线的宽度,默认 `6` 18 | 19 | - `lineColor` : `string`,线的颜色,默认 `'#000000'` 20 | 21 | - `onConfirm` : `function`,签名完毕后触发,回调参数为签名图片的base64 22 | -------------------------------------------------------------------------------- /docs/frontend/icon.md: -------------------------------------------------------------------------------- 1 | # 图标 2 | 3 | 组件已全局注册,以``来使用。 4 | 当`icon`属性以`svg-`开头时,将渲染为`svg`,否则为`i`标签。 5 | svg的引入与[vue-element-admin](https://panjiachen.github.io/vue-element-admin-site/zh/guide/advanced/icon.html)相同。 6 | -------------------------------------------------------------------------------- /docs/frontend/layout.md: -------------------------------------------------------------------------------- 1 | # 布局 2 | 3 | 4 | 5 | 该布局用的是[el-admin-layout](https://github.com/toesbieya/el-admin-layout) ,[文档](https://doc.toesbieya.cn/el-admin-layout/) 6 | 7 | 项目中没有用到该布局的页面只有 `@/router/define.js` 里的 `login`、`403`、`404`、`500`。 8 | -------------------------------------------------------------------------------- /docs/frontend/mock.md: -------------------------------------------------------------------------------- 1 | # mock 2 | 3 | 如果不想依赖后端的话,需要将 `@/config` 中的 `useMock` 设为true, 4 | 同时在 `@/mock/controller` 里写对应的处理路由,项目中预先写了三个基础的路由, 5 | 可以让你进行 *登陆-登出* 的基础操作,可以照着代码自行扩展。 6 | 7 | 目前mock和代理不能共存,如果真想要这个功能的话,需要自己在`vue.config.js` 中的 `devServer.proxy` 设置拦截路径。 8 | -------------------------------------------------------------------------------- /docs/frontend/new.md: -------------------------------------------------------------------------------- 1 | # 新增页面 2 | 3 | 1. 把数据请求api创建出来,在`@/api`下根据模块区分。 4 | 5 | 2. 在`@/view`下创建路由页面,根据模块区分,页面务必以`Page.vue`结尾。 6 | 7 | 3. 如果页面过大过复杂,建议按功能拆分,放在当前页面的文件夹里。 8 | 9 | 4. 独有的样式同样放在当前页面的文件夹里,能公用的提取到`@/asset/style`里。 10 | 11 | 5. 路由定义 12 | - 5.1 如果使用静态路由,在`@/router/module`下参考预设路由创建文件,并在`@/router/module/index.js`中导出。 13 | - 5.2 如果使用动态路由,需要在数据库或`系统管理 -> 菜单管理`中添加路由信息。 14 | 15 | 6. 如果需要创建vuex模块,请在`@/store/module`下创建,该文件夹下的js会被自动导出。 16 | 17 | 7. 如果页面之间存在公共组件,建议抽取出来放到`@/component`中 18 | 19 | 8. 如果页面之间存在公共逻辑,建议抽取出来放到`@/mixin`中 20 | -------------------------------------------------------------------------------- /docs/frontend/plugins.md: -------------------------------------------------------------------------------- 1 | # 插件 2 | 3 | `@/plugin` 中放的是即使删掉也不会影响运行的东东,都通过`import().then()`的方式来引用。 4 | 5 | ## canvas动画 6 | 7 | 所有动画位于 `@/plugin/canvasAnimation`下,每一个文件夹都会导出一个`Animation`对象, 8 | 使用 `new Animation(canvas)`的方式来创建一个动画,想停止的话调用 `Animation.stop()` 即可。 9 | 10 | ## 图片压缩 11 | 12 | 支持 `png`、`jpg` 两种格式的图片,使用方法参考 `@/view/example/test/develop/component/ImageCompressTest.vue`。 13 | 14 | ::: tip 15 | 由于是以 `worker` 的形式调用,所以需要准备 `cjpeg.min.js` 和 `pngquant.min.js`,这两个文件都放在项目的 `public`下。 16 | ::: 17 | 18 | ## 其他 19 | 20 | 此外项目中还有 `live2d` 和 `webgl` 两个插件,有兴趣的可以自行查看。 21 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "dev": "vuepress dev .", 6 | "build": "vuepress build ." 7 | }, 8 | "devDependencies": { 9 | "vuepress": "^1.5.2" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docs/start.md: -------------------------------------------------------------------------------- 1 | # 启动 2 | 3 | ### 前端 4 | 5 | ```shell script 6 | npm run serve 7 | ``` 8 | 9 | ### 后端 10 | 11 | local版直接运行启动类即可 12 | 13 | cloud版请按以下步骤启动: 14 | 15 | 1. 下载并配制好nacos后,按照nacos的文档启动nacos。 16 | 17 | 2. 将`/nacos-config`下的文件打包成`DEFAULT_GROUP.ZIP`,然后在nacos的web端上导入。 18 | 19 | 3. 按一定顺序启动各个模块。`websocket`、`schedule` 这两个个可以按任意顺序启动,之后启动 `web/file`, 20 | 然后启动 `web/web-modules/record`,然后启动 `gateway`,剩余的 `web-modules` 中,`web/web-modules/account` 21 | 必须要在 `web/web-modules/system` 之后启动,`web/web-modules/document` 必须要在 `web/web-modules/stock` 之后启动, 22 | 剩余的可以按任意顺序启动。 23 | -------------------------------------------------------------------------------- /java/cloud/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.idea/ 3 | *.iml 4 | .mvn 5 | mvnw 6 | *.cmd 7 | -------------------------------------------------------------------------------- /java/cloud/api/src/main/java/cn/toesbieya/jxc/api/FileApi.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.api; 2 | 3 | import java.util.List; 4 | 5 | public interface FileApi { 6 | String getToken(); 7 | 8 | void delete(String key); 9 | 10 | void deleteBatch(String... key); 11 | 12 | default void deleteBatch(List key) { 13 | deleteBatch(key.toArray(new String[0])); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/api/src/main/java/cn/toesbieya/jxc/api/StockApi.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.api; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizStock; 4 | import cn.toesbieya.jxc.common.model.vo.StockOutboundVo; 5 | import cn.toesbieya.jxc.common.model.vo.StockSearch; 6 | import cn.toesbieya.jxc.common.model.vo.StockSearchResult; 7 | 8 | import java.util.List; 9 | 10 | public interface StockApi { 11 | List getByCondition(StockSearch vo); 12 | 13 | List getDetail(String cids); 14 | 15 | void inbound(List list); 16 | 17 | void outbound(List list); 18 | } 19 | -------------------------------------------------------------------------------- /java/cloud/api/src/main/java/cn/toesbieya/jxc/api/system/DepartmentApi.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.api.system; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysUser; 4 | import cn.toesbieya.jxc.common.model.vo.DepartmentVo; 5 | 6 | import java.util.Set; 7 | 8 | public interface DepartmentApi { 9 | //获取用户的数据范围(部门ID集合),返回null说明无需限制 10 | Set getUserDataScope(SysUser user); 11 | 12 | //获取带有全名的部门 13 | DepartmentVo getById(int id); 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/api/src/main/java/cn/toesbieya/jxc/api/system/ResourceApi.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.api.system; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysResource; 4 | import cn.toesbieya.jxc.common.model.entity.SysRole; 5 | 6 | import java.util.List; 7 | 8 | public interface ResourceApi { 9 | //获取已启用的数据接口列表 10 | List getEnableApi(); 11 | 12 | //获取角色的权限列表,包含admin权限 13 | List getResourceByRole(SysRole role); 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/api/src/main/java/cn/toesbieya/jxc/api/system/RoleApi.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.api.system; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysRole; 4 | 5 | public interface RoleApi { 6 | SysRole getRoleById(Integer roleId); 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/constant/DocConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.constant; 2 | 3 | public interface DocConstant { 4 | //更新单据ID时的redis锁的键 5 | String UPDATE_DOC_LOCK_KEY = "UPDATE_DOC"; 6 | 7 | //单据ID的redis缓存的键 8 | String DOC_TYPE_REDIS_KEY = "DOC_ID"; 9 | 10 | //单据类型 11 | String[] DOC_TYPE = {"CGDD", "CGRK", "CGTH", "XSDD", "XSCK", "XSTH"}; 12 | } 13 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/constant/SessionConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.constant; 2 | 3 | public interface SessionConstant { 4 | //session过期时间,单位秒 5 | long EXPIRE = 3600 * 8; 6 | 7 | //存储用户信息的键的前缀 8 | String REDIS_NAMESPACE = "sessions:"; 9 | 10 | //key过期事件的前缀 11 | String REDIS_EXPIRE_TOPIC_PREFIX = "__keyspace@0__:"; 12 | 13 | //http headers中token的字段名 14 | String TOKEN_KEY = "X-Token"; 15 | 16 | //区别无活动用户的时间间隔,单位秒 17 | long NO_ACTION_INTERVAL = 1800; 18 | } 19 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/enumeration/DataScopeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.enumeration; 2 | 3 | public enum DataScopeEnum { 4 | ALL(1), SELF(2), SPECIFIC(3); 5 | 6 | private final int code; 7 | 8 | DataScopeEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/enumeration/GeneralStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.enumeration; 2 | 3 | public enum GeneralStatusEnum { 4 | DISABLED(0), ENABLED(1); 5 | 6 | private final int code; 7 | 8 | GeneralStatusEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/enumeration/ResourceTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.enumeration; 2 | 3 | public enum ResourceTypeEnum { 4 | ROOT(0), FOLDER(1), LEAF(2), API(3); 5 | 6 | private final int code; 7 | 8 | ResourceTypeEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/exception/JsonResultException.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.exception; 2 | 3 | public class JsonResultException extends RuntimeException { 4 | public JsonResultException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizDoc.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class BizDoc implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private String id; 11 | private Integer cid; 12 | private String cname; 13 | private Long ctime; 14 | private Integer vid; 15 | private String vname; 16 | private Long vtime; 17 | private Integer status; 18 | private String remark; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizDocSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | public class BizDocSub implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | private Integer id; 12 | private String pid; 13 | private Integer cid; 14 | private String cname; 15 | private BigDecimal num; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizPurchaseInbound.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizPurchaseInbound extends BizDoc { 11 | private String pid; 12 | } 13 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizPurchaseInboundSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizPurchaseInboundSub extends BizDocSub { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizPurchaseOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.math.BigDecimal; 9 | 10 | @Data 11 | @ToString(callSuper = true) 12 | @EqualsAndHashCode(callSuper = true) 13 | @NoArgsConstructor 14 | public class BizPurchaseOrder extends BizDoc { 15 | private Integer sid; 16 | private String sname; 17 | private Integer finish; 18 | private Long ftime; 19 | private BigDecimal total; 20 | } 21 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizPurchaseOrderSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizPurchaseOrderSub extends BizDocSub { 13 | private BigDecimal price; 14 | private BigDecimal remainNum; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizSellOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | import java.math.BigDecimal; 9 | 10 | @Data 11 | @ToString(callSuper = true) 12 | @EqualsAndHashCode(callSuper = true) 13 | public class BizSellOrder extends BizDoc { 14 | private Integer customerId; 15 | private String customerName; 16 | private Integer finish; 17 | private Long ftime; 18 | private BigDecimal total; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizSellOrderSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizSellOrderSub extends BizDocSub { 13 | private BigDecimal price; 14 | private BigDecimal remainNum; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizSellOutbound.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.NoArgsConstructor; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class BizSellOutbound extends BizDoc { 12 | private String pid; 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/BizSellOutboundSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizSellOutboundSub extends BizDocSub { 11 | private Integer sid; 12 | } 13 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/MsgState.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class MsgState implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private Integer mid; 12 | private Integer uid; 13 | private Long time; 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/StatFinishOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class StatFinishOrder implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private Integer purchase; 12 | private Integer sell; 13 | private Long time; 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/StatProfitGoods.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class StatProfitGoods extends StatProfitTotal { 11 | private Integer cid; 12 | private String cname; 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/StatProfitTotal.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | public class StatProfitTotal implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | private Integer id; 12 | private BigDecimal purchase; 13 | private BigDecimal sell; 14 | private BigDecimal profit; 15 | private Long time; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysCategory.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysCategory implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private Integer pid; 12 | private String name; 13 | private boolean leaf = false; 14 | private Long ctime; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysCustomer.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysCustomer implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private String name; 12 | private String address; 13 | private String linkman; 14 | private String linkphone; 15 | private String region; 16 | private boolean enable = false; 17 | private Long ctime; 18 | private String remark; 19 | } -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysDepartment.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysDepartment implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private Integer pid; 12 | private String name; 13 | private boolean enable = false; 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysRegion.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysRegion implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private String id; 11 | private String pid; 12 | private String name; 13 | private String fullname; 14 | private int level; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysResource.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysResource implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private Integer pid; 12 | private Integer type; 13 | private String name; 14 | private String path; 15 | private String component; 16 | private String meta; 17 | private boolean admin = false; 18 | private boolean enable = true; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysSupplier.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysSupplier implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private String name; 12 | private String address; 13 | private String linkman; 14 | private String linkphone; 15 | private String region; 16 | private boolean enable = false; 17 | private Long ctime; 18 | private String remark; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/entity/SysUser.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | @Data 8 | public class SysUser implements Serializable { 9 | private static final long serialVersionUID = 1L; 10 | private Integer id; 11 | private String loginName; 12 | private String nickName; 13 | private String pwd; 14 | private Integer role; 15 | private String avatar; 16 | private Long ctime; 17 | private boolean admin = false; 18 | private boolean enable = false; 19 | private Integer dept; 20 | } 21 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/vo/BaseSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class BaseSearch { 7 | private Integer page; 8 | private Integer pageSize; 9 | } 10 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/vo/SocketEventVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.constant.SocketConstant; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | public class SocketEventVo { 10 | //事件类型 11 | private int type = SocketConstant.REDIS_EVENT_SPECIFIC; 12 | 13 | //事件名称 14 | private String event; 15 | 16 | //发送对象的id集合 17 | private List to; 18 | 19 | //数据包 20 | private Object data; 21 | } 22 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/vo/SocketOfflineVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class SocketOfflineVo { 11 | //用户ID 12 | private Integer uid; 13 | 14 | //断开时间 15 | private Long time; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/vo/StockOutboundVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class StockOutboundVo implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | private Integer id; 16 | private BigDecimal num; 17 | } 18 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/java/cn/toesbieya/jxc/common/model/vo/StockSearchResult.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.common.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import java.math.BigDecimal; 7 | 8 | @Data 9 | public class StockSearchResult implements Serializable { 10 | private static final long serialVersionUID = 1L; 11 | private Integer cid; 12 | private String cname; 13 | private BigDecimal totalNum; 14 | private BigDecimal totalPrice; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/common/src/main/resources/script/increase_and_expire.lua: -------------------------------------------------------------------------------- 1 | local current 2 | current = redis.call("incr", KEYS[1]) 3 | if tonumber(current) == 1 then 4 | redis.call("expire", KEYS[1], ARGV[1]) 5 | end 6 | return current -------------------------------------------------------------------------------- /java/cloud/gateway/src/main/java/cn/toesbieya/jxc/gateway/GatewayApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.gateway; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @EnableDiscoveryClient 9 | public class GatewayApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(GatewayApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/gateway/src/main/java/cn/toesbieya/jxc/gateway/config/GatewayConfig.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.gateway.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | 10 | @Component 11 | @ConfigurationProperties("spring.cloud.gateway") 12 | @Data 13 | public class GatewayConfig { 14 | private Set whitelist = new HashSet<>(); 15 | 16 | private String dataId = "jxc-gateway.yml"; 17 | 18 | private String group = "DEFAULT_GROUP"; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/gateway/src/main/java/cn/toesbieya/jxc/gateway/config/RateConfig.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.gateway.config; 2 | 3 | import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import reactor.core.publisher.Mono; 7 | 8 | @Configuration 9 | public class RateConfig { 10 | @Bean 11 | public KeyResolver urlKeyResolver() { 12 | return exchange -> Mono.just(exchange.getRequest().getPath().value()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/gateway/src/main/java/cn/toesbieya/jxc/gateway/controller/FallbackController.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.gateway.controller; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.R; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | import org.springframework.web.bind.annotation.ResponseBody; 6 | 7 | public class FallbackController { 8 | @RequestMapping("fallback") 9 | @ResponseBody 10 | public R fallback() { 11 | return R.fail("服务异常"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/gateway/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-gateway 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | shared-configs: 10 | - data-id: jxc-common-redis.yml 11 | file-extension: yml 12 | 13 | discovery: 14 | server-addr: 127.0.0.1:8848 15 | 16 | dubbo: 17 | registry: 18 | address: nacos://127.0.0.1:8848 19 | cloud: 20 | subscribed-services: jxc-web-system -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-common-redis.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | redis: 3 | host: localhost 4 | port: 6379 5 | password: 6 | timeout: 3000 7 | lettuce: 8 | pool: 9 | max-idle: 500 10 | min-idle: 50 11 | max-active: 2000 12 | max-wait: 1000 -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-account.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8000 -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-doc.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8001 3 | servlet: 4 | context-path: /doc -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-file.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8002 3 | 4 | qiniu: 5 | access-key: 6 | secret-key: 7 | bucket: 8 | #七牛的临时上传凭证的有效期,单位秒 9 | token-expires: 3600 10 | #七牛的临时上传凭证的redis键名 11 | redis-cache-key: qiniu-token -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-message.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8003 3 | servlet: 4 | context-path: /message -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-record.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8004 -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-statistic.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8005 -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-stock.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8006 -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-web-system.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8007 3 | servlet: 4 | context-path: /system -------------------------------------------------------------------------------- /java/cloud/nacos-config/jxc-websocket.yml: -------------------------------------------------------------------------------- 1 | socket: 2 | #hostname: 172.24.52.184 3 | hostname: localhost 4 | port: 12580 5 | max-frame-payload-length: 1048576 6 | max-http-content-length: 1048576 -------------------------------------------------------------------------------- /java/cloud/schedule/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-schedule 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-database.yml 12 | - data-id: jxc-common-redis.yml 13 | discovery: 14 | server-addr: 127.0.0.1:8848 -------------------------------------------------------------------------------- /java/cloud/web/file/src/main/java/cn/toesbieya/jxc/file/FileApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.file; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 7 | public class FileApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(FileApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /java/cloud/web/file/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-web-file 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-redis.yml 12 | discovery: 13 | server-addr: 127.0.0.1:8848 14 | 15 | dubbo: 16 | protocol: 17 | port: -1 18 | name: dubbo 19 | scan: 20 | base-packages: cn.toesbieya.jxc.file.service 21 | registry: 22 | address: nacos://127.0.0.1:8848 -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/annoation/Lock.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface Lock { 9 | String[] value() default {}; 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/annoation/TimeCost.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface TimeCost { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/annoation/UserAction.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface UserAction { 9 | String value() default ""; 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/enumeration/UserActionEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.enumeration; 2 | 3 | public enum UserActionEnum { 4 | FAIL(0), SUCCESS(1); 5 | 6 | private final int code; 7 | 8 | UserActionEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/interceptor/predicate/UserActionPredicate.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.interceptor.predicate; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | public interface UserActionPredicate { 6 | boolean allowed(HttpServletRequest request); 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-common/src/main/java/cn/toesbieya/jxc/web/common/util/SessionUtil.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.web.common.util; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.UserVo; 4 | 5 | public class SessionUtil extends cn.toesbieya.jxc.common.util.SessionUtil { 6 | public static UserVo get() { 7 | UserVo user = ThreadUtil.getUser(); 8 | return user == null ? get(WebUtil.getRequest()) : user; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | account 13 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/AccountApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @MapperScan("cn.toesbieya.jxc.account.mapper") 9 | public class AccountApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(AccountApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/enumeration/RecLoginHistoryEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.enumeration; 2 | 3 | public enum RecLoginHistoryEnum { 4 | LOGOUT(0), LOGIN(1); 5 | 6 | private final int code; 7 | 8 | RecLoginHistoryEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/mapper/SysResourceMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysResource; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysResourceMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/mapper/SysRoleMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysRoleMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/mapper/SysUserMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysUser; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysUserMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/vo/LoginParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.vo; 2 | 3 | import lombok.Data; 4 | import org.hibernate.validator.constraints.Length; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | @Data 9 | public class LoginParam { 10 | @NotNull(message = "用户名不能为空") 11 | @Length(max = 20, message = "用户名太长了") 12 | private String username; 13 | 14 | @NotNull(message = "密码不能为空") 15 | @Length(min = 32, max = 32, message = "密码异常") 16 | private String password; 17 | } 18 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/vo/PasswordUpdateParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class PasswordUpdateParam { 7 | private Integer id; 8 | private String newPwd; 9 | private String oldPwd; 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/java/cn/toesbieya/jxc/account/vo/RegisterParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.account.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | import org.hibernate.validator.constraints.Length; 7 | 8 | import javax.validation.constraints.NotNull; 9 | 10 | @Data 11 | @ToString(callSuper = true) 12 | @EqualsAndHashCode(callSuper = true) 13 | public class RegisterParam extends LoginParam { 14 | @NotNull(message = "昵称不能为空") 15 | @Length(max = 100, message = "昵称太长了") 16 | private String nick; 17 | } 18 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/account/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-web-account 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-database.yml 12 | - data-id: jxc-common-redis.yml 13 | discovery: 14 | server-addr: 127.0.0.1:8848 15 | 16 | dubbo: 17 | registry: 18 | address: nacos://127.0.0.1:8848 19 | cloud: 20 | subscribed-services: jxc-web-file,jxc-web-record,jxc-web-system -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | doc 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/DocApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @MapperScan("cn.toesbieya.jxc.doc.mapper") 9 | public class DocApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(DocApplication.class, args); 12 | } 13 | } -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/enumeration/DocFinishEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.enumeration; 2 | 3 | public enum DocFinishEnum { 4 | TO_BE_STARTED(0), UNDERWAY(1), FINISHED(2); 5 | 6 | private final int code; 7 | 8 | DocFinishEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/enumeration/DocHistoryEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.enumeration; 2 | 3 | public enum DocHistoryEnum { 4 | WITHDRAW(0), COMMIT(1), PASS(2), REJECT(3); 5 | 6 | private final int code; 7 | 8 | DocHistoryEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/enumeration/DocStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.enumeration; 2 | 3 | public enum DocStatusEnum { 4 | DRAFT(0), WAIT_VERIFY(1), VERIFIED(2); 5 | 6 | private final int code; 7 | 8 | DocStatusEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/mapper/DocHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizDocHistory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface DocHistoryMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/mapper/PurchaseInboundSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizPurchaseInboundSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface PurchaseInboundSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/mapper/PurchaseOrderSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizPurchaseOrderSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface PurchaseOrderSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/mapper/SellOrderSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizSellOrderSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface SellOrderSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/mapper/SellOutboundSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.BizSellOutboundSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface SellOutboundSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/DocHistorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class DocHistorySearch extends BaseSearch { 12 | private String pid; 13 | private String type; 14 | private String uid; 15 | private String uname; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/DocStatusUpdate.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class DocStatusUpdate { 7 | private String id; 8 | private String pid; 9 | private String info; 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/PurchaseInboundSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class PurchaseInboundSearch extends DocSearch { 11 | private String pid; 12 | private String pidFuzzy; 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/PurchaseOrderSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class PurchaseOrderSearch extends DocSearch { 11 | private Integer sid; 12 | private String sname; 13 | private String finish; 14 | private Long ftimeStart; 15 | private Long ftimeEnd; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/SellOrderSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class SellOrderSearch extends DocSearch { 11 | private Integer customerId; 12 | private String customerName; 13 | private String finish; 14 | private Long ftimeStart; 15 | private Long ftimeEnd; 16 | } 17 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/java/cn/toesbieya/jxc/doc/model/vo/SellOutboundSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.doc.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class SellOutboundSearch extends DocSearch { 11 | private String pid; 12 | private String pidFuzzy; 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-web-doc 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-database.yml 12 | - data-id: jxc-common-redis.yml 13 | discovery: 14 | server-addr: 127.0.0.1:8848 15 | 16 | dubbo: 17 | registry: 18 | address: nacos://127.0.0.1:8848 19 | cloud: 20 | subscribed-services: jxc-web-record,jxc-web-stock -------------------------------------------------------------------------------- /java/cloud/web/web-modules/doc/src/main/resources/script/get_doc_id.lua: -------------------------------------------------------------------------------- 1 | if redis.call('exists', KEYS[1]) == 0 then 2 | if redis.call('hget', KEYS[2], 'date') == ARGV[1] then 3 | if redis.call('hexists', KEYS[2], ARGV[2]) == 1 then 4 | return redis.call('hincrby', KEYS[2], ARGV[2], 1) 5 | else 6 | return 0 7 | end 8 | else 9 | return 0 10 | end 11 | else 12 | return 0 13 | end -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | message 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/MessageApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @MapperScan("cn.toesbieya.jxc.message.mapper") 9 | public class MessageApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(MessageApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/constant/MsgConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message.constant; 2 | 3 | public interface MsgConstant { 4 | Integer STATUS_DRAFT = 0; //拟定 5 | Integer STATUS_PUBLISHED = 1; //已发布 6 | Integer STATUS_WITHDREW = 2; //已撤回 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/mapper/MsgMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.Msg; 4 | import cn.toesbieya.jxc.message.model.vo.MsgPersonalSearch; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface MsgMapper extends BaseMapper { 10 | List getReadByUser(MsgPersonalSearch search); 11 | 12 | List getUnreadByUser(MsgPersonalSearch search); 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/mapper/MsgStateMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.MsgState; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface MsgStateMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/model/vo/MsgPersonalSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class MsgPersonalSearch extends BaseSearch { 12 | private Integer uid; 13 | private Long ctime; 14 | private boolean unread = true; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/java/cn/toesbieya/jxc/message/model/vo/MsgSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.message.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class MsgSearch extends BaseSearch { 12 | private String title; 13 | private String type; 14 | private String status; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/message/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-web-message 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-database.yml 12 | - data-id: jxc-common-redis.yml 13 | discovery: 14 | server-addr: 127.0.0.1:8848 15 | 16 | dubbo: 17 | registry: 18 | address: nacos://127.0.0.1:8848 19 | cloud: 20 | subscribed-services: jxc-web-record -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | record 13 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/RecordApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @MapperScan("cn.toesbieya.jxc.record.mapper") 9 | public class RecordApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(RecordApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/mapper/RecAttachmentMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.RecAttachment; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface RecAttachmentMapper extends BaseMapper { 9 | int insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/mapper/RecLoginHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.RecLoginHistory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface RecLoginHistoryMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/mapper/RecUserActionMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.RecUserAction; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface RecUserActionMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/model/vo/LoginHistorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class LoginHistorySearch extends BaseSearch { 12 | private Integer uid; 13 | private String uname; 14 | private Boolean login; 15 | private String ip; 16 | private String address; 17 | private Long endTime; 18 | private Long startTime; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/record/src/main/java/cn/toesbieya/jxc/record/model/vo/UserActionSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.record.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class UserActionSearch extends BaseSearch { 12 | private Integer uid; 13 | private String uname; 14 | private String ip; 15 | private String url; 16 | private Long startTime; 17 | private Long endTime; 18 | private Boolean success; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/statistic/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | statistic 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/statistic/src/main/java/cn/toesbieya/jxc/statistic/model/vo/FourBlockStat.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.statistic.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | @Data 8 | public class FourBlockStat { 9 | private long online; 10 | private BigDecimal purchase; 11 | private BigDecimal sell; 12 | private BigDecimal profit; 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/statistic/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-web-statistic 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-database.yml 12 | - data-id: jxc-common-redis.yml 13 | discovery: 14 | server-addr: 127.0.0.1:8848 15 | 16 | dubbo: 17 | registry: 18 | address: nacos://127.0.0.1:8848 19 | cloud: 20 | subscribed-services: jxc-web-record -------------------------------------------------------------------------------- /java/cloud/web/web-modules/stock/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | stock 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/stock/src/main/java/cn/toesbieya/jxc/stock/StockApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.stock; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cloud.openfeign.EnableFeignClients; 7 | 8 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 9 | @MapperScan("cn.toesbieya.jxc.stock.mapper") 10 | public class StockApplication { 11 | public static void main(String[] args) { 12 | SpringApplication.run(StockApplication.class, args); 13 | } 14 | } -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | web-modules 7 | cn.toesbieya 8 | 0.0.1-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | system 13 | 14 | 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/SystemApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | @MapperScan("cn.toesbieya.jxc.system.mapper") 9 | public class SystemApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(SystemApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysCategory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | public interface SysCategoryMapper extends BaseMapper { 8 | boolean checkIsUse(@Param("cid") Integer cid); 9 | } 10 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysCustomerMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysCustomer; 4 | import cn.toesbieya.jxc.system.model.vo.RegionValueResult; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface SysCustomerMapper extends BaseMapper { 10 | List getLimitRegion(); 11 | } 12 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysDepartmentMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysDepartment; 4 | import cn.toesbieya.jxc.common.model.vo.DepartmentVo; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | public interface SysDepartmentMapper extends BaseMapper { 11 | List selectChildrenById(@Param("id") int id); 12 | 13 | List selectParentsById(@Param("id") int id); 14 | } 15 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysRegionMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysRegion; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysRegionMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysResourceMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysResource; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface SysResourceMapper extends BaseMapper { 10 | List selectChildren(@Param("ids") String ids); 11 | } 12 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysRoleMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysRoleMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysSupplierMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysSupplier; 4 | import cn.toesbieya.jxc.system.model.vo.RegionValueResult; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface SysSupplierMapper extends BaseMapper { 10 | List getLimitRegion(); 11 | } 12 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/mapper/SysUserMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.mapper; 2 | 3 | import cn.toesbieya.jxc.common.model.entity.SysUser; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysUserMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/model/vo/CategorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CategorySearch { 7 | private Integer id; 8 | private String ids; 9 | private Integer pid; 10 | private String pids; 11 | private String name; 12 | private Boolean leaf; 13 | private Long startTime; 14 | private Long endTime; 15 | } 16 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/model/vo/RegionValueResult.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RegionValueResult { 7 | private String id; 8 | private int value; 9 | } 10 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/model/vo/RoleSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class RoleSearch extends BaseSearch { 12 | private Integer id; 13 | private String name; 14 | private Integer cid; 15 | private String cname; 16 | private Boolean enable; 17 | private Long startTime; 18 | private Long endTime; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/java/cn/toesbieya/jxc/system/model/vo/UserSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.system.model.vo; 2 | 3 | import cn.toesbieya.jxc.common.model.vo.BaseSearch; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Data 9 | @ToString(callSuper = true) 10 | @EqualsAndHashCode(callSuper = true) 11 | public class UserSearch extends BaseSearch { 12 | private Integer id; 13 | private String loginName; 14 | private String nickName; 15 | private String role; 16 | private Long startTime; 17 | private Long endTime; 18 | private Boolean enable; 19 | } 20 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/resources/mapper/SysCategory.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/resources/mapper/SysCustomer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /java/cloud/web/web-modules/system/src/main/resources/mapper/SysSupplier.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /java/cloud/websocket/src/main/java/cn/toesbieya/jxc/socket/WebSocketApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.socket; 2 | 3 | import org.springframework.boot.WebApplicationType; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.builder.SpringApplicationBuilder; 6 | 7 | @SpringBootApplication(scanBasePackages = "cn.toesbieya.jxc") 8 | public class WebSocketApplication { 9 | public static void main(String[] args) { 10 | new SpringApplicationBuilder(WebSocketApplication.class) 11 | .web(WebApplicationType.NONE) 12 | .run(args); 13 | } 14 | } -------------------------------------------------------------------------------- /java/cloud/websocket/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: jxc-websocket 4 | 5 | cloud: 6 | nacos: 7 | config: 8 | server-addr: 127.0.0.1:8848 9 | file-extension: yml 10 | shared-configs: 11 | - data-id: jxc-common-redis.yml 12 | discovery: 13 | server-addr: 127.0.0.1:8848 -------------------------------------------------------------------------------- /java/db/my.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/java/db/my.rar -------------------------------------------------------------------------------- /java/local/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.idea/ 3 | *.iml 4 | .mvn 5 | mvnw 6 | *.cmd 7 | *.jks 8 | application-prod.yml -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/MyApplication.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.scheduling.annotation.EnableScheduling; 7 | 8 | @EnableScheduling 9 | @MapperScan("cn.toesbieya.jxc.mapper") 10 | @SpringBootApplication 11 | public class MyApplication { 12 | public static void main(String[] args) { 13 | SpringApplication.run(MyApplication.class, args); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/annoation/Lock.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface Lock { 9 | String[] value() default {}; 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/annoation/TimeCost.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface TimeCost { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/annoation/UserAction.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.annoation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Documented 8 | public @interface UserAction { 9 | String value() default ""; 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/config/QiniuConfig.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.config; 2 | 3 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.context.annotation.DependsOn; 7 | 8 | @Configuration 9 | @EnableConfigurationProperties(QiniuProperty.class) 10 | @DependsOn("redisUtil") 11 | public class QiniuConfig { 12 | @Bean 13 | public QiniuTemplate qiniuTemplate(QiniuProperty property) { 14 | return new QiniuTemplate(property); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/config/SocketProperty.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | @ConfigurationProperties("socket") 7 | @Data 8 | public class SocketProperty { 9 | private String hostname = "localhost"; 10 | private Integer port = 12580; 11 | private Integer maxFramePayloadLength = 1024 * 1024; 12 | private Integer maxHttpContentLength = 1024 * 1024; 13 | 14 | //ssl证书地址,jks格式,可以是classpath:xxx,也可以是C:\xxx这样的绝对路径 15 | private String keyStore; 16 | private String keyStorePassword; 17 | } 18 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/constant/DocConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.constant; 2 | 3 | public interface DocConstant { 4 | String UPDATE_DOC_LOCK_KEY = "UPDATE_DOC"; 5 | String[] DOC_TYPE = {"CGDD", "CGRK", "CGTH", "XSDD", "XSCK", "XSTH"}; 6 | String DOC_TYPE_REDIS_KEY = "DOC_ID"; 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/constant/MsgConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.constant; 2 | 3 | public interface MsgConstant { 4 | Integer STATUS_DRAFT = 0; //拟定 5 | Integer STATUS_PUBLISHED = 1; //已发布 6 | Integer STATUS_WITHDREW = 2; //已撤回 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/constant/SessionConstant.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.constant; 2 | 3 | public interface SessionConstant { 4 | //session过期时间,单位秒 5 | long EXPIRE = 3600 * 8; 6 | 7 | //存储用户信息的键的前缀 8 | String REDIS_NAMESPACE = "sessions:"; 9 | 10 | //key过期事件的前缀 11 | String REDIS_EXPIRE_TOPIC_PREFIX = "__keyspace@0__:"; 12 | 13 | //http headers中token的字段名 14 | String TOKEN_KEY = "X-Token"; 15 | 16 | //区别无活动用户的时间间隔,单位秒 17 | long NO_ACTION_INTERVAL = 1800; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/DataScopeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum DataScopeEnum { 4 | ALL(1), SELF(2), SPECIFIC(3); 5 | 6 | private final int code; 7 | 8 | DataScopeEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/DocFinishEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum DocFinishEnum { 4 | TO_BE_STARTED(0), UNDERWAY(1), FINISHED(2); 5 | 6 | private final int code; 7 | 8 | DocFinishEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/DocHistoryEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum DocHistoryEnum { 4 | WITHDRAW(0), COMMIT(1), PASS(2), REJECT(3); 5 | 6 | private final int code; 7 | 8 | DocHistoryEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/DocStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum DocStatusEnum { 4 | DRAFT(0), WAIT_VERIFY(1), VERIFIED(2); 5 | 6 | private final int code; 7 | 8 | DocStatusEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/GeneralStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum GeneralStatusEnum { 4 | DISABLED(0), ENABLED(1); 5 | 6 | private final int code; 7 | 8 | GeneralStatusEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/RecLoginHistoryEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum RecLoginHistoryEnum { 4 | LOGOUT(0), LOGIN(1); 5 | 6 | private final int code; 7 | 8 | RecLoginHistoryEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/ResourceTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum ResourceTypeEnum { 4 | ROOT(0), FOLDER(1), LEAF(2), API(3); 5 | 6 | private final int code; 7 | 8 | ResourceTypeEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/enumeration/UserActionEnum.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.enumeration; 2 | 3 | public enum UserActionEnum { 4 | FAIL(0), SUCCESS(1); 5 | 6 | private final int code; 7 | 8 | UserActionEnum(int code) { 9 | this.code = code; 10 | } 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/exception/JsonResultException.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.exception; 2 | 3 | public class JsonResultException extends RuntimeException { 4 | public JsonResultException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/BizDocHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.BizDocHistory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface BizDocHistoryMapper extends BaseMapper { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/BizPurchaseInboundSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.BizPurchaseInboundSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface BizPurchaseInboundSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/BizPurchaseOrderSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.BizPurchaseOrderSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface BizPurchaseOrderSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/BizSellOrderSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.BizSellOrderSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface BizSellOrderSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/BizSellOutboundSubMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.BizSellOutboundSub; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface BizSellOutboundSubMapper extends BaseMapper { 9 | void insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/MsgMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.Msg; 4 | import cn.toesbieya.jxc.model.vo.search.MsgPersonalSearch; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface MsgMapper extends BaseMapper { 10 | List getReadByUser(MsgPersonalSearch search); 11 | 12 | List getUnreadByUser(MsgPersonalSearch search); 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/MsgStateMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.MsgState; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface MsgStateMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/RecAttachmentMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.RecAttachment; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | import java.util.List; 7 | 8 | public interface RecAttachmentMapper extends BaseMapper { 9 | int insertBatch(List list); 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/RecLoginHistoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.RecLoginHistory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface RecLoginHistoryMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/RecUserActionMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.RecUserAction; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface RecUserActionMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysCategory; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | public interface SysCategoryMapper extends BaseMapper { 8 | boolean checkIsUse(@Param("cid") Integer cid); 9 | } 10 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysCustomerMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysCustomer; 4 | import cn.toesbieya.jxc.model.vo.result.RegionValueResult; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface SysCustomerMapper extends BaseMapper { 10 | List getLimitRegion(); 11 | } -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysDepartmentMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysDepartment; 4 | import cn.toesbieya.jxc.model.vo.DepartmentVo; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | public interface SysDepartmentMapper extends BaseMapper { 11 | List selectChildrenById(@Param("id") int id); 12 | 13 | List selectParentsById(@Param("id") int id); 14 | } 15 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysRegionMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysRegion; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysRegionMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysResourceMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysResource; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | import java.util.List; 8 | 9 | public interface SysResourceMapper extends BaseMapper { 10 | List selectChildren(@Param("ids") String ids); 11 | } 12 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysRoleMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysRole; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysRoleMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysSupplierMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysSupplier; 4 | import cn.toesbieya.jxc.model.vo.result.RegionValueResult; 5 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | public interface SysSupplierMapper extends BaseMapper { 10 | List getLimitRegion(); 11 | } 12 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/mapper/SysUserMapper.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.mapper; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysUser; 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 5 | 6 | public interface SysUserMapper extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizDoc.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class BizDoc { 7 | private String id; 8 | private Integer cid; 9 | private String cname; 10 | private Long ctime; 11 | private Integer vid; 12 | private String vname; 13 | private Long vtime; 14 | private Integer status; 15 | private String remark; 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizDocHistory.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class BizDocHistory { 13 | private Integer id; 14 | private String pid; 15 | private Integer type; 16 | private Integer uid; 17 | private String uname; 18 | private Integer statusBefore; 19 | private Integer statusAfter; 20 | private Long time; 21 | private String info; 22 | } 23 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizDocSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | @Data 8 | public class BizDocSub { 9 | private Integer id; 10 | private String pid; 11 | private Integer cid; 12 | private String cname; 13 | private BigDecimal num; 14 | } 15 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizPurchaseInbound.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizPurchaseInbound extends BizDoc { 11 | private String pid; 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizPurchaseInboundSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizPurchaseInboundSub extends BizDocSub { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizPurchaseOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizPurchaseOrder extends BizDoc { 13 | private Integer sid; 14 | private String sname; 15 | private Integer finish; 16 | private Long ftime; 17 | private BigDecimal total; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizPurchaseOrderSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizPurchaseOrderSub extends BizDocSub { 13 | private BigDecimal price; 14 | private BigDecimal remainNum; 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizSellOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizSellOrder extends BizDoc { 13 | private Integer customerId; 14 | private String customerName; 15 | private Integer finish; 16 | private Long ftime; 17 | private BigDecimal total; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizSellOrderSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | import java.math.BigDecimal; 8 | 9 | @Data 10 | @ToString(callSuper = true) 11 | @EqualsAndHashCode(callSuper = true) 12 | public class BizSellOrderSub extends BizDocSub { 13 | private BigDecimal price; 14 | private BigDecimal remainNum; 15 | } -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizSellOutbound.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizSellOutbound extends BizDoc { 11 | private String pid; 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizSellOutboundSub.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class BizSellOutboundSub extends BizDocSub { 11 | private Integer sid; 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/BizStock.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.math.BigDecimal; 9 | 10 | @Data 11 | @Builder 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | public class BizStock { 15 | private Integer id; 16 | private Integer cid; 17 | private String cname; 18 | private BigDecimal num; 19 | private BigDecimal price; 20 | private Long ctime; 21 | private String cgrkid; 22 | private String cgddid; 23 | } -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/MsgState.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class MsgState { 7 | private Integer id; 8 | private Integer mid; 9 | private Integer uid; 10 | private Long time; 11 | } 12 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/RecAttachment.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class RecAttachment { 13 | private Integer id; 14 | private String pid; 15 | private String name; 16 | private Long time; 17 | private Integer sort; 18 | private String url; 19 | private Long size; 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/RecLoginHistory.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class RecLoginHistory { 13 | private Long id; 14 | private Integer uid; 15 | private String uname; 16 | private String ip; 17 | private String address; 18 | private boolean login = false; 19 | private Long time; 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/RecUserAction.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class RecUserAction { 13 | private Long id; 14 | private Integer uid; 15 | private String uname; 16 | private String url; 17 | private String ip; 18 | private Long time; 19 | private String action; 20 | private String error; 21 | private boolean success = false; 22 | } 23 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/StatFinishOrder.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class StatFinishOrder { 7 | private Integer id; 8 | private Integer purchase; 9 | private Integer sell; 10 | private Long time; 11 | } 12 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/StatProfitGoods.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class StatProfitGoods extends StatProfitTotal { 11 | private Integer cid; 12 | private String cname; 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/StatProfitTotal.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | @Data 8 | public class StatProfitTotal { 9 | private Integer id; 10 | private BigDecimal purchase; 11 | private BigDecimal sell; 12 | private BigDecimal profit; 13 | private Long time; 14 | } 15 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysCategory.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SysCategory { 7 | private Integer id; 8 | private Integer pid; 9 | private String name; 10 | private boolean leaf = false; 11 | private Long ctime; 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysCustomer.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class SysCustomer { 13 | private Integer id; 14 | private String name; 15 | private String address; 16 | private String linkman; 17 | private String linkphone; 18 | private String region; 19 | private boolean enable = false; 20 | private Long ctime; 21 | private String remark; 22 | } -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysDepartment.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SysDepartment { 7 | private Integer id; 8 | private Integer pid; 9 | private String name; 10 | private boolean enable = false; 11 | } 12 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysRegion.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SysRegion { 7 | private String id; 8 | private String pid; 9 | private String name; 10 | private String fullname; 11 | private int level; 12 | } 13 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysResource.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SysResource { 11 | private Integer id; 12 | private Integer pid; 13 | private Integer type; 14 | private String name; 15 | private String path; 16 | private String component; 17 | private String meta; 18 | private boolean admin = false; 19 | private boolean enable = true; 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysRole.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import cn.toesbieya.jxc.enumeration.DataScopeEnum; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class SysRole { 8 | private Integer id; 9 | private String name; 10 | private Integer cid; 11 | private String cname; 12 | private Long ctime; 13 | private boolean enable = false; 14 | private int scope = DataScopeEnum.ALL.getCode(); 15 | private String departmentId; 16 | private String resourceId; 17 | } 18 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysSupplier.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SysSupplier { 7 | private Integer id; 8 | private String name; 9 | private String address; 10 | private String linkman; 11 | private String linkphone; 12 | private String region; 13 | private boolean enable = false; 14 | private Long ctime; 15 | private String remark; 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/entity/SysUser.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.entity; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @NoArgsConstructor 10 | public class SysUser { 11 | private Integer id; 12 | private String loginName; 13 | private String nickName; 14 | private String pwd; 15 | private Integer role; 16 | private String avatar; 17 | private Long ctime; 18 | private boolean admin = false; 19 | private boolean enable = false; 20 | private Integer dept; 21 | } 22 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/CustomerVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysCustomer; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.NoArgsConstructor; 7 | import lombok.ToString; 8 | import org.springframework.beans.BeanUtils; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @ToString(callSuper = true) 13 | @EqualsAndHashCode(callSuper = true) 14 | public class CustomerVo extends SysCustomer { 15 | private String regionName; 16 | 17 | public CustomerVo(SysCustomer parent) { 18 | BeanUtils.copyProperties(parent, this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/DepartmentVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysDepartment; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.NoArgsConstructor; 7 | import lombok.ToString; 8 | import org.springframework.beans.BeanUtils; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @ToString(callSuper = true) 13 | @EqualsAndHashCode(callSuper = true) 14 | public class DepartmentVo extends SysDepartment { 15 | String fullname; 16 | 17 | public DepartmentVo(SysDepartment parent) { 18 | BeanUtils.copyProperties(parent, this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/LoginParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import lombok.Data; 4 | import org.hibernate.validator.constraints.Length; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | @Data 9 | public class LoginParam { 10 | @NotNull(message = "用户名不能为空") 11 | @Length(max = 20, message = "用户名太长了") 12 | private String username; 13 | 14 | @NotNull(message = "密码不能为空") 15 | @Length(min = 32, max = 32, message = "密码异常") 16 | private String password; 17 | } 18 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/PasswordUpdateParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class PasswordUpdateParam { 7 | private Integer id; 8 | private String newPwd; 9 | private String oldPwd; 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/RegisterParam.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | import org.hibernate.validator.constraints.Length; 7 | 8 | import javax.validation.constraints.NotNull; 9 | 10 | @Data 11 | @ToString(callSuper = true) 12 | @EqualsAndHashCode(callSuper = true) 13 | public class RegisterParam extends LoginParam { 14 | @NotNull(message = "昵称不能为空") 15 | @Length(max = 100, message = "昵称太长了") 16 | private String nick; 17 | } 18 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/SocketEventVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import cn.toesbieya.jxc.constant.SocketConstant; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | public class SocketEventVo { 10 | //事件类型 11 | private int type = SocketConstant.REDIS_EVENT_SPECIFIC; 12 | 13 | //事件名称 14 | private String event; 15 | 16 | //发送对象的id集合 17 | private List to; 18 | 19 | //数据包 20 | private Object data; 21 | } 22 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/SocketOfflineVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | @Data 8 | @NoArgsConstructor 9 | @AllArgsConstructor 10 | public class SocketOfflineVo { 11 | //用户ID 12 | private Integer uid; 13 | 14 | //断开时间 15 | private Long time; 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/SupplierVo.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo; 2 | 3 | import cn.toesbieya.jxc.model.entity.SysSupplier; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.NoArgsConstructor; 7 | import lombok.ToString; 8 | import org.springframework.beans.BeanUtils; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @ToString(callSuper = true) 13 | @EqualsAndHashCode(callSuper = true) 14 | public class SupplierVo extends SysSupplier { 15 | private String regionName; 16 | 17 | public SupplierVo(SysSupplier parent) { 18 | BeanUtils.copyProperties(parent, this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/result/RegionValueResult.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.result; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RegionValueResult { 7 | private String id; 8 | private int value; 9 | } 10 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/result/StockSearchResult.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.result; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | @Data 8 | public class StockSearchResult { 9 | private Integer cid; 10 | private String cname; 11 | private BigDecimal totalNum; 12 | private BigDecimal totalPrice; 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/BaseSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | class BaseSearch { 7 | private Integer page; 8 | private Integer pageSize; 9 | } 10 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/CategorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CategorySearch { 7 | private Integer id; 8 | private String ids; 9 | private Integer pid; 10 | private String pids; 11 | private String name; 12 | private Boolean leaf; 13 | private Long startTime; 14 | private Long endTime; 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/CustomerSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class CustomerSearch extends BaseSearch { 11 | private Integer id; 12 | private String name; 13 | private String address; 14 | private String linkman; 15 | private String linkphone; 16 | private String region; 17 | private Boolean enable; 18 | private Long startTime; 19 | private Long endTime; 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/DocHistorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class DocHistorySearch extends BaseSearch{ 11 | private String pid; 12 | private String type; 13 | private String uid; 14 | private String uname; 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/LoginHistorySearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class LoginHistorySearch extends BaseSearch { 11 | private Integer uid; 12 | private String uname; 13 | private Boolean login; 14 | private String ip; 15 | private String address; 16 | private Long endTime; 17 | private Long startTime; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/MsgPersonalSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class MsgPersonalSearch extends BaseSearch { 11 | private Integer uid; 12 | private Long ctime; 13 | private boolean unread = true; 14 | } 15 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/MsgSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class MsgSearch extends BaseSearch { 11 | private String title; 12 | private String type; 13 | private Integer uid; 14 | private String status; 15 | } 16 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/PurchaseInboundSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class PurchaseInboundSearch extends DocSearch { 11 | private String pid; 12 | private String pidFuzzy; 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/PurchaseOrderSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class PurchaseOrderSearch extends DocSearch { 11 | private Integer sid; 12 | private String sname; 13 | private String finish; 14 | private Long ftimeStart; 15 | private Long ftimeEnd; 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/RoleSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class RoleSearch extends BaseSearch { 11 | private Integer id; 12 | private String name; 13 | private Integer cid; 14 | private String cname; 15 | private Boolean enable; 16 | private Long startTime; 17 | private Long endTime; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/SellOrderSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class SellOrderSearch extends DocSearch { 11 | private Integer customerId; 12 | private String customerName; 13 | private String finish; 14 | private Long ftimeStart; 15 | private Long ftimeEnd; 16 | } 17 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/SellOutboundSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class SellOutboundSearch extends DocSearch { 11 | private String pid; 12 | private String pidFuzzy; 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/StockSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class StockSearch extends BaseSearch { 11 | private Integer id; 12 | private String ids; 13 | private Integer cid; 14 | private String cids; 15 | private Long startTime; 16 | private Long endTime; 17 | private String cgddid; 18 | private String cgddids; 19 | private String cgrkid; 20 | private String cgrkids; 21 | } 22 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/SupplierSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class SupplierSearch extends BaseSearch { 11 | private Integer id; 12 | private String name; 13 | private String address; 14 | private String linkman; 15 | private String linkphone; 16 | private String region; 17 | private Boolean enable; 18 | private Long startTime; 19 | private Long endTime; 20 | } 21 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/UserActionSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class UserActionSearch extends BaseSearch { 11 | private Integer uid; 12 | private String uname; 13 | private String ip; 14 | private String url; 15 | private Long startTime; 16 | private Long endTime; 17 | private Boolean success; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/search/UserSearch.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.search; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.ToString; 6 | 7 | @Data 8 | @ToString(callSuper = true) 9 | @EqualsAndHashCode(callSuper = true) 10 | public class UserSearch extends BaseSearch { 11 | private Integer id; 12 | private String loginName; 13 | private String nickName; 14 | private String role; 15 | private Long startTime; 16 | private Long endTime; 17 | private Boolean enable; 18 | } 19 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/statictis/FourBlockStat.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.statictis; 2 | 3 | import lombok.Data; 4 | 5 | import java.math.BigDecimal; 6 | 7 | @Data 8 | public class FourBlockStat { 9 | private long online; 10 | private BigDecimal purchase; 11 | private BigDecimal sell; 12 | private BigDecimal profit; 13 | } 14 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/update/DocStatusUpdate.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.update; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class DocStatusUpdate { 7 | private String id; 8 | private String pid; 9 | private String info; 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/java/cn/toesbieya/jxc/model/vo/update/UserUpdatePwd.java: -------------------------------------------------------------------------------- 1 | package cn.toesbieya.jxc.model.vo.update; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserUpdatePwd { 7 | private Integer id; 8 | private String old_pwd; 9 | private String new_pwd; 10 | } 11 | -------------------------------------------------------------------------------- /java/local/src/main/resources/application-local.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url: jdbc:mysql://localhost:3306/my?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true 4 | username: root 5 | password: root 6 | redis: 7 | host: localhost 8 | port: 6379 9 | 10 | socket: 11 | hostname: localhost 12 | port: 12580 13 | 14 | qiniu: 15 | access-key: 16 | secret-key: 17 | bucket: -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/BizPurchaseInboundSub.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | INSERT INTO biz_purchase_inbound_sub(pid, cid, cname, num) VALUES 6 | 7 | (#{i.pid}, #{i.cid}, #{i.cname}, #{i.num}) 8 | 9 | 10 | -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/BizSellOutboundSub.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | INSERT INTO biz_sell_outbound_sub(pid, sid, cid, cname, num) VALUES 6 | 7 | (#{i.pid}, #{i.sid}, #{i.cid}, #{i.cname}, #{i.num}) 8 | 9 | 10 | -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/RecAttachment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | insert into rec_attachment (pid, name, time, sort, url,size) 6 | VALUES 7 | 8 | (#{i.pid}, #{i.name}, #{i.time}, #{i.sort}, #{i.url},#{i.size}) 9 | 10 | 11 | -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/SysCategory.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/SysCustomer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | -------------------------------------------------------------------------------- /java/local/src/main/resources/mapper/SysSupplier.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /java/local/src/main/resources/script/get_doc_id.lua: -------------------------------------------------------------------------------- 1 | if redis.call('exists', KEYS[1]) == 0 then 2 | if redis.call('hget', KEYS[2], 'date') == ARGV[1] then 3 | if redis.call('hexists', KEYS[2], ARGV[2]) == 1 then 4 | return redis.call('hincrby', KEYS[2], ARGV[2], 1) 5 | else 6 | return 0 7 | end 8 | else 9 | return 0 10 | end 11 | else 12 | return 0 13 | end -------------------------------------------------------------------------------- /java/local/src/main/resources/script/increase_and_expire.lua: -------------------------------------------------------------------------------- 1 | local current 2 | current = redis.call("incr", KEYS[1]) 3 | if tonumber(current) == 1 then 4 | redis.call("expire", KEYS[1], ARGV[1]) 5 | end 6 | return current -------------------------------------------------------------------------------- /vue/full/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /test 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /vue/full/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | require('@vue/cli-plugin-babel/preset') 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /vue/full/element-ui-personal/index.js: -------------------------------------------------------------------------------- 1 | import Message from "./component/Message" 2 | 3 | export default function (Vue) { 4 | Vue.prototype.$message = Message 5 | } 6 | -------------------------------------------------------------------------------- /vue/full/element-ui-personal/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./message.scss"; 2 | -------------------------------------------------------------------------------- /vue/full/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/favicon.ico -------------------------------------------------------------------------------- /vue/full/public/static/img/dot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/dot1.png -------------------------------------------------------------------------------- /vue/full/public/static/img/dot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/dot2.png -------------------------------------------------------------------------------- /vue/full/public/static/img/dot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/dot3.png -------------------------------------------------------------------------------- /vue/full/public/static/img/dot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/dot4.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/doc.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/pdf.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/ppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/ppt.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/rar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/rar.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/txt.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/xls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/xls.png -------------------------------------------------------------------------------- /vue/full/public/static/img/fileType/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/public/static/img/fileType/zip.png -------------------------------------------------------------------------------- /vue/full/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /vue/full/src/api/doc/history.js: -------------------------------------------------------------------------------- 1 | import {PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi('/doc/history/search') 4 | -------------------------------------------------------------------------------- /vue/full/src/api/file/index.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const getToken = new GetApi( 4 | '/file/getToken', 5 | null, 6 | promise => promise.then(({data}) => data) 7 | ) 8 | 9 | export const deleteUpload = new GetApi('/file/delete', url => ({params: {url: encodeURIComponent(url)}})) 10 | 11 | export const deleteUploadBatch = new PostApi('/file/deleteBatch') 12 | -------------------------------------------------------------------------------- /vue/full/src/api/message/manage.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/message/manage/search`) 4 | 5 | export const add = new PostApi(`/message/manage/add`) 6 | 7 | export const update = new PostApi(`/message/manage/update`) 8 | 9 | export const publish = new PostApi(`/message/manage/publish`) 10 | 11 | export const withdraw = new PostApi(`/message/manage/withdraw`) 12 | 13 | export const del = new GetApi(`/message/manage/del`, (id, title) => ({params: {id, title}})) 14 | -------------------------------------------------------------------------------- /vue/full/src/api/message/user.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/message/user/search`) 4 | 5 | export const read = new GetApi(`/message/user/read`, id => ({params: {id}})) 6 | 7 | export const readAll = new GetApi(`/message/user/readAll`) 8 | -------------------------------------------------------------------------------- /vue/full/src/api/record/index.js: -------------------------------------------------------------------------------- 1 | import {PostApi} from "@/api/request" 2 | 3 | export const searchLoginHistory = new PostApi(`/record/searchLoginHistory`) 4 | 5 | export const searchUserAction = new PostApi(`/record/searchUserAction`) 6 | -------------------------------------------------------------------------------- /vue/full/src/api/statistic/index.js: -------------------------------------------------------------------------------- 1 | import {GetApi} from "@/api/request" 2 | 3 | export const getFourBlock = new GetApi(`/statistic/getFourBlock`) 4 | 5 | export const getDailyProfitStat = new GetApi(`/statistic/getDailyProfitStat`) 6 | 7 | export const getDailyFinishOrder = new GetApi(`/statistic/getDailyFinishOrder`) 8 | 9 | export const getTotalProfitGoods = new GetApi(`/statistic/getTotalProfitGoods`) 10 | -------------------------------------------------------------------------------- /vue/full/src/api/stock/current.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/stock/current/search`) 4 | 5 | export const getDetail = new GetApi(`/stock/current/getDetail`, cids => ({params: {cids}})) 6 | 7 | export const getDetailById = new GetApi(`/stock/current/getDetailById`, ids => ({params: {ids}})) 8 | -------------------------------------------------------------------------------- /vue/full/src/api/system/category.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/system/category/search`) 4 | 5 | export const getAll = new GetApi(`/system/category/getAll`) 6 | 7 | export const add = new PostApi(`/system/category/add`) 8 | 9 | export const update = new PostApi(`/system/category/update`) 10 | 11 | export const del = new PostApi(`/system/category/del`) 12 | -------------------------------------------------------------------------------- /vue/full/src/api/system/customer.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const getLimitRegion = new GetApi(`/system/customer/getLimitRegion`) 4 | 5 | export const search = new PostApi(`/system/customer/search`) 6 | 7 | export const add = new PostApi(`/system/customer/add`) 8 | 9 | export const update = new PostApi(`/system/customer/update`) 10 | 11 | export const del = new PostApi(`/system/customer/del`) 12 | -------------------------------------------------------------------------------- /vue/full/src/api/system/department.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const get = new GetApi(`/system/department/get`, (all = true) => ({params: {all}})) 4 | 5 | export const add = new PostApi(`/system/department/add`) 6 | 7 | export const update = new PostApi(`/system/department/update`) 8 | 9 | export const del = new PostApi(`/system/department/del`) 10 | -------------------------------------------------------------------------------- /vue/full/src/api/system/resource.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const getAll = new GetApi(`/system/resource/getAll`) 4 | 5 | export const add = new PostApi(`/system/resource/add`) 6 | 7 | export const update = new PostApi(`/system/resource/update`) 8 | 9 | export const del = new GetApi(`/system/resource/del`, id => ({params: {id}})) 10 | -------------------------------------------------------------------------------- /vue/full/src/api/system/role.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/system/role/search`) 4 | 5 | export const get = new GetApi(`/system/role/get`) 6 | 7 | export const add = new PostApi(`/system/role/add`) 8 | 9 | export const update = new PostApi(`/system/role/update`) 10 | 11 | export const del = new PostApi(`/system/role/del`) 12 | -------------------------------------------------------------------------------- /vue/full/src/api/system/supplier.js: -------------------------------------------------------------------------------- 1 | import {GetApi, PostApi} from "@/api/request" 2 | 3 | export const getLimitRegion = new GetApi(`/system/supplier/getLimitRegion`) 4 | 5 | export const search = new PostApi(`/system/supplier/search`) 6 | 7 | export const add = new PostApi(`/system/supplier/add`) 8 | 9 | export const update = new PostApi(`/system/supplier/update`) 10 | 11 | export const del = new PostApi(`/system/supplier/del`) 12 | -------------------------------------------------------------------------------- /vue/full/src/api/system/user.js: -------------------------------------------------------------------------------- 1 | import {PostApi} from "@/api/request" 2 | 3 | export const search = new PostApi(`/system/user/search`) 4 | 5 | export const kick = new PostApi(`/system/user/kick`) 6 | 7 | export const add = new PostApi(`/system/user/add`) 8 | 9 | export const update = new PostApi(`/system/user/update`) 10 | 11 | export const del = new PostApi(`/system/user/del`) 12 | 13 | export const resetPwd = new PostApi(`/system/user/resetPwd`) 14 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VIcon from '@/component/Icon' 3 | 4 | Vue.component('v-icon', VIcon) 5 | 6 | const req = require.context('./svg', false, /\.svg$/) 7 | const keys = req.keys() 8 | keys.map(req) 9 | export default keys.map(i => i.match(/\.\/(.*)\.svg/)[1]) 10 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/documentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/show.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/stock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/asset/icon/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/full/src/component/RegionSelector/mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | props: { 3 | value: String, 4 | readonly: Boolean, 5 | size: String, 6 | getChildrenOnSelect: Boolean, 7 | limit: Boolean, 8 | limitApi: Function, 9 | regionDataUrl: String 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue/full/src/component/RegionSelector/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | export const store = Vue.observable({ 4 | data: [] 5 | }) 6 | 7 | export function init(url) { 8 | return fetch(url) 9 | .then(r => r.json()) 10 | .then(r => store.data = r || []) 11 | } 12 | -------------------------------------------------------------------------------- /vue/full/src/component/Skeleton/constant.js: -------------------------------------------------------------------------------- 1 | export const skeletonTypes = [ 2 | 'text', 'circle' 3 | ] 4 | export const skeletonAnimations = [ 5 | 'wave', 'pulse', 'pulse-x', 'pulse-y', 'fade', 'blink', 'none' 6 | ] 7 | -------------------------------------------------------------------------------- /vue/full/src/component/abstract/Dialog/style.scss: -------------------------------------------------------------------------------- 1 | .abstract-dialog { 2 | .el-dialog__body { 3 | padding: 0; 4 | } 5 | 6 | .abstract-dialog-container { 7 | position: relative; 8 | width: 100%; 9 | 10 | .abstract-dialog-body { 11 | padding: 24px 24px 0 12 | } 13 | 14 | .el-form { 15 | padding: 0; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /vue/full/src/component/biz/UserSelector/index.js: -------------------------------------------------------------------------------- 1 | import SimpleMultipleUserSelector from "./SimpleMultipleUserSelector" 2 | 3 | export { 4 | SimpleMultipleUserSelector 5 | } 6 | -------------------------------------------------------------------------------- /vue/full/src/directive/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import dragDialog from './dragDialog' 3 | import ripple from './ripple' 4 | 5 | Vue.directive('drag-dialog', dragDialog) 6 | Vue.directive('ripple', ripple) 7 | 8 | -------------------------------------------------------------------------------- /vue/full/src/globalMethod/BottomTip/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Main from './main.vue' 3 | 4 | const BottomTipConstructor = Vue.extend(Main) 5 | 6 | let instance 7 | 8 | const bottomTip = function (message) { 9 | instance && instance.close() 10 | instance = new BottomTipConstructor({data: {message}}) 11 | instance.$mount() 12 | document.body.appendChild(instance.$el) 13 | instance.value = true 14 | return instance 15 | } 16 | 17 | bottomTip.close = function () { 18 | if (instance) { 19 | instance.close() 20 | instance = null 21 | } 22 | } 23 | 24 | export default bottomTip 25 | -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/btn_move.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/btn_move.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/btn_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/btn_stop.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/icon_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/icon_close.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/icon_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/icon_info.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/icon_refresh_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/icon_refresh_bottom.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/icon_refresh_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/icon_refresh_top.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/loading.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/Verify/image/track.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/full/src/globalMethod/Verify/image/track.png -------------------------------------------------------------------------------- /vue/full/src/globalMethod/index.js: -------------------------------------------------------------------------------- 1 | import BottomTip from './BottomTip' 2 | import Guide from './Guide' 3 | import ImageViewer from './ImageViewer' 4 | import Verify from './Verify' 5 | import Signature from './SignautreBoard' 6 | 7 | export default function (Vue) { 8 | Vue.prototype.$bottomTip = BottomTip 9 | Vue.prototype.$guide = Guide 10 | Vue.prototype.$image = ImageViewer 11 | Vue.prototype.$verify = Verify 12 | Vue.prototype.$signature = Signature 13 | } 14 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/Footer/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/Footer/style.scss: -------------------------------------------------------------------------------- 1 | .page-footer > .copyright { 2 | color: $--color-text-secondary; 3 | font-size: 14px; 4 | 5 | > a:hover { 6 | color: $--color-primary; 7 | text-decoration: underline; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/NotifyBell/style.scss: -------------------------------------------------------------------------------- 1 | .notify-bell-badge .el-badge__content { 2 | top: 15px !important; 3 | right: 10px !important; 4 | border: none; 5 | } 6 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/SettingDrawer/component/checkbox/ColorCheckbox.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/SettingDrawer/component/checkbox/Group.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/SettingDrawer/component/checkbox/ImgCheckbox.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/SettingDrawer/component/checkbox/mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | props: ['value'], 3 | 4 | computed: { 5 | checked() { 6 | const group = this.$parent 7 | return group && group.value === this.value 8 | } 9 | }, 10 | 11 | methods: { 12 | click() { 13 | if (this.checked) return 14 | this.$parent.$emit('input', this.value) 15 | } 16 | }, 17 | 18 | created() { 19 | const group = this.$parent 20 | group && group.children.push(this.value) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vue/full/src/layout/component/SettingDrawer/style.scss: -------------------------------------------------------------------------------- 1 | @import "~@/style/var"; 2 | @import "./component/checkbox/style"; 3 | 4 | .setting-drawer { 5 | overflow-y: auto; 6 | 7 | .el-drawer__body { 8 | padding: $--dialog-padding-primary; 9 | } 10 | 11 | &-item { 12 | display: flex; 13 | justify-content: space-between; 14 | color: $--color-text-regular; 15 | font-size: 14px; 16 | padding: 12px 0; 17 | } 18 | 19 | .el-select { 20 | width: 80px; 21 | } 22 | 23 | .el-button { 24 | width: 100%; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vue/full/src/layout/mixin/offline.js: -------------------------------------------------------------------------------- 1 | import {isLogin} from "@/util/auth" 2 | 3 | export default { 4 | computed: { 5 | showOfflineTip() { 6 | return !this.$store.state.websocket.online && isLogin() 7 | }, 8 | }, 9 | 10 | watch: { 11 | showOfflineTip(v) { 12 | v ? this.$bottomTip('与服务器失去连接') : this.$bottomTip.close() 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /vue/full/src/layout/style.scss: -------------------------------------------------------------------------------- 1 | @import "~el-admin-layout/src/style"; 2 | @import "~el-admin-layout/src/style/maxViewHeight"; 3 | 4 | @import "./component/Footer/style"; 5 | @import "./component/NotifyBell/style"; 6 | @import "./component/SettingDrawer/style"; 7 | 8 | 9 | -------------------------------------------------------------------------------- /vue/full/src/mixin/chart/index.js: -------------------------------------------------------------------------------- 1 | import logic from "./logic" 2 | import resize from "./resize" 3 | 4 | export {logic, resize} 5 | -------------------------------------------------------------------------------- /vue/full/src/mixin/dialogMixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | methods: { 3 | closeDialog() { 4 | this.$emit('input', false) 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/firework/Rocket.js: -------------------------------------------------------------------------------- 1 | import Vector from "./Vector" 2 | import Trail from "./Trail" 3 | 4 | export default class Rocket extends Trail { 5 | constructor(childFactory, explosionFactory, position, velocity = new Vector()) { 6 | super(childFactory, position, velocity) 7 | 8 | this.explosionFactory = explosionFactory 9 | this.lifetime = 10 10 | } 11 | 12 | update(time) { 13 | if (this.getRemainingLifetime() && this.velocity.y > 0) { 14 | this.explosionFactory(this) 15 | this.lifetime = 0 16 | } 17 | 18 | super.update(time) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/firework/Time.js: -------------------------------------------------------------------------------- 1 | export default class Time { 2 | constructor() { 3 | const now = Time.now() 4 | this.delta = 0 5 | this.elapsed = 0 6 | this.start = now 7 | this.previous = now 8 | } 9 | 10 | update() { 11 | const now = Time.now() 12 | this.delta = now - this.previous 13 | this.elapsed = now - this.start 14 | this.previous = now 15 | } 16 | 17 | static now() { 18 | return Date.now() / 1000 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/firework/Vector.js: -------------------------------------------------------------------------------- 1 | export default class Vector { 2 | constructor(x = 0, y = 0) { 3 | this.x = x 4 | this.y = y 5 | } 6 | 7 | add(v) { 8 | this.x += v.x 9 | this.y += v.y 10 | return this 11 | } 12 | 13 | multiplyScalar(s) { 14 | this.x *= s 15 | this.y *= s 16 | return this 17 | } 18 | 19 | clone() { 20 | return new Vector(this.x, this.y) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/particleBall/util.js: -------------------------------------------------------------------------------- 1 | const util = { 2 | norm: function (value, min, max) { 3 | return (value - min) / (max - min) 4 | }, 5 | lerp: function (norm, min, max) { 6 | return min + norm * (max - min) 7 | }, 8 | map: function (value, sourceMin, sourceMax, destMin, destMax) { 9 | return this.lerp(this.norm(value, sourceMin, sourceMax), destMin, destMax) 10 | } 11 | } 12 | 13 | export default util 14 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/reflectRain/Vector.js: -------------------------------------------------------------------------------- 1 | export default class Vector { 2 | constructor(x, y) { 3 | this.x = x || 0 4 | this.y = y || 0 5 | } 6 | 7 | add({x, y}) { 8 | this.x += x 9 | this.y += y 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue/full/src/plugin/canvasAnimation/sparkRain/util.js: -------------------------------------------------------------------------------- 1 | export function rand(min, max) { 2 | return Math.floor(Math.random() * (max - min + 1)) + min 3 | } 4 | -------------------------------------------------------------------------------- /vue/full/src/plugin/webgl/fluid/Pointer.js: -------------------------------------------------------------------------------- 1 | class Pointer { 2 | constructor() { 3 | this.id = -1 4 | this.texcoordX = 0 5 | this.texcoordY = 0 6 | this.prevTexcoordX = 0 7 | this.prevTexcoordY = 0 8 | this.deltaX = 0 9 | this.deltaY = 0 10 | this.down = false 11 | this.moved = false 12 | this.color = [30, 0, 300] 13 | } 14 | } 15 | 16 | export default Pointer 17 | -------------------------------------------------------------------------------- /vue/full/src/plugin/webgl/fluid/Program.js: -------------------------------------------------------------------------------- 1 | import {createProgram, getUniforms} from "./util" 2 | 3 | class Program { 4 | constructor(gl, vertexShader, fragmentShader) { 5 | this.uniforms = {} 6 | this.program = createProgram(gl, vertexShader, fragmentShader) 7 | this.uniforms = getUniforms(gl, this.program) 8 | } 9 | 10 | bind(gl) { 11 | gl.useProgram(this.program) 12 | } 13 | } 14 | 15 | export default Program 16 | -------------------------------------------------------------------------------- /vue/full/src/router/guardian/index.js: -------------------------------------------------------------------------------- 1 | import nprogress from './nprogress' 2 | import accessControl from './accessControl' 3 | 4 | export default function (router) { 5 | nprogress(router) 6 | accessControl(router) 7 | } 8 | -------------------------------------------------------------------------------- /vue/full/src/router/guardian/nprogress.js: -------------------------------------------------------------------------------- 1 | import NProgress from 'nprogress' 2 | import {Const} from 'el-admin-layout' 3 | 4 | NProgress.configure({showSpinner: false}) 5 | 6 | const beforeEach = (to, from, next) => { 7 | //使用redirect进行跳转时不显示进度条 8 | !to.path.startsWith(Const.redirectPath) && NProgress.start() 9 | 10 | next() 11 | } 12 | 13 | const afterEach = () => NProgress.done() 14 | 15 | export default function (router) { 16 | router.beforeEach(beforeEach) 17 | router.afterEach(afterEach) 18 | } 19 | -------------------------------------------------------------------------------- /vue/full/src/router/module/admin/child/default.js: -------------------------------------------------------------------------------- 1 | //路由表:默认页面 2 | 3 | /** 4 | * @type {import('vue-router').RouteConfig[]} 5 | */ 6 | const router = [ 7 | { 8 | path: 'index', 9 | component: 'admin/index/', 10 | name: 'index', 11 | meta: {title: '首页', affix: true, icon: 'svg-home', noAuth: true, pageHeader: false, sort: 0} 12 | }, 13 | { 14 | path: 'user', 15 | name: 'userCenter', 16 | component: 'admin/userCenter/', 17 | meta: {title: '个人中心', noCache: true, icon: 'svg-user', noAuth: true, pageHeader: false, hidden: true}, 18 | } 19 | ] 20 | 21 | export default router 22 | -------------------------------------------------------------------------------- /vue/full/src/router/module/admin/child/message.js: -------------------------------------------------------------------------------- 1 | /*路由表:消息中心*/ 2 | 3 | const router = { 4 | path: 'message', 5 | meta: {title: '消息中心', icon: 'svg-message'}, 6 | children: [ 7 | { 8 | path: 'manage', 9 | name: 'messageManagement', 10 | component: 'admin/message/manage/', 11 | meta: {title: '消息管理'} 12 | }, 13 | { 14 | path: 'user', 15 | name: 'userMessage', 16 | component: 'admin/message/user/', 17 | meta: {title: '个人消息', noAuth: true, noCache: true} 18 | } 19 | ] 20 | } 21 | 22 | export default router 23 | -------------------------------------------------------------------------------- /vue/full/src/router/module/admin/child/stock.js: -------------------------------------------------------------------------------- 1 | /*路由表:库存管理*/ 2 | 3 | const router = { 4 | path: 'stock', 5 | meta: {title: '库存管理', icon: 'svg-stock'}, 6 | children: [ 7 | { 8 | path: 'current', 9 | name: 'currentStock', 10 | component: 'admin/stock/current/', 11 | meta: {title: '当前库存'} 12 | } 13 | ] 14 | } 15 | 16 | export default router 17 | -------------------------------------------------------------------------------- /vue/full/src/router/module/admin/index.js: -------------------------------------------------------------------------------- 1 | /*顶级菜单:后台管理*/ 2 | 3 | import {context2array} from '@/router/util' 4 | 5 | const files = require.context('./child', false, /\.js$/) 6 | 7 | export default { 8 | path: '/', 9 | component: 'Layout', 10 | meta: {title: '后台管理', icon: 'svg-home', sort: 0}, 11 | children: context2array(files) 12 | } 13 | -------------------------------------------------------------------------------- /vue/full/src/router/module/dev/index.js: -------------------------------------------------------------------------------- 1 | /*顶级菜单:开发用的页面*/ 2 | import component from "@/view/dev" 3 | 4 | export default { 5 | path: '/dev', 6 | component, 7 | meta: {title: '开发专用页面', icon: 'svg-develop', noAuth: true, noCache: true} 8 | } 9 | -------------------------------------------------------------------------------- /vue/full/src/router/module/doc/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'https://doc.toesbieya.cn/jxc-admin', 3 | meta: {title: '文档', icon: 'svg-documentation', noAuth: true} 4 | } 5 | -------------------------------------------------------------------------------- /vue/full/src/router/module/example/child/cool.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'cool', 3 | meta: {title: '好玩的东东', icon: 'el-icon-s-opportunity'}, 4 | children: [ 5 | { 6 | path: 'fluid', 7 | component: 'example/cool/fluid', 8 | meta: {title: '流体动画'} 9 | }, 10 | { 11 | path: 'l2d', 12 | component: 'example/cool/l2d', 13 | meta: {title: '看板娘'} 14 | }, 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /vue/full/src/router/module/example/child/directive.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'directive', 3 | meta: {title: '全局指令', icon: 'el-icon-s-grid'}, 4 | children: [ 5 | { 6 | path: 'dragDialog', 7 | component: 'example/directive/dragDialog', 8 | meta: {title: '可拖拽dialog'} 9 | }, 10 | { 11 | path: 'ripple', 12 | component: 'example/directive/ripple', 13 | meta: {title: '波纹'} 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /vue/full/src/router/module/example/child/icon.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'icon', 3 | component: 'example/icon/', 4 | meta: {title: '图 标', icon: 'el-icon-eleme'} 5 | } 6 | -------------------------------------------------------------------------------- /vue/full/src/router/module/example/child/iframe.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'iframe', 3 | meta: {title: 'iframe', noCache: false, icon: 'el-icon-s-flag'}, 4 | children: [ 5 | { 6 | path: 'taobao', 7 | meta: {title: '淘宝', iframe: 'https://www.taobao.com'} 8 | }, 9 | { 10 | path: 'baidu', 11 | meta: {title: '百度', iframe: 'https://www.baidu.com'} 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /vue/full/src/router/module/example/index.js: -------------------------------------------------------------------------------- 1 | /*顶级菜单:演示用例*/ 2 | 3 | import {context2array} from '@/router/util' 4 | 5 | const files = require.context('./child', false, /\.js$/) 6 | 7 | export default { 8 | path: '/example', 9 | component: 'Layout', 10 | meta: {title: '演示用例', icon: 'svg-show', noAuth: true, noCache: true, sort: 1}, 11 | children: context2array(files) 12 | } 13 | -------------------------------------------------------------------------------- /vue/full/src/router/module/index.js: -------------------------------------------------------------------------------- 1 | import admin from './admin' 2 | import example from './example' 3 | import dev from './dev' 4 | import doc from './doc' 5 | 6 | export default [admin, example, dev, doc] 7 | -------------------------------------------------------------------------------- /vue/full/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | const modulesFiles = require.context('./module', true, /\.js$/) 7 | 8 | // you do not need `import app from './modules/app'` 9 | // it will auto require all vuex module from modules file 10 | const modules = modulesFiles.keys().reduce((modules, modulePath) => { 11 | // set './app.js' => 'app' 12 | const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') 13 | const value = modulesFiles(modulePath) 14 | modules[moduleName] = value.default 15 | return modules 16 | }, {}) 17 | 18 | export default new Vuex.Store({modules}) 19 | -------------------------------------------------------------------------------- /vue/full/src/store/module/app.js: -------------------------------------------------------------------------------- 1 | import {createMutations} from "@/store/util" 2 | 3 | const state = { 4 | //登录页背景动画 5 | loginBackgroundAnimation: 'sparkRain', 6 | } 7 | 8 | const mutations = createMutations(state) 9 | 10 | export default { 11 | namespaced: true, 12 | state, 13 | mutations 14 | } 15 | -------------------------------------------------------------------------------- /vue/full/src/store/module/dataCache.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 数据缓存 3 | * 比如商品分类信息等等 4 | * */ 5 | import {createTree} from '@/util/tree' 6 | 7 | const state = { 8 | categories: [], 9 | categoryTree: [] 10 | } 11 | 12 | const mutations = { 13 | categories(state, categories) { 14 | state.categories = categories || [] 15 | state.categoryTree = createTree(state.categories) 16 | } 17 | } 18 | 19 | 20 | export default { 21 | namespaced: true, 22 | state, 23 | mutations 24 | } 25 | -------------------------------------------------------------------------------- /vue/full/src/store/module/message.js: -------------------------------------------------------------------------------- 1 | import {createMutations} from "@/store/util" 2 | import {search} from '@/api/message/user' 3 | 4 | const state = { 5 | unreadCount: 0 6 | } 7 | 8 | const mutations = createMutations(state) 9 | 10 | const actions = { 11 | refresh({commit}) { 12 | search 13 | .request({page: 1, pageSize: 1, unread: true}) 14 | .then(({data}) => commit('unreadCount', data.total)) 15 | } 16 | } 17 | 18 | export default { 19 | namespaced: true, 20 | state, 21 | mutations, 22 | actions 23 | } 24 | -------------------------------------------------------------------------------- /vue/full/src/store/module/needSearch.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue" 2 | 3 | const state = { 4 | map: {} 5 | } 6 | 7 | const mutations = { 8 | init(state, key) { 9 | if (state.map.hasOwnProperty(key)) { 10 | state.map[key] = false 11 | } 12 | else Vue.set(state.map, key, false) 13 | }, 14 | 15 | emit(state, key) { 16 | state.map[key] = true 17 | }, 18 | 19 | renew(state, key) { 20 | state.map[key] = false 21 | } 22 | } 23 | 24 | export default { 25 | namespaced: true, 26 | state, 27 | mutations 28 | } 29 | -------------------------------------------------------------------------------- /vue/full/src/store/util.js: -------------------------------------------------------------------------------- 1 | import {getInitialValue} from "@/util" 2 | 3 | //vuex中根据state批量生成对应的mutation 4 | export function createMutations(state, all = false) { 5 | const keys = Object.keys(state) 6 | const obj = {} 7 | keys.forEach(key => { 8 | obj[key] = (s, v) => s[key] = v 9 | }) 10 | if (all) { 11 | obj['$all'] = (s, v) => { 12 | keys.forEach(key => { 13 | s[key] = v && v[key] || getInitialValue(s[key]) 14 | }) 15 | } 16 | } 17 | return obj 18 | } 19 | -------------------------------------------------------------------------------- /vue/full/src/style/cover/var.scss: -------------------------------------------------------------------------------- 1 | /*仅覆盖element-ui中的预设变量,不会被使用*/ 2 | 3 | //返回顶部的背景色 4 | $--backtop-background-color: $--background-color-base; 5 | //返回顶部hover背景色 6 | $--backtop-hover-background-color: $--border-color-lighter; 7 | 8 | //el-table的表头字体颜色 9 | $--table-header-font-color: $--color-text-primary; 10 | //el-table的表头背景颜色 11 | $--table-header-background-color: #fbfbfb; 12 | 13 | //引入element的scss时需要覆盖字体路径 14 | $--font-path: '~element-ui/lib/theme-chalk/fonts'; 15 | -------------------------------------------------------------------------------- /vue/full/src/style/nprogress.scss: -------------------------------------------------------------------------------- 1 | @import "~nprogress/nprogress.css"; 2 | 3 | #nprogress { 4 | .bar { 5 | background-color: $--color-primary; 6 | 7 | .peg { 8 | box-shadow: 0 0 10px $--color-primary, 0 0 5px $--color-primary;; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue/full/src/util/excel/index.js: -------------------------------------------------------------------------------- 1 | export {exportExcel, json2workbook, workbook2excel} from "./exceljs" 2 | -------------------------------------------------------------------------------- /vue/full/src/util/worker.js: -------------------------------------------------------------------------------- 1 | export function createWorker(func, data, callback) { 2 | const blob = new Blob(['(' + func.toString() + ')()']) 3 | const url = window.URL.createObjectURL(blob) 4 | const worker = new Worker(url) 5 | 6 | worker.onmessage = callback 7 | worker.postMessage(data) 8 | 9 | window.URL.revokeObjectURL(url) 10 | 11 | return worker 12 | } 13 | -------------------------------------------------------------------------------- /vue/full/src/view/_app/403.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/full/src/view/_app/404.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/full/src/view/_app/500.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/full/src/view/admin/system/menu/common.js: -------------------------------------------------------------------------------- 1 | export const nodeType = [ 2 | {label: '顶部菜单', value: 0, icon: 'el-icon-s-promotion'}, 3 | {label: '聚合菜单', value: 1, icon: 'el-icon-folder'}, 4 | {label: '页面菜单', value: 2, icon: 'el-icon-document'}, 5 | {label: '数据接口', value: 3, icon: 'el-icon-open'}, 6 | ] 7 | 8 | export function getNodeInfo({data: {type}} = {}) { 9 | return nodeType.find(i => i.value === type) 10 | } 11 | 12 | export function getNodeTitle({data: {type, name, meta}}) { 13 | return type === 3 ? name : meta.title 14 | } 15 | -------------------------------------------------------------------------------- /vue/full/src/view/dev/index.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /vue/full/src/view/example/directive/dragDialogPage.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 26 | -------------------------------------------------------------------------------- /vue/full/src/view/example/globalMethod/bottomTipPage.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /vue/full/src/view/example/test/cache/detailPage.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | -------------------------------------------------------------------------------- /vue/full/svgo.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | { 4 | name: 'removeAttrs', 5 | params: { 6 | attrs: '(fill|fill-rule)' 7 | } 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /vue/template/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /test 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | .vscode 18 | *.suo 19 | *.ntvs* 20 | *.njsproj 21 | *.sln 22 | *.sw? 23 | -------------------------------------------------------------------------------- /vue/template/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /vue/template/element-ui-personal/index.js: -------------------------------------------------------------------------------- 1 | import Message from "./component/Message" 2 | 3 | export default function (Vue) { 4 | 5 | Vue.prototype.$message = Message 6 | } 7 | -------------------------------------------------------------------------------- /vue/template/element-ui-personal/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./message.scss"; 2 | -------------------------------------------------------------------------------- /vue/template/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/template/public/favicon.ico -------------------------------------------------------------------------------- /vue/template/public/static/img/dot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/template/public/static/img/dot1.png -------------------------------------------------------------------------------- /vue/template/public/static/img/dot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/template/public/static/img/dot2.png -------------------------------------------------------------------------------- /vue/template/public/static/img/dot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/template/public/static/img/dot3.png -------------------------------------------------------------------------------- /vue/template/public/static/img/dot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/toesbieya/jxc-admin/5ee06acbe09a68de6d8957be324152ff8978b182/vue/template/public/static/img/dot4.png -------------------------------------------------------------------------------- /vue/template/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VIcon from '@/component/Icon' 3 | 4 | Vue.component('v-icon', VIcon) 5 | 6 | const req = require.context('./svg', false, /\.svg$/) 7 | const keys = req.keys() 8 | keys.map(req) 9 | export default keys.map(i => i.match(/\.\/(.*)\.svg/)[1]) 10 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/documentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/show.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/stock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vue/template/src/asset/icon/svgo.yml: -------------------------------------------------------------------------------- 1 | # replace default config 2 | 3 | # multipass: true 4 | # full: true 5 | 6 | plugins: 7 | 8 | # - name 9 | # 10 | # or: 11 | # - name: false 12 | # - name: true 13 | # 14 | # or: 15 | # - name: 16 | # param1: 1 17 | # param2: 2 18 | 19 | - removeAttrs: 20 | attrs: 21 | - 'fill' 22 | - 'fill-rule' 23 | -------------------------------------------------------------------------------- /vue/template/src/asset/style/cover/var.scss: -------------------------------------------------------------------------------- 1 | /*仅覆盖element-ui中的预设变量,不会被使用*/ 2 | 3 | //引入element的scss时需要覆盖字体路径 4 | $--font-path: '~element-ui/lib/theme-chalk/fonts'; 5 | -------------------------------------------------------------------------------- /vue/template/src/asset/style/nprogress.scss: -------------------------------------------------------------------------------- 1 | @import "~nprogress/nprogress.css"; 2 | 3 | #nprogress { 4 | .bar { 5 | background-color: $--color-primary; 6 | 7 | .peg { 8 | box-shadow: 0 0 10px $--color-primary, 0 0 5px $--color-primary;; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue/template/src/asset/style/var.scss: -------------------------------------------------------------------------------- 1 | @import "~element-ui/packages/theme-chalk/src/common/var"; 2 | 3 | //设定移动端的最大宽度,只能是number类型 4 | $max-mobile-width: $--sm; 5 | 6 | //覆盖element颜色 7 | $--color-primary: #1890ff; 8 | $--color-success: #21BA45; 9 | $--color-warning: #FF5722; 10 | $--color-danger: #F44336; 11 | $--color-info: #009688; 12 | -------------------------------------------------------------------------------- /vue/template/src/component/Skeleton/constant.js: -------------------------------------------------------------------------------- 1 | export const skeletonTypes = [ 2 | 'text', 'circle' 3 | ] 4 | export const skeletonAnimations = [ 5 | 'wave', 'pulse', 'pulse-x', 'pulse-y', 'fade', 'blink', 'none' 6 | ] 7 | -------------------------------------------------------------------------------- /vue/template/src/config/index.js: -------------------------------------------------------------------------------- 1 | const isDev = process.env.NODE_ENV === 'development' 2 | 3 | module.exports = { 4 | isDev, 5 | 6 | //项目的部署路径,始终以'/'开头,以'/'结束 7 | contextPath: '/', 8 | 9 | //页面标题、登录注册页的标题 10 | title: 'BiuBiuBiu~', 11 | 12 | //logo地址 13 | logo: `/static/img/logo.svg`, 14 | 15 | //路由配置 16 | route: { 17 | //路由模式,['hash','history'] 18 | mode: 'history' 19 | }, 20 | 21 | //本地存储配置 22 | storage: { 23 | //键名前缀 24 | keyPrefix: 'GCC-', 25 | 26 | //读写时是否进行压缩的默认值 27 | zip: !isDev 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/Footer/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/Footer/style.scss: -------------------------------------------------------------------------------- 1 | .page-footer > .copyright { 2 | color: $--color-text-secondary; 3 | font-size: 14px; 4 | 5 | > a:hover { 6 | color: $--color-primary; 7 | text-decoration: underline; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/SettingDrawer/component/checkbox/ColorCheckbox.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/SettingDrawer/component/checkbox/Group.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/SettingDrawer/component/checkbox/ImgCheckbox.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/SettingDrawer/component/checkbox/mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | props: ['value'], 3 | 4 | computed: { 5 | checked() { 6 | const group = this.$parent 7 | return group && group.value === this.value 8 | } 9 | }, 10 | 11 | methods: { 12 | click() { 13 | if (this.checked) return 14 | this.$parent.$emit('input', this.value) 15 | } 16 | }, 17 | 18 | created() { 19 | const group = this.$parent 20 | group && group.children.push(this.value) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vue/template/src/layout/component/SettingDrawer/style.scss: -------------------------------------------------------------------------------- 1 | @import "~@/asset/style/var"; 2 | @import "./component/checkbox/style"; 3 | 4 | .drawer-container { 5 | padding: 24px; 6 | font-size: 14px; 7 | line-height: 1.5; 8 | word-wrap: break-word; 9 | 10 | .drawer-item { 11 | display: flex; 12 | justify-content: space-between; 13 | color: $--color-text-regular; 14 | font-size: 14px; 15 | padding: 12px 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /vue/template/src/layout/style.scss: -------------------------------------------------------------------------------- 1 | @import "~el-admin-layout/src/style"; 2 | 3 | @import "./component/Footer/style"; 4 | @import "./component/SettingDrawer/style"; 5 | 6 | 7 | -------------------------------------------------------------------------------- /vue/template/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Element from 'element-ui' 3 | import ElementPersonal from '@ele' 4 | import '@/asset/style/index.scss' 5 | import App from '@/App' 6 | import store from '@/store' 7 | import router from '@/router' 8 | import '@/asset/icon' 9 | 10 | Vue.use(Element) 11 | Vue.use(ElementPersonal) 12 | 13 | Vue.config.productionTip = false 14 | 15 | new Vue({ 16 | el: '#app', 17 | router, 18 | store, 19 | render: h => h(App) 20 | }) 21 | -------------------------------------------------------------------------------- /vue/template/src/router/guardian/index.js: -------------------------------------------------------------------------------- 1 | import nprogress from './nprogress' 2 | import avoidReuse from './avoidReuse' 3 | import setTitle from './setTitle' 4 | import accessControl from './accessControl' 5 | import iframe from './iframe' 6 | 7 | export default function (router) { 8 | nprogress(router) 9 | avoidReuse(router) 10 | accessControl(router) 11 | setTitle(router) 12 | iframe(router) 13 | } 14 | -------------------------------------------------------------------------------- /vue/template/src/router/guardian/nprogress.js: -------------------------------------------------------------------------------- 1 | import NProgress from 'nprogress' 2 | 3 | NProgress.configure({showSpinner: false}) 4 | 5 | const beforeEach = (to, from, next) => { 6 | //使用redirect进行跳转时不显示进度条 7 | !to.path.startsWith('/redirect') && NProgress.start() 8 | 9 | next() 10 | } 11 | 12 | const afterEach = () => NProgress.done() 13 | 14 | export default function (router) { 15 | router.beforeEach(beforeEach) 16 | router.afterEach(afterEach) 17 | } 18 | -------------------------------------------------------------------------------- /vue/template/src/router/guardian/setTitle.js: -------------------------------------------------------------------------------- 1 | import {title} from "@/config" 2 | 3 | const beforeEach = (to, from, next) => { 4 | const {path, meta} = to 5 | 6 | if (!path.startsWith('/redirect')) { 7 | if (typeof meta.dynamicTitle === 'function') { 8 | meta.title = meta.dynamicTitle(to, from) 9 | } 10 | 11 | const pageTitle = meta.title 12 | document.title = pageTitle ? `${pageTitle} - ${title}` : title 13 | } 14 | 15 | next() 16 | } 17 | 18 | export default function (router) { 19 | router.beforeEach(beforeEach) 20 | } 21 | -------------------------------------------------------------------------------- /vue/template/src/router/module/admin/child/default.js: -------------------------------------------------------------------------------- 1 | //路由表:默认页面 2 | 3 | const router = [ 4 | { 5 | path: 'index', 6 | component: 'admin/index/', 7 | name: 'index', 8 | meta: {title: '首页', affix: true, icon: 'svg-home', noAuth: true, pageHeader: false, sort: 0} 9 | } 10 | ] 11 | 12 | export default router 13 | -------------------------------------------------------------------------------- /vue/template/src/router/module/admin/index.js: -------------------------------------------------------------------------------- 1 | /*顶级菜单:后台管理*/ 2 | 3 | import {context2array} from '@/router/util' 4 | 5 | const files = require.context('./child', false, /\.js$/) 6 | 7 | export default { 8 | path: '/', 9 | component: 'Layout', 10 | meta: {title: '后台管理', icon: 'svg-home', sort: 0}, 11 | children: context2array(files) 12 | } 13 | -------------------------------------------------------------------------------- /vue/template/src/router/module/doc/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'https://doc.toesbieya.cn', 3 | meta: {title: '文档', icon: 'svg-documentation', noAuth: true} 4 | } 5 | -------------------------------------------------------------------------------- /vue/template/src/router/module/example/child/component.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'component', 3 | meta: {title: '组件', icon: 'el-icon-s-grid', alwaysShow: true}, 4 | children: [ 5 | { 6 | path: 'skeleton', 7 | component: 'example/component/skeleton', 8 | meta: {title: '骨架屏'} 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /vue/template/src/router/module/example/child/globalMethod.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'global', 3 | meta: {title: '全局方法', icon: 'el-icon-s-opportunity', alwaysShow: true}, 4 | children: [ 5 | { 6 | path: 'message', 7 | component: 'example/globalMethod/message', 8 | meta: {title: '消息提示'} 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /vue/template/src/router/module/example/child/icon.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'icon', 3 | component: 'example/icon/', 4 | meta: {title: '图 标', icon: 'el-icon-eleme'} 5 | } 6 | -------------------------------------------------------------------------------- /vue/template/src/router/module/example/child/iframe.js: -------------------------------------------------------------------------------- 1 | export default { 2 | path: 'iframe', 3 | meta: {title: 'iframe', noCache: false, icon: 'el-icon-s-flag'}, 4 | children: [ 5 | { 6 | path: 'taobao', 7 | meta: {title: '淘宝', iframe: 'https://www.taobao.com'} 8 | }, 9 | { 10 | path: 'baidu', 11 | meta: {title: '百度', iframe: 'https://www.baidu.com'} 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /vue/template/src/router/module/example/index.js: -------------------------------------------------------------------------------- 1 | /*顶级菜单:演示用例*/ 2 | 3 | import {context2array} from '@/router/util' 4 | 5 | const files = require.context('./child', false, /\.js$/) 6 | 7 | export default { 8 | path: '/example', 9 | component: 'Layout', 10 | meta: {title: '演示用例', icon: 'svg-show', noAuth: true, noCache: true, sort: 1}, 11 | children: context2array(files) 12 | } 13 | -------------------------------------------------------------------------------- /vue/template/src/router/module/index.js: -------------------------------------------------------------------------------- 1 | import admin from './admin' 2 | import example from './example' 3 | import doc from './doc' 4 | 5 | export default [admin, example, doc] 6 | -------------------------------------------------------------------------------- /vue/template/src/store/util.js: -------------------------------------------------------------------------------- 1 | import {getInitialValue} from "@/util" 2 | 3 | //vuex中根据state批量生成对应的mutation 4 | export function createMutations(state, all = false) { 5 | const keys = Object.keys(state) 6 | const obj = {} 7 | keys.forEach(key => { 8 | obj[key] = (s, v) => s[key] = v 9 | }) 10 | if (all) { 11 | obj['$all'] = (s, v) => { 12 | keys.forEach(key => { 13 | s[key] = v && v[key] || getInitialValue(s[key]) 14 | }) 15 | } 16 | } 17 | return obj 18 | } 19 | -------------------------------------------------------------------------------- /vue/template/src/util/message.js: -------------------------------------------------------------------------------- 1 | import Message from '@ele/component/Message' 2 | import {MessageBox} from 'element-ui' 3 | 4 | export function elSuccess(message = '操作成功') { 5 | Message.success({ 6 | message, 7 | dangerouslyUseHTMLString: true 8 | }) 9 | } 10 | 11 | export function elConfirm(msg = '确认进行该操作?', ignoreReject = true) { 12 | const promise = MessageBox.confirm(msg, { 13 | type: 'warning', 14 | cancelButtonClass: 'is-plain' 15 | }) 16 | 17 | if (ignoreReject) { 18 | promise.catch(() => ({})) 19 | } 20 | 21 | return promise 22 | } 23 | -------------------------------------------------------------------------------- /vue/template/src/util/validate.js: -------------------------------------------------------------------------------- 1 | export function isString(str) { 2 | return typeof str === 'string' || str instanceof String 3 | } 4 | 5 | export function isExternal(path) { 6 | return /^(https?:|mailto:|tel:)/.test(path) 7 | } 8 | -------------------------------------------------------------------------------- /vue/template/src/view/_app/403.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/template/src/view/_app/404.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/template/src/view/_app/500.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /vue/template/src/view/_app/redirect.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /vue/template/src/view/admin/index/indexPage.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /vue/template/src/view/example/test/cache/detailPage.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | --------------------------------------------------------------------------------